cnf
4 天以前 7c803e1ce6c6d9765a99203544bf200ecd52aa2d
pages/QC/SJ/Add.vue
@@ -12,7 +12,7 @@
            <span class="info-label">创建时间:</span>
            <span class="info-value">{{formData.createTime}}</span>
            <span class="info-label">检验类型:</span>
            <span class="info-value">{{formData.SJ_MJ}}</span>
            <span class="info-value">{{formData.sJ_MJ}}</span>
         </view>
         <view class="info-row" v-if="isUpdate">
            <span class="info-label">检验类型:</span>
@@ -40,7 +40,7 @@
         </view>
         <view class="info-block">
            <view class="info-label">计划编号:</view>
            <view class="info-label">工单单号:</view>
            <picker v-if="isUpdate" class="info-picker" name="selector" :range="DAA001List"
               @change="onDaa001Change">
               <text>{{ DAA001List[DAA001Index] }}</text>
@@ -48,15 +48,9 @@
            <view v-else class="info-value">{{formData.daa001}}</view>
         </view>
         <view class="info-block">
            <view class="info-label">销售订单号:</view>
            <view class="info-value">{{formData.caa015}}</view>
         </view>
         <view class="info-block">
            <view class="info-label">客户:</view>
            <view class="info-value">{{formData.cust}}</view>
         </view>
         <view class="info-block">
            <view class="info-label">产品名称:</view>
@@ -121,6 +115,12 @@
         <button class="action-btn secondary" v-if="!isUpdate && !isShowTable" @click="toImage">
            上传/查看图片
         </button>
         <button class="action-btn secondary" v-if="!isUpdate && !isShowTable" @click="fetchDrawingNumber(formData.itemNo)">
            调取PLM图纸
         </button>
         <button class="action-btn secondary" v-if="!isUpdate && !isShowTable" @click="getBom">
            Bom用料清单
         </button>
         <button class="action-btn secondary" v-if="!isUpdate && !isShowTable && formData.xjGenFlag == 0"
            @click="saveXJ">
            生成巡检
@@ -137,7 +137,68 @@
         <button class="action-btn primary" v-if="isShowTable && isUpdate" @click="saveTable">
            生成检验项目
         </button>
         <button class="action-btn success" v-if="!isUpdate && formData.fsubmit == 0 && !isShowTable" @click="getGenUpdate">
            获取检验项目
         </button>
         <button class="action-btn success" v-if="!isUpdate && formData.fsubmit ==0 && !isShowTable" @click="submitInspection">
            提交检验
         </button>
      </view>
      <view class="barcode">
         <u-modal :show="itemShow" title="物料明细" @confirm="drawingConfirm" @cancel="itemCancel"
            showCancelButton :z-index="1000">
            <uni-table border stripe emptyText="暂无更多数据" style="margin-left: 5px;margin-right: 5px;height: 400px;max-height: 60vh;overflow-y: auto;">
               <uni-tr>
                  <uni-th align="center">料号</uni-th>
                  <uni-th align="center" width="90">名称</uni-th>
                  <uni-th align="center" width="90">规格型号</uni-th>
                  <uni-th align="center" width="150">调取PLM图纸</uni-th>
               </uni-tr>
               <uni-tr v-for="(item,index) in (drawing || [])" style="height: 100px;">
                  <uni-td align="center">{{item.itemNo}}</uni-td>
                  <uni-td align="center" >
                     <div >{{item.itemName}}</div>
                  </uni-td>
                  <uni-td align="center" >
                     <div>{{item.itemModel}}</div>
                  </uni-td>
                  <uni-td align="center" class="click-wd">
                     <div @click="fetchDrawingNumber(item.itemNo)">调取图纸</div>
                  </uni-td>
               </uni-tr>
            </uni-table>
         </u-modal>
      </view>
      <view class="barcode">
         <u-modal :show="drawingShow" title="图纸明细" @confirm="drawingConfirm" @cancel="drawingCancel"
            showCancelButton :z-index="1000">
            <uni-table border stripe emptyText="暂无更多数据" style="margin-left: 5px;margin-right: 5px;height: 400px;max-height: 60vh;overflow-y: auto;">
               <uni-tr>
                  <uni-th align="center">相关文档</uni-th>
                  <uni-th align="center" width="90">有无关联PDF文件</uni-th>
                  <uni-th align="center" width="90">能否打开文件</uni-th>
                  <uni-th align="center" width="150">操作(点击)</uni-th>
               </uni-tr>
               <uni-tr v-for="(item,index) in (drawing || [])" style="height: 100px;">
                  <uni-td align="center">{{item.fName}}</uni-td>
                  <uni-td align="center" style="font-size:25px;">
                     <div v-if="item.fRelevantObject==' '" style="color: #E47470;">×</div>
                     <div style="color: #90BA87;" v-else>√</div>
                  </uni-td>
                  <uni-td align="center" style="font-size:25px;">
                     <div v-if="item.isSupported || item.fRelevantObject!=' '" style="color: #90BA87;">√</div>
                     <div style="color: #E47470;" v-else>×</div>
                  </uni-td>
                  <uni-td align="center" class="click-wd">
                     <div @click="openDrawings(item)">打开文档</div>
                  </uni-td>
               </uni-tr>
            </uni-table>
         </u-modal>
      </view>
      <!-- 弹出框 -->
      <view v-if="remarksPopup" class="overlay">
         <view class="popup">
@@ -175,6 +236,7 @@
               comments: "",
               statusUser: "",
               SJ_MJ: '首检',
               fsubmit:"",
            },
            DAA020List: [],
@@ -190,12 +252,17 @@
            womdaaList: [],
            tableData: [],
            drawing: [],
            isSubmit: true,
            isUpdate: true,
            isShowTable: false,
            drawingShow: false,
            itemShow: false,
            remarks: "",
            remarksPopup: false,
@@ -282,7 +349,7 @@
                  }
               }).then(res => {
                  if (res.data.tbBillList) {
                     this.$showMessage("巡检生成成功");
                     this.$showMessage("首检生成成功");
                     this.init();
                  }
               });
@@ -473,10 +540,10 @@
         },
         save() {
            if (this.tableData.length === 0) {
               this.$showMessage(this.formData.itemNo + "物料没有检验项目");
               return;
            }
            //if (this.tableData.length === 0) {
               //this.$showMessage(this.formData.itemNo + "物料没有检验项目");
               //return;
            //}
            if (!this.formData.daa001) {
               this.$showMessage("请选择计划编号");
@@ -528,6 +595,357 @@
            this.SJ_MJIndex = e.mp.detail.value;
            this.formData.SJ_MJ = this.SJ_MJList[this.SJ_MJIndex];
         },
         submitInspection() {
            if (this.formData.id) {
               this.$post({
                  url: "/SJ/SjSubmit",
                  data: {
                     id: this.formData.id,
                     userNo: this.$loginInfo.account
                  }
               }).then(res => {
                  if (res.data.tbBillList) {
                     this.$showMessage("提交成功");
                     this.init();
                  }
               });
            }
         },
         drawingConfirm() {
            this.drawingShow = false
            this.imageShow = false
            this.productionShow = false
            this.itemShow=false
         },
         drawingCancel() {
            this.drawingShow = false
            this.imageShow = false
            this.productionShow = false
               // const item = '83040700101'
               const item = this.formData.billNo;
               console.log(this.formData.billNo );
               console.log('daa001:', item);
               console.log('ItemNo:', this.formData.itemNo);
               const url = this.$store.state.serverInfo.serverAPI + "/LLJ/getWomdab";
               // 或者如果路径不同,请使用正确的端点
               // const url = "http://192.168.0.100:10054/api/getWomdab"
               let _this = this;
               uni.request({
                   url: url,
                   method: 'POST',
                   header: {
                       'Content-Type': 'application/json'
                   },
                   data: {
                         daa001: item,  // 根据DTO属性名传递
                         ItemNo: this.formData.itemNo   // 注意大小写匹配
                   },
                   success: (response) => {
                       console.log(response);
                       console.log("-------------------------------------");
                       // 根据后端返回的数据结构进行调整
                       if (response.data.status === 1) {
                           // 状态为1表示没有数据
                           _this.drawing = [];
                       } else if (response.data.status === 0) {
                           // 状态为0表示成功
                           if (response.data.data && response.data.data.tbBillList) {
                               _this.drawing = response.data.data.tbBillList;
                               // 遍历数据,判断文件后缀并添加字段
                               _this.drawing.forEach((file) => {
                                   // 获取文件名的后缀
                                   const fileExtension = file.fName ? file.fName.split('.').pop().toLowerCase() : '';
                                   // 定义支持的文件类型
                                   const supportedExtensions = ['jpg', 'pdf', 'xlsx', 'doc', 'docx', 'xls'];
                                   // 判断是否支持该文件类型
                                   file.isSupported = supportedExtensions.includes(fileExtension);
                               });
                           } else {
                               _this.drawing = [];
                           }
                       } else {
                           // 其他状态码处理
                           _this.drawing = [];
                           uni.showToast({
                               title: response.data.message || '请求失败',
                               icon: 'none'
                           });
                       }
                   },
                   fail: (error) => {
                       uni.showToast({
                           title: '请求图纸链接失败',
                           icon: 'none'
                       });
                       console.error('请求失败:', error);
                   }
               });
         },
         itemCancel() {
            this.itemShow=false
         },
         fetchDrawingNumber(itemNo) {
            // const item = '83040700101'
            const item = itemNo;
            console.log(itemNo)
            // console.log(item)
            const url = this.$store.state.serverInfo.serverAPI +"/PLM/RetrieveDrawings?ItemNo=" + item
            // const item = '5.06.04.4002';
            // const url = "http://192.168.0.100:10054/api/PLM/RetrieveDrawings?ItemNo=" + item
            let _this = this;
            uni.request({
               url: url,
               method: 'POST',
               success: (response) => {
                  console.log(response)
                  if (response.data.data == '返回结果为空') {
                     _this.drawing = []
                  } else {
                     _this.drawing = response.data.data
                     // 遍历数据,判断文件后缀并添加字段
                     _this.drawing.forEach((file) => {
                        // 获取文件名的后缀
                        const fileExtension = file.fName.split('.').pop()
                           .toLowerCase();
                        // 定义支持的文件类型
                        const supportedExtensions = ['jpg', 'pdf', 'xlsx', 'doc',
                           'docx',
                           'xls'
                        ];
                        // 判断是否支持该文件类型
                        file.isSupported = supportedExtensions.includes(fileExtension);
                     });
                  }
               },
               fail: (error) => {
                  uni.showToast({
                     title: '请求图纸链接失败',
                     icon: 'none'
                  });
               }
            });
            this.drawingShow = true
         },
         getBom(){
            // const item = '83040700101'
            const item = this.formData.daa001;
            console.log(this.formData.daa001 );
            console.log('daa001:', item);
            console.log('ItemNo:', this.formData.itemNo);
            const url = this.$store.state.serverInfo.serverAPI + "/LLJ/getWomdab";
            // 或者如果路径不同,请使用正确的端点
            // const url = "http://192.168.0.100:10054/api/getWomdab"
            let _this = this;
            uni.request({
                url: url,
                method: 'POST',
                header: {
                    'Content-Type': 'application/json'
                },
                data: {
                      daa001: item,  // 根据DTO属性名传递
                      ItemNo: this.formData.itemNo   // 注意大小写匹配
                },
                success: (response) => {
                    console.log(response);
                    console.log("-------------------------------------");
                    // 根据后端返回的数据结构进行调整
                    if (response.data.status === 1) {
                        // 状态为1表示没有数据
                        _this.drawing = [];
                        uni.showToast({
                            title: response.data.message || '该检验单未上传附件信息',
                            icon: 'none'
                        });
                    } else if (response.data.status === 0) {
                        // 状态为0表示成功
                        if (response.data.data && response.data.data.tbBillList) {
                            _this.drawing = response.data.data.tbBillList;
                            // 遍历数据,判断文件后缀并添加字段
                            _this.drawing.forEach((file) => {
                                // 获取文件名的后缀
                                const fileExtension = file.fName ? file.fName.split('.').pop().toLowerCase() : '';
                                // 定义支持的文件类型
                                const supportedExtensions = ['jpg', 'pdf', 'xlsx', 'doc', 'docx', 'xls'];
                                // 判断是否支持该文件类型
                                file.isSupported = supportedExtensions.includes(fileExtension);
                            });
                        } else {
                            _this.drawing = [];
                        }
                    } else {
                        // 其他状态码处理
                        _this.drawing = [];
                        uni.showToast({
                            title: response.data.message || '请求失败',
                            icon: 'none'
                        });
                    }
                },
                fail: (error) => {
                    uni.showToast({
                        title: '请求图纸链接失败',
                        icon: 'none'
                    });
                    console.error('请求失败:', error);
                }
            });
            this.itemShow = true
         },
          //图纸相关文档
          openDrawings(item) {
           console.log("jkjoi", item)
           if (item.fRelevantObject.length > 2) {
            // 生成请求URL(简化编码逻辑)
            const encodedName = encodeURIComponent(item.fName);
            const url = this.$store.state.serverInfo.serverAPI+`/PLM/OpenDrawingsGet?fileId=${item.fRelevantObject}&fName=${encodedName}`;
            console.log('请求URL:', url);
            const now = new Date();
            const timestamp = [
              now.getFullYear(),
              String(now.getMonth() + 1).padStart(2, '0'),
              String(now.getDate()).padStart(2, '0'),
              String(now.getHours()).padStart(2, '0'),
              String(now.getMinutes()).padStart(2, '0'),
              String(now.getSeconds()).padStart(2, '0')
            ].join('');
            // 生成新文件名(基础名_时间戳.后缀)
            this.fileName = `${item.fName}_${timestamp}.pdf`;
            console.log('新文件名:', this.fileName);
            uni.downloadFile({
               url: url,
               success: (res) => {
                  console.log(res);
                  let fileName = this.fileName;
                  let fileExt = fileName.split('.').pop();
                  // let newFilePath = "_doc/uniapp_temp_1742877118745/download" + "/" + fileName;
                  // console.log('newFilePath', newFilePath)
                  if (fileExt === 'xls' || fileExt === 'xlsx' || fileExt === 'pdf'|| fileExt === 'jpg'|| fileExt === 'png') {
                     plus.io.resolveLocalFileSystemURL(res.tempFilePath, (entry) => {
                             // 获取文件所在的目录
                             entry.getParent((parentEntry) => {
                               let newFileName = this.fileName; // 新的文件名
                               // 移动并重命名文件
                               entry.moveTo(
                                 parentEntry,
                                 newFileName,
                                 (newEntry) => {
                                   console.log('重命名成功:', newEntry.fullPath);
                                   // 打开 Excel 文件
                                   plus.runtime.openFile(newEntry.fullPath, {}, (e) => {
                                     console.error('无法打开 Excel 文件:', e);
                                   });
                                // let pages = getCurrentPages();
                                // let beforePage = pages[pages.length - 2];
                                // uni.navigateBack({
                                //    delta: 1, //返回的页面数,如果为1表示返回上一页
                                //    success: (event) => {
                                //       beforePage.$vm.reload()
                                //    }
                                // });
                                 },
                                 (err) => {
                                   console.error('重命名失败:', err);
                                 }
                               );
                             }, (err) => {
                               console.error('获取父目录失败:', err);
                             });
                           }, (err) => {
                             console.error('获取文件失败:', err);
                           });
                  } else {
                     console.error('文件格式不匹配:', fileExt);
                     uni.showToast({
                        title: '文件格式不支持',
                        icon: 'none'
                     });
                  }
               }
            })
            uni.request({
               url: url,
               method: 'POST',
               responseType: 'arraybuffer',
               success: (response) => {
                  console.log(response.data)
                  if (!response) {
                     uni.showToast({
                        title: "协议预览失败",
                        duration: 2000
                     });
                  }
               },
               fail: (error) => {
                  console.log(error)
                  uni.showToast({
                     title: '请求预览链接失败',
                     icon: 'none'
                  });
               }
            });
         }
           else
           {
            uni.showToast({
               title: '请求预览链接失败',
               icon: 'none'
            });
           }
          },
         getGenUpdate() {
            if (!this.formData.id || !this.formData.billNo) {
               this.$showMessage("请先保存检验单!");
               return;
            }
            this.$post({
               url: "/SJ/GenUpdate",
               data: {
                  id: this.formData.id,
                  no: this.formData.billNo,
                  user: this.$loginInfo.account
               }
            }).then(res => {
               if (res.data.result === 0) {
                  this.$showMessage("获取检验项目成功");
                  this.init();
               } else {
                  this.$showMessage(res.data.message || "获取失败");
               }
            });
         }
      },
      onShow() {
         //每次进入页面都会执行的方法
@@ -785,6 +1203,15 @@
  background-color: #c0392b;
}
.action-btn.success {
  background-color: #2ecc71;
  color: white;
}
.action-btn.success:hover {
  background-color: #27ae60;
}
/* 弹出框样式 */
.overlay {
  position: fixed;