From cb04b8ed8a616c5b9fae9d432c093985b56f044c Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期四, 16 十月 2025 16:55:04 +0800
Subject: [PATCH] 任务导入+翻页修复

---
 src/views/flowmgr/programexport.vue |  322 +++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 274 insertions(+), 48 deletions(-)

diff --git a/src/views/flowmgr/programexport.vue b/src/views/flowmgr/programexport.vue
index 489da39..50b4c6f 100644
--- a/src/views/flowmgr/programexport.vue
+++ b/src/views/flowmgr/programexport.vue
@@ -1,39 +1,29 @@
 <!--
  * @Date: 2025-06-20 20:48:17
- * @LastEditors: 鏉庡枂(寮�鍙戠粍) lzhe@yxqiche.com
- * @LastEditTime: 2025-08-11 16:34:15
+ * @LastEditors: gaoshp
+ * @LastEditTime: 2025-08-17 10:17:27
  * @FilePath: /mdmweb/src/views/flowmgr/programexport.vue
 -->
 <template>
     <basic-container>
         <el-tabs v-model="activeName" type="card" class="demo-tabs" @tab-click="tabsClick">
             <el-tab-pane label="寰呭姙" name="todo">
-                <avue-crud :option="option" :table-loading="loading" :data="data" v-model:page="page" v-model="form" ref="crud" @current-change="currentChange"
-                    @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad" @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange">
+                <avue-crud :option="option" :search="searchData" :table-loading="loading" :data="data" v-model:page="page" v-model="form" ref="crud" @current-change="currentChange"
+                    @size-change="sizeChange" @refresh-change="refreshChange" @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange" @on-load="onLoad">
                     <template #menu-left>
-                        <!-- <el-button type="primary" plain @click="exportWebSite">瀵煎嚭鍥炰紶娑夊瘑缃�</el-button> -->
-                        <!-- <el-button type="primary" plain @click="reassign">鎸傝浇杞﹀簥绋嬪簭搴�</el-button> -->
-                        <el-button type="primary" plain @click="exportExcel">瀵煎嚭</el-button>
+                        <el-button type="primary" :disabled="this.selection.length==0" plain @click="exportExcel">瀵煎嚭</el-button>
                     </template>
                     <template #menu="scope">
-                        <!-- <el-button type="primary" text size="default"
-                            @click.stop="handleAction(scope.row, scope.index)">澶勭悊鎰忚
-                        </el-button> -->
                     </template>
                 </avue-crud>
             </el-tab-pane>
             <el-tab-pane label="宸插姙" name="completed">
-                <avue-crud :option="option" :table-loading="loading" :data="data" v-model:page="page" v-model="form" ref="crud" @current-change="currentChange"
-                    @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad" @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange">
+                <avue-crud :option="optionCompleted" :search="searchData2" :table-loading="loading" :data="data2" v-model:page="page2" v-model="form" ref="crud1" @current-change="currentChange2"
+                    @size-change="sizeChange2" @refresh-change="refreshChange2" @search-change="searchChange2" @search-reset="searchReset2" @selection-change="selectionChange" @on-load="onLoad2">
                     <template #menu-left>
-                        <!-- <el-button type="primary" plain @click="exportWebSite">瀵煎嚭鍥炰紶娑夊瘑缃�</el-button> -->
-                        <!-- <el-button type="primary" plain @click="reassign">鎸傝浇杞﹀簥绋嬪簭搴�</el-button> -->
-                        <el-button type="primary" plain @click="exportExcel">瀵煎嚭</el-button>
+                        <el-button type="primary" :disabled="this.selection.length==0" plain @click="exportExcel">瀵煎嚭</el-button>
                     </template>
                     <template #menu="scope">
-                        <!-- <el-button type="primary" text size="default"
-                            @click.stop="handleAction(scope.row, scope.index)">澶勭悊鎰忚
-                        </el-button> -->
                     </template>
                 </avue-crud>
             </el-tab-pane>
@@ -46,22 +36,31 @@
     import NProgress from 'nprogress';
     import { exportBlobPost } from '@/api/common';
     import { getToken } from '@/utils/auth';
+    import {todoChangeNotify} from '@/api/flow/todolist';
     import { downloadFile } from '@/utils/util';
     export default {
     name: 'programexport',
     data() {
         return {
             activeName: "todo",
-            // Define your data properties here
             page: {
                 pageSize: 10,
                 currentPage: 1,
                 total: 0,
             },
+            page2: {
+                pageSize: 10,
+                currentPage: 1,
+                total: 0,
+            },
             form: {},
+            searchData:{},
+            searchData2:{},
             query: {},
+            query2: {},
             loading: true,
             data: [],
+            data2: [],
             selection: [],
             option: {
                 addBtn: false,
@@ -70,15 +69,13 @@
                 viewBtn: true,
                 columnBtn: false,
                 tip: false,
-                // simplePage: true,
                 searchShow: true,
                 searchMenuSpan: 6,
+                searchEnter:true,
                 dialogWidth: '60%',
-                // tree: true,
                 border: true,
                 index: true,
                 selection: true,
-                // viewBtn: true,
                 menuWidth: 200,
                 menu: false,
                 dialogClickModal: false,
@@ -86,23 +83,49 @@
 					{
                         label: '娴佺▼鏍囬',
                         prop: 'title',
+                        with: 250
                     },
                     {
-                        label: '鍥惧彿',
+                        label: '闆剁粍浠跺彿',
                         prop: 'drawingNo',
                     },
                     {
-                        label: '鍥惧彿鐗堟',
-                        prop: 'drawingNoEdition',
+                        label: '宸ュ簭鍙�',
+                        prop: 'processNo',
+                        with: 75
+                    },
+                    
+                    {
+                        label: '宸ュ簭鐗堟',
+                        prop: 'processEdition',
+                        with: 85
                     },
                     {
                         label: '宸ュ簭鍚嶇О',
                         prop: 'processName',
+                        with: 85
                     },
                     {
-                        label: '绋嬪簭鍚嶇О',
+                        label: '鍥剧焊鐗堟',
+                        prop: 'drawingNoEdition',
+                        with: 85
+                    },
+                    
+                    {
+                        label: '绋嬪簭鍖呭悕',
                         prop: 'name',
                         search: true,
+                        searchSpan:6,
+                        with: 100
+                    },
+                     {
+                        label: '鏌ヨ鑼冨洿',
+                        prop: 'queryType',
+                        type: 'select',
+                        search: true,
+                        clearable:false,
+                        searchSpan:4,
+                        with: 100,
                     },
                     {
                         label: '閫氳繃鏃堕棿',
@@ -120,64 +143,188 @@
                         searchSpan: 8,
                     },
                 ],
-            }
+            },
+            optionCompleted: {
+                addBtn: false,
+                editBtn: false,
+                delBtn: false,
+                viewBtn: true,
+                columnBtn: false,
+                tip: false,
+                searchShow: true,
+                searchEnter:true,
+                searchMenuSpan: 6,
+                dialogWidth: '60%',
+                border: true,
+                index: true,
+                selection: true,
+                menuWidth: 200,
+                menu: false,
+                dialogClickModal: false,
+                column: [
+					{
+                        label: '娴佺▼鏍囬',
+                        prop: 'title',
+                        with: 200
+                    },
+                    {
+                        label: '闆剁粍浠跺彿',
+                        prop: 'drawingNo',
+                    },
+                    {
+                        label: '宸ュ簭鍙�',
+                        prop: 'processNo',
+                        width: 70
+                    },
+                    {
+                        label: '宸ュ簭鐗堟',
+                        prop: 'processEdition',
+                        width: 85
+                    },
+                    {
+                        label: '宸ュ簭鍚嶇О',
+                        prop: 'processName',
+                        width: 85
+                    },
+                    {
+                        label: '鍥剧焊鐗堟',
+                        prop: 'drawingNoEdition',
+                        width: 85
+                    },
+                    
+                    {
+                        label: '绋嬪簭鍖呭悕',
+                        prop: 'name',
+                        search: true,
+                    },
+                    {
+                        label: '鏌ヨ鑼冨洿',
+                        prop: 'queryType',
+                        type: 'select',
+                        search: true,
+                        clearable:false,
+                        searchSpan:4,
+                        with: 100,
+                    },
+                    {
+                        label: '閫氳繃鏃堕棿',
+                        prop: 'createTime',
+                        sortable: true,
+                    },
+                    {
+                        label: '瀵煎嚭浜�',
+                        prop: 'exporter',
+                        width: 70
+                    },
+                    {
+                        label: '宸插姙鏃堕棿',
+                        prop: 'updateTime',
+                        sortable: true,
+                    },
+                    
+                    {
+                        label: '閫氳繃鏃堕棿',
+                        prop: 'passTime',
+                        search: true,
+                        hide: true,
+                        type: 'datetime',
+                        format: 'YYYY-MM-DD HH:mm:ss',
+                        valueFormat: 'YYYY-MM-DD HH:mm:ss',
+                        searchRange: true,
+                        searchSpan: 8,
+                        sortable: true,
+                    },
+                ],
+            },
         };
     },
     methods: {
+        
         tabsClick(tab,event) {
-            this.onLoad(this.page, this.query);
+            if(tab.paneName == 'todo'){
+                this.onLoad(this.page, this.searchData);
+            }else{
+               // console.log(this.searchData2)
+                this.onLoad2(this.page2, this.searchData2);
+            }
         },
         selectionChange(list) {
             this.selection = list;
         },
-        // Define your methods here
+
         currentChange(currentPage) {
             this.page.currentPage = currentPage;
-            // this.onLoad();
+        },
+        currentChange2(currentPage) {
+            this.page2.currentPage = currentPage;
         },
         sizeChange(pageSize) {
             this.page.pageSize = pageSize;
         },
+        sizeChange2(pageSize) {
+            this.page2.pageSize = pageSize;
+        },
         refreshChange() {
             this.onLoad(this.page, this.query);
         },
+        refreshChange2() {
+            this.onLoad2(this.page2, this.query2);
+        },
         searchChange(params, done) {
             let data = {}
+            
             this.query = params;
             this.page.currentPage = 1;
-            console.log('searchChange', params);
+            //console.log('searchChange', params);
             params.passTimeBegin = params?.passTime?.[0] || '';
             params.passTimeEnd = params?.passTime?.[1] || '';
-            console.log(params);
+            //console.log(params);
             data = {
                 createTimeBegin: params.passTimeBegin,
                 createTimeEnd: params.passTimeEnd,
-                name: params.name || ''
+                name: params.name || '',
+                queryType:this.query.queryType
             }
             this.query = data
             this.onLoad(this.page, data);
             done();
         },
+        searchChange2(params, done) {
+            let data = {}
+            
+            this.query2 = params;
+            this.page2.currentPage = 1;
+            //console.log('searchChange', params);
+            params.passTimeBegin = params?.passTime?.[0] || '';
+            params.passTimeEnd = params?.passTime?.[1] || '';
+            //console.log(params);
+            data = {
+                createTimeBegin: params.passTimeBegin,
+                createTimeEnd: params.passTimeEnd,
+                name: params.name || '',
+                queryType:this.query2.queryType
+            }
+            this.query2 = data
+            this.onLoad2(this.page2, data);
+            done();
+        },
         searchReset() {
             this.query = {};
+            this.query.queryType = this.searchData.queryType;
             this.onLoad(this.page);
+        },
+        searchReset2() {
+            this.query2 = {};
+            this.query2.queryType = this.searchData2.queryType;
+            this.onLoad2(this.page2);
         },
         /** * 椤甸潰鍔犺浇鏃惰幏鍙栨暟鎹�
          */
         onLoad(page, params = {}) {
             const query = {
                 ...this.query,
-                // category: params.category ? flowCategory(params.category) : null,
-                mode: this.mode,
             };
-            var status = this.activeName == 'todo'?null:2;
-            params.status = status;
-            try {
-                delete query.confirmTime; // 鍒犻櫎涓嶅繀瑕佺殑鏌ヨ鏉′欢
-            } catch (error) {
-                console.error('鏃ユ湡鏍煎紡鍖栭敊璇�', error);
-            }
-
+          
             this.loading = true;
             getList(page.currentPage, page.pageSize, Object.assign(query, params)).then(res => {
                 const data = res.data.data;
@@ -192,13 +339,57 @@
                 this.loading = false;
             });
         },
+        onLoad2(page, params = {}) {
+            const query = {
+                ...this.query2,
+            };
+
+            params.status = 2;
+            //params.queryType = this.searchData2.queryType;
+            this.loading = true;
+            getList(page.currentPage, page.pageSize, Object.assign(query, params)).then(res => {
+                const data = res.data.data;
+                this.page2.total = data.total;
+                this.data2 = data.records;
+                this.loading = false;
+            }, () => {
+                this.data2 = [];
+                this.loading = false;
+            }).catch(err => {
+                this.data2 = [];
+                this.loading = false;
+            });
+        },
+        findDuplicates(arr) {
+            const seen = new Set();
+            const duplicates = new Set();
+            
+            arr.forEach(item => {
+                if (seen.has(item)) {
+                duplicates.add(item);
+                } else {
+                seen.add(item);
+                }
+            });
+            
+            return Array.from(duplicates);
+        },
         exportExcel() {
             this.$confirm('鏄惁瀵煎嚭?', '鎻愮ず', {
                 confirmButtonText: '纭畾',
                 cancelButtonText: '鍙栨秷',
                 type: 'warning',
             }).then(() => {
-                console.log(this.selection)
+                //console.log(this.selection)
+                let selectArray = [];
+                for(var i=0;i<this.selection.length;i++){
+                    selectArray.push(this.selection[i].name+"-"+this.selection[i].processEdition)
+                }
+                let dupData = this.findDuplicates(selectArray);
+                if(dupData.length > 0){
+                    this.$message.error('涓嶈兘鍦ㄤ竴娆″鍑轰腑閫夋嫨涓�涓▼搴忕殑涓嶅悓鐗堟湰:['+dupData.join()+"]");
+                    return;
+                }
 				if(this.selection == null || this.selection.length == 0){
 					this.$message.error('璇疯嚦灏戦�夋嫨涓�鏉″鍑�');
 					return;
@@ -209,17 +400,52 @@
                     {},
                     {ids: this.selection.map(item => item.id)},
                 ).then(res => {
-                    let name = res.headers['content-disposition'].split('filename=')[1]
-                    console.log(res.headers['content-disposition'].split('filename=')[1]);
-                    downloadFile(res.data, `${name}`);
+				    console.log('status='+res.status)
+					if(res.status == 200){
+						let name = res.headers['content-disposition'].split('filename=')[1]
+						name = decodeURI(name)
+						//console.log(res.headers['content-disposition'].split('filename=')[1]);
+						downloadFile(res.data, `${name}`);
+						
+					}else{
+						this.$message.error('瀵煎嚭閿欒');
+						console.log(res);
+					}
+                    todoChangeNotify();
                     NProgress.done();
                     this.onLoad(this.page, this.query);
                 });
             });
         },
     },
+    computed: {
+       ...mapGetters(['permission']),
+       
+    },
     mounted() {
-
+        let queryTypeDicData = [
+                            {
+                                label: '鍚岀粍缂栧埗',
+                                value:'group',
+                            },
+                            {
+                                label: '鏈汉缂栧埗',
+                                value:'self',
+                            }
+                        ];
+       
+        //console.log('this.permission.program_allexpor',this.permission.program_allexport)
+        if(this.permission.program_allexport==true){
+            queryTypeDicData.push({label:'鍏ㄩ儴鏁版嵁',value:'all'});
+            this.searchData.queryType = 'all'
+            this.searchData2.queryType = 'all'
+        }else{
+            this.searchData.queryType = 'self';
+            this.searchData2.queryType = 'self';
+        }
+        this.option.column[7].dicData = queryTypeDicData;
+        this.optionCompleted.column[7].dicData = queryTypeDicData;
+        this.onLoad(this.page, this.searchData);
     }
 }
 </script>

--
Gitblit v1.9.3