From 363678a54142e62fdd4ca39a0db5c54af1a704dc Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期四, 29 二月 2024 15:39:59 +0800
Subject: [PATCH] 生产调度修改

---
 src/views/quality/rawMaterial/index.vue |  352 +++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 263 insertions(+), 89 deletions(-)

diff --git a/src/views/quality/rawMaterial/index.vue b/src/views/quality/rawMaterial/index.vue
index 3e33e70..3e3b81e 100644
--- a/src/views/quality/rawMaterial/index.vue
+++ b/src/views/quality/rawMaterial/index.vue
@@ -17,16 +17,18 @@
 <template>
     <div class="mod-config">
         <basic-container>
-            <ttable 
+            <ttable
             :table="table"
             :resultData="resultData"
-            @change ="costPlannedAmountChange"
             @handleSelectionChange="handleSelectionChange"
             :prelang="prelang"
             :options="options"
             :ajaxFun="ajaxFun"
+            @queryParam="getQueryParam($event)"
             ref="rawMaterialTable">
-            <template #toolbar></template>
+            <template #toolbar>
+                <!-- <el-button @click="exportRawMaterial" type="primary" >瀵煎嚭</el-button> -->
+            </template>
             </ttable>
         </basic-container>
         <!-- 寮圭獥, 鏂板 / 淇敼 -->
@@ -35,21 +37,40 @@
             ref="addOrUpdate"
             @refreshDataList="getData"
         ></RawMaterialForm>
+        <el-dialog
+        top="7vh"
+        title="鎵撳嵃棰勮"
+        :visible.sync="printDialogVisible"
+        width="70%">
+        <div style="width:90%;margin-left:5%;height: 60vh;overflow-y: scroll;">
+            <printTemplate id="printRaw" :formData="printFormData"></printTemplate>
+        </div>
+        <span slot="footer" class="dialog-footer">
+            <el-button @click="()=>{printDialogVisible = false;this.printFormData=null}">鍙� 娑�</el-button>
+            <el-button type="primary" @click="printFun()">鎵� 鍗�</el-button>
+        </span>
+        </el-dialog>
     </div>
 </template>
 <script>
-import ExportMaterial from './ExportMaterial.vue'
 import ttable from '@/views/common/ztt-table.vue'
-import { getRawInspectList,delObj } from '@/api/quality/rawMaterial'
+import { getRawInspectList,delObj,exportRawMaterial,getObj,downloadReport,checkPutIFS } from '@/api/quality/rawMaterial'
 import RawMaterialForm from './rawMaterial-form'
 import * as fecha from 'element-ui/lib/utils/date'
 import { mapGetters } from 'vuex'
+import PrintJS from 'print-js'
+import { transformZip } from '@/util/fileTransform'
+import printTemplate from './rawMaterial-print'
   export default {
     data() {
         return {
+            printFormData: null,
+            printDialogVisible: false,
+            queryParam: {},
             resultData:[],
             addOrUpdateVisible: false,
             type: [1],
+            multipleSelection: [],
             prelang: 'rawMaterial',
             ajaxFun: getRawInspectList,
             options: {
@@ -64,24 +85,54 @@
                 isRefresh: true, // 鏄惁鏄剧ず鍒锋柊鎸夐挳
                 isShowHide: true, // 鏄惁鏄剧ず鏄惧奖鎸夐挳H
                 isSearch: true, // 楂樼骇鏌ヨ鎸夐挳
-                defaultOrderBy: { column: 'formTime', direction: 'desc' },
+                defaultOrderBy: { column: 'createTime', direction: 'desc' },
             },
             table: {
                 total: 0,
                 currentPage: 1,
                 pageSize: 20,
                 data: [],
-                isExport:true,
                 // 鏍囬
                 column: [
+                    {
+                        minWidth: '120',
+                        prop: 'rawInsNo',
+                        label: '鍘熸潗鏂欐楠岀紪鍙�',
+                        isTrue: true,
+                        isSearch: true,
+                        searchInfoType: 'text',
+                        render: { fun: this.addOrUpdateHandle }
+                    },
+                    {
+                        minWidth: '120',
+                        prop: 'type',
+                        label: '妫�楠岀被鍨�',
+                        isTrue: true,
+                        isSearch: true,
+                        searchInfoType: 'select',
+                        optList: () => {
+                            return this.typeList
+                        }
+                    },
+                    {
+                        minWidth: '120',
+                        prop: 'checkState',
+                        label: '瀹℃牳鐘舵��',
+                        isTrue: true,
+                        isSearch: true,
+                        searchInfoType: 'select',
+                        formatter: this.checkStateFormat,
+                        optList: () => {
+                            return this.checkStateList
+                        }
+                    },
                     {
                         minWidth: '120',
                         prop: 'code',
                         label: '鍘熸潗鏂欑紪鐮�',
                         isTrue: true,
                         isSearch: true,
-                        searchInfoType: 'text',
-                        render: { fun: this.addOrUpdateHandle }
+                        searchInfoType: 'text'
                     },
                     {
                         minWidth: '120',
@@ -139,6 +190,7 @@
                         prop: 'createTime',
                         label: '鎶ユ鏃ユ湡',
                         isTrue: true,
+                        sort: true,
                         isSearch: true,
                         searchInfoType: 'text',
                         formatter: this.formatDateTime,
@@ -185,24 +237,8 @@
                             }
                     },
                 ],
-                toolbar: [
-                {
-                    text: '鏂板',
-                    type: 'primary',
-                    fun: this.addOrUpdateHandle
-                },
-                {
-                    text: '瀵煎嚭',
-                    type: 'primary',
-                    fun: this.handleExcel
-                }
-                ],
-                operator: [{
-                    text: '浣滃簾',
-                    type: 'text',
-                    size: 'small',
-                    fun: this.deleteHandle
-                }],
+                toolbar: [],
+                operator: null,
                 operatorConfig: {
                 fixed: 'right',
                 label: '鎿嶄綔',
@@ -212,52 +248,178 @@
             },
             insStateList: [{label:'鍏ㄩ儴',value:''},{label:'宸叉娴�',value:'1'},{label:'鏈娴�',value:'0'}],
             StateList: [{label:'鍏ㄩ儴',value:''},{label:'宸插悎鏍�',value:'1'},{label:'涓嶅悎鏍�',value:'0'}],
+            typeList: [{label:'鍏ㄩ儴',value:''},{label:'棣栨',value:'棣栨'},{label:'杩旀',value:'杩旀'}],
+            checkStateList: [{label:'鏈鏍�',value:'0'},{label:'瀹℃牳閫氳繃',value:'1'},{label:'瀹℃牳涓嶉�氳繃',value:'2'}],
         }
     },
     components: {
         ttable,
         RawMaterialForm,
-        ExportMaterial,
+        printTemplate,
     },
     created() {
+        if(this.permissions.quality_rawMaterial_add){
+            this.table.toolbar.push({
+                text: '鏂板',
+                type: 'primary',
+                fun: this.addOrUpdateHandle
+            })
+        }
+        if(this.permissions.quality_rawMaterial_download){
+            this.table.toolbar.push({
+                text: '涓嬭浇妫�楠屾姤鍛�',
+                type: 'primary',
+                loading: false,
+                disabled: false,
+                fun: this.downloadReport,
 
-    },
+            })
+        }
+        this.table.operator = [{
+            text: '瀹℃牳',
+            type: 'text',
+            size: 'small',
+            fun: this.examineHandle,
+            showFun: (row)=>{return row.type==='棣栨'},
+            show: {
+                key: 'checkState',
+                val: ['0']
+            }
+        }]
+        if(this.permissions.quality_rawMaterial_del){
+            this.table.operator.push({
+                    text: '浣滃簾',
+                    type: 'text',
+                    size: 'small',
+                    fun: this.deleteHandle,
+                    show: {
+                        key: 'judgeState',
+                        val: ['',null]
+                    }
+                })
+        }
+     },
     computed: {
         ...mapGetters(['permissions'])
     },
-    methods:{
-        async costPlannedAmountChange(value){
-            this.resultData= value
-        },
-    
-      handleExcel() {
-        console.log(this.resultData);
-        console.log(this.table.column);
-        // let arr = this.table.column.map(el = el.isTrue == true)
-        // console.log(arr);
-        let arr = this.table.column.filter(item => item.isTrue == true).map(item => {
-                    return{
-                        prop:item.prop,
-                        label:item.label
-                }
-            })
-        let opt = {
-          title: '鏂囨。鏍囬',
-          column: [{
-            label:'',
-            prop:'header',
-            children:arr
-          }],
-          data: this.resultData
+    watch:{
+        printFormData(newVal){
+            if(newVal){
+                this.printFormData = newVal
+            }
         }
-        this.$Export.excel({
-          title: opt.title,
-          columns: opt.column,
-          data: opt.data
-        });
-        // console.log(this.table);
-
-      },
+    },
+    methods:{
+        examineHandle(val){
+            this.$confirm('鏄惁瀹℃牳閫氳繃璇ユ楠岄」?', '鎻愮ず', {
+                distinguishCancelAndClose: true,
+                confirmButtonText: '閫氳繃',
+                cancelButtonText: '涓嶉�氳繃',
+                type: 'warning'
+            }).then(() => {
+                this.checkPutIFSFun(val.id,1);
+            }).catch((action) => {
+                if(action === 'cancel'){
+                    this.checkPutIFSFun(val.id,2);
+                }
+            });
+        },
+        checkPutIFSFun(id,result){
+            checkPutIFS(id, result).then(res=>{
+                if(res.status===200){
+                    this.getData()
+                }
+            }).catch(error=>{
+                console.error(error)
+            })
+        },
+        downloadReport(){
+            let selection = this.multipleSelection
+            if(!selection || selection.length < 1){
+                this.$message.error("璇峰厛閫夋嫨妫�楠屾暟鎹�")
+                return
+            }else{
+                let arr = selection.filter(s=>{
+                    return s.judgeState==null || s.judgeState==''
+                })
+                if(arr.length > 0){
+                    this.$message.error("鍙兘閫夋嫨宸叉娴嬬殑鏁版嵁")
+                    return
+                }
+                let ids = []
+                selection.forEach(ele=>{
+                    ids.push(ele.id)
+                })
+                this.table.toolbar.find((e) => e.text === '涓嬭浇妫�楠屾姤鍛�').loading = true
+                this.table.toolbar.find((e) => e.text === '涓嬭浇妫�楠屾姤鍛�').disabled = true
+                try{
+                    downloadReport({ids : ids}).then(res=>{
+                        transformZip(res)
+                    })
+                }catch(error){
+                    console.log(error)
+                } finally{
+                    this.table.toolbar.find((e) => e.text === '涓嬭浇妫�楠屾姤鍛�').loading = false
+                    this.table.toolbar.find((e) => e.text === '涓嬭浇妫�楠屾姤鍛�').disabled = false
+                }
+            }
+        },
+        //鏌ョ湅鎶ュ憡鎸夐挳
+        previewFun(row){
+            getObj(row.id).then(res=>{
+                this.printFormData = res.data.data
+                this.printDialogVisible = true
+            }).catch(error=>{
+                console.log(error);
+            })
+        },
+        //鎵撳嵃鎸夐挳
+        printFun() {
+            this.printDialogVisible = false;
+            PrintJS({
+                printable: "printRaw",
+                type: "html",
+                // header: "鍘熸潗鏂欐娴嬫姤鍛�",
+                targetStyles: ["*"],
+                style: `@page {margin: 0mm 5mm;size: A4;}
+                    html {zoom:100%;}
+                    @media print {
+					  html,body{
+					    width:200mm;
+					    height:297mm;
+					  }
+					}`,
+                ignoreElements: ["no-ignore"],
+                orientation: 'portrait'
+            });
+        },
+        getQueryParam(data){
+            this.queryParam = data
+        },
+        exportRawMaterial(){
+            exportRawMaterial(this.queryParam).then(res=>{
+                this.downloadFun(res)
+            }).catch(error=>{
+                console.log(error);
+            })
+        },
+        downloadFun(result){
+            if(result == null || result == undefined){
+                return;
+            }
+            var nameList = result.headers['content-disposition'];
+            nameList = decodeURI(nameList);
+            var fileName = nameList.split('=')[1];
+            const blob = new Blob([result.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
+            const downloadElement = document.createElement('a') // 鏂板缓涓�涓狣OM鑺傜偣
+            const href = window.URL.createObjectURL(blob) // 鍒涘缓涓嬭浇鐨勯摼鎺�
+            downloadElement.href = href
+            downloadElement.download = fileName // 涓嬭浇鍚庢枃浠跺悕
+            document.body.appendChild(downloadElement) // 灏嗘柊澧炵殑鑺傜偣鎸傝浇鍒伴〉闈笂
+            downloadElement.click() // 鐐瑰嚮涓嬭浇
+            document.body.removeChild(downloadElement) // 涓嬭浇瀹屾垚绉婚櫎鍏冪礌
+            window.URL.revokeObjectURL(href)
+        },
         // 鍒犻櫎
         deleteHandle(row) {
         this.$confirm('鏄惁纭鍒犻櫎璇ユ暟鎹細' + row.code , '鎻愮ず', {
@@ -279,10 +441,16 @@
         },
         // 鏂板 / 淇敼
         addOrUpdateHandle(row) {
+            if(!this.permissions.quality_rawMaterial_edit && row.id!=null){
+                this.$message.error("璇ヨ鑹叉病鏈夋搷浣滄潈闄�")
+                return
+            }
             this.$router.push({
                 name: 'rawMaterialForm',
-                query: { 
-                    id: row == null ? null : row.id,
+                query: {
+                    id: row == null ? null : row.id
+                 },
+                 params: {
                     resultVal: row == null ? null : row.judgeState
                  }
             })
@@ -296,51 +464,57 @@
             }
         },
         formatJudgeState(row, column, cellValue){
-            if(cellValue != undefined || cellValue != null){
+            if(cellValue != undefined && cellValue != null && cellValue != ''){
                 if(cellValue == 0){
                     return "<span style='color:#E84738;'>涓嶅悎鏍�</span>"
                 }
                 return "<span style='color:#34BD66;'>鍚堟牸</span>"
             }
         },
+        checkStateFormat(row, column, cellValue){
+            this.checkStateList.forEach((obj) => {
+                if (obj.value === cellValue) {
+                    cellValue = obj.label
+                }
+            })
+            return cellValue
+        },
         formatDateTime(row, column, cellValue) {
             return cellValue ? fecha.format(new Date(cellValue), 'yyyy-MM-dd') : ''
         },
         getData() {
             this.$refs.rawMaterialTable.getDataList()
- 
         },
         // table鑷甫浜嬩欢
         handleSelectionChange(val) {
+            this.multipleSelection = val
             // 鏍规嵁鐘舵�侊紝绂佺敤琛ㄥご鎸夐挳
             // 绛涢�夊嚭閫変腑璁板綍鐨勭姸鎬�
-            var stateArr = val.map(function(value, index) {
-                return value.coState
-            })
+            // var stateArr = val.map(function(value, index) {
+            //     return value.coState
+            // })
             // 閫変腑鐘舵�佹暟缁勫厓绱犲幓閲�
-            var uniqueStateArr = []
-            for (var i = 0; i < stateArr.length; i++) {
-                if (uniqueStateArr.indexOf(stateArr[i]) == -1) {
-                uniqueStateArr.push(stateArr[i])
-                }
-            }
+            // var uniqueStateArr = []
+            // for (var i = 0; i < stateArr.length; i++) {
+            //     if (uniqueStateArr.indexOf(stateArr[i]) == -1) {
+            //     uniqueStateArr.push(stateArr[i])
+            //     }
+            // }
             // 寰幆鑷畾涔夋寜閽紝鍒ゆ柇姣忎釜鎸夐挳鐨刾ermitArr鏄惁瀹屽叏鍖呭惈閫変腑鐘舵�侊紝鑻ュ畬鍏ㄥ寘鍚紝鍒欐寜閽寒锛屽惁鍒欐寜閽伆
-            for (var i = 0; i < this.stateTagArr.length; i++) {
-                if (
-                uniqueStateArr.every((val) =>
-                    this.stateTagArr[i].permitArr.length <= 0
-                    ? true
-                    : this.stateTagArr[i].permitArr.includes(val)
-                )
-                ) {
-                this.stateTagArr[i].disabled = false
-                } else {
-                this.stateTagArr[i].disabled = true
-                }
-            }
-            this.multipleSelection = val
+            // for (var i = 0; i < this.stateTagArr.length; i++) {
+            //     if (
+            //     uniqueStateArr.every((val) =>
+            //         this.stateTagArr[i].permitArr.length <= 0
+            //         ? true
+            //         : this.stateTagArr[i].permitArr.includes(val)
+            //     )
+            //     ) {
+            //     this.stateTagArr[i].disabled = false
+            //     } else {
+            //     this.stateTagArr[i].disabled = true
+            //     }
+            // }
         },
     }
   }
   </script>
-  
\ No newline at end of file

--
Gitblit v1.9.3