cnf
3 天以前 2565d78042b7cc5ac500c4bac5edefdb7a046af5
pages/QC/XJ/Add.vue
@@ -97,7 +97,7 @@
                    <view v-if="item.result==null || item.result=='未完成'" class="watermark pending">
                      {{ getStatusText(item.result) }}
                    </view>
                    <view class="description-text">{{ item.projName }}</view>
                    <view class="description-text">{{ getInspectionDescription(item) }}</view>
                  </td>
                  <td>
                    <button v-if="item.isCheck >= item.levelNum" class="record-btn" @click="toDetail(item)">查看</button>
@@ -119,6 +119,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" @click="viewAttachmentInfo">查看附件信息</button>
         <button class="action-btn danger" v-if="!isUpdate && !formData.fcheckResu && !isShowTable && formData.fsubmit !== 1" @click="removeXJ">删除单据</button>
@@ -268,6 +274,61 @@
          </div>
        </view>
      </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="showFilePreviewPopup" class="overlay">
@@ -356,10 +417,16 @@
        lineNo: "",
  
        tableData: [],
        drawing: [],
  
        isSubmit: true,
      isSubmit: true,
  
        isUpdate: true,
      isUpdate: true,
      isShowTable: false,
      drawingShow: false,
      itemShow: false,
  
        remarks: "",
        remarksPopup: false,
@@ -443,6 +510,15 @@
          return statusMap['approved'] || '合格';
        } else {
          return statusMap['rejected'] || '不合格';
        }
      },
      getInspectionDescription(item) {
        // 取ITEM_MOD字段的值
        if (item.itemMod && item.itemMod.trim() !== '') {
          return item.itemMod;
        } else {
          return '检验项目详情';
        }
      },
      
@@ -1028,6 +1104,318 @@
          }
        });
      },
     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.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 = [];
                    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'
        });
       }
     },
      
      previewOfficeFile(url, fileName) {
        this.previewTitle = fileName;