Houjie
2025-07-07 0a48655d2162b709ecb80d249a4085971add6140
pages/device/deviceWebDeils/deviceWebDeils.vue
@@ -14,46 +14,65 @@
         <uni-forms ref="form" :modelValue="formData" validate-trigger="bind" err-show-type="undertext">
            <uni-group top="1">
            <uni-forms-item  :label-width="100" required name="num" label="设备编号:">
               <uni-easyinput v-model="formData.equipmentCode" :disabled="true" />
            </uni-forms-item>
            <uni-forms-item :label-width="100" name="remark" label="设备名称:">
               <uni-easyinput v-model="formData.equipmentName" :disabled="true" />
            </uni-forms-item>
            <!-- <uni-forms-item :label-width="100" name="outNum" label="关键设备标识:">
               <uni-forms-item :label-width="100" required name="num" label="设备编号:">
                  <uni-easyinput v-model="formData.equipmentCode" :disabled="true" />
               </uni-forms-item>
               <uni-forms-item :label-width="100" name="remark" label="设备名称:">
                  <uni-easyinput v-model="formData.equipmentName" :disabled="true" />
               </uni-forms-item>
               <!-- <uni-forms-item :label-width="100" name="outNum" label="关键设备标识:">
               <uni-easyinput v-model="formData.equipmentImportance" :disabled="true" />
            </uni-forms-item> -->
            <view class="text-gray margin-bottom-lg">—————————— 基本信息 ——————————</view>
            <uni-forms-item  :label-width="100" name="taskCode" label="维修状态:">
               <uni-easyinput :disabled="true" v-model="formData.repairStatus_dictText" />
            </uni-forms-item>
            <uni-forms-item :label-width="100" name="endLocation" label="保养状态:">
               <uni-easyinput :disabled="true" v-model="formData.maintenanceStatus_dictText" />
            </uni-forms-item>
            <uni-forms-item :label-width="100" name="endLocation" label="使用车间:">
               <uni-easyinput :disabled="true" v-model="formData.orgId_dictText" />
            </uni-forms-item>
            <uni-forms-item  :label-width="100" name="endLocation" label="安装位置:">
               <uni-easyinput :disabled="true" v-model="formData.installationPosition" />
            </uni-forms-item>
            <uni-forms-item  :label-width="100" name="endLocation" label="技术状态:">
               <uni-easyinput :disabled="true" v-model="formData.technologyStatus_dictText" />
            </uni-forms-item>
            <uni-forms-item  :label-width="100" name="endLocation" label="设备管理员:">
               <uni-easyinput :disabled="true" v-model="formData.equipmentManager_dictText" />
            </uni-forms-item>
            <uni-forms-item  :label-width="100" name="endLocation" label="出厂日期:">
               <uni-easyinput :disabled="true" v-model="formData.leaveFactoryDate" />
            </uni-forms-item>
               <view class="text-gray margin-bottom-lg">—————————— 基本信息 ——————————</view>
               <uni-forms-item :label-width="100" name="taskCode" label="维修状态:">
                  <uni-easyinput :disabled="true" v-model="formData.repairStatus_dictText" />
               </uni-forms-item>
               <uni-forms-item :label-width="100" name="endLocation" label="保养状态:">
                  <uni-easyinput :disabled="true" v-model="formData.maintenanceStatus_dictText" />
               </uni-forms-item>
               <uni-forms-item :label-width="100" name="endLocation" label="使用车间:">
                  <uni-easyinput :disabled="true" v-model="formData.orgId_dictText" />
               </uni-forms-item>
               <uni-forms-item :label-width="100" name="endLocation" label="安装位置:">
                  <uni-easyinput :disabled="true" v-model="formData.installationPosition" />
               </uni-forms-item>
               <uni-forms-item :label-width="100" name="endLocation" label="技术状态:">
                  <uni-easyinput :disabled="true" v-model="formData.technologyStatus_dictText" />
               </uni-forms-item>
               <uni-forms-item :label-width="100" name="endLocation" label="设备管理员:">
                  <uni-easyinput :disabled="true" v-model="formData.equipmentManager_dictText" />
               </uni-forms-item>
               <uni-forms-item :label-width="100" name="endLocation" label="出厂日期:">
                  <uni-easyinput :disabled="true" v-model="formData.leaveFactoryDate" />
               </uni-forms-item>
            </uni-group>
         </uni-forms>
         <view class="file-list margin-sm">
            <view class="file-item" v-for="(file, index) in this.selectedFiles" :key="index">
               <view class="file-icon">
                  <!-- 文件图标 -->
                  <image src="/static/icon_file.png" style="height: 25px;  width: 25px; margin-right: 10px;"
                     mode='aspectFit' class="zai-logo "></image>
               </view>
               <view class="file-name">
                  <!-- 文件名 -->
                  {{file.fileName}}
               </view>
               <view class="file-actions">
                  <!-- 下载按钮 -->
                  <image v-show="showBtn" src="/static/icon_down.png" @click="downloadFile(file)"
                     style="height: 25px;  width: 25px; margin-right: 10px;"></image>
               </view>
            </view>
         </view>
         <view class="flex  margin-bottom-xs">
            <button class="flex-sub  cu-btn bg-blue margin-sm   lg" hover-class="is-hover"
            <button v-if="authIncludes('eam:reportRepair:add')"  class="flex-sub  cu-btn bg-blue margin-sm   lg" hover-class="is-hover"
               @click="goReportRepair()">报修</button>
            <button class="flex-sub  cu-btn bg-blue margin-sm   lg" hover-class="is-hover"
               @click="goCheck()">点检</button>
@@ -71,15 +90,24 @@
      stringify
   } from "querystring";
   import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";
   import {
      saveAs
   } from 'file-saver'; // 引入 file-saver 库
   export default {
      mixins: [MescrollMixin], // 使用mixin
      data() {
         return {
            formData: {},
            formData: {
               fileLists: []
            },
            fileLists: [],
            NavBarColor: this.NavBarColor,
            url: {
               stallList: "/eam/equipment/queryById"
               stallList: "/eam/equipment/queryById",
               add: 'eam/equipmentAttachment/add',
               upload: "/eam/sysFiles/batch_upload",
               downloadFile: 'eam/equipmentAttachment/downloadFile'
            },
            id: '',
            upOption: {
@@ -105,7 +133,11 @@
            msg1Title: ""
         }
      },
      computed: {
         authList() {
            return this.$store.getters.getAuth || []
         },
         top() {
            return this.CustomBar * 2 + 160
         },
@@ -120,11 +152,6 @@
      onLoad(options) {
         const decodedEquipmentId = decodeURIComponent(options.equipmentId);
         this.id = decodedEquipmentId;
         // const data = options.query;
         // this.id = JSON.parse(data).equipmentId;
         // console.log(data)
         // this.id = options.equipmentId;
         // console.log(options)
         console.log(this.id)
         if (!this.id) {
            uni.showModal({
@@ -157,7 +184,192 @@
      },
      created() {},
      methods: {
         authIncludes(code) {
            return this.authList.some(auth => auth.action === code)
         },
         downloadFile(item) {
            uni.showModal({
               title: '提示',
               content: '确认要下载吗',
               cancelText: '取消',
               confirmText: '确认',
               success: res => {
                  if (res.confirm) {
                     this.downFile(item)
                  }
               }
            })
         },
         downFile(item) {
            this.$http.download(this.url.downloadFile, {
               params: {
                  id: item.id
               },
               responseType: 'blob' // 确保响应类型为 blob
            }).then(response => {
               console.log('Response:', response); // 查看完整响应结构
               // 获取 tempFilePath(Blob URL)
               const tempFilePath = response.tempFilePath;
               if (!tempFilePath) {
                  uni.showToast({
                     title: '文件下载失败',
                     icon: 'none'
                  });
                  return;
               }
               let fileName = item.fileName;
               // 创建 <a> 标签并触发下载
               const link = document.createElement('a');
               link.href = tempFilePath;
               link.setAttribute('download', fileName);
               link.style.display = 'none';
               document.body.appendChild(link);
               link.click();
               // 清理资源
               document.body.removeChild(link);
            }).catch(err => {
               console.error('Download error:', err);
               uni.showToast({
                  title: '文件下载失败',
                  icon: 'none'
               });
            });
         },
         getFileList() {
            this.$http.get(this.url.fileList, {
               params: {
                  equipmentId: this.id,
                  pageNo: 1,
                  pageSize: 999,
                  column: 'createTime',
                  order: 'desc'
               },
            }).then(res => {
               if (res.data.success) {
                  this.selectedFiles = res.data.result.records || [];
               }
            }).catch(() => {
               uni.showToast({
                  title: '获取文件列表失败',
                  icon: 'none'
               });
            });
         },
         uploadFail(e) {
            console.log('上传失败:', e)
         },
         onFileSelect(e) {
            const tempFilePaths = e.tempFilePaths;
            uni.showLoading({
               title: '上传中...'
            });
            const uploadPromises = tempFilePaths.map((filePath, index) => {
               return new Promise((resolve, reject) => {
                  this.$http.upload(this.url.upload, {
                        filePath: filePath,
                        name: 'file'
                     })
                     .then(uploadRes => {
                        const serverFile = uploadRes.data.result[0];
                        console.log(serverFile);
                        // 提取fileSuffix并拼接
                        if (serverFile.fileSuffix && serverFile.fileName && !serverFile
                           .fileName.includes('.')) {
                           serverFile.fileName += '.' + serverFile.fileSuffix;
                        }
                        this.fileLists = [];
                        // 防止重复添加(根据 id 或 fileName 判断)
                        if (!this.fileLists.some(file => file.id === serverFile.id)) {
                           this.fileLists.push(serverFile);
                        }
                        resolve();
                     })
                     .catch(err => {
                        console.error(`文件 ${index + 1} 上传失败`, err);
                        uni.showToast({
                           title: `第 ${index + 1} 个文件上传失败`,
                           icon: 'none'
                        });
                        reject(err);
                     });
               });
            });
            Promise.all(uploadPromises)
               .then(() => {
                  uni.hideLoading();
                  uni.showToast({
                     title: '全部上传成功,正在提交...'
                  });
                  this.submitFileList(); // 自动提交所有文件
               })
               .catch(() => {
                  uni.hideLoading();
                  uni.showToast({
                     title: '部分上传失败',
                     icon: 'none'
                  });
               });
         },
         // 文件删除回调
         onFileDelete(e) {
            console.log('删除文件:', e.index);
         },
         // 删除单个文件
         deleteFile(index) {
            this.fileLists.splice(index, 1);
         },
         submitFileList() {
            if (!this.fileLists.length) {
               uni.showToast({
                  title: '没有可提交的文件',
                  icon: 'none'
               });
               return;
            }
            console.log(this.fileLists)
            this.$http.post(this.url.add, {
               equipmentId: this.id,
               fileList: this.fileLists
            }).then(res => {
               if (res.data.success) {
                  uni.showToast({
                     title: '提交成功'
                  });
                  this.getFileList();
               } else {
                  uni.showToast({
                     title: '提交失败',
                     icon: 'none'
                  });
               }
            }).catch(err => {
               uni.showToast({
                  title: '提交异常',
                  icon: 'none'
               });
               console.error('提交失败:', err);
            });
         },
         goHome() {
            uni.reLaunch({
               url: '/pages/index/index'
@@ -167,7 +379,6 @@
          * 报修
          */
         goReportRepair() {
            console.log('getSera 方法被调用');
            uni.redirectTo({
               url: `/pages/reportRepair/reportRepair?equipmentId=${encodeURIComponent(this.id)}`
            });