Przeglądaj źródła

Merge branch 'dev' of http://110.41.163.243:9980/kd-aiot/kd-aiot-frontend-mes into dev

lucw 9 miesięcy temu
rodzic
commit
c9f3711308

+ 9 - 0
src/api/produceOrder/index.js

@@ -248,3 +248,12 @@ export async function fieldModel(params) {
   }
   return Promise.reject(new Error(res.data.message));
 }
+
+// 工艺卡打印信息
+export async function queryPrintV2(data) {
+  const res = await request.post(`/mes/workorder/queryPrintV2`, data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 1 - 1
src/views/home/data.js

@@ -241,7 +241,7 @@ export const pieOptions = (data) => {
           formatter: (item) => {
             return item.name + ':' + item.value;
           },
-          fontSize: 16
+          fontSize: 12
           // color:"#fff"
         },
         labelLine: {

+ 53 - 26
src/views/produce/components/footBtn.vue

@@ -5,6 +5,7 @@
       :key="index"
       class="btn"
       :style="{ background: item.disable ? '#858585' : item.bjColor }"
+      v-if="$hasPermission(item.isShow)"
       @click="footClick(item)"
     >
       <img src="../../../assets/Frame.png" class="Frame" />
@@ -34,82 +35,98 @@
           {
             name: '产前准备',
             type: 'prenatalExamination',
-            bjColor: '#770077'
+            bjColor: '#770077',
+            isShow: 'mes:producetaskrulerecord:save1'
           },
           {
             name: '领料',
             type: 'pick',
-            bjColor: '#FC1B75'
+            bjColor: '#FC1B75',
+            isShow: 'mes:workorder:save'
           },
           {
             name: '投料',
             type: 'feed',
-            bjColor: '#FBD114'
+            bjColor: '#FBD114',
+            isShow:'mes:feed:save'
           },
           {
             name: '过程监测',
             type: 'processDetection',
-            bjColor: '#008888'
+            bjColor: '#008888',
+            isShow: 'mes:producetaskrulerecord:save2'
           },
           {
             name: '报工',
             type: 'job',
-            bjColor: '#157A2C'
+            bjColor: '#157A2C',
+            isShow: 'mes:workreport:save'
           },
           {
             name: '委外请托',
             type: 'Outsourcing',
-            bjColor: '#39D9AC'
+            bjColor: '#39D9AC',
+            isShow: 'mes:applyoutsource:save'
           },
           {
             name: '暂停启动',
             type: '',
-            bjColor: '#858585'
+            bjColor: '#858585',
+            isShow: 'mes:workorder:startstop',
           },
           {
             name: '产后检查',
             type: 'postpartumExamination',
-            bjColor: '#9955FF'
+            bjColor: '#9955FF',
+            isShow: 'mes:producetaskrulerecord:save3'
           },
           {
             name: '工单交接',
             type: '',
-            bjColor: '#2B56C2'
+            bjColor: '#2B56C2',
+            isShow: 'mes:producetaskrulerecord:save4'
           },
           {
             name: '工艺文件',
             type: 'work',
-            bjColor: '#2f3033'
+            bjColor: '#2f3033',
+            isShow: 'mes:workorder:bomfile',
           },
           {
             name: '工步',
             type: 'workStep',
-            bjColor: '#409EFF'
+            bjColor: '#409EFF',
+            isShow: 'main:categoryparamstep:save',
           },
           {
             name: '任务',
             type: 'task',
-            bjColor: '#67c23a'
+            bjColor: '#67c23a',
+            isShow: 'aps:assign:save',
           },
           {
             name: '异常',
             type: 'error',
-            bjColor: '#cc0000'
+            bjColor: '#cc0000',
+            isShow: 'mes:anomaly:save'
           },
           {
             name: 'BOM',
             type: 'bom',
-            bjColor: '#BB5500'
+            bjColor: '#BB5500',
+            isShow: 'mes:workorder:bom',
           },
           {
             name: '设备',
             type: 'device',
-            bjColor: '#008866'
+            bjColor: '#008866',
+            isShow: 'mes:workorder:device',
           },
           {
             name: '周转车',
             type: 'turnover',
-            bjColor: '#660066'
+            bjColor: '#660066',
+            isShow: 'mes:workorder:transfer',
           }
           // {
           //   type: 'turnover',
@@ -125,48 +142,57 @@
           {
             name: '领料',
             type: 'pick',
-            bjColor: '#FC1B75'
+            bjColor: '#FC1B75',
+            isShow: 'mes:workorder:save'
           },
           {
             name: '投料',
             type: 'feed',
-            bjColor: '#FBD114'
+            bjColor: '#FBD114',
+            isShow:'mes:feed:save'
           },
           {
             name: '报工',
             type: 'job',
-            bjColor: '#157A2C'
+            bjColor: '#157A2C',
+            isShow: 'mes:workreport:save'
           },
 
           {
             name: '委外请托',
             type: 'Outsourcing',
-            bjColor: '#39D9AC'
+            bjColor: '#39D9AC',
+            isShow: 'mes:applyoutsource:save'
           },
           {
             name: '暂停启动',
             type: '',
-            bjColor: '#858585'
+            bjColor: '#858585',
+            isShow: 'mes:workorder:startstop',
           },
           {
             name: '工艺文件',
             type: 'work',
-            bjColor: '#2B56C2'
+            bjColor: '#2B56C2',
+            isShow: 'mes:workorder:bomfile',
           },
           {
             name: '工步',
             type: 'workStep',
-            bjColor: '#409EFF'
+            bjColor: '#409EFF',
+            isShow: 'main:categoryparamstep:save',
           },
           {
             name: '任务',
             type: 'task',
-            bjColor: '#67c23a'
+            bjColor: '#67c23a',
+            isShow: 'aps:assign:save',
           },
           {
             name: '异常',
             type: 'error',
-            bjColor: '#cc0000'
+            bjColor: '#cc0000',
+            isShow: 'mes:anomaly:save'
           }
         ],
         btnList3: [
@@ -200,7 +226,8 @@
           {
             name: '报工',
             type: 'job',
-            bjColor: '#157A2C'
+            bjColor: '#157A2C',
+            isShow: 'mes:workreport:save'
           },
 
           {

+ 15 - 0
src/views/produceOrder/index.vue

@@ -47,6 +47,10 @@
           <el-button type="success" @click="allPrinting()"
             >批量打印二维码</el-button
           >
+
+          <el-button :disabled="selection.length > 1" type="success" @click="cardPrinting()"
+            >工艺卡打印</el-button
+          >
         </template>
 
         <template v-slot:code="{ row }">
@@ -186,6 +190,7 @@
     <print ref="printRef"></print>
     <printSr ref="printSrRef"></printSr>
     <printTg ref="printTgRef"></printTg>
+    <printCard ref="printCardRef"></printCard>
 
     <createDialog ref="createRef" @success="createSuccess" />
     <unpackDialog ref="unpackRef" @success="createSuccess" />
@@ -228,6 +233,7 @@
   import print from './components/print.vue';
   import printSr from './components/printSr';
   import printTg from './components/printTg';
+  import printCard from './print.vue';
   import EquipmentDialog from './components/EquipmentDialog.vue';
   import detailsPop from './components/details/index.vue';
 
@@ -245,6 +251,7 @@
       print,
       printSr,
       printTg,
+      printCard,
       detailsPop,
       EquipmentDialog,
       xlhView,
@@ -1077,6 +1084,14 @@
           this.$refs.printRef.open(ids);
         }
       },
+      // 工艺卡打印
+      cardPrinting() {
+        if (this.selection.length !== 1) {
+          return this.$message.warning('请选择一条工单!');
+        }
+        let ids = this.findAllIds(this.selection);
+        this.$refs.printCardRef.open(ids);
+      },
 
       findAllIds(nodes) {
         let ids = [];

+ 143 - 195
src/views/produceOrder/print.vue

@@ -1,138 +1,169 @@
 <template>
-  <div class="print-root">
-    <div class="card-title">工艺流程卡</div>
-    <table class="info-table">
-      <tr>
-        <td rowspan="3" class="qr-cell">
-          <img :src="card.qrLeft" alt="二维码" />
-        </td>
-        <td>单号</td>
-        <td>{{ card.orderNo }}</td>
-        <td>单据日期</td>
-        <td>{{ card.date }}</td>
-        <td rowspan="3" class="qr-cell">
-          <img :src="card.qrRight" alt="二维码" />
-        </td>
-      </tr>
-      <tr>
-        <td>编号</td>
-        <td>{{ card.code }}</td>
-        <td>存货名称</td>
-        <td>{{ card.name }}</td>
-      </tr>
-      <tr>
-        <td>图号</td>
-        <td>{{ card.drawingNo }}</td>
-        <td colspan="2"></td>
-      </tr>
-    </table>
-
-    <table class="process-table">
-      <thead>
+  <ele-modal
+    title="工艺流程卡"
+    :visible.sync="QRvisible"
+    v-if="QRvisible"
+    width="70%"
+  >
+    <div id="printSection" style="font-family: 'Microsoft Yahei', Arial, sans-serif; font-size: 12px; background: #fff; padding: 10px; margin: 40px;">
+      <div style="text-align: center; font-size: 16px; font-weight: bold; margin: 5px 0;">工艺流程卡</div>
+      <table style="width: 100%; border-collapse: collapse; margin-bottom: 6px;">
         <tr>
-          <th rowspan="2">工序</th>
-          <th colspan="4">数量</th>
-          <th rowspan="2">品质验收</th>
-          <th rowspan="2">交接签字</th>
-          <th rowspan="2">备注</th>
+          <td rowspan="4" style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle; text-align: center; width: 90px; height: 120px;">
+            <img :src="card.qrLeft" alt="二维码" style="width: 80px; height: 80px;" />
+          </td>
+          <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">单号</td>
+          <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">{{ card.code }}</td>
+          <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">单据日期</td>
+          <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">{{ card.createDate }}</td>
+          <td rowspan="4" style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle; text-align: center; width: 90px; height: 120px;">
+            <img :src="card.qrRight" alt="二维码" style="width: 80px; height: 80px;" />
+          </td>
         </tr>
         <tr>
-          <th>加工</th>
-          <th>发料</th>
-          <th>合格</th>
-          <th>报废</th>
+          <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">编号</td>
+          <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">{{ card.productCode }}</td>
+          <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">存货名称</td>
+          <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">{{ card.productName }}</td>
         </tr>
-      </thead>
-      <tbody>
-        <tr v-for="(row, idx) in card.process" :key="idx">
-          <td>{{ row.name }}</td>
-          <td>{{ row.make }}</td>
-          <td>{{ row.send }}</td>
-          <td>{{ row.pass }}</td>
-          <td>{{ row.scrap }}</td>
-          <td>{{ row.qc }}</td>
-          <td>{{ row.sign }}</td>
-          <td>{{ row.remark }}</td>
+        <tr>
+          <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">图号</td>
+          <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">{{ card.imgCode }}</td>
+           <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">计划开始时间</td>
+          <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">{{ card.planStartTime }}</td>
         </tr>
-      </tbody>
-    </table>
-
-    <div class="footer-info">
-      <div>制单人:{{ card.creator }}</div>
-      <div>审核人:{{ card.auditor }}</div>
-      <!-- <div style="flex: 1; text-align: right">
-          第{{ card.page }}页 共{{ card.totalPages }}页
-        </div> -->
+        <tr>
+          <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">计划结束时间</td>
+          <td style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;">{{ card.planCompleteTime }}</td>
+          <td colspan="2" style="border: 1px solid #000; padding: 3px 5px; vertical-align: middle;"></td>
+        </tr>
+      </table>
+
+      <table style="width: 100%; border-collapse: collapse; margin-bottom: 8px;">
+        <thead>
+          <tr>
+            <th rowspan="2" style="border: 1px solid #000; padding: 3px; text-align: center; font-weight: bold;">工序</th>
+            <th colspan="4" style="border: 1px solid #000; padding: 3px; text-align: center; font-weight: bold;">数量</th>
+            <th rowspan="2" style="border: 1px solid #000; padding: 3px; text-align: center; font-weight: bold;">品质验收</th>
+            <th rowspan="2" style="border: 1px solid #000; padding: 3px; text-align: center; font-weight: bold;">交接签字</th>
+            <th rowspan="2" style="border: 1px solid #000; padding: 3px; text-align: center; font-weight: bold;">备注</th>
+          </tr>
+          <tr>
+            <th style="border: 1px solid #000; padding: 3px; text-align: center; font-weight: bold;">加工</th>
+            <th style="border: 1px solid #000; padding: 3px; text-align: center; font-weight: bold;">发料</th>
+            <th style="border: 1px solid #000; padding: 3px; text-align: center; font-weight: bold;">合格</th>
+            <th style="border: 1px solid #000; padding: 3px; text-align: center; font-weight: bold;">报废</th>
+          </tr>
+        </thead>
+        <tbody>
+          <tr v-for="(row, idx) in card.printTaskCarDetail" :key="idx">
+            <td style="border: 1px solid #000; padding: 3px; text-align: center;">{{ row.taskName }}</td>
+            <td style="border: 1px solid #000; padding: 3px; text-align: center;">{{ row.formingNum }}</td>
+            <td style="border: 1px solid #000; padding: 3px; text-align: center;">{{ row.formedNum }}</td>
+            <td style="border: 1px solid #000; padding: 3px; text-align: center;">{{ row.qualified }}</td>
+            <td style="border: 1px solid #000; padding: 3px; text-align: center;">{{ row.noQualifiedSum }}</td>
+            <td style="border: 1px solid #000; padding: 3px; text-align: center;"></td>
+            <td style="border: 1px solid #000; padding: 3px; text-align: center;"></td>
+            <td style="border: 1px solid #000; padding: 3px; text-align: center;"></td>
+          </tr>
+        </tbody>
+      </table>
+
+      <el-row :gutter="16">
+        <el-col :span="12"><div>制单人:{{ card.createUserName }}</div></el-col>
+        <el-col :span="12"><div>审核人:</div></el-col>
+      </el-row>
+
+      <!-- 打印按钮 -->
+      <!-- <div style="margin-top: 10px; display: block;">
+        <button @click="doPrint">打印</button>
+      </div> -->
     </div>
-
-    <!-- 打印按钮 -->
-    <!-- <div class="no-print" style="margin-top: 10px">
-      <button @click="doPrint">打印</button>
-    </div> -->
-  </div>
+    <div slot="footer">
+      <el-button @click="print">打印预览</el-button>
+      <el-button @click="close">关闭</el-button>
+    </div>
+  </ele-modal>
 </template>
 
 <script>
+import { queryPrintV2 } from '@/api/produceOrder';
+import QRCode from 'qrcode';
   export default {
     name: 'print-dialog',
 
     data() {
       return {
         card: {
-          qrLeft:
-            'https://api.qrserver.com/v1/create-qr-code/?size=80x80&data=左二维码',
-          qrRight:
-            'https://api.qrserver.com/v1/create-qr-code/?size=80x80&data=右二维码',
-          orderNo: 'ZHD2025076835',
-          date: '2025/07/21',
-          code: '13650042',
-          name: '射灯安装座 HZS120GT.3',
-          drawingNo: '516',
-          process: [
-            {
-              name: '抛丸',
-              make: 30,
-              send: '',
-              pass: '',
-              scrap: '',
-              qc: '',
-              sign: '',
-              remark: ''
-            },
-            {
-              name: '三维光割',
-              make: 30,
-              send: '',
-              pass: 30,
-              scrap: '',
-              qc: '',
-              sign: '',
-              remark: ''
-            },
-            {
-              name: '喷粉',
-              make: 30,
-              send: '',
-              pass: '',
-              scrap: '',
-              qc: '',
-              sign: '签名',
-              remark: '深灰色(RAL7011)'
-            }
-          ],
-          creator: '李敦',
-          auditor: '李敦',
+          qrLeft: '',
+          qrRight: '',
+          productCode: '',
+          createDate: '',
+          code: '',
+          productName: '',
+          imgCode: '',
+          planStartTime: '',
+          planCompleteTime: '',
+          printTaskCarDetail: [],
+          createUserName: '',
+          auditor: '',
           page: 6,
-          totalPages: 14
-        }
+          totalPages: 14,
+        },
+        printId: '',
+        QRvisible: false
       };
     },
 
     mounted() {
-      this.doPrint();
+      // this.doPrint();
     },
-
     methods: {
+      open(ids) {
+        console.log('ids~~~', ids);
+        this.printId = ids[0]
+        this.getData()
+        this.QRvisible = true;
+      },
+      close() {
+        this.QRvisible = false;
+      },
+      getData() {
+        queryPrintV2({id: this.printId}).then(res => {
+          console.log('queryPrintV2', res)
+          if(res.length) {
+            this.card = res[0]
+            QRCode.toDataURL(this.printId)
+            .then((url) => {
+              this.card.qrLeft = url;
+              this.card.qrRight = url;
+              this.$forceUpdate();
+            })
+            .catch((err) => {
+              console.error(err);
+            });
+          }
+        }).catch(err => {
+          console.log('err', err) 
+        })
+      },
+      print() {
+        const printSection = document.getElementById('printSection');
+        // 创建打印任务
+        const printWindow = window.open('', '_blank');
+        printWindow.document.open();
+        printWindow.document.write('<html><head><title>打印预览</title>');
+        printWindow.document.write(
+          '<link rel="stylesheet" href="your-stylesheet-url.css" type="text/css" />'
+        );
+        printWindow.document.write('</head><body>');
+        printWindow.document.write(printSection.innerHTML);
+        printWindow.document.write('</body></html>');
+        printWindow.document.close();
+        printWindow.onload = function () {
+          printWindow.print();
+        };
+      },
       doPrint() {
         this.$nextTick(() => {
           window.print();
@@ -141,86 +172,3 @@
     }
   };
 </script>
-
-<style scoped>
-  .print-root {
-    font-family: 'Microsoft Yahei', Arial, sans-serif;
-    font-size: 12px;
-    background: #fff;
-    padding: 10px;
-    margin: 40px;
-  }
-
-  .card-title {
-    text-align: center;
-    font-size: 16px;
-    font-weight: bold;
-    margin: 5px 0;
-  }
-
-  .info-table {
-    width: 100%;
-    border-collapse: collapse;
-    margin-bottom: 6px;
-  }
-
-  .info-table td {
-    border: 1px solid #000;
-    padding: 3px 5px;
-    vertical-align: middle;
-  }
-
-  .qr-cell {
-    text-align: center;
-    width: 90px;
-    height: 120px;
-  }
-  .qr-cell img {
-    width: 80px;
-    height: 80px;
-  }
-
-  .process-table {
-    width: 100%;
-    border-collapse: collapse;
-    margin-bottom: 8px;
-  }
-  .process-table th,
-  .process-table td {
-    border: 1px solid #000;
-    padding: 3px;
-    text-align: center;
-  }
-  .process-table thead th {
-    font-weight: bold;
-  }
-
-  .footer-info {
-    display: flex;
-    justify-content: space-between;
-    font-size: 12px;
-  }
-
-  .no-print {
-    display: block;
-  }
-
-  /* 打印优化 */
-  @page {
-    size: A4;
-    margin: 12mm;
-  }
-
-  @media print {
-    .no-print {
-      display: none !important;
-    }
-    * {
-      -webkit-print-color-adjust: exact;
-      print-color-adjust: exact;
-    }
-    .print-root {
-      padding: 0;
-    }
-  }
-</style>