yangbifan преди 2 години
родител
ревизия
d81f9d928e
променени са 80 файла, в които са добавени 84708 реда и са изтрити 3262 реда
  1. 4 0
      .gitignore
  2. 4 0
      config/excel.env.js
  3. 15 2
      config/index.js
  4. 3 3
      package.json
  5. 2 1
      public/index.html
  6. 22904 0
      public/luckSheetExcel.js
  7. 4151 0
      public/luckysheet.umd.js
  8. 42 0
      public/static/js/luckysheet/demoData/demoFeature.js
  9. 1578 0
      public/static/js/luckysheet/demoData/sheetCell.js
  10. 4918 0
      public/static/js/luckysheet/demoData/sheetChart.js
  11. 67 0
      public/static/js/luckysheet/demoData/sheetComment.js
  12. 6541 0
      public/static/js/luckysheet/demoData/sheetConditionFormat.js
  13. 579 0
      public/static/js/luckysheet/demoData/sheetDataVerification.js
  14. 6600 0
      public/static/js/luckysheet/demoData/sheetFormula.js
  15. 159 0
      public/static/js/luckysheet/demoData/sheetPicture.js
  16. 189 0
      public/static/js/luckysheet/demoData/sheetPivotTable.js
  17. 741 0
      public/static/js/luckysheet/demoData/sheetPivotTableData.js
  18. 7066 0
      public/static/js/luckysheet/demoData/sheetSparkline.js
  19. 1068 0
      public/static/js/luckysheet/demoData/sheetTable.js
  20. 1944 0
      public/static/js/luckysheet/index.html
  21. 0 1
      public/static/js/url.js
  22. 582 508
      public/static/views/onlineShareExcel.html
  23. 591 0
      public/static/views/performance.html
  24. 18 6
      src/App.vue
  25. 26 26
      src/assets/js/common.js
  26. 3 0
      src/assets/js/url.js
  27. 47 0
      src/assets/js/util.js
  28. 1 2
      src/components/el-form.vue
  29. 166 0
      src/components/el-formid.vue
  30. 165 0
      src/components/el-forms.vue
  31. 47 42
      src/components/search.vue
  32. 301 224
      src/components/upload.vue
  33. 181 175
      src/components/uploadDown.vue
  34. 240 0
      src/components/uploadMultiConfig.vue
  35. 0 3
      src/components/workflow.vue
  36. 80 74
      src/components/workflowBase.vue
  37. 698 0
      src/components/workflowBaseshoubu.vue
  38. 795 0
      src/components/workflowBasexcwls.vue
  39. 47 52
      src/components/workflowEntrance.vue
  40. 2 2
      src/components/workflowUpload.vue
  41. 29 3
      src/http/api.js
  42. 2 0
      src/main.js
  43. 161 357
      src/pages/main/advertising/businessHall.vue
  44. 138 157
      src/pages/main/advertising/contractCap.vue
  45. 189 171
      src/pages/main/advertising/index.vue
  46. 447 0
      src/pages/main/advertising/materialAppMessage.vue
  47. 415 0
      src/pages/main/advertising/materialAppNum.vue
  48. 1707 172
      src/pages/main/advertising/materialApplication.vue
  49. 576 440
      src/pages/main/advertising/materialApplicationadd.vue
  50. 2238 0
      src/pages/main/advertising/materialApplicationds.vue
  51. 28 24
      src/pages/main/advertising/materialApplistatic.vue
  52. 18 8
      src/pages/main/advertising/materiel.vue
  53. 15 0
      src/pages/main/advertising/supplier.vue
  54. 1952 0
      src/pages/main/closeFill/advanceDeposit.vue
  55. 535 0
      src/pages/main/documentCollection/documentCollectionApproval.vue
  56. 1183 0
      src/pages/main/documentCollection/documentCollectionApprovalExcel.vue
  57. 472 0
      src/pages/main/documentCollection/documentCollectionApprovalIssuedCollect.vue
  58. 689 0
      src/pages/main/documentCollection/documentCollectionApprovalIssuedMoud.vue
  59. 131 0
      src/pages/main/documentCollection/home.vue
  60. 296 0
      src/pages/main/documentCollection/newTree.vue
  61. 95 0
      src/pages/main/documentCollection/search.vue
  62. 4 67
      src/pages/main/leader/demand/demandHome.vue
  63. 232 0
      src/pages/main/luckySheet/index.vue
  64. 125 52
      src/pages/main/onlineExcel/index.vue
  65. 614 0
      src/pages/main/postage/formTable.vue
  66. 924 0
      src/pages/main/postage/index.vue
  67. 1342 0
      src/pages/main/productionDataExport/cityHome.vue
  68. 113 0
      src/pages/main/productionDataExport/form.vue
  69. 604 0
      src/pages/main/productionDataExport/formTable.vue
  70. 1347 0
      src/pages/main/productionDataExport/provinceHome.vue
  71. 1557 0
      src/pages/main/provincialWorkOrder/provincialWorkOrder.vue
  72. 1325 0
      src/pages/main/provincialWorkOrder/provincialWorkOrderArea.vue
  73. 742 641
      src/pages/main/terminal/advertincrease.vue
  74. 20 12
      src/pages/main/terminals/advchecks.vue
  75. 6 3
      src/pages/main/terminals/advertincreases.vue
  76. 120 31
      src/pages/main/terminals/components/adverts.vue
  77. 1630 0
      src/pages/main/workingCon/configUration.vue
  78. 107 1
      src/router/index.js
  79. 14 1
      vue.config.js
  80. 1 1
      yarn.lock

+ 4 - 0
.gitignore

@@ -1,7 +1,11 @@
 .DS_Store
 node_modules
 /dist
+<<<<<<< HEAD
 /dist-test
+=======
+dist.zip
+>>>>>>> b1d2e0323329f3f9e21c34540cf9e3eb31cf89a8
 
 # local env files
 .env.local

+ 4 - 0
config/excel.env.js

@@ -0,0 +1,4 @@
+const excelUrl = {
+  dev: 'http://192.168.2.124:7777'
+}
+export default excelUrl;

+ 15 - 2
config/index.js

@@ -5,6 +5,19 @@
 const path = require('path')
 // import common from '../src/assets/js/common.js';
 module.exports = {
+  rules: [
+    {
+      test: /\.(woff2?eot|ttf|otf)(\?.*)?$/,
+      loader: "url-loader",
+      options: {
+        limit: 10003,
+        name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
+      }
+
+
+    }
+
+  ],
   dev: {
 
     // Paths
@@ -34,7 +47,7 @@ module.exports = {
     notifyOnErrors: true,
     poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
 
-    
+
     /**
      * Source Maps
      */
@@ -77,7 +90,7 @@ module.exports = {
     // Before setting to `true`, make sure to:
     // npm install --save-dev compression-webpack-plugin
     productionGzip: false,
-    productionGzipExtensions: ['js', 'css'],
+    productionGzipExtensions: ['js', 'css', 'eot', 'svg', 'ttf'],
 
     // Run the build command with an extra argument to
     // View the bundle analyzer report after build finishes:

+ 3 - 3
package.json

@@ -47,9 +47,9 @@
     "xlsx": "^0.16.9"
   },
   "devDependencies": {
-    "@vue/cli-plugin-babel": "^4.1.2",
-    "@vue/cli-plugin-eslint": "^4.1.2",
-    "@vue/cli-service": "^4.1.2",
+    "@vue/cli-plugin-babel": "^4.5.0",
+    "@vue/cli-plugin-eslint": "~4.5.0",
+    "@vue/cli-service": "~4.5.0",
     "babel-eslint": "^10.0.3",
     "babel-plugin-component": "^1.1.1",
     "compression-webpack-plugin": "^3.0.1",

+ 2 - 1
public/index.html

@@ -35,10 +35,11 @@
     window.staticHost = 'http://10.149.85.91:8000/spfm'; // 测试
     // window.staticHost = 'http://192.168.0.103:9600/';
     // window.staticHost = 'http://43.138.50.94:9600/';
+    // window.staticHost = 'http://192.168.2.43:9600/';
 
     // document.title = "hello";
   </script> -->
 
 </body>
 
-</html>
+</html>

Файловите разлики са ограничени, защото са твърде много
+ 22904 - 0
public/luckSheetExcel.js


Файловите разлики са ограничени, защото са твърде много
+ 4151 - 0
public/luckysheet.umd.js


+ 42 - 0
public/static/js/luckysheet/demoData/demoFeature.js

@@ -0,0 +1,42 @@
+
+// Features specially written for demo
+
+(function() {
+
+    // language
+    function language(params) {
+        
+        var lang = navigator.language||navigator.userLanguage;//常规浏览器语言和IE浏览器
+        lang = lang.substr(0, 2);//截取lang前2位字符
+
+        return lang;
+
+    }
+    // Tencent Forum Link Button
+    function supportButton() {
+        const text = language() === 'zh' ? '反馈' : 'Forum';
+        const link = language() === 'zh' ? 'https://support.qq.com/product/288322' : 'https://groups.google.com/g/luckysheet';
+
+        document.querySelector("body").insertAdjacentHTML('beforeend', '<a id="container" href="'+ link +'" target="_blank" style="z-index:2;width:50px;height:50px;line-height:50px;position:fixed;right:40px;bottom:86px;border-radius:50px;cursor:pointer;background:rgb(71,133,249);color:#fff;text-align:center;text-decoration:none;">'+ text +'</a>');
+    }
+    
+    supportButton()
+
+    /**
+     * Get url parameters
+     */
+    function getRequest() {
+        var vars = {};
+        var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,    
+        function(m,key,value) {
+          vars[key] = value;
+        });
+        return vars;
+    }
+
+    window.luckysheetDemoUtil = {
+        language:language,
+        getRequest:getRequest
+    }
+    
+})()

Файловите разлики са ограничени, защото са твърде много
+ 1578 - 0
public/static/js/luckysheet/demoData/sheetCell.js


Файловите разлики са ограничени, защото са твърде много
+ 4918 - 0
public/static/js/luckysheet/demoData/sheetChart.js


+ 67 - 0
public/static/js/luckysheet/demoData/sheetComment.js

@@ -0,0 +1,67 @@
+window.sheetComment = {
+	"name": "Comment",
+	"color": "",
+	"config": {
+		"columnlen": {
+			"2": 102
+		}
+	},
+	"index": "5",
+	"chart": [],
+	"status": 0,
+	"order": "5",
+	"column": 18,
+	"row": 36,
+	"celldata": [{
+		"r": 2,
+		"c": 2,
+		"v": {
+			"m": "HoverShown",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "HoverShown",
+			"bl": 1,
+			"ps": {
+				"left": null,
+				"top": null,
+				"width": null,
+				"height": null,
+				"value": "Hello world!",
+				"isshow": false
+			}
+		}
+	}, {
+		"r": 7,
+		"c": 2,
+		"v": {
+			"m": "Size",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Size",
+			"bl": 1,
+			"ps": {
+				"left": null,
+				"top": null,
+				"width": null,
+				"height": null,
+				"value": "Hello,world!",
+				"isshow": true
+			}
+		}
+	}],
+	"ch_width": 4748,
+	"rh_height": 1790,
+	"luckysheet_select_save": [{
+		"row": [0, 0],
+		"column": [0, 0]
+	}],
+	"luckysheet_selection_range": [],
+	"scrollLeft": 0,
+	"scrollTop": 0
+}
+
+// export default sheetComment;

Файловите разлики са ограничени, защото са твърде много
+ 6541 - 0
public/static/js/luckysheet/demoData/sheetConditionFormat.js


Файловите разлики са ограничени, защото са твърде много
+ 579 - 0
public/static/js/luckysheet/demoData/sheetDataVerification.js


Файловите разлики са ограничени, защото са твърде много
+ 6600 - 0
public/static/js/luckysheet/demoData/sheetFormula.js


Файловите разлики са ограничени, защото са твърде много
+ 159 - 0
public/static/js/luckysheet/demoData/sheetPicture.js


+ 189 - 0
public/static/js/luckysheet/demoData/sheetPivotTable.js

@@ -0,0 +1,189 @@
+window.sheetPivotTable = {
+	"name": "PivotTable",
+	"color": "",
+	"config": {},
+	"index": "7",
+	"chart": [],
+	"status": 0,
+	"order": "7",
+	"column": 18,
+	"row": 36,
+	"celldata": [{
+		"r": 0,
+		"c": 0,
+		"v": "count:score"
+	}, {
+		"r": 0,
+		"c": 1,
+		"v": "science"
+	}, {
+		"r": 0,
+		"c": 2,
+		"v": "mathematics"
+	}, {
+		"r": 0,
+		"c": 3,
+		"v": "foreign language"
+	}, {
+		"r": 0,
+		"c": 4,
+		"v": "English"
+	}, {
+		"r": 0,
+		"c": 5,
+		"v": "total"
+	}, {
+		"r": 1,
+		"c": 0,
+		"v": "Alex"
+	}, {
+		"r": 1,
+		"c": 1,
+		"v": 1
+	}, {
+		"r": 1,
+		"c": 2,
+		"v": 1
+	}, {
+		"r": 1,
+		"c": 3,
+		"v": 1
+	}, {
+		"r": 1,
+		"c": 4,
+		"v": 1
+	}, {
+		"r": 1,
+		"c": 5,
+		"v": 4
+	}, {
+		"r": 2,
+		"c": 0,
+		"v": "Joy"
+	}, {
+		"r": 2,
+		"c": 1,
+		"v": 1
+	}, {
+		"r": 2,
+		"c": 2,
+		"v": 1
+	}, {
+		"r": 2,
+		"c": 3,
+		"v": 1
+	}, {
+		"r": 2,
+		"c": 4,
+		"v": 1
+	}, {
+		"r": 2,
+		"c": 5,
+		"v": 4
+	}, {
+		"r": 3,
+		"c": 0,
+		"v": "Tim"
+	}, {
+		"r": 3,
+		"c": 1,
+		"v": 1
+	}, {
+		"r": 3,
+		"c": 2,
+		"v": 1
+	}, {
+		"r": 3,
+		"c": 3,
+		"v": 1
+	}, {
+		"r": 3,
+		"c": 4,
+		"v": 1
+	}, {
+		"r": 3,
+		"c": 5,
+		"v": 4
+	}, {
+		"r": 4,
+		"c": 0,
+		"v": "total"
+	}, {
+		"r": 4,
+		"c": 1,
+		"v": 3
+	}, {
+		"r": 4,
+		"c": 2,
+		"v": 3
+	}, {
+		"r": 4,
+		"c": 3,
+		"v": 3
+	}, {
+		"r": 4,
+		"c": 4,
+		"v": 3
+	}, {
+		"r": 4,
+		"c": 5,
+		"v": 12
+	}],
+	"ch_width": 4748,
+	"rh_height": 1790,
+	"luckysheet_select_save": [{
+		"row": [0, 0],
+		"column": [0, 0]
+	}],
+	"luckysheet_selection_range": [],
+	"scrollLeft": 0,
+	"scrollTop": 0,
+	"isPivotTable": true,
+	"pivotTable": {
+		"pivot_select_save": {
+			"left": 0,
+			"width": 73,
+			"top": 0,
+			"height": 19,
+			"left_move": 0,
+			"width_move": 369,
+			"top_move": 0,
+			"height_move": 259,
+			"row": [0, 12],
+			"column": [0, 4],
+			"row_focus": 0,
+			"column_focus": 0
+		},
+		"pivotDataSheetIndex": 6, //The sheet index where the source data is located
+		"column": [{
+			"index": 3,
+			"name": "subject",
+			"fullname": "subject"
+		}],
+		"row": [{
+			"index": 1,
+			"name": "student",
+			"fullname": "student"
+		}],
+		"filter": [],
+		"values": [{
+			"index": 4,
+			"name": "score",
+			"fullname": "count:score",
+			"sumtype": "COUNTA",
+			"nameindex": 0
+		}],
+		"showType": "column",
+		"pivotDatas": [
+			["count:score", "science", "mathematics", "foreign language", "English", "total"],
+			["Alex", 1, 1, 1, 1, 4],
+			["Joy", 1, 1, 1, 1, 4],
+			["Tim", 1, 1, 1, 1, 4],
+			["total", 3, 3, 3, 3, 12]
+		],
+		"drawPivotTable": false,
+		"pivotTableBoundary": [5, 6]
+	}
+}
+
+// export default sheetPivotTable;

+ 741 - 0
public/static/js/luckysheet/demoData/sheetPivotTableData.js

@@ -0,0 +1,741 @@
+window.sheetPivotTableData = {
+	"name": "PivotTableData",
+	"color": "",
+	"config": {
+		"merge": {}
+	},
+	"index": "6",
+	"chart": [],
+	"status": 0,
+	"order": "6",
+	"hide": 0,
+	"column": 18,
+	"row": 36,
+	"celldata": [{
+		"r": 0,
+		"c": 0,
+		"v": {
+			"m": "Mock test",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Mock test"
+		}
+	}, {
+		"r": 0,
+		"c": 1,
+		"v": {
+			"m": "student",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "student"
+		}
+	}, {
+		"r": 0,
+		"c": 2,
+		"v": {
+			"m": "class",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "class"
+		}
+	}, {
+		"r": 0,
+		"c": 3,
+		"v": {
+			"m": "subject",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "subject"
+		}
+	}, {
+		"r": 0,
+		"c": 4,
+		"v": {
+			"m": "score",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "score"
+		}
+	}, {
+		"r": 1,
+		"c": 0,
+		"v": {
+			"m": "first round",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "first round"
+		}
+	}, {
+		"r": 1,
+		"c": 1,
+		"v": {
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Joy",
+			"m": "Joy"
+		}
+	}, {
+		"r": 1,
+		"c": 2,
+		"v": {
+			"m": "Class one",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Class one"
+		}
+	}, {
+		"r": 1,
+		"c": 3,
+		"v": {
+			"m": "English",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "English"
+		}
+	}, {
+		"r": 1,
+		"c": 4,
+		"v": {
+			"v": 96,
+			"ct": {
+				"fa": "General",
+				"t": "n"
+			},
+			"m": "96"
+		}
+	}, {
+		"r": 2,
+		"c": 0,
+		"v": {
+			"m": "first round",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "first round"
+		}
+	}, {
+		"r": 2,
+		"c": 1,
+		"v": {
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Joy",
+			"m": "Joy"
+		}
+	}, {
+		"r": 2,
+		"c": 2,
+		"v": {
+			"m": "Class one",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Class one"
+		}
+	}, {
+		"r": 2,
+		"c": 3,
+		"v": {
+			"m": "mathematics",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "mathematics"
+		}
+	}, {
+		"r": 2,
+		"c": 4,
+		"v": {
+			"v": 110,
+			"ct": {
+				"fa": "General",
+				"t": "n"
+			},
+			"m": "110"
+		}
+	}, {
+		"r": 3,
+		"c": 0,
+		"v": {
+			"m": "first round",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "first round"
+		}
+	}, {
+		"r": 3,
+		"c": 1,
+		"v": {
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Joy",
+			"m": "Joy"
+		}
+	}, {
+		"r": 3,
+		"c": 2,
+		"v": {
+			"m": "Class one",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Class one"
+		}
+	}, {
+		"r": 3,
+		"c": 3,
+		"v": {
+			"m": "foreign language",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "foreign language"
+		}
+	}, {
+		"r": 3,
+		"c": 4,
+		"v": {
+			"v": 87,
+			"ct": {
+				"fa": "General",
+				"t": "n"
+			},
+			"m": "87"
+		}
+	}, {
+		"r": 4,
+		"c": 0,
+		"v": {
+			"m": "first round",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "first round"
+		}
+	}, {
+		"r": 4,
+		"c": 1,
+		"v": {
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Joy",
+			"m": "Joy"
+		}
+	}, {
+		"r": 4,
+		"c": 2,
+		"v": {
+			"m": "Class one",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Class one"
+		}
+	}, {
+		"r": 4,
+		"c": 3,
+		"v": {
+			"m": "science",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "science"
+		}
+	}, {
+		"r": 4,
+		"c": 4,
+		"v": {
+			"v": 266,
+			"ct": {
+				"fa": "General",
+				"t": "n"
+			},
+			"m": "266"
+		}
+	}, {
+		"r": 5,
+		"c": 0,
+		"v": {
+			"m": "first round",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "first round"
+		}
+	}, {
+		"r": 5,
+		"c": 1,
+		"v": {
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Tim",
+			"m": "Tim"
+		}
+	}, {
+		"r": 5,
+		"c": 2,
+		"v": {
+			"m": "Class one",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Class one"
+		}
+	}, {
+		"r": 5,
+		"c": 3,
+		"v": {
+			"m": "English",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "English"
+		}
+	}, {
+		"r": 5,
+		"c": 4,
+		"v": {
+			"v": 92,
+			"ct": {
+				"fa": "General",
+				"t": "n"
+			},
+			"m": "92"
+		}
+	}, {
+		"r": 6,
+		"c": 0,
+		"v": {
+			"m": "first round",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "first round"
+		}
+	}, {
+		"r": 6,
+		"c": 1,
+		"v": {
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Tim",
+			"m": "Tim"
+		}
+	}, {
+		"r": 6,
+		"c": 2,
+		"v": {
+			"m": "Class one",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Class one"
+		}
+	}, {
+		"r": 6,
+		"c": 3,
+		"v": {
+			"m": "mathematics",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "mathematics"
+		}
+	}, {
+		"r": 6,
+		"c": 4,
+		"v": {
+			"v": 100,
+			"ct": {
+				"fa": "General",
+				"t": "n"
+			},
+			"m": "100"
+		}
+	}, {
+		"r": 7,
+		"c": 0,
+		"v": {
+			"m": "first round",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "first round"
+		}
+	}, {
+		"r": 7,
+		"c": 1,
+		"v": {
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Tim",
+			"m": "Tim"
+		}
+	}, {
+		"r": 7,
+		"c": 2,
+		"v": {
+			"m": "Class one",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Class one"
+		}
+	}, {
+		"r": 7,
+		"c": 3,
+		"v": {
+			"m": "foreign language",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "foreign language"
+		}
+	}, {
+		"r": 7,
+		"c": 4,
+		"v": {
+			"v": 90,
+			"ct": {
+				"fa": "General",
+				"t": "n"
+			},
+			"m": "90"
+		}
+	}, {
+		"r": 8,
+		"c": 0,
+		"v": {
+			"m": "first round",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "first round"
+		}
+	}, {
+		"r": 8,
+		"c": 1,
+		"v": {
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Tim",
+			"m": "Tim"
+		}
+	}, {
+		"r": 8,
+		"c": 2,
+		"v": {
+			"m": "Class one",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Class one"
+		}
+	}, {
+		"r": 8,
+		"c": 3,
+		"v": {
+			"m": "science",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "science"
+		}
+	}, {
+		"r": 8,
+		"c": 4,
+		"v": {
+			"v": 255,
+			"ct": {
+				"fa": "General",
+				"t": "n"
+			},
+			"m": "255"
+		}
+	}, {
+		"r": 9,
+		"c": 0,
+		"v": {
+			"m": "first round",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "first round"
+		}
+	}, {
+		"r": 9,
+		"c": 1,
+		"v": {
+			"m": "Alex",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Alex"
+		}
+	}, {
+		"r": 9,
+		"c": 2,
+		"v": {
+			"m": "Class one",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Class one"
+		}
+	}, {
+		"r": 9,
+		"c": 3,
+		"v": {
+			"m": "English",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "English"
+		}
+	}, {
+		"r": 9,
+		"c": 4,
+		"v": {
+			"v": 108,
+			"ct": {
+				"fa": "General",
+				"t": "n"
+			},
+			"m": "108"
+		}
+	}, {
+		"r": 10,
+		"c": 0,
+		"v": {
+			"m": "first round",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "first round"
+		}
+	}, {
+		"r": 10,
+		"c": 1,
+		"v": {
+			"m": "Alex",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Alex"
+		}
+	}, {
+		"r": 10,
+		"c": 2,
+		"v": {
+			"m": "Class one",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Class one"
+		}
+	}, {
+		"r": 10,
+		"c": 3,
+		"v": {
+			"m": "mathematics",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "mathematics"
+		}
+	}, {
+		"r": 10,
+		"c": 4,
+		"v": {
+			"v": 117,
+			"ct": {
+				"fa": "General",
+				"t": "n"
+			},
+			"m": "117"
+		}
+	}, {
+		"r": 11,
+		"c": 0,
+		"v": {
+			"m": "first round",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "first round"
+		}
+	}, {
+		"r": 11,
+		"c": 1,
+		"v": {
+			"m": "Alex",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Alex"
+		}
+	}, {
+		"r": 11,
+		"c": 2,
+		"v": {
+			"m": "Class one",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Class one"
+		}
+	}, {
+		"r": 11,
+		"c": 3,
+		"v": {
+			"m": "foreign language",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "foreign language"
+		}
+	}, {
+		"r": 11,
+		"c": 4,
+		"v": {
+			"v": 88,
+			"ct": {
+				"fa": "General",
+				"t": "n"
+			},
+			"m": "88"
+		}
+	}, {
+		"r": 12,
+		"c": 0,
+		"v": {
+			"m": "first round",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "first round"
+		}
+	}, {
+		"r": 12,
+		"c": 1,
+		"v": {
+			"m": "Alex",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Alex"
+		}
+	}, {
+		"r": 12,
+		"c": 2,
+		"v": {
+			"m": "Class one",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "Class one"
+		}
+	}, {
+		"r": 12,
+		"c": 3,
+		"v": {
+			"m": "science",
+			"ct": {
+				"fa": "General",
+				"t": "g"
+			},
+			"v": "science"
+		}
+	}, {
+		"r": 12,
+		"c": 4,
+		"v": {
+			"v": 278,
+			"ct": {
+				"fa": "General",
+				"t": "n"
+			},
+			"m": "278"
+		}
+	}],
+	"ch_width": 4748,
+	"rh_height": 1790,
+	"luckysheet_select_save": [{
+		"row": [0, 0],
+		"column": [0, 0]
+	}],
+	"luckysheet_selection_range": [],
+	"scrollLeft": 0,
+	"scrollTop": 0
+}
+
+// export default sheetPivotTableData;

Файловите разлики са ограничени, защото са твърде много
+ 7066 - 0
public/static/js/luckysheet/demoData/sheetSparkline.js


Файловите разлики са ограничени, защото са твърде много
+ 1068 - 0
public/static/js/luckysheet/demoData/sheetTable.js


Файловите разлики са ограничени, защото са твърде много
+ 1944 - 0
public/static/js/luckysheet/index.html


+ 0 - 1
public/static/js/url.js

@@ -4,7 +4,6 @@
 // var ctx = "http://192.168.1.250:8890"//agile_sign_web的服务
  
 var ctx = apiConfig.ctx //agile_sign_web的服务
-var oldVersion = apiConfig.oldVersion //agile_sign_seal_web的服务
 //  var ctx = "http://192.168.1.79:8080"
 var rootD = apiConfig.rootD 
 var cv = 2; //1  开发。2 测试

Файловите разлики са ограничени, защото са твърде много
+ 582 - 508
public/static/views/onlineShareExcel.html


Файловите разлики са ограничени, защото са твърде много
+ 591 - 0
public/static/views/performance.html


+ 18 - 6
src/App.vue

@@ -1,5 +1,6 @@
 <template>
   <div id="app">
+      <router-view v-if="showRouter"></router-view>
     <transition name="el-fade-in">
         <router-view />
     </transition>
@@ -7,12 +8,23 @@
 </template>
 <script>
 export default {
-  created(){
-    let url = 'http://127.0.0.1:8000/bpm/api/sdasd'
-    let reg = /\d+\/api\//
-    let r = reg.test(url)
-    console.log(r);
-
+    provide (){
+    return {
+      reload: this.reload
+    }
+  },
+  data (){
+    return {
+      showRouter: true
+    }
+  },
+  methods: {
+    reload (){
+      this.showRouter = false
+      this.$nextTick(()=>{
+        this.showRouter = true
+      })
+    }
   },
   watch: {
     $route(to) {

Файловите разлики са ограничени, защото са твърде много
+ 26 - 26
src/assets/js/common.js


+ 3 - 0
src/assets/js/url.js

@@ -26,6 +26,9 @@ const urls = {
         getQueryMultiTaskId:ctxForm + "/queryMultiTaskId",
         getComplateLastMan:ctxForm + "/complateLastMan"
     },
+    excelList:{
+
+    },
     distribute: {
         sendMsg: ctx + '/api/distribute/create', //创建分发
         findMyComment: ctx + '/api/comment/findMyComment', //查询

+ 47 - 0
src/assets/js/util.js

@@ -35,6 +35,53 @@ util.hasPermission = function(permission) {
 
   return found;
 };
+util.ajaxJson = function (msg, url, param, callBack, beforeSend, async) {
+
+
+
+  $.ajax({
+    type: "POST",
+    url: url,
+    global: true,
+    data: JSON.stringify(param),
+    contentType: "application/json;charset=UTF-8",
+    beforeSend: function (req) {
+
+      req.setRequestHeader("agileauthtoken", window.sessionStorage.agileauthtoken);
+
+      if ($.isFunction(beforeSend)) {
+
+        beforeSend.call(this, req);
+      }
+
+
+    },
+    xhrFields: {
+      withCredentials: false //跨域session保持
+    },
+    async: async == undefined ? true : async,
+    dataType: "json",
+    success: function (page) {
+
+      // util.disLoad();
+
+      if ($.isFunction(callBack)) {
+
+        callBack.call(this, page);
+      }
+
+    },
+    error: function (xhr, textStatus, errorThrow) {
+
+      // util.disLoad();
+
+      // util.closeAll();
+
+      // util.error("系统异常!");
+    }
+  });
+
+},
 //获取前端地址参数对象
 util.getRequestSearchObject = function() {
   var url = window.location.search; //获取url中"?"符后的字串

+ 1 - 2
src/components/el-form.vue

@@ -12,7 +12,6 @@
       empty-text="暂无数据"
       @cell-click="getRowList"
       :cell-style="columnbackgroundStyle"
-      row-key="id"
       :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
     >
       <!-- 是否多选 -->
@@ -121,7 +120,7 @@ export default {
   methods: {
     columnbackgroundStyle({ row, column, rowIndex, columnIndex }) {
       if (column.type == "default") {
-        if (column.label === "文件标题") {
+        if (column.property === "need_name"||column.property === "needName") {
           return "color:#0682CD;";
         }
       }

+ 166 - 0
src/components/el-formid.vue

@@ -0,0 +1,166 @@
+<template>
+    <div>
+      <slot :name="list.name"></slot>
+      <el-table
+        ref="table"
+        style="width: 100%"
+        :data="list.data"
+        :height="list.height + 'px'"
+        :max-height="list.height + 'px'"
+        @row-click="getRowData"
+        @selection-change="selectionChange"
+        empty-text="暂无数据"
+        @cell-click="getRowList"
+        :cell-style="columnbackgroundStyle"
+        row-key="id"
+        :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
+      >
+        <!-- 是否多选 -->
+        <el-table-column
+          v-if="list.isSelection"
+          :selecttable="list"
+          type="selection"
+          :width="list.width || 50"
+          align="center"
+        />
+  
+        <!-- 是否需要序号 -->
+        <el-table-column
+          v-if="list.isIndex"
+          type="index"
+          label="序号"
+          width="55"
+          align="center"
+        />
+        <template v-for="item in list.titledata">
+          <el-table-column
+            :key="item.prop"
+            :prop="item.prop"
+            :label="item.label"
+            align="center"
+            show-overflow-tooltip
+            :width="item.width || 100"
+          />
+        </template>
+        <!-- 操作列 -->
+        <el-table-column
+          v-if="list.isOperation"
+          v-bind="list.data && list.data.length ? { fixed: 'right' } : null"
+          style="margin-right: 20px"
+          class-name="handle-td"
+          label-class-name="tc"
+          :label="list.operation.label"
+          align="center"
+        >
+          <!-- UI统一一排放3个,4个以上出现更多 -->
+          <template slot-scope="scope">
+            <!-- 三个一排的情况,去掉隐藏的按钮后的长度 -->
+            <template v-if="list.operation.data.length > 0">
+              <div class="btn">
+                <div v-for="item in list.operation.data" :key="item.label">
+                  <template v-if="item.type !== 'icon'">
+                    <el-button
+                      v-bind="item"
+                      :type="item.type ? item.type : ''"
+                      size="mini"
+                      @click.native.prevent="
+                        item.handleRow(scope.$index, scope.row, item.label)
+                      "
+                    >
+                      {{ item.label }}
+                    </el-button>
+                  </template>
+                  <template v-else>
+                    <i
+                      :class="[icon, item.icon]"
+                      v-bind="item"
+                      @click="item.handleRow(scope.$index, scope.row, item.label)"
+                    />
+                  </template>
+                </div>
+              </div>
+            </template>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="page">
+        <el-pagination
+          style="display: flex; flex-direction: row-reverse"
+          v-if="list.pageData.total > 0"
+          :current-page.sync="page"
+          :page-sizes="
+            list.pageData.pageSizes ? list.pageData.pageSizes : [5, 10, 15, 20]
+          "
+          :page-size="list.pageData.pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="list.pageData.total"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        />
+      </div>
+    </div>
+  </template>
+  
+  <script>
+  export default {
+    data(){
+      return{
+       page:1
+      }
+    },
+    props: {
+      //  表格数据和表格部分属性的对象
+      // eslint-disable-next-line vue/require-default-prop
+      list: {
+        type: Object,
+      },
+    },
+    created() {
+  
+    },
+    methods: {
+      columnbackgroundStyle({ row, column, rowIndex, columnIndex }) {
+        if (column.type == "default") {
+          if (column.label === "文件标题"||column.label === "待办事项名称") {
+            return "color:#0682CD;";
+          }
+        }
+      },
+      selectionChange(val) {
+  
+        //多选数字回调
+        this.$emit("num", val);
+      },
+      handleAdd(name) {
+       
+        this.$emit("toolMsg", name);
+      },
+      handleRow(index, row, lable) {
+       
+      },
+      handleSizeChange(val) {
+        this.$emit("changeSize", val);
+        console.log(`每页 ${val} 条`);
+      },
+      handleCurrentChange(val) {
+        this.$emit("changeNum", val);
+        console.log(`当前页: ${val}`);
+      },
+      // 点击行即可选中
+      getRowData(row) {
+        this.$refs.table.toggleRowSelection(row);
+      },
+      getRowList(row, column, event, cell) {
+        this.$emit("clickDemand", column.label, row);
+      },
+    },
+  };
+  </script>
+  
+  <style lang="scss" scoped>
+  .btn{
+    display: flex;
+    justify-content: center;
+  }
+  </style>
+  

+ 165 - 0
src/components/el-forms.vue

@@ -0,0 +1,165 @@
+<template>
+  <div>
+    <slot :name="list.name"></slot>
+    <el-table
+      ref="table"
+      style="width: 100%"
+      :data="list.data"
+      :height="list.height + 'px'"
+      :max-height="list.height + 'px'"
+      @row-click="getRowData"
+      @selection-change="selectionChange"
+      empty-text="暂无数据"
+      @cell-click="getRowList"
+      :cell-style="columnbackgroundStyle"
+      row-key="id"
+      :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
+    >
+      <!-- 是否多选 -->
+      <el-table-column
+        v-if="list.isSelection"
+        :selecttable="list"
+        type="selection"
+        :width="list.width || 50"
+        align="center"
+      />
+
+      <!-- 是否需要序号 -->
+      <el-table-column
+        v-if="list.isIndex"
+        type="index"
+        label="序号"
+        width="55"
+        align="center"
+      />
+      <template v-for="item in list.titledata">
+        <el-table-column
+          :key="item.prop"
+          :prop="item.prop"
+          :label="item.label"
+          align="center"
+          show-overflow-tooltip
+          :width="item.width || 100"
+        />
+      </template>
+      <!-- 操作列 -->
+      <el-table-column
+        v-if="list.isOperation"
+        v-bind="list.data && list.data.length ? { fixed: 'right' } : null"
+        style="margin-right: 20px"
+        class-name="handle-td"
+        label-class-name="tc"
+        :label="list.operation.label"
+        align="center"
+      >
+        <!-- UI统一一排放3个,4个以上出现更多 -->
+        <template slot-scope="scope">
+          <!-- 三个一排的情况,去掉隐藏的按钮后的长度 -->
+          <template v-if="list.operation.data.length > 0">
+            <div class="btn">
+              <div v-for="item in list.operation.data" :key="item.label">
+                <template v-if="item.type !== 'icon'">
+                  <el-button
+                    v-bind="item"
+                    :type="item.type ? item.type : ''"
+                    size="mini"
+                    @click.native.prevent="
+                      item.handleRow(scope.$index, scope.row, item.label)
+                    "
+                  >
+                    {{ item.label }}
+                  </el-button>
+                </template>
+                <template v-else>
+                  <i
+                    :class="[icon, item.icon]"
+                    v-bind="item"
+                    @click="item.handleRow(scope.$index, scope.row, item.label)"
+                  />
+                </template>
+              </div>
+            </div>
+          </template>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page">
+      <el-pagination
+        style="display: flex; flex-direction: row-reverse"
+        v-if="list.pageData.total > 0"
+        :current-page.sync="page"
+        :page-sizes="
+          list.pageData.pageSizes ? list.pageData.pageSizes : [5, 10, 15, 20]
+        "
+        :page-size="list.pageData.pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="list.pageData.total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data(){
+    return{
+     page:1
+    }
+  },
+  props: {
+    //  表格数据和表格部分属性的对象
+    // eslint-disable-next-line vue/require-default-prop
+    list: {
+      type: Object,
+    },
+  },
+  created() {
+
+  },
+  methods: {
+    columnbackgroundStyle({ row, column, rowIndex, columnIndex }) {
+      if (column.type == "default") {
+        if (column.label === "文件标题") {
+          return "color:#0682CD;";
+        }
+      }
+    },
+    selectionChange(val) {
+
+      //多选数字回调
+      this.$emit("num", val);
+    },
+    handleAdd(name) {
+     
+      this.$emit("toolMsg", name);
+    },
+    handleRow(index, row, lable) {
+     
+    },
+    handleSizeChange(val) {
+      this.$emit("changeSize", val);
+      console.log(`每页 ${val} 条`);
+    },
+    handleCurrentChange(val) {
+      this.$emit("changeNum", val);
+      console.log(`当前页: ${val}`);
+    },
+    // 点击行即可选中
+    getRowData(row) {
+      this.$refs.table.toggleRowSelection(row);
+    },
+    getRowList(row, column, event, cell) {
+      this.$emit("clickDemand", column.label, row);
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.btn{
+  display: flex;
+  justify-content: center;
+}
+</style>

+ 47 - 42
src/components/search.vue

@@ -16,12 +16,16 @@
 				<el-date-picker :append-to-body="false" v-model="item.value" v-if="item.type === 'datetime'"
 					size="medium" type="datetime" :placeholder="item.tit">
 				</el-date-picker>
-                <el-date-picker :append-to-body="false" v-model="item.value" v-if="item.type === 'month'"
-					size="medium" type="month" :placeholder="item.tit">
+				<el-date-picker :append-to-body="false" v-model="item.value" v-if="item.type === 'month'" size="medium"
+					type="month" :placeholder="item.tit">
 				</el-date-picker>
-                <el-date-picker :append-to-body="false" v-model="item.value" v-if="item.type === 'year'"
-					size="medium" type="year" :placeholder="item.tit">
+				<el-date-picker :append-to-body="false" v-model="item.value" v-if="item.type === 'year'" size="medium"
+					type="year" :placeholder="item.tit">
 				</el-date-picker>
+				<el-date-picker :append-to-body="false" v-model="item.value" v-if="item.type === 'daterange'" size="medium"
+					type="daterange" :placeholder="item.tit" format="yyyy-MM-dd HH:mm:ss"
+					value-format="yyyy-MM-dd HH:mm:ss" :default-time="defaultTime" start-placeholder="开始时间"
+					end-placeholder="结束时间" />
 			</div>
 		</div>
 		<el-button class="btn-check" size="medium" type="primary" plain icon="el-icon-search" @click="searchInfo">搜索
@@ -29,54 +33,55 @@
 	</div>
 </template>
 <script>
-	export default {
-		props: ["searchList"],
-		data() {
-			return {
-				infoList: [],
-			};
-		},
-		methods: {
-			searchInfo() {
-				this.infoList = [];
-				for (let i = 0; i < this.searchList.length; i++) {
-					if (this.searchList[i].type === "date" && this.searchList[i].value) {
-						this.infoList.push(Date.parse(this.searchList[i].value));
-					} else {
-						this.infoList.push(this.searchList[i].value);
-					}
+export default {
+	props: ["searchList"],
+	data() {
+		return {
+			infoList: [],
+			defaultTime: ['00:00:00', '23:59:59'],
+		};
+	},
+	methods: {
+		searchInfo() {
+			this.infoList = [];
+			for (let i = 0; i < this.searchList.length; i++) {
+				if (this.searchList[i].type === "date" && this.searchList[i].value) {
+					this.infoList.push(Date.parse(this.searchList[i].value));
+				} else {
+					this.infoList.push(this.searchList[i].value);
 				}
-				this.$emit("searchInfo", this.infoList);
-			},
+			}
+			this.$emit("searchInfo", this.infoList);
 		},
-		mounted() {},
-		created() {},
-	};
+	},
+	mounted() { },
+	created() { },
+};
 </script>
 <style scoped lang="scss">
-	.search-box {
+.search-box {
+	display: flex;
+	justify-content: space-between;
+
+	.box-l {
 		display: flex;
 		justify-content: space-between;
 
-		.box-l {
-			display: flex;
-			justify-content: space-between;
-
-			.box-info {
-				display: inline-block;
-				// min-width: 100px;
-			}
+		.box-info {
+			display: inline-block;
+			// min-width: 100px;
 		}
+	}
 
-		.btn-check {}
+	.btn-check {}
 
-		.el-date-editor.el-input,
-		.el-date-editor.el-input__inner {
-			width: 100%;
-		}
+	.el-date-editor.el-input,
+	.el-date-editor.el-input__inner {
+		width: 100%;
+	}
 
-		.el-select-dropdown {
-			z-index: 100000 !important;
-		}
+	.el-select-dropdown {
+		z-index: 100000 !important;
 	}
+}
 </style>

+ 301 - 224
src/components/upload.vue

@@ -1,234 +1,311 @@
 <template>
-    <div v-loading="loading">
-        <el-upload class="upload-demo" :drag="fileInfo.type !== 'btn'" multiple :limit="fileInfo.limit" ref="upload"
-            action="string" :on-remove="handleRemove" :on-exceed="handleExceed" :file-list="fileList"
-             :auto-upload="true" :show-file-list="fileInfo.type !== 'btn'"
-            :before-upload="deforeUp" :http-request="signUpload">
-            <div v-if="fileInfo.type !== 'btn'">
-                <i class="el-icon-upload"></i>
-                <div class="el-upload__text">点击上传</div>
-            </div>
-            <div v-if="fileInfo.type === 'btn'">
-                <el-button :size="fileInfo.size?fileInfo.size:'medium'" :type="fileInfo.btntype">{{fileInfo.typename}}</el-button>
-            </div>
-        </el-upload>
-    </div>
+  <div v-loading="loading">
+    <el-upload
+      class="upload-demo"
+      :drag="fileInfo.type !== 'btn'"
+      multiple
+      :limit="fileInfo.limit"
+      ref="upload"
+      action="string"
+      :on-remove="handleRemove"
+      :on-exceed="handleExceed"
+      :file-list="attList"
+      :auto-upload="true"
+      :show-file-list="fileInfo.type !== 'btn'"
+      :before-upload="deforeUp"
+      :http-request="signUpload"
+      :on-preview="defUp"
+      :disabled="disabled"
+
+    >
+      <div v-if="fileInfo.type !== 'btn'">
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">点击上传</div>
+      </div>
+      <div v-if="fileInfo.type === 'btn'">
+        <el-button
+          :size="fileInfo.size ? fileInfo.size : 'medium'"
+          :type="fileInfo.btntype"
+          >{{ fileInfo.typename }}</el-button
+        >
+      </div>
+    </el-upload>
+  </div>
 </template>
 <script>
-    export default {
-        props: ['fileInfo', 'fileList','type'],
-        data() {
-            return {
-                fileLists: [],
-                attList: [],
-                loading: false,
-                num: 0,
-                s: false
-            }
-        },
-        methods: {
-            signUpload(){},
-            //删除
-            handleRemove(file) {
-                for (let i = 0; i < this.attList.length; i++) {
-                    if (this.attList[i].fileName === file.name) {
-                        this.attList.splice(i, 1);
-                        this.$emit('uploadBack', this.attList)
-                    }
-                }
-            },
-            //数量限制
-            handleExceed(files, fileList) {
-                this.$message.warning(
-                    `当前限制选择 ${this.fileInfo.limit} 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`
-                );
-            },
-            deforeUp(file) {
-                const isLt2M = file.size / 1024 / 1024 < 100;
-                if (!isLt2M) {
-                    this.$message.error('上传文件大小不能超过 20MB!');
-                    return false
-                }
-                if(this.fileInfo.type == 'img'){
-                    const isImg = file.type.split("/")[0] == 'image';
-                    if (!isImg) {
-                        this.$message.error('请上传图片格式文件!');
-                        return false
-                    }
-                }
-                if(this.fileInfo.typexz == 'ppt'){
-                    const isImg = file.name.split(".")[1] == 'pptx';
-                    console.log(file.name.split(".")[1] == 'pptx')
-                    if (!isImg) {
-                        this.$message.error('请上传ppt格式文件!');
-                        return false
-                    }
-                }
-                if(this.fileInfo.typexz == 'csv'){
-                    const isImg = file.name.split(".")[1] == 'csv';
-                    if (!isImg) {
-                        this.$message.error('请上传csv格式文件!');
-                        return false
-                    }
-                }
-                if(this.fileInfo.typexz == 'xlsx'){
-                    const isImg = file.name.split(".")[1] == 'xlsx';
-                    if (!isImg) {
-                        this.$message.error('请上传xlsx格式文件!');
-                        return false
-                    }
-                }
-                this.loading = true;
-                let query = new FormData();
-                query.append("file", file);
-                if(this.fileInfo.typename == '新增素材'){
-                    query.append("advType", this.fileInfo.advType);
-                    query.append("advTypeName", this.fileInfo.advTypeName);
-                }
-                if(this.fileInfo.url == '/market/cIllegalCallTask/importTempByProv'||this.fileInfo.url == '/market/cChannelInfo/cIllegalCallTask/importTempByProv'){
-                    query.append("taskId", this.fileInfo.taskId);
-                    query.append("tempId", this.fileInfo.tempId);
-                }
-                //违规外呼
-                if(this.fileInfo.uploadType == 'outCall'){
-                    query.append("uploadType", 'outCall');
-                    query.append("relId", this.fileInfo.relId);
-                }
-                if(this.fileInfo.uploadType == 'train'){
-                    query.append("uploadType", 'train');
-                    query.append("relId", this.fileInfo.relId);
-                }
-                //运营类项目考核及结算
-                if(this.fileInfo.url == '/market/cmkAttachInfo/upload'){
-                    query.append("uploadType", this.fileInfo.uploadType);
-                }
-                if(this.fileInfo.url == '/market/cStoreOutWo/importData'){
-                    query.append("woNo", this.fileInfo.woNo);
-                }
-                if(this.fileInfo.url == '/market/cStoreScheTrainEva/importDataEva'){
-                    query.append("evaId", this.fileInfo.evaId);
-                }
-                this.num++;
-                let _this = this;
-                this.$http({
-                    url: this.fileInfo.url,
-                    method: "post",
-                    headers: {
-                        "Content-Type": "application/json",
-                    },
-                    data: query,
-                }).then((res) => {
-                    if (this.fileInfo.type === 'btn') {
-                        this.$refs['upload'].clearFiles();
-                        this.$emit('uploadBack',res)
-                        if(res.data.result==0){
-                            this.$emit('onSuccess',file)
-                            _this.$message({
-                                message: res.data.desc,
-                                type: 'success'
-                            });
-                        }else if(res.data.result==1){
-                            _this.$message({
-                                message: res.data.desc,
-                                type: 'error'
-                            });
-                        }else if(res.data.result==2){
-                            _this.$message({
-                                message: res.data.desc,
-                                type: 'warning'
-                            });
-                        }else if(res.data.result==3){
-                            _this.$message({
-                                message: res.data.desc,
-                                type: 'info'
-                            });
-                        }else{
-                            _this.$message({
-                                message: res.data.desc,
-                                type: 'success'
-                            });
-                        }
-                        this.num--;
-                        if (this.num == 0) {
-                            this.loading = false;
-                        }
-                        return
-                    }
-                    if (this.fileInfo.type === 'voice') {
-                        this.attList = res.data;
-                    } else {
-                        this.attList.push({
-                            id: res.data.body.id,
-                            fileName: res.data.body.fileName,
-                            fileCode: res.data.body.fileCode,
-                            opName: res.data.body.opName,
-                            opNo: res.data.body.opNo,
-                            opTime: res.data.body.opTime,
-                            attchFileId: res.data.body.attchFileId,
-                            type: res.data.body.type,
-                        });
-                    }
-                    this.$emit('uploadBack', this.attList);
-                    this.num--;
-                    if (this.num == 0) {
-                        this.loading = false;
-                    }
-                    return true
-                }).catch((res) => {
-                    this.$message({
-                        message: file.name+'上传失败',
-                        type: 'error'
-                    });
-                    this.num--;
-                    if (this.num == 0) {
-                        this.loading = false;
-                    }
-                    for (let i = 0; i < this.$refs['upload'].uploadFiles.length; i++) {
-                        if(file.name == this.$refs['upload'].uploadFiles[i].name){
-                            this.$refs['upload'].uploadFiles.splice(i,1)
-                        }
-                    }
-                    return false
-                })
-            },
-        },
-        mounted() {
-
+export default {
+  // props: ["fileInfo", "fileList", "type"],
+  props: {
+    fileInfo: {
+      type: Object,
+      default: () => {}
+    },
+    fileList: {
+      type: Array,
+      default: () => []
+    },
+    type: {
+      type: Array,
+      default: () => []
+    },
+    disabled: {
+      type: Boolean,
+      default: () => {},
+    },
+  },
+  data() {
+    return {
+      fileLists: [],
+      attList: [
+        // {
+        //   attchFileId: "",
+        //   fileCode: "202209271105276441",
+        //   name: "1231233333333333.xlsx",
+        //   id: "202209271105276441",
+        //   opName: "范岩",
+        //   opNo: "fanyan",
+        //   opTime: "2022-09-27 11:05:27",
+        //   type: 'success',
+        // },
+      ],
+      loading: false,
+      num: 0,
+      s: false,
+    };
+  },
+  // props:{
+  //    disabled: {
+  //     type: Boolean,
+  //     default: () => {},
+  //   },
+  // },
+  methods: {
+    signUpload() {},
+    //删除
+    handleRemove(file) {
+      console.log(file);
+      console.log(this.attList);
+      for (let i = 0; i < this.attList.length; i++) {
+        if (this.attList[i].name === file.name) {
+          this.attList.splice(i, 1);
+          
+           
+         
+          // this.$emit("clickDownload",this.attList);
+        }
+      }
+     console.log(this.attList)
+    this.$emit("uploadBack", this.attList);
+    },
+   
+    //数量限制
+    handleExceed(files, fileList) {
+      this.$message.warning(
+        `当前限制选择 ${this.fileInfo.limit} 个文件,本次选择了 ${
+          files.length
+        } 个文件,共选择了 ${files.length + fileList.length} 个文件`
+      );
+    },
+    defUp(file){
+        this.$emit("clickDownload",this.attList);
+    },
+    deforeUp(file) {
+      const isLt2M = file.size / 1024 / 1024 < 100;
+      if (!isLt2M) {
+        this.$message.error("上传文件大小不能超过 20MB!");
+        return false;
+      }
+      if (this.fileInfo.type == "img") {
+        const isImg = file.type.split("/")[0] == "image";
+        if (!isImg) {
+          this.$message.error("请上传图片格式文件!");
+          return false;
+        }
+      }
+      if (this.fileInfo.typexz == "ppt") {
+        const isImg = file.name.split(".")[1] == "pptx";
+        console.log(file.name.split(".")[1] == "pptx");
+        if (!isImg) {
+          this.$message.error("请上传ppt格式文件!");
+          return false;
+        }
+      }
+      if (this.fileInfo.typexz == "csv") {
+        const isImg = file.name.split(".")[1] == "csv";
+        if (!isImg) {
+          this.$message.error("请上传csv格式文件!");
+          return false;
+        }
+      }
+      if (this.fileInfo.typexz == "xlsx") {
+        const isImg = file.name.split(".")[1] == "xlsx";
+        if (!isImg) {
+          this.$message.error("请上传xlsx格式文件!");
+          return false;
+        }
+      }
+      this.loading = true;
+      let query = new FormData();
+      query.append("file", file);
+      if (this.fileInfo.typename == "新增素材") {
+        query.append("advType", this.fileInfo.advType);
+        query.append("advTypeName", this.fileInfo.advTypeName);
+      }
+      if (
+        this.fileInfo.url == "/market/cIllegalCallTask/importTempByProv" ||
+        this.fileInfo.url ==
+          "/market/cChannelInfo/cIllegalCallTask/importTempByProv"
+      ) {
+        query.append("taskId", this.fileInfo.taskId);
+        query.append("tempId", this.fileInfo.tempId);
+      }
+      //违规外呼
+      if (this.fileInfo.uploadType == "outCall") {
+        query.append("uploadType", "outCall");
+        query.append("relId", this.fileInfo.relId);
+      }
+      if (this.fileInfo.uploadType == "train") {
+        query.append("uploadType", "train");
+        query.append("relId", this.fileInfo.relId);
+      }
+      //运营类项目考核及结算
+      if (this.fileInfo.url == "/market/cmkAttachInfo/upload") {
+        query.append("uploadType", this.fileInfo.uploadType);
+      }
+      if (this.fileInfo.url == "/market/cStoreOutWo/importData") {
+        query.append("woNo", this.fileInfo.woNo);
+      }
+      if (this.fileInfo.url == "/market/cStoreScheTrainEva/importDataEva") {
+        query.append("evaId", this.fileInfo.evaId);
+      }
+      this.num++;
+      let _this = this;
+      this.$http({
+        url: this.fileInfo.url,
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
         },
-        created() {
-            this.attList = [];
-            for (let i = 0; i < this.fileList.length; i++) {
-                this.attList.push({
-                    id: this.fileList[i].id,
-                    fileName: this.fileList[i].fileName,
-                    fileCode: this.fileList[i].fileCode,
-                    opName: this.fileList[i].opName,
-                    opNo: this.fileList[i].opNo,
-                    opTime: this.fileList[i].opTime,
-                    attchFileId: this.fileList[i].attchFileId,
-                    type: this.fileList[i].type,
-                })
+        data: query,
+      })
+        .then((res) => {
+          if (this.fileInfo.type === "btn") {
+            this.$refs["upload"].clearFiles();
+            this.$emit("uploadBack", res);
+            
+            this.$emit("clickDownload",res);
+            if (res.data.result == 0) {
+              this.$emit("onSuccess", file);
+              _this.$message({
+                message: res.data.desc,
+                type: "success",
+              });
+            } else if (res.data.result == 1) {
+              _this.$message({
+                message: res.data.desc,
+                type: "error",
+              });
+            } else if (res.data.result == 2) {
+              _this.$message({
+                message: res.data.desc,
+                type: "warning",
+              });
+            } else if (res.data.result == 3) {
+              _this.$message({
+                message: res.data.desc,
+                type: "info",
+              });
+            } else {
+              _this.$message({
+                message: res.data.desc,
+                type: "success",
+              });
             }
-        },
-        watch: {
-            fileList() {
-                this.attList = [];
-                for (let i = 0; i < this.fileList.length; i++) {
-                    this.attList.push({
-                        id: this.fileList[i].id,
-                        fileName: this.fileList[i].fileName,
-                        fileCode: this.fileList[i].fileCode,
-                        opName: this.fileList[i].opName,
-                        opNo: this.fileList[i].opNo,
-                        opTime: this.fileList[i].opTime,
-                        attchFileId: this.fileList[i].attchFileId,
-                        type: this.fileList[i].type,
-                    })
-                }
+            this.num--;
+            if (this.num == 0) {
+              this.loading = false;
             }
-        }
+            return;
+          }
+          if (this.fileInfo.type === "voice") {
+            this.attList = res.data;
+          } else {
+            this.attList.push({
+              id: res.data.body.id,
+              name: res.data.body.fileName,
+              fileCode: res.data.body.fileCode,
+              opName: res.data.body.opName,
+              opNo: res.data.body.opNo,
+              opTime: res.data.body.opTime,
+              attchFileId: res.data.body.attchFileId,
+              type: res.data.body.type,
+            });
+          }
+          this.$emit("uploadBack", this.attList);
+          // this.$emit("clickDownload",this.attList);
+          this.num--;
+          if (this.num == 0) {
+            this.loading = false;
+          }
+          return true;
+        })
+        .catch((res) => {
+          this.$message({
+            message: file.name + "上传失败",
+            type: "error",
+          });
+          this.num--;
+          if (this.num == 0) {
+            this.loading = false;
+          }
+          for (let i = 0; i < this.$refs["upload"].uploadFiles.length; i++) {
+            if (file.name == this.$refs["upload"].uploadFiles[i].name) {
+              this.$refs["upload"].uploadFiles.splice(i, 1);
+            }
+          }
+          return false;
+        });
+    },
+  },
+  mounted() {},
+  created() {
+    this.attList = [];
+    console.log(this.fileList);
+    if(this.fileList){
+      for (let i = 0; i < this.fileList.length; i++) {
+        this.attList.push({
+            id: this.fileList[i].id,
+            name: this.fileList[i].fileName,
+            fileCode: this.fileList[i].fileCode,
+            opName: this.fileList[i].opName,
+            opNo: this.fileList[i].opNo,
+            opTime: this.fileList[i].opTime,
+            attchFileId: this.fileList[i].attchFileId,
+            type: this.fileList[i].type,
+        })
+    }
     }
+    
+    console.log(this.attList);
+  },
+  watch: {
+    fileList() {
+      this.attList = [];
+      for (let i = 0; i < this.fileList.length; i++) {
+        this.attList.push({
+          id: this.fileList[i].id,
+          name: this.fileList[i].fileName,
+          fileCode: this.fileList[i].fileCode,
+          opName: this.fileList[i].opName,
+          opNo: this.fileList[i].opNo,
+          opTime: this.fileList[i].opTime,
+          attchFileId: this.fileList[i].attchFileId,
+          type: this.fileList[i].type,
+        });
+      }
+    },
+  },
+};
 </script>
 <style scoped lang="scss">
-
 </style>

+ 181 - 175
src/components/uploadDown.vue

@@ -1,197 +1,203 @@
 <template>
-    <div class="back-box">
-        <div v-for="item in infolist" :key="item.id" @click="downcheck(item)">
-            <i class="iconfont icon-word" v-if="item.type==='word'"></i>
-            <i class="iconfont icon-excel" v-if="item.type==='excel'"></i>
-            <i class="iconfont icon-ppt" v-if="item.type==='ppt'"></i>
-            <i class="iconfont icon-wenjian" v-if="item.type==='wenjian'"></i>
-            <i class="el-icon-picture" v-if="item.type==='png'"></i>
-            <el-tooltip class="item" effect="dark" :content="item.fileName" placement="right" :enterable="false">
-                <span class="tab-long">{{item.fileName}}</span>
-            </el-tooltip>
-            <div class="seedown" v-if="datalist.type===2">
-                <a @click="uploaddown(item)">下载</a>
-                <a @click="uploadsee(item)">预览</a>
-            </div>
-        </div>
-        <div class="if-box-top" v-if="ifrshow" @keyup.esc="ifrshow=false">
-            <i class="el-icon-close" @click="ifrshow=false"></i>
-            <iframe
-                height="100%"
-                width="100%"
-                :src="srcsc">
-            </iframe>
-        </div>
+  <div class="back-box">
+    <div v-for="item in infolist" :key="item.id" @click="downcheck(item)">
+      <i class="iconfont icon-word" v-if="item.type === 'word'"></i>
+      <i class="iconfont icon-excel" v-if="item.type === 'excel'"></i>
+      <i class="iconfont icon-ppt" v-if="item.type === 'ppt'"></i>
+      <i class="iconfont icon-wenjian" v-if="item.type === 'wenjian'"></i>
+      <i class="el-icon-picture" v-if="item.type === 'png'"></i>
+      <el-tooltip
+        class="item"
+        effect="dark"
+        :content="item.fileName"
+        placement="right"
+        :enterable="false"
+      >
+        <span class="tab-long">{{ item.fileName }}</span>
+      </el-tooltip>
+      <div class="seedown" v-if="datalist.type === 2">
+        <a @click="uploaddown(item)">下载</a>
+        <a @click="uploadsee(item)">预览</a>
+      </div>
     </div>
+    <div class="if-box-top" v-if="ifrshow" @keyup.esc="ifrshow = false">
+      <i class="el-icon-close" @click="ifrshow = false"></i>
+      <iframe height="100%" width="100%" :src="srcsc"> </iframe>
+    </div>
+  </div>
 </template>
 <script>
-    export default {
-        props: ['datalist', 'dialogStatus'],
-        data() {
-            return {
-                infolist: [],
-                status: false,
-                srcsc: '',
-                ifrshow:false,
-            }
-        },
-        methods: {
-            downcheck(v) {
-                if (this.datalist.type === 1) {
-                    this.uploaddown(v);
-                }
-            },
-            uploadsee(v) {
-                let url = encodeURIComponent(Base64.encode(v.callPath));
-                this.srcsc = 'http://10.230.15.228:8012/onlinePreview?url=' + url;
-                this.ifrshow=true;
-                // window.open('http://114.215.71.182:8012/onlinePreview?url=' + url);
-            },
-            //下载e
-            uploaddown(v) {
-                let fileData = v;
-                this.$http({
-                    url: this.datalist.url,
-                    method: "post",
-                    headers: {
-                        "Content-Type": "application/json",
-                    },
-                    responseType: "blob",
-                    data: {"id": fileData.id, "fileName": fileData.fileName},
-                }).then((response) => {
-                    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
-                        let blob = new Blob([response.data], {
-                            type: 'application/vnd.ms-excel'
-                        });
-                        window.navigator.msSaveOrOpenBlob(blob, fileData.fileName);
-                    } else {
-                        /* 火狐谷歌的文件下载方式 */
-                        var blob = new Blob([response.data])
-                        var downloadElement = document.createElement('a')
-                        var href = window.URL.createObjectURL(blob);
-                        downloadElement.href = href;
-                        downloadElement.download = fileData.fileName;
-                        document.body.appendChild(downloadElement);
-                        downloadElement.click();
-                        document.body.removeChild(downloadElement);
-                        window.URL.revokeObjectURL(href);
-                    }
-                });
-            },
-            dataHandle() {
-                this.infolist = this.datalist.attList;
-                if (this.infolist) {
-                    for (let i = 0; i < this.infolist.length; i++) {
-                        let f = this.infolist[i].fileName.split(".");
-                        let type = f[f.length - 1];
-                        if (type === 'doc' || type === 'docx') {
-                            this.infolist[i].type = 'word';
-                        } else if (type === 'ppt') {
-                            this.infolist[i].type = 'ppt';
-                        } else if (type === 'xlsx' || type === 'xls') {
-                            this.infolist[i].type = 'excel';
-                        } else if (type === 'png' || type === 'jpg' || type === 'svg' || type === 'gif' || type === 'psd') {
-                            this.infolist[i].type = 'png';
-                        } else {
-                            this.infolist[i].type = 'wenjian';
-                        }
-                    }
-                }
-            }
-        },
-        mounted() {
-
-        },
-        created() {
-            this.dataHandle();
+export default {
+  props: ["datalist", "dialogStatus"],
+  data() {
+    return {
+      infolist: [],
+      status: false,
+      srcsc: "",
+      ifrshow: false,
+    };
+  },
+  methods: {
+    downcheck(v) {
+      if (this.datalist.type === 1) {
+        this.uploaddown(v);
+      }
+    },
+    uploadsee(v) {
+      let url = encodeURIComponent(v.callPath);
+      this.srcsc = "http://114.215.71.182:8012/onlinePreview?url=" + url;
+      this.ifrshow = true;
+      // window.open('http://114.215.71.182:8012/onlinePreview?url=' + url);
+    },
+    //下载e
+    uploaddown(v) {
+      let fileData = v;
+      this.$http({
+        url: this.datalist.url,
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
         },
-        watch: {
-            dialogStatus() {
-                this.$forceUpdate()
-                let _this = this;
-                _this.dataHandle();
-            }
+        responseType: "blob",
+        data: { id: fileData.id, fileName: fileData.fileName },
+      }).then((response) => {
+        if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+          let blob = new Blob([response.data], {
+            type: "application/vnd.ms-excel",
+          });
+          window.navigator.msSaveOrOpenBlob(blob, fileData.fileName);
+        } else {
+          /* 火狐谷歌的文件下载方式 */
+          var blob = new Blob([response.data]);
+          var downloadElement = document.createElement("a");
+          var href = window.URL.createObjectURL(blob);
+          downloadElement.href = href;
+          downloadElement.download = fileData.fileName;
+          document.body.appendChild(downloadElement);
+          downloadElement.click();
+          document.body.removeChild(downloadElement);
+          window.URL.revokeObjectURL(href);
         }
-    }
+      });
+    },
+    dataHandle() {
+      this.infolist = this.datalist.attList;
+      if (this.infolist) {
+        for (let i = 0; i < this.infolist.length; i++) {
+          let f = this.infolist[i].fileName.split(".");
+          let type = f[f.length - 1];
+          if (type === "doc" || type === "docx") {
+            this.infolist[i].type = "word";
+          } else if (type === "ppt") {
+            this.infolist[i].type = "ppt";
+          } else if (type === "xlsx" || type === "xls") {
+            this.infolist[i].type = "excel";
+          } else if (
+            type === "png" ||
+            type === "jpg" ||
+            type === "svg" ||
+            type === "gif" ||
+            type === "psd"
+          ) {
+            this.infolist[i].type = "png";
+          } else {
+            this.infolist[i].type = "wenjian";
+          }
+        }
+      }
+    },
+  },
+  mounted() {
+    this.dataHandle();
+    console.log(this.infolist);
+  },
+  created() {},
+  watch: {
+    dialogStatus() {
+      this.$forceUpdate();
+      let _this = this;
+      _this.dataHandle();
+    },
+  },
+};
 </script>
 <style scoped lang="scss">
-    .if-box-top{
-        background: #fff;
-        width: 80vw;
-        height: 80vh;
-        margin-top: 10vh;
-        margin-left: 10vw;
-    }
+.if-box-top {
+  background: #fff;
+  width: 80vw;
+  height: 80vh;
+  margin-top: 10vh;
+  margin-left: 10vw;
+}
 
-    .iconfont {
-        font-size: 42px;
-    }
+.iconfont {
+  font-size: 42px;
+}
 
-    .icon-excel {
-        color: #67DB63;
-    }
+.icon-excel {
+  color: #67db63;
+}
 
-    .icon-word {
-        color: #FF654E;
-    }
+.icon-word {
+  color: #ff654e;
+}
 
-    .icon-ppt {
-        color: #FF8943;
-    }
+.icon-ppt {
+  color: #ff8943;
+}
 
-    .icon-wenjian {
-        color: #ccc;
-    }
+.icon-wenjian {
+  color: #ccc;
+}
 
-    .el-icon-picture {
-        font-size: 36px;
-        color: #ccc;
-        background: #fff;
-        padding: 4px 2px;
-        margin-bottom: 2px;
-        border-radius: 3px;
-    }
+.el-icon-picture {
+  font-size: 36px;
+  color: #ccc;
+  background: #fff;
+  padding: 4px 2px;
+  margin-bottom: 2px;
+  border-radius: 3px;
+}
 
-    .back-box {
-        margin-top: 20px;
-        background: #F2F2F2;
-        padding: 20px;
+.back-box {
+  margin-top: 20px;
+  background: #f2f2f2;
+  padding: 20px;
 
-        div {
-            display: inline-block;
-            text-align: center;
-            margin-right: 20px;
-            cursor: pointer;
+  div {
+    display: inline-block;
+    text-align: center;
+    margin-right: 20px;
+    cursor: pointer;
 
-            span {
-                display: block;
-                width: 80px;
-                overflow: hidden;
-                padding-top: 5px;
-                margin: 0 10px;
-                overflow: hidden;
-                text-overflow: ellipsis;
-                display: -webkit-box; /* 将对象作为弹性伸缩盒子模型显示 */
-                -webkit-line-clamp: 1; /* 控制最多显示几行 */
-                -webkit-box-orient: vertical; /* 设置或检索伸缩盒对象的子元素的排列方式 */
-            }
-        }
-
-        .seedown {
-            margin: 0;
-            margin-top: 5px;
+    span {
+      display: block;
+      width: 80px;
+      overflow: hidden;
+      padding-top: 5px;
+      margin: 0 10px;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      display: -webkit-box; /* 将对象作为弹性伸缩盒子模型显示 */
+      -webkit-line-clamp: 1; /* 控制最多显示几行 */
+      -webkit-box-orient: vertical; /* 设置或检索伸缩盒对象的子元素的排列方式 */
+    }
+  }
 
-            a {
-                font-size: 12px;
-                padding: 2px 5px;
-                border: 1px solid transparent;
-                color: #999;
-            }
+  .seedown {
+    margin: 0;
+    margin-top: 5px;
 
-            a:hover {
-                color: #0b82ff;
-            }
-        }
+    a {
+      font-size: 12px;
+      padding: 2px 5px;
+      border: 1px solid transparent;
+      color: #999;
     }
 
+    a:hover {
+      color: #0b82ff;
+    }
+  }
+}
 </style>

+ 240 - 0
src/components/uploadMultiConfig.vue

@@ -0,0 +1,240 @@
+<template>
+    <div v-loading="loading">
+        <el-upload class="upload-demo" :disabled ="disabled" :drag="drag" multiple :limit="fileInfo.limit" ref="upload"
+            action="string" :on-remove="handleRemove" :on-exceed="handleExceed" :file-list="fileList"
+             :auto-upload="true" :show-file-list="showFileList"
+            :before-upload="deforeUp" :http-request="signUpload" :on-preview = "downloadBack">
+            <div v-if="fileInfo.type !== 'btn' && !disabled">
+                <i class="el-icon-upload"></i>
+                <div class="el-upload__text">点击上传</div>
+            </div>
+            <div v-if="fileInfo.type === 'btn' && !disabled">
+                <el-button :size="fileInfo.size?fileInfo.size:'medium'" :type="fileInfo.btntype">{{fileInfo.typename}}</el-button>
+            </div>
+        </el-upload>
+    </div>
+</template>
+<script>
+    export default {
+        props: ['fileInfo', 'fileList','type', 'drag','showFileList','disabled'],
+        data() {
+            return {
+                fileLists: [],
+                attList: [],
+                loading: false,
+                num: 0,
+                s: false
+            }
+        },
+        methods: {
+            signUpload(){},
+            //删除
+            handleRemove(file) {
+                for (let i = 0; i < this.attList.length; i++) {
+                    if (this.attList[i].fileName === file.name) {
+                        this.attList.splice(i, 1);
+                        this.$emit('uploadBack', this.attList)
+                    }
+                }
+            },
+            downloadBack(file) {
+                this.$emit('clickDownload', file)
+            },
+            //数量限制
+            handleExceed(files, fileList) {
+                this.$message.warning(
+                    `当前限制选择 ${this.fileInfo.limit} 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`
+                );
+            },
+            deforeUp(file) {
+                const isLt2M = file.size / 1024 / 1024 < 100;
+                if (!isLt2M) {
+                    this.$message.error('上传文件大小不能超过 20MB!');
+                    return false
+                }
+                if(this.fileInfo.type == 'img'){
+                    const isImg = file.type.split("/")[0] == 'image';
+                    if (!isImg) {
+                        this.$message.error('请上传图片格式文件!');
+                        return false
+                    }
+                }
+                if(this.fileInfo.typexz == 'ppt'){
+                    const isImg = file.name.split(".")[1] == 'pptx';
+                    console.log(file.name.split(".")[1] == 'pptx')
+                    if (!isImg) {
+                        this.$message.error('请上传ppt格式文件!');
+                        return false
+                    }
+                }
+                if(this.fileInfo.typexz == 'csv'){
+                    const isImg = file.name.split(".")[1] == 'csv';
+                    if (!isImg) {
+                        this.$message.error('请上传csv格式文件!');
+                        return false
+                    }
+                }
+                if(this.fileInfo.typexz == 'xlsx'){
+                    const isImg = file.name.split(".")[1] == 'xlsx';
+                    if (!isImg) {
+                        this.$message.error('请上传xlsx格式文件!');
+                        return false
+                    }
+                }
+                this.loading = true;
+                let query = new FormData();
+                query.append("file", file);
+                if(this.fileInfo.typename == '新增素材'){
+                    query.append("advType", this.fileInfo.advType);
+                    query.append("advTypeName", this.fileInfo.advTypeName);
+                }
+                if(this.fileInfo.url == '/market/cIllegalCallTask/importTempByProv'||this.fileInfo.url == '/market/cChannelInfo/cIllegalCallTask/importTempByProv'){
+                    query.append("taskId", this.fileInfo.taskId);
+                    query.append("tempId", this.fileInfo.tempId);
+                }
+                //违规外呼
+                if(this.fileInfo.uploadType == 'outCall'){
+                    query.append("uploadType", 'outCall');
+                    query.append("relId", this.fileInfo.relId);
+                }
+                if(this.fileInfo.uploadType == 'train'){
+                    query.append("uploadType", 'train');
+                    query.append("relId", this.fileInfo.relId);
+                }
+                //运营类项目考核及结算
+                if(this.fileInfo.url == '/market/cmkAttachInfo/upload'){
+                    query.append("uploadType", this.fileInfo.uploadType);
+                }
+                if(this.fileInfo.url == '/market/cStoreOutWo/importData'){
+                    query.append("woNo", this.fileInfo.woNo);
+                }
+                if(this.fileInfo.url == '/market/cStoreScheTrainEva/importDataEva'){
+                    query.append("evaId", this.fileInfo.evaId);
+                }
+                this.num++;
+                let _this = this;
+                this.$http({
+                    url: this.fileInfo.url,
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: query,
+                }).then((res) => {
+                    if (this.fileInfo.type === 'btn') {
+                        this.$refs['upload'].clearFiles();
+                        this.$emit('uploadBack',res)
+                        if(res.data.result==0){
+                            this.$emit('onSuccess',file)
+                            _this.$message({
+                                message: res.data.desc,
+                                type: 'success'
+                            });
+                        }else if(res.data.result==1){
+                            _this.$message({
+                                message: res.data.desc,
+                                type: 'error'
+                            });
+                        }else if(res.data.result==2){
+                            _this.$message({
+                                message: res.data.desc,
+                                type: 'warning'
+                            });
+                        }else if(res.data.result==3){
+                            _this.$message({
+                                message: res.data.desc,
+                                type: 'info'
+                            });
+                        }else{
+                            _this.$message({
+                                message: res.data.desc,
+                                type: 'success'
+                            });
+                        }
+                        this.num--;
+                        if (this.num == 0) {
+                            this.loading = false;
+                        }
+                        return
+                    }
+                    if (this.fileInfo.type === 'voice') {
+                        this.attList = res.data;
+                    } else {
+                        this.attList.push({
+                            name:res.data.body.fileName,
+                            id: res.data.body.id,
+                            fileName: res.data.body.fileName,
+                            fileCode: res.data.body.fileCode,
+                            opName: res.data.body.opName,
+                            opNo: res.data.body.opNo,
+                            opTime: res.data.body.opTime,
+                            attchFileId: res.data.body.attchFileId,
+                            type: res.data.body.type,
+                        });
+                    }
+                    this.$emit('uploadBack', this.attList);
+                    this.num--;
+                    if (this.num == 0) {
+                        this.loading = false;
+                    }
+                    return true
+                }).catch((res) => {
+                    this.$message({
+                        message: file.name+'上传失败',
+                        type: 'error'
+                    });
+                    this.num--;
+                    if (this.num == 0) {
+                        this.loading = false;
+                    }
+                    for (let i = 0; i < this.$refs['upload'].uploadFiles.length; i++) {
+                        if(file.name == this.$refs['upload'].uploadFiles[i].name){
+                            this.$refs['upload'].uploadFiles.splice(i,1)
+                        }
+                    }
+                    return false
+                })
+            },
+        },
+        mounted() {
+
+        },
+        created() {
+            this.attList = [];
+            for (let i = 0; i < this.fileList.length; i++) {
+                this.attList.push({
+                    id: this.fileList[i].id,
+                    name:this.fileList[i].fileName,
+                    fileName: this.fileList[i].fileName,
+                    fileCode: this.fileList[i].fileCode,
+                    opName: this.fileList[i].opName,
+                    opNo: this.fileList[i].opNo,
+                    opTime: this.fileList[i].opTime,
+                    attchFileId: this.fileList[i].attchFileId,
+                    type: this.fileList[i].type,
+                })
+            }
+        },
+        watch: {
+            fileList() {
+                this.attList = [];
+                for (let i = 0; i < this.fileList.length; i++) {
+                    this.attList.push({
+                        id: this.fileList[i].id,
+                        name:this.fileList[i].fileName,
+                        fileName: this.fileList[i].fileName,
+                        fileCode: this.fileList[i].fileCode,
+                        opName: this.fileList[i].opName,
+                        opNo: this.fileList[i].opNo,
+                        opTime: this.fileList[i].opTime,
+                        attchFileId: this.fileList[i].attchFileId,
+                        type: this.fileList[i].type,
+                    })
+                }
+            }
+        }
+    }
+</script>
+<style scoped lang="scss">
+
+</style>

+ 0 - 3
src/components/workflow.vue

@@ -271,9 +271,6 @@ export default {
       }
     },
     submitWork() {
-      console.log(this.nodes);
-      //多人转派环节
-
       //多人会签处理环节
       let list = {
         userId: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员id

+ 80 - 74
src/components/workflowBase.vue

@@ -8,27 +8,15 @@
               选择路径
 
               <div class="flex-path-list">
-                <div
-                  v-if="manyReassignment"
-                  :class="actives"
-                  @click="clickManyTransfer(1)"
-                >
+                <div v-if="manyReassignment" :class="actives" @click="clickManyTransfer(1)">
                   转派
                 </div>
-                <div
-                  v-if="transferStatus"
-                  :class="active"
-                  @click="clickTransfer(1)"
-                >
+                <div v-if="transferStatus" :class="active" @click="clickTransfer(1)">
                   转派
                 </div>
                 <div v-if="copyStatus" @click="clickTransfer(2)">抄送</div>
-                <div
-                  v-for="(item, index) in node.nextShapes"
-                  :key="index"
-                  :class="seleIndex == index ? 'active' : ''"
-                  @click="clickGetTree(item, index)"
-                >
+                <div v-for="(item, index) in node.nextShapes" :key="index" :class="seleIndex == index ? 'active' : ''"
+                  @click="clickGetTree(item, index)">
                   {{ item.properties.name }}
                 </div>
               </div>
@@ -37,18 +25,11 @@
           <div class="flex-commons">
             <div class="flex-left-header-text">
               常用意见
-              <span @click="clickEdit" class="flex-icon"
-                ><i class="el-icon-edit"></i>修改</span
-              >
+              <span @click="clickEdit" class="flex-icon"><i class="el-icon-edit"></i>修改</span>
             </div>
             <div class="flex-slide">
-              <div
-                v-for="(item, index) in commonlyList"
-                :key="index"
-                ref="common"
-                class="flex-common"
-                @click="clickCommonly($event)"
-              >
+              <div v-for="(item, index) in commonlyList" :key="index" ref="common" class="flex-common"
+                @click="clickCommonly($event)">
                 {{ item.dataName }}
               </div>
             </div>
@@ -56,30 +37,17 @@
         </div>
         <div class="flex-opinion">
           <div class="flex-left-header-text">意见内容</div>
-          <el-input
-            type="textarea"
-            autosize
-            placeholder="请输入内容"
-            v-model="textarea"
-          >
+          <el-input type="textarea" autosize placeholder="请输入内容" v-model="textarea">
           </el-input>
         </div>
       </div>
       <div class="flex-right" :class="{ copyClass: CopyStatus }">
-        <div
-          class="flex-left-header-text"
-          :class="{ 'flex-right-text': CopyStatus }"
-        >
+        <div class="flex-left-header-text" :class="{ 'flex-right-text': CopyStatus }">
           本部门人员办理
           <div style="display: flex">
             <div class="flex-header-text-tree">
               候选人
-              <deptTree
-                ref="defTree"
-                class="flex-slide"
-                :treeList="treeList"
-                @changeTree="changeTree"
-              />
+              <deptTree ref="defTree" class="flex-slide" :treeList="treeList" @changeTree="changeTree" />
             </div>
             <div class="flex-header-text-tree">
               已选人员
@@ -95,16 +63,13 @@
           <div style="display: flex">
             <div class="flex-header-text-tree">
               抄送人
-              <deptTree
-                ref="defTrees"
-                class="flex-slide"
-                :treeList="treeCopyList"
-                @changeTree="changeTreeCopy"
-              />
+              <deptTree ref="defTrees" class="flex-slide" :treeList="treeCopyList" @changeTree="changeTreeCopy" />
             </div>
             <div class="flex-header-text-tree">
               已选人员
-              <div class="">{{ copyUser }}</div>
+              <div class="" v-for="(item, index) in copyUser" :key="index">
+                {{ item.loginNameStr }}
+              </div>
             </div>
           </div>
         </div>
@@ -115,21 +80,10 @@
         <el-button type="primary" @click="submitWork()">提交</el-button>
       </div>
     </div>
-    <el-dialog
-      title="修改常用意见"
-      :visible.sync="editStatus"
-      width="100%"
-      :before-close="editCloses"
-      :modal="false"
-      :destroy-on-close="true"
-    >
+    <el-dialog title="修改常用意见" :visible.sync="editStatus" width="100%" :before-close="editCloses" :modal="false"
+      :destroy-on-close="true">
       <div style="overflow-y: scroll; overflow-x: hidden; height: 240px">
-        <div
-          v-for="(item, index) in commonlyList"
-          :key="index"
-          ref="common"
-          class="flex-common"
-        >
+        <div v-for="(item, index) in commonlyList" :key="index" ref="common" class="flex-common">
           {{ item.dataName
           }}<i class="el-icon-circle-close" @click="deleStatus(item)"></i>
         </div>
@@ -214,7 +168,7 @@ export default {
       };
 
       let res = await this.common.httpPost(obj, success);
-      function success(data) {}
+      function success(data) { }
     },
     async nextWorks(lists, list) {
       let listss = {
@@ -276,7 +230,7 @@ export default {
         content: this.textarea, //意见内容
       };
       if (this.manyPeopleStatus == true) {
-        list.procinstid = this.list.processId;
+        list.procinstid = this.list.process_id;
         // if (this.backThree.length <= 1) {
         // this.$message.error("请选择多人");
         // return;
@@ -309,9 +263,14 @@ export default {
             return false;
           }
         } else {
-          if (this.treeCopyList.length) {
+          if (this.copyUser.length) {
             //抄送
-            list.copyman = this.treeCopyList[0].loginNoStrCopy;
+            // list.copyman = this.treeCopyList[0].loginNoStrCopy;
+            // list.copyman = this.copyUser;
+            list.copyman = ''
+            this.copyUser.map((item) => {
+              list.copyman += item.loginNoStr + ','
+            })
           }
           if (this.isLastManStatus == true) {
             list.lastman = "yes";
@@ -331,7 +290,7 @@ export default {
               list.nextDealMan = this.backThree[0].loginNoStr;
             }
           } else {
-            if (this.clicknextName === "流程结束") {
+            if (this.clicknextName === "流程结束" || this.clicknextName === "提交至任务发起人") {
             } else {
               this.$message.error("请选择候选人");
               return false;
@@ -355,8 +314,10 @@ export default {
       });
     },
     async nextWork(list) {
+      console.log(list);
       //e:yes||no,list:传入数组,title:结束标签,res:驳回标签,id:工单更新id
       let _this = this;
+      let copylist = list
       let obj = {
         url: _this.$url.formList.nextWork, //下一步工作流接口
         data: list,
@@ -392,7 +353,8 @@ export default {
             };
             if (data.copytaskid) {
               list.copytaskid = data.copytaskid;
-              list.copyman = _this.treeCopyList[0].loginNoStrCopy;
+              // list.copyman = _this.treeCopyList[0].loginNoStrCopy;
+              list.copyman = copylist.copyman;
             }
             if (_this.demand) {
               list.needNo = _this.demand;
@@ -459,7 +421,7 @@ export default {
           }
           if (res.data.body.nextShapes[0].copy !== null) {
             if (res.data.body.nextShapes[0].copy.copy === "true") {
-              // this.copyStatus = true; //抄送按钮生效
+              this.copyStatus = true; //抄送按钮生效
               this.CopyStatus = true;
             } else {
               this.copyStatus = false;
@@ -496,7 +458,7 @@ export default {
     },
     //查询候选人接口
     getTreeLists(e, status) {
-      let createdId = "createld";
+      let createdId = "createId";
       let id =
         e.nextShapes[0].properties.documentation === createdId
           ? this.list.createId
@@ -512,7 +474,7 @@ export default {
       }).then((res) => {
         console.log(status);
         if (status === 2) {
-          this.treeCopyList = res.data; //抄送
+          // this.treeCopyList = res.data; //抄送
           //  this.$refs.defTrees.treeList = res.data;
         } else {
           this.treeList = res.data; //抄送
@@ -520,6 +482,22 @@ export default {
           console.log(this.treeList);
         }
       });
+      if (this.copyStatus == true) {
+        this.$http({
+          url: "/market/api/user/info/queryNodePers?params=" + e.nextShapes[0].properties.formkeydefinition,
+          method: "post",
+          headers: {
+            "Content-Type": "application/json",
+          },
+          data: "",
+        }).then((res) => {
+          console.log(status);
+          this.treeCopyList = res.data; //抄送
+
+        });
+      } else {
+
+      }
     },
     //转派按钮方法
     clickTransfer(e) {
@@ -534,10 +512,14 @@ export default {
     clickGetTree(e, index) {
       this.$refs.defTree.userList = [];
       this.backThree = [];
+      this.$refs.defTree.userList = [];
+      this.backThree = [];
+      this.copyUser = [];
       this.CopyStatus = false;
       this.TransferStatus = false;
       //   this.clickTaskName = e.properties.name;
       this.clicknextName = e.properties.name;
+      console.log(this.clicknextName);
       this.seleIndex = index;
       this.getNextPath(e.resourceId, 3); //1 为点击后获取线
     },
@@ -568,7 +550,6 @@ export default {
           if (this.CopyStatus === true) {
             this.getTreeLists(e[0].loginNoStr, 2);
           }
-
           if (e[0]) {
             this.selectUser = e[0].loginNameStr;
           } else {
@@ -577,6 +558,10 @@ export default {
         }
       }
     },
+    changeTreeCopy(e) {
+      console.log(e);
+      this.copyUser = e
+    },
     //获取字典表常用意见
     getMetirialType(e) {
       this.$http({
@@ -685,17 +670,20 @@ export default {
   text-align: center;
 }
 
+
 .flex-icon {
   float: right;
   margin-right: 20px;
   color: #4277a1;
 }
 
+
 .flex-handle {
   width: 100%;
   padding: 30px;
   display: flex;
 
+
   .flex-right {
     width: 50%;
     border: 1px solid #e1e1e1;
@@ -703,15 +691,18 @@ export default {
   }
 }
 
+
 .flex-left {
   width: 50%;
   display: flex;
   flex-direction: column;
 
+
   .flex-left-header {
     display: flex;
     justify-content: space-around;
 
+
     .flex-path {
       height: 280px;
       border: 1px solid #e1e1e1;
@@ -720,11 +711,13 @@ export default {
   }
 }
 
+
 .flex-common {
   padding: 10px 5%;
   font-size: 18px;
 }
 
+
 .flex-left-header-text {
   height: 40px;
   line-height: 40px;
@@ -735,21 +728,25 @@ export default {
   font-weight: bold;
 }
 
+
 .flex-path-list {
   overflow-y: scroll;
   overflow-x: hidden;
   height: 14rem;
 }
 
+
 .flex-slide {
   overflow-y: scroll;
   overflow-x: hidden;
 }
 
+
 .active {
   background-color: #f3faff;
 }
 
+
 .flex-opinion {
   height: 280px;
   border: 1px solid #e1e1e1;
@@ -757,28 +754,37 @@ export default {
   margin-top: 20px;
 }
 
+
 .flex-right-text {
   margin-right: 20px;
   width: 50%;
 }
 
+
 .flex-commons {
   height: 280px;
   border: 1px solid #e1e1e1;
   width: 30%;
 }
 
+
 .flex-footer-botton {
   display: flex;
   justify-content: space-evenly;
 }
 
+
 .flex-button {
   margin-top: 10px;
   margin-bottom: 10px;
 
+
   ::v-deep .el-button--primary {
     width: 222px;
   }
 }
-</style>
+
+.copyClass {
+  display: flex;
+}
+</style>

+ 698 - 0
src/components/workflowBaseshoubu.vue

@@ -0,0 +1,698 @@
+<template>
+  <div>
+    <div class="flex-handle">
+      <div class="flex-left">
+        <div class="flex-left-header">
+          <div class="flex-path">
+            <div class="flex-left-header-text">
+              选择路径
+
+              <div class="flex-path-list">
+                <div v-if="transferStatus" @click="clickTransfer(1)">转派</div>
+                <div v-if="copyStatus" @click="clickTransfer(2)">抄送</div>
+                <div v-for="(item, index) in node.nextShapes" :key="index" :class="seleIndex == index ? 'active' : ''"
+                  @click="clickGetTree(item, index)">
+                  {{ item.properties.name }}
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="flex-commons">
+            <div class="flex-left-header-text">
+              常用意见
+              <span @click="clickEdit" class="flex-icon"><i class="el-icon-edit"></i>修改</span>
+            </div>
+            <div class="flex-slide">
+              <div v-for="(item, index) in commonlyList" :key="index" ref="common" class="flex-common"
+                @click="clickCommonly($event)">
+                {{ item.dataName }}
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="flex-opinion">
+          <div class="flex-left-header-text">意见内容</div>
+          <el-input type="textarea" autosize placeholder="请输入内容" v-model="textarea">
+          </el-input>
+        </div>
+      </div>
+      <div class="flex-right" :class="{ copyClass: CopyStatus }">
+        <div class="flex-left-header-text" :class="{ 'flex-right-text': CopyStatus }">
+          本部门人员办理
+          <div style="display: flex">
+            <div class="flex-header-text-tree">
+              候选人
+              <deptTree ref="defTree" class="flex-slide" :treeList="treeList" @changeTree="changeTree" />
+            </div>
+            <div class="flex-header-text-tree">
+              已选人员
+              <!-- <div class="">{{ selectUser }}</div> -->
+              <div class="" v-for="(item, index) in backThree" :key="index">
+                {{ item.loginNameStr }}
+              </div>
+            </div>
+          </div>
+        </div>
+        <div v-if="CopyStatus" class="flex-left-header-text flex-right-text">
+          抄送人员
+          <div style="display: flex">
+            <div class="flex-header-text-tree">
+              抄送人
+              <deptTree ref="defTrees" class="flex-slide" :treeList="treeCopyList" @changeTree="changeTreeCopy" />
+            </div>
+            <div class="flex-header-text-tree">
+              已选人员
+              <div class="">{{ copyUser }}</div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="flex-footer-botton">
+      <div class="flex-button">
+        <el-button type="primary" @click="submitWork()">提交</el-button>
+      </div>
+    </div>
+    <el-dialog title="修改常用意见" :visible.sync="editStatus" width="100%" :before-close="editCloses" :modal="false"
+      :destroy-on-close="true">
+      <div style="overflow-y: scroll; overflow-x: hidden; height: 240px">
+        <div v-for="(item, index) in commonlyList" :key="index" ref="common" class="flex-common">
+          {{ item.dataName
+}}<i class="el-icon-circle-close" @click="deleStatus(item)"></i>
+        </div>
+        <div class="flex-common">
+          <i class="el-icon-circle-plus-outline" @click="addStatus()"></i>
+        </div>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import deptTree from "./workDeptThree.vue";
+export default {
+  inject: ['reload'],
+  components: {
+    deptTree,
+  },
+  name: "workflow",
+  data() {
+    return {
+      manyPeopleStatus: false, //多人处理下发任务
+      editStatus: false, //常用意见控制
+      transferStatus: false, //转派按钮控制
+      TransferStatus: false, //是否点击转派状态
+      copyStatus: false, //抄送按钮控制
+      CopyStatus: false, //是否点击抄送状态
+      node: [], //路径列表
+      seleIndex: "", //点击路径下标
+      commonlyList: [], //常用意见数组
+      textarea: "未填写意见", //意见内容字段
+      copyUser: "", //抄送人员列表
+      selectUser: "", //已选人员列表
+      treeList: [], // 待选人员列表
+      propsList: [],
+      nodes: [],
+      initialList: [], //第一次进入是加载节点
+      clicknextName: "", //获取的流程节点
+      backThree: [],
+      treeCopyList: [],
+      demand: "",
+      nextDealManList: "",
+      isLastManStatus: false,
+    };
+  },
+  props: {
+    //  表格数据和表格部分属性的对象
+    // eslint-disable-next-line vue/require-default-prop
+    list: {
+      type: Object,
+    },
+    requestForm: {
+      type: Object,
+    },
+  },
+  created() {
+    this.getNextPath(this.list.resourceId, 1);
+    this.getMetirialType();
+  },
+  methods: {
+    async nextWorks(lists, list) {
+      let _this = this;
+      let obj = {
+        url: _this.$url.formList.nextWork, //下一步工作流接口
+        data: lists,
+        status: "form",
+      };
+      await this.common.httpPost(obj, success);
+      function success(data) {
+        let updateList = {
+          taskId: data.taskid,
+          id: _this.list.id,
+          resourceId: _this.nodes.currentShape[0].resourceId,
+          tableName: _this.requestForm.processDefinitionKey,
+        };
+        list.taskId = data.taskid;
+        _this.setUpdate(updateList);
+        _this.getLastManList(list);
+      }
+    },
+    submitWork() {
+      //多人会签处理环节
+      let list = {
+        userId: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员id
+        taskId: this.list.taskId, //表单标识
+        // procinstid: this.list.processId,
+        taskName: this.clicknextName, //流程节点
+        userCode: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员code
+        content: this.textarea, //意见内容
+      };
+      let newlist = {
+        userId: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员id
+        taskId: this.list.taskId, //表单标识
+        // procinstid: this.list.processId,
+        taskName: this.clicknextName, //流程节点
+        userCode: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员code
+        content: this.textarea, //意见内容
+      };
+      if (this.manyPeopleStatus == true) {
+        list.procinstid = this.list.processId.data?this.list.processId.data:this.list.processId;
+        // if (this.backThree.length <= 1) {
+        // this.$message.error("请选择多人");
+        // return;
+        // } else {
+        list.lastmanList = this.nextDealManList;
+        // }
+        if (this.nodes.currentShape) {
+          newlist.resolution = this.nodes.currentShape[0].condition.resolution;
+          newlist.approve = this.nodes.currentShape[0].condition.approve;
+        }
+        if (this.backThree.length > 0) {
+          newlist.nextDealMan = "admin";
+        }
+        this.nextWorks(newlist, list);
+      } else {
+        console.log(456);
+        //生成需求决策编号
+        if (this.clicknextName === "起草人发送") {
+          this.getDemand();
+        }
+        if (!this.list.taskId) {
+          this.$message.error("请先保存表单后处理");
+          return false;
+        }
+        if (this.TransferStatus === true) {
+          if (this.backThree.length > 0) {
+            this.nextWork();
+          } else {
+            this.$message.error("请选择候选人");
+            return false;
+          }
+        } else {
+          if (this.treeCopyList.length) {
+            //抄送
+            list.copyman = this.treeCopyList[0].loginNoStrCopy;
+          }
+          if (this.isLastManStatus == true) {
+            list.lastman = "yes";
+          }
+          if (this.nodes.currentShape) {
+            list.resolution = this.nodes.currentShape[0].condition.resolution;
+            list.approve = this.nodes.currentShape[0].condition.approve;
+          }
+          if (this.clicknextName === "") {
+            this.$message.error("请选择流程节点");
+            return false;
+          }
+          if (this.backThree.length > 0) {
+            if (this.manyPeopleStatus == true) {
+              list.nextDealManList = this.nextDealManList;
+            } else {
+              list.nextDealMan = this.backThree[0].loginNoStr;
+            }
+          } else {
+            if (this.clicknextName === "流程结束") {
+            } else {
+              this.$message.error("请选择候选人");
+              return false;
+            }
+          }
+          this.nextWork(list);
+        }
+      }
+    },
+    //生成需求决策编号接口
+    getDemand() {
+      this.$http({
+        url: "/market/waf/getBusi",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {},
+      }).then((res) => {
+        this.demand = res.data;
+      });
+    },
+    async getLastManList(e) {
+      let _this = this;
+      let obj = {
+        url: _this.$url.formList.getComplateLastMan, //开始工作流接口
+        data: e,
+        // status: "form",
+        headers: {
+          "Content-Type": "application/json",
+        },
+      };
+
+      let res = await this.common.httpPost(obj, success);
+      function success(data) { }
+    },
+    async nextWork(list) {
+      //e:yes||no,list:传入数组,title:结束标签,res:驳回标签,id:工单更新id
+      let _this = this;
+      let obj = {
+        url: _this.$url.formList.nextWork, //下一步工作流接口
+        data: list,
+        status: "form",
+      };
+      if (_this.TransferStatus === true) {
+        let lists = {
+          userId: _this.backThree[0].loginNoStr,
+          taskId: _this.list.taskId,
+          content: _this.textarea,
+        };
+        obj.url = _this.$url.formList.transferTask + _this.list.taskId;
+        obj.data = lists;
+      }
+      await this.common.httpPost(obj, success);
+      function success(data) {
+        if (data != null) {
+          if (_this.TransferStatus === true) {
+            let list = {
+              taskId: data.taskid,
+              id: _this.list.id,
+              tableName: _this.requestForm.processDefinitionKey,
+            };
+
+            _this.setUpdate(list);
+          } else {
+            let list = {
+              taskId: data.taskid,
+              id: _this.list.id,
+              resourceId: _this.nodes.currentShape[0].resourceId,
+              taskName: _this.nodes.nextShapes[0].properties.name,
+              tableName: _this.requestForm.processDefinitionKey,
+            };
+            if (data.copytaskid) {
+              list.copytaskid = data.copytaskid;
+              list.copyman = _this.treeCopyList[0].loginNoStrCopy;
+            }
+            if (_this.demand) {
+              list.needNo = _this.demand;
+            }
+            _this.setUpdate(list);
+          }
+        } else {
+          let list = {
+            taskName: "结束",
+            id: _this.list.id,
+            tableName: _this.requestForm.processDefinitionKey,
+          };
+          _this.setUpdate(list);
+        }
+      }
+    },
+    setUpdate(e) {
+      this.$http({
+        url: "/market/waf/updateBase",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: e,
+      }).then((res) => {
+        this.$emit("updateForm", true);
+      });
+    },
+    //查询路径接口
+    getNextPath(e, status) {
+      let { fresourceId, processDefinitionKey } = this.requestForm;
+      let list = {
+        fresourceId: fresourceId,
+        processId: processDefinitionKey,
+      };
+      e ? (list.resourceId = e) : list;
+      this.$http({
+        url: "/market/waf/queryPath",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: list,
+      }).then((res) => {
+        if (status === 1) {
+          //第一次进入取路径
+          this.initialList = res.data.body;
+          if (res.data.body.nextShapes[0].multi !== null) {
+            if (res.data.body.nextShapes[0].multi.multi === "true") {
+              // this.getqueryMultiTaskId();
+              this.isLastManStatus = true;
+            } else {
+              this.isLastManStatus = false;
+            }
+          }
+          if (res.data.body.nextShapes[0].loop !== null) {
+            if (res.data.body.nextShapes[0].loop.loop === "true") {
+              this.transferStatus = true; //转派按钮生效
+            } else {
+              this.transferStatus = false;
+            }
+          } else {
+            this.transferStatus = false;
+          }
+          if (res.data.body.nextShapes[0].copy !== null) {
+            if (res.data.body.nextShapes[0].copy.copy === "true") {
+              // this.copyStatus = true; //抄送按钮生效
+              this.CopyStatus = true;
+            } else {
+              this.copyStatus = false;
+            }
+          } else {
+            this.copyStatus = false;
+          }
+          res.data.body.currentShape.map((item, index) => {
+            this.getNextPath(item.resourceId, 2);
+          });
+        }
+        if (status === 2) {
+          if (res.data.body.nextShapes[0].condition !== null) {
+            this.node = res.data.body;
+          } else {
+            this.getNextPath(res.data.body.nextShapes[0].resourceId, 2);
+          }
+        }
+        if (status === 3) {
+          this.nodes = res.data.body;
+          this.getTreeLists(res.data.body, 1);
+
+          if (res.data.body.nextShapes[0].multi !== null) {
+            if (res.data.body.nextShapes[0].multi.multi === "true") {
+              this.manyPeopleStatus = true; //转派按钮生效
+            } else {
+              this.manyPeopleStatus = false;
+            }
+          } else {
+            this.manyPeopleStatus = false;
+          }
+        }
+      });
+    },
+    //查询候选人接口
+    getTreeLists(e, status) {
+      let createdId = "createId";
+      let id =
+        e.nextShapes[0].properties.documentation === createdId
+          ? this.list.createId
+          : e.nextShapes[0].properties.documentation;
+      console.log(id);
+      this.$http({
+        url: "/market/api/user/info/queryNodePers?params=" + id,
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: "",
+      }).then((res) => {
+        console.log(status);
+        if (status === 2) {
+          this.treeCopyList = res.data; //抄送
+          //  this.$refs.defTrees.treeList = res.data;
+        } else {
+          this.treeList = res.data; //抄送
+          // this.$refs.defTree.treeList = res.data;
+          console.log(this.treeList);
+        }
+      });
+    },
+    //转派按钮方法
+    clickTransfer(e) {
+      if (e == 1) {
+        this.TransferStatus = true;
+      } else if (e == 2) {
+        this.CopyStatus = true;
+      }
+      this.getTreeLists(this.initialList, e);
+    },
+    //点击节点获取下一步的处理人字段
+    clickGetTree(e, index) {
+      this.$refs.defTree.userList = [];
+      this.backThree = [];
+      this.CopyStatus = false;
+      this.TransferStatus = false;
+      //   this.clickTaskName = e.properties.name;
+      this.clicknextName = e.properties.name;
+      this.seleIndex = index;
+      this.getNextPath(e.resourceId, 3); //1 为点击后获取线
+    },
+    //点击常用意见方法
+    clickCommonly(e) {
+      this.textarea = e.currentTarget.innerHTML;
+    },
+    //点击修改
+    clickEdit() {
+      this.editStatus = true;
+    },
+    //选择树的回调
+    changeTree(e) {
+      if (this.manyPeopleStatus == true) {
+        this.backThree = e;
+
+        let arr = [];
+        this.backThree.map((item) => {
+          arr.push(item.loginNoStr);
+        });
+        this.nextDealManList = arr.toString();
+      } else {
+        if (e.length > 1) {
+          this.$message.error("只能选择一个人");
+          return;
+        } else {
+          this.backThree = e;
+          if (this.CopyStatus === true) {
+            this.getTreeLists(e[0].loginNoStr, 2);
+          }
+
+          if (e[0]) {
+            this.selectUser = e[0].loginNameStr;
+          } else {
+            this.selectUser = "暂无选择";
+          }
+        }
+      }
+    },
+    //获取字典表常用意见
+    getMetirialType(e) {
+      this.$http({
+        url: "/market/cfgDataDict/queryList",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {
+          dictCodePks: "approval",
+        },
+      }).then((res) => {
+        console.log(res);
+        this.commonlyList = res.data;
+      });
+    },
+    //添加字典表常用意见
+    geaddctType(e) {
+      this.$http({
+        url: "/market/cfgDataDict/add",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: e,
+      }).then((res) => {
+        this.getMetirialType();
+      });
+    },
+    //关闭修改
+    editCloses() {
+      this.editStatus = false;
+    },
+    //常用意见添加
+    addStatus() {
+      let newData = Date.parse(new Date());
+      this.$prompt("请输入常用意见", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+      })
+        .then(({ value }) => {
+          let list = {
+            dictCode: "approval",
+            dataCode: newData,
+            dataName: value,
+            dictName: "审批意见",
+          };
+          this.geaddctType(list);
+          this.$message({
+            type: "success",
+            message: "常用意见添加成功",
+          });
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "取消输入",
+          });
+        });
+    },
+    //常用意见删除
+    deleStatus(e) {
+      this.$confirm("此操作将删除此常用意见, 是否继续?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          let list = {
+            dataCode: e.dataCode,
+            dictCode: "approval",
+          };
+          this.geDelectType(list);
+          this.$message({
+            type: "success",
+            message: "删除成功!",
+          });
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "已取消删除",
+          });
+        });
+    },
+    //删除字典表常用意见
+    geDelectType(e) {
+      this.$http({
+        url: "/market/cfgDataDicts/del",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: e,
+      }).then((res) => {
+        this.getMetirialType();
+      });
+    },
+  },
+};
+</script>
+
+<style lang='scss' scoped>
+.flex-header-text-tree {
+  width: 50%;
+  text-align: center;
+}
+
+.flex-icon {
+  float: right;
+  margin-right: 20px;
+  color: #4277a1;
+}
+
+.flex-handle {
+  width: 100%;
+  padding: 30px;
+  display: flex;
+
+  .flex-right {
+    width: 50%;
+    border: 1px solid #e1e1e1;
+    margin-left: 20px;
+  }
+}
+
+.flex-left {
+  width: 50%;
+  display: flex;
+  flex-direction: column;
+
+  .flex-left-header {
+    display: flex;
+    justify-content: space-around;
+
+    .flex-path {
+      height: 280px;
+      border: 1px solid #e1e1e1;
+      width: 68%;
+    }
+  }
+}
+
+.flex-common {
+  padding: 10px 5%;
+  font-size: 18px;
+}
+
+.flex-left-header-text {
+  height: 40px;
+  line-height: 40px;
+  color: black;
+  padding-left: 10px;
+  background-color: #cde4f6;
+  font-size: 18px;
+  font-weight: bold;
+}
+
+.flex-path-list {
+  overflow-y: scroll;
+  overflow-x: hidden;
+  height: 14rem;
+}
+
+.flex-slide {
+  overflow-y: scroll;
+  overflow-x: hidden;
+}
+
+.active {
+  background-color: #f3faff;
+}
+
+.flex-opinion {
+  height: 280px;
+  border: 1px solid #e1e1e1;
+  width: 100%;
+  margin-top: 20px;
+}
+
+.flex-right-text {
+  margin-right: 20px;
+  width: 50%;
+}
+
+.flex-commons {
+  height: 280px;
+  border: 1px solid #e1e1e1;
+  width: 30%;
+}
+
+.flex-footer-botton {
+  display: flex;
+  justify-content: space-evenly;
+}
+
+.flex-button {
+  margin-top: 10px;
+  margin-bottom: 10px;
+
+  ::v-deep .el-button--primary {
+    width: 222px;
+  }
+}
+</style>

+ 795 - 0
src/components/workflowBasexcwls.vue

@@ -0,0 +1,795 @@
+<template>
+  <div>
+    <div class="flex-handle">
+      <div class="flex-left">
+        <div class="flex-left-header">
+          <div class="flex-path">
+            <div class="flex-left-header-text">
+              选择路径
+
+              <div class="flex-path-list">
+                <div
+                  v-if="manyReassignment"
+                  :class="actives"
+                  @click="clickManyTransfer(1)"
+                >
+                  转派
+                </div>
+                <div
+                  v-if="transferStatus"
+                  :class="active"
+                  @click="clickTransfer(1)"
+                >
+                  转派
+                </div>
+                <div v-if="copyStatus" @click="clickTransfer(2)">抄送</div>
+                <div
+                  v-for="(item, index) in node.nextShapes"
+                  :key="index"
+                  :class="seleIndex == index ? 'active' : ''"
+                  @click="clickGetTree(item, index)"
+                >
+                  {{ item.properties.name }}
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="flex-commons">
+            <div class="flex-left-header-text">
+              常用意见
+              <span @click="clickEdit" class="flex-icon"
+                ><i class="el-icon-edit"></i>修改</span
+              >
+            </div>
+            <div class="flex-slide">
+              <div
+                v-for="(item, index) in commonlyList"
+                :key="index"
+                ref="common"
+                class="flex-common"
+                @click="clickCommonly($event)"
+              >
+                {{ item.dataName }}
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="flex-opinion">
+          <div class="flex-left-header-text">意见内容</div>
+          <el-input
+            type="textarea"
+            autosize
+            placeholder="请输入内容"
+            v-model="textarea"
+          >
+          </el-input>
+        </div>
+      </div>
+      <div class="flex-right" :class="{ copyClass: CopyStatus }">
+        <div
+          class="flex-left-header-text"
+          :class="{ 'flex-right-text': CopyStatus }"
+        >
+          本部门人员办理
+          <div style="display: flex">
+            <div class="flex-header-text-tree">
+              候选人
+              <deptTree
+                ref="defTree"
+                class="flex-slide"
+                :treeList="treeList"
+                @changeTree="changeTree"
+              />
+            </div>
+            <div class="flex-header-text-tree">
+              已选人员
+              <!-- <div class="">{{ selectUser }}</div> -->
+              <div class="" v-for="(item, index) in backThree" :key="index">
+                {{ item.loginNameStr }}
+              </div>
+            </div>
+          </div>
+        </div>
+        <div v-if="CopyStatus" class="flex-left-header-text flex-right-text">
+          抄送人员
+          <div style="display: flex">
+            <div class="flex-header-text-tree">
+              抄送人
+              <deptTree
+                ref="defTrees"
+                class="flex-slide"
+                :treeList="treeCopyList"
+                @changeTree="changeTreeCopy"
+              />
+            </div>
+            <div class="flex-header-text-tree">
+              已选人员
+              <div class="">{{ copyUser }}</div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="flex-footer-botton">
+      <div class="flex-button">
+        <el-button type="primary" @click="submitWork()">提交</el-button>
+      </div>
+    </div>
+    <el-dialog
+      title="修改常用意见"
+      :visible.sync="editStatus"
+      width="100%"
+      :before-close="editCloses"
+      :modal="false"
+      :destroy-on-close="true"
+    >
+      <div style="overflow-y: scroll; overflow-x: hidden; height: 240px">
+        <div
+          v-for="(item, index) in commonlyList"
+          :key="index"
+          ref="common"
+          class="flex-common"
+        >
+          {{ item.dataName
+          }}<i class="el-icon-circle-close" @click="deleStatus(item)"></i>
+        </div>
+        <div class="flex-common">
+          <i class="el-icon-circle-plus-outline" @click="addStatus()"></i>
+        </div>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import deptTree from "./workDeptThree.vue";
+export default {
+  components: {
+    deptTree,
+  },
+  name: "workflow",
+  data() {
+    return {
+      active: "",
+      manyPeopleStatus: false, //多人处理下发任务
+      editStatus: false, //常用意见控制
+      transferStatus: false, //转派按钮控制
+      TransferStatus: false, //是否点击转派状态
+      copyStatus: false, //抄送按钮控制
+      CopyStatus: false, //是否点击抄送状态
+      node: [], //路径列表
+      seleIndex: "1099", //点击路径下标
+      commonlyList: [], //常用意见数组
+      textarea: "未填写意见", //意见内容字段
+      copyUser: "", //抄送人员列表
+      selectUser: "", //已选人员列表
+      treeList: [], // 待选人员列表
+      propsList: [],
+      nodes: [],
+      initialList: [], //第一次进入是加载节点
+      clicknextName: "", //获取的流程节点
+      backThree: [],
+      treeCopyList: [],
+      demand: "",
+      nextDealManList: "",
+      isLastManStatus: false,
+      manyReassignment: false,
+      actives: "",
+    };
+  },
+  props: {
+    //  表格数据和表格部分属性的对象
+    // eslint-disable-next-line vue/require-default-prop
+    list: {
+      type: Object,
+    },
+    requestForm: {
+      type: Object,
+    },
+    adminResourceId: {
+      type: String,
+    },
+  },
+  created() {
+    console.log(this.list);
+    this.getNextPath(this.list.resourceId, 1);
+    this.getMetirialType();
+  },
+  methods: {
+    //多人转派
+    clickManyTransfer() {
+      (this.actives = this.actives != "" ? "" : "active"),
+        (this.seleIndex = "1099");
+      this.getNextPath(this.adminResourceId, 3);
+    },
+    async getLastManList(e) {
+      let _this = this;
+      let obj = {
+        url: _this.$url.formList.getComplateLastMan, //开始工作流接口
+        data: e,
+        // status: "form",
+        headers: {
+          "Content-Type": "application/json",
+        },
+      };
+
+      let res = await this.common.httpPost(obj, success);
+      function success(data) {}
+    },
+    async nextWorks(lists, list) {
+      let listss = {
+        userId: this.nextDealManList, //人员id
+        taskId: this.list.taskId, //表单标识
+        loginstr: JSON.parse(window.sessionStorage.userInfo).loginNoStr,
+        // taskName: this.clicknextName, //流程节点
+        content: this.textarea, //意见内容
+      };
+      if (this.manyReassignment == true) {
+        let _this = this;
+        let obj = {
+          url: _this.$url.formList.getNewTransferTask + _this.list.taskId, //下一步工作流接口
+          data: listss,
+          status: "form",
+        };
+        await this.common.httpPost(obj, success);
+        function success(data) {
+          _this.$emit("beforeClose", true);
+        }
+      } else {
+        let _this = this;
+        let obj = {
+          url: _this.$url.formList.nextWork, //下一步工作流接口
+          data: lists,
+          status: "form",
+        };
+        await this.common.httpPost(obj, success);
+        function success(data) {
+          console.log(data);
+          let updateList = {
+            taskId: data.taskid,
+            id: _this.list.id,
+            resourceId: _this.nodes.currentShape[0].resourceId,
+            tableName: _this.requestForm.processDefinitionKey1,
+          };
+          list.taskId = data.taskid;
+          _this.setUpdate(updateList);
+          _this.getLastManList(list);
+        }
+      }
+    },
+    submitWork() {
+      //多人会签处理环节
+      let list = {
+        userId: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员id
+        taskId: this.list.taskId, //表单标识
+        // procinstid: this.list.processId,
+        taskName: this.clicknextName, //流程节点
+        userCode: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员code
+        content: this.textarea, //意见内容
+      };
+      let newlist = {
+        userId: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员id
+        taskId: this.list.taskId, //表单标识
+        // procinstid: this.list.processId,
+        taskName: this.clicknextName, //流程节点
+        userCode: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员code
+        content: this.textarea, //意见内容
+      };
+      if (this.manyPeopleStatus == true) {
+        list.procinstid = this.list.processId;
+        // if (this.backThree.length <= 1) {
+        // this.$message.error("请选择多人");
+        // return;
+        // } else {
+        list.lastmanList = this.nextDealManList;
+        // }
+        if (this.nodes.currentShape) {
+          newlist.resolution = this.nodes.currentShape[0].condition.resolution;
+          newlist.approve = this.nodes.currentShape[0].condition.approve;
+        }
+        if (this.backThree.length > 0) {
+          newlist.nextDealMan = "admin";
+        }
+        this.nextWorks(newlist, list);
+      } else {
+        console.log(456);
+        //生成需求决策编号
+        if (this.clicknextName === "起草人发送") {
+          this.getDemand();
+        }
+        if (!this.list.taskId) {
+          this.$message.error("请先保存表单后处理");
+          return false;
+        }
+        if (this.TransferStatus === true) {
+          if (this.backThree.length > 0) {
+            this.nextWork();
+          } else {
+            this.$message.error("请选择候选人");
+            return false;
+          }
+        } else {
+          if (this.treeCopyList.length) {
+            //抄送
+            list.copyman = this.treeCopyList[0].loginNoStrCopy;
+          }
+          if (this.isLastManStatus == true) {
+            list.lastman = "yes";
+          }
+          if (this.nodes.currentShape) {
+            list.resolution = this.nodes.currentShape[0].condition.resolution;
+            list.approve = this.nodes.currentShape[0].condition.approve;
+          }
+          if (this.clicknextName === "") {
+            this.$message.error("请选择流程节点");
+            return false;
+          }
+          if (this.backThree.length > 0) {
+            if (this.manyPeopleStatus == true) {
+              list.nextDealManList = this.nextDealManList;
+            } else {
+              list.nextDealMan = this.backThree[0].loginNoStr;
+            }
+          } else {
+            if (this.clicknextName === "流程结束"||this.clicknextName === "提交至任务发起人") {
+            } else {
+              this.$message.error("请选择候选人");
+              return false;
+            }
+          }
+          this.nextWork(list);
+        }
+      }
+    },
+    //生成需求决策编号接口
+    getDemand() {
+      this.$http({
+        url: "/market/waf/getBusi",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {},
+      }).then((res) => {
+        this.demand = res.data;
+      });
+    },
+    async nextWork(list) {
+      console.log(list);
+      //e:yes||no,list:传入数组,title:结束标签,res:驳回标签,id:工单更新id
+      let _this = this;
+      let obj = {
+        url: _this.$url.formList.nextWork, //下一步工作流接口
+        data: list,
+        status: "form",
+      };
+      if (_this.TransferStatus === true) {
+        let lists = {
+          userId: _this.backThree[0].loginNoStr,
+          taskId: _this.list.taskId,
+          content: _this.textarea,
+        };
+        obj.url = _this.$url.formList.transferTask + _this.list.taskId;
+        obj.data = lists;
+      }
+      await this.common.httpPost(obj, success);
+      function success(data) {
+        console.log(data);
+        if (data != null) {
+          if (_this.TransferStatus === true) {
+            let list = {
+              taskId: data.taskid,
+              // taskId: _this.list.taskId,
+              id: _this.list.id,
+              tableName: _this.requestForm.processDefinitionKey1,
+            };
+
+            _this.setUpdate(list);
+          } else {
+            let list = {
+              taskId: data.taskid,
+              // taskId:_this.list.taskId,
+              id: _this.list.id,
+              resourceId: _this.nodes.currentShape[0].resourceId,
+              taskName: _this.nodes.nextShapes[0].properties.name,
+              tableName: _this.requestForm.processDefinitionKey1,
+            };
+            if (data.copytaskid) {
+              list.copytaskid = data.copytaskid;
+              list.copyman = _this.treeCopyList[0].loginNoStrCopy;
+            }
+            if (_this.demand) {
+              list.needNo = _this.demand;
+            }
+            _this.setUpdate(list);
+          }
+        } else {
+          let list = {
+            taskName: "结束",
+            id: _this.list.id,
+            tableName: _this.requestForm.processDefinitionKey1,
+          };
+          _this.setUpdate(list);
+        }
+      }
+    },
+    setUpdate(e) {
+      this.$http({
+        url: "/market/waf/updateBase",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: e,
+      }).then((res) => {
+        console.log(res.data.body[0].resourceId);
+        this.list.resourceId = res.data.body[0].resourceId;
+        this.$emit("updateForm", true);
+      });
+    },
+    //查询路径接口
+    getNextPath(e, status) {
+      console.log(e);
+      console.log(this.requestForm);
+      let { fresourceId, processDefinitionKey } = this.requestForm;
+      let list = {
+        fresourceId: fresourceId,
+        processId: processDefinitionKey,
+      };
+      e ? (list.resourceId = e) : list;
+      this.$http({
+        url: "/market/waf/queryPath",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: list,
+      }).then((res) => {
+        console.log(res.data.body);
+        if (status === 1) {
+          //第一次进入取路径
+          this.initialList = res.data.body;
+          if (res.data.body.nextShapes[0].multi !== null) {
+            if (res.data.body.nextShapes[0].multi.multi === "true") {
+              // this.getqueryMultiTaskId();
+              this.isLastManStatus = true;
+            } else {
+              this.isLastManStatus = false;
+            }
+          }
+          if (res.data.body.nextShapes[0].loop !== null) {
+            if (res.data.body.nextShapes[0].loop.loop === "true") {
+              this.transferStatus = true; //转派按钮生效
+            } else {
+              this.transferStatus = false;
+            }
+          } else {
+            this.transferStatus = false;
+          }
+          if (res.data.body.nextShapes[0].copy !== null) {
+            if (res.data.body.nextShapes[0].copy.copy === "true") {
+              // this.copyStatus = true; //抄送按钮生效
+              this.CopyStatus = true;
+            } else {
+              this.copyStatus = false;
+            }
+          } else {
+            this.copyStatus = false;
+          }
+          res.data.body.currentShape.map((item, index) => {
+            this.getNextPath(item.resourceId, 2);
+          });
+        }
+        if (status === 2) {
+          //  this.getNextPath(res.data.body.nextShapes[0].resourceId, 2);
+          if (res.data.body.nextShapes[0].condition !== null) {
+            this.node = res.data.body;
+          } else {
+            console.log(res.data.body.nextShapes[0].resourceId);
+            this.getNextPath(res.data.body.nextShapes[0].resourceId, 2);
+          }
+        }
+        if (status === 3) {
+          this.nodes = res.data.body;
+          this.getTreeLists(res.data.body, 1);
+
+          if (res.data.body.nextShapes[0].multi !== null) {
+            if (res.data.body.nextShapes[0].multi.multi === "true") {
+              this.manyPeopleStatus = true; //转派按钮生效
+            } else {
+              this.manyPeopleStatus = false;
+            }
+          } else {
+            this.manyPeopleStatus = false;
+          }
+        }
+      });
+    },
+    //查询候选人接口
+    getTreeLists(e, status) {
+      let createdId = "createId";
+      let id =
+        e.nextShapes[0].properties.documentation === createdId
+          ? this.list.createId
+          : e.nextShapes[0].properties.documentation;
+      console.log(id);
+      this.$http({
+        url: "/market/api/user/info/queryNodePers?params=" + id,
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: "",
+      }).then((res) => {
+        console.log(status);
+        if (status === 2) {
+          this.treeCopyList = res.data; //抄送
+          //  this.$refs.defTrees.treeList = res.data;
+        } else {
+          this.treeList = res.data; //抄送
+          // this.$refs.defTree.treeList = res.data;
+          console.log(this.treeList);
+        }
+      });
+    },
+    //转派按钮方法
+    clickTransfer(e) {
+      if (e == 1) {
+        this.TransferStatus = true;
+      } else if (e == 2) {
+        this.CopyStatus = true;
+      }
+      this.getTreeLists(this.initialList, e);
+    },
+    //点击节点获取下一步的处理人字段
+    clickGetTree(e, index) {
+      this.$refs.defTree.userList = [];
+      this.backThree = [];
+      this.CopyStatus = false;
+      this.TransferStatus = false;
+      //   this.clickTaskName = e.properties.name;
+      this.clicknextName = e.properties.name;
+      this.seleIndex = index;
+      this.getNextPath(e.resourceId, 3); //1 为点击后获取线
+    },
+    //点击常用意见方法
+    clickCommonly(e) {
+      this.textarea = e.currentTarget.innerHTML;
+    },
+    //点击修改
+    clickEdit() {
+      this.editStatus = true;
+    },
+    //选择树的回调
+    changeTree(e) {
+      if (this.manyPeopleStatus == true) {
+        this.backThree = e;
+
+        let arr = [];
+        this.backThree.map((item) => {
+          arr.push(item.loginNoStr);
+        });
+        this.nextDealManList = arr.toString();
+      } else {
+        if (e.length > 1) {
+          this.$message.error("只能选择一个人");
+          return;
+        } else {
+          this.backThree = e;
+          if (this.CopyStatus === true) {
+            this.getTreeLists(e[0].loginNoStr, 2);
+          }
+
+          if (e[0]) {
+            this.selectUser = e[0].loginNameStr;
+          } else {
+            this.selectUser = "暂无选择";
+          }
+        }
+      }
+    },
+    //获取字典表常用意见
+    getMetirialType(e) {
+      this.$http({
+        url: "/market/cfgDataDict/queryList",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {
+          dictCodePks: "approval",
+        },
+      }).then((res) => {
+        console.log(res);
+        this.commonlyList = res.data;
+      });
+    },
+    //添加字典表常用意见
+    geaddctType(e) {
+      this.$http({
+        url: "/market/cfgDataDict/add",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: e,
+      }).then((res) => {
+        this.getMetirialType();
+      });
+    },
+    //关闭修改
+    editCloses() {
+      this.editStatus = false;
+    },
+    //常用意见添加
+    addStatus() {
+      let newData = Date.parse(new Date());
+      this.$prompt("请输入常用意见", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+      })
+        .then(({ value }) => {
+          let list = {
+            dictCode: "approval",
+            dataCode: newData,
+            dataName: value,
+            dictName: "审批意见",
+          };
+          this.geaddctType(list);
+          this.$message({
+            type: "success",
+            message: "常用意见添加成功",
+          });
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "取消输入",
+          });
+        });
+    },
+    //常用意见删除
+    deleStatus(e) {
+      this.$confirm("此操作将删除此常用意见, 是否继续?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          let list = {
+            dataCode: e.dataCode,
+            dictCode: "approval",
+          };
+          this.geDelectType(list);
+          this.$message({
+            type: "success",
+            message: "删除成功!",
+          });
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "已取消删除",
+          });
+        });
+    },
+    //删除字典表常用意见
+    geDelectType(e) {
+      this.$http({
+        url: "/market/cfgDataDicts/del",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: e,
+      }).then((res) => {
+        this.getMetirialType();
+      });
+    },
+  },
+};
+</script>
+
+<style lang='scss' scoped>
+.flex-header-text-tree {
+  width: 50%;
+  text-align: center;
+}
+
+.flex-icon {
+  float: right;
+  margin-right: 20px;
+  color: #4277a1;
+}
+
+.flex-handle {
+  width: 100%;
+  padding: 30px;
+  display: flex;
+
+  .flex-right {
+    width: 50%;
+    border: 1px solid #e1e1e1;
+    margin-left: 20px;
+  }
+}
+
+.flex-left {
+  width: 50%;
+  display: flex;
+  flex-direction: column;
+
+  .flex-left-header {
+    display: flex;
+    justify-content: space-around;
+
+    .flex-path {
+      height: 280px;
+      border: 1px solid #e1e1e1;
+      width: 68%;
+    }
+  }
+}
+
+.flex-common {
+  padding: 10px 5%;
+  font-size: 18px;
+}
+
+.flex-left-header-text {
+  height: 40px;
+  line-height: 40px;
+  color: black;
+  padding-left: 10px;
+  background-color: #cde4f6;
+  font-size: 18px;
+  font-weight: bold;
+}
+
+.flex-path-list {
+  overflow-y: scroll;
+  overflow-x: hidden;
+  height: 14rem;
+}
+
+.flex-slide {
+  overflow-y: scroll;
+  overflow-x: hidden;
+}
+
+.active {
+  background-color: #f3faff;
+}
+
+.flex-opinion {
+  height: 280px;
+  border: 1px solid #e1e1e1;
+  width: 100%;
+  margin-top: 20px;
+}
+
+.flex-right-text {
+  margin-right: 20px;
+  width: 50%;
+}
+
+.flex-commons {
+  height: 280px;
+  border: 1px solid #e1e1e1;
+  width: 30%;
+}
+
+.flex-footer-botton {
+  display: flex;
+  justify-content: space-evenly;
+}
+
+.flex-button {
+  margin-top: 10px;
+  margin-bottom: 10px;
+
+  ::v-deep .el-button--primary {
+    width: 222px;
+  }
+}
+</style>

+ 47 - 52
src/components/workflowEntrance.vue

@@ -25,18 +25,11 @@
           <div class="flex-commons">
             <div class="flex-left-header-text">
               常用意见
-              <span @click="clickEdit" class="flex-icon"
-                ><i class="el-icon-edit"></i>修改</span
-              >
+              <span @click="clickEdit" class="flex-icon"><i class="el-icon-edit"></i>修改</span>
             </div>
             <div class="flex-slide">
-              <div
-                v-for="(item, index) in commonlyList"
-                :key="index"
-                ref="common"
-                class="flex-common"
-                @click="clickCommonly($event)"
-              >
+              <div v-for="(item, index) in commonlyList" :key="index" ref="common" class="flex-common"
+                @click="clickCommonly($event)">
                 {{ item.dataName }}
               </div>
             </div>
@@ -44,12 +37,7 @@
         </div>
         <div class="flex-opinion">
           <div class="flex-left-header-text">意见内容</div>
-          <el-input
-            type="textarea"
-            autosize
-            placeholder="请输入内容"
-            v-model="textarea"
-          >
+          <el-input type="textarea" autosize placeholder="请输入内容" v-model="textarea">
           </el-input>
         </div>
       </div>
@@ -61,12 +49,7 @@
           <div style="display: flex">
             <div class="flex-header-text-tree">
               候选人
-              <deptTree
-                ref="defTree"
-                class="flex-slide"
-                :treeList="treeList"
-                @changeTree="changeTree"
-              />
+              <deptTree ref="defTree" class="flex-slide" :treeList="treeList" @changeTree="changeTree" />
             </div>
             <div class="flex-header-text-tree">
               已选人员
@@ -98,27 +81,15 @@
     </div>
     <div class="flex-footer-botton">
       <div class="flex-button">
-        <el-button type="primary" @click="getnewtransfertask(1)"
-          >提交</el-button
-        >
+        <el-button type="primary" @click="getnewtransfertask(1)">提交</el-button>
       </div>
     </div>
-    <el-dialog
-      title="修改常用意见"
-      :visible.sync="editStatus"
-      width="100%"
-      :before-close="editCloses"
-      :modal="false"
-      :destroy-on-close="true"
-    >
+    <el-dialog title="修改常用意见" :visible.sync="editStatus" width="100%" :before-close="editCloses" :modal="false"
+      :destroy-on-close="true">
       <div style="overflow-y: scroll; overflow-x: hidden; height: 240px">
-        <div
-          v-for="(item, index) in commonlyList"
-          :key="index"
-          ref="common"
-          class="flex-common"
-        >
-          {{ item.dataName
+        <div v-for="(item, index) in commonlyList" :key="index" ref="common" class="flex-common">
+          {{
+            item.dataName
           }}<i class="el-icon-circle-close" @click="deleStatus(item)"></i>
         </div>
         <div class="flex-common">
@@ -138,8 +109,8 @@ export default {
   name: "workflow",
   data() {
     return {
-      active:'',
-      actives:'',
+      active: '',
+      actives: '',
       MultipersonTransfer: false,
       transferStatus: false, //转派按钮控制
       TransferStatus: false, //是否点击转派状态
@@ -161,7 +132,7 @@ export default {
       treeCopyList: [],
       demand: "",
       close: "",
-      nextDealManLists:''
+      nextDealManLists: ''
     };
   },
   props: {
@@ -186,7 +157,7 @@ export default {
       this.backThree = [];
       this.treeList = [];
       this.close = "1";
-      this.actives = this.actives!=""? "" :'actives'
+      this.actives = this.actives != "" ? "" : 'actives'
       this.active = ""
     },
     // async getqueryMultiTaskId() {
@@ -222,7 +193,7 @@ export default {
         // taskName: this.clicknextName, //流程节点
         userCode: JSON.parse(window.sessionStorage.userInfo).loginNo, //人员code
         content: this.textarea, //意见内容
-        resourceId:this.list.resourceId
+        resourceId: this.list.resourceId
       };
       let obj = {};
       if (this.close == "1") {
@@ -444,7 +415,7 @@ export default {
           //   this.initialList.nextShapes[0].multi?.multi &&
           //   res.data.body.nextShapes[0].multi.multi === "true"
           // ) {
-           
+
           // }
         }
         if (status === 2) {
@@ -464,7 +435,7 @@ export default {
     getTreeLists(e, status) {
       if (e === 9) {
         this.close = ""
-        this.active = this.active!=""? '' :'active'
+        this.active = this.active != "" ? '' : 'active'
         this.actives = ""
         this.MultipersonTransfer = true;
       } else {
@@ -534,12 +505,17 @@ export default {
     //选择树的回调
     changeTree(e) {
       if (this.MultipersonTransfer) {
+        if (e.length > 1) {
+          this.$message.error("只能选择一个人");
+          return;
+        } else {
           this.backThree = e;
-        let arr = [];
-        this.backThree.map((item) => {
-          arr.push(item.loginNoStr);
-        });
-        this.nextDealManLists = arr.toString();
+          let arr = [];
+          this.backThree.map((item) => {
+            arr.push(item.loginNoStr);
+          });
+          this.nextDealManLists = arr.toString();
+        }
       }
     },
     //获取字典表常用意见
@@ -648,35 +624,43 @@ export default {
 .active {
   background-color: #f3faff;
 }
+
 .actives {
   background-color: #f3faff;
 }
+
 .flex-header-text-tree {
   width: 50%;
   text-align: center;
 }
+
 .flex-icon {
   float: right;
   margin-right: 20px;
   color: #4277a1;
 }
+
 .flex-handle {
   width: 100%;
   padding: 30px;
   display: flex;
+
   .flex-right {
     width: 50%;
     border: 1px solid #e1e1e1;
     margin-left: 20px;
   }
 }
+
 .flex-left {
   width: 50%;
   display: flex;
   flex-direction: column;
+
   .flex-left-header {
     display: flex;
     justify-content: space-around;
+
     .flex-path {
       height: 280px;
       border: 1px solid #e1e1e1;
@@ -684,10 +668,12 @@ export default {
     }
   }
 }
+
 .flex-common {
   padding: 10px 5%;
   font-size: 18px;
 }
+
 .flex-left-header-text {
   height: 40px;
   line-height: 40px;
@@ -697,40 +683,49 @@ export default {
   font-size: 18px;
   font-weight: bold;
 }
+
 .flex-path-list {
   overflow-y: scroll;
   overflow-x: hidden;
   height: 14rem;
 }
+
 .flex-slide {
   overflow-y: scroll;
   overflow-x: hidden;
 }
+
 .active {
   background-color: #f3faff;
 }
+
 .flex-opinion {
   height: 280px;
   border: 1px solid #e1e1e1;
   width: 100%;
   margin-top: 20px;
 }
+
 .flex-right-text {
   margin-right: 20px;
   width: 50%;
 }
+
 .flex-commons {
   height: 280px;
   border: 1px solid #e1e1e1;
   width: 30%;
 }
+
 .flex-footer-botton {
   display: flex;
   justify-content: space-evenly;
 }
+
 .flex-button {
   margin-top: 10px;
   margin-bottom: 10px;
+
   ::v-deep .el-button--primary {
     width: 222px;
   }

+ 2 - 2
src/components/workflowUpload.vue

@@ -44,8 +44,8 @@ export default {
     };
   },
   methods: {
-    clickDownload() {
-      this.$emit("clickDownload", true);
+    clickDownload(file) {
+      this.$emit("clickDownload", file);
     },
     signUpload() {},
     //删除

+ 29 - 3
src/http/api.js

@@ -13,7 +13,7 @@ export function getTodoBase(page, seach, idNo) {
         data: idNo,
     })
 }
-//通用方法
+//通用方法
 export function getDoneBase(page, seach, idNo) {
     return axios({
         url: "/market/waf/queryDoneBase",
@@ -26,7 +26,33 @@ export function getDoneBase(page, seach, idNo) {
         data: idNo,
     })
 }
-//通用方法待办
+//通用方法待阅
+export function queryReadBase(page, seach, idNo) {
+    return axios({
+        url: "/market/waf/queryReadBase",
+        method: "post",
+        method: "post",
+        headers: {
+            "Content-Type": "application/json",
+            page: '{"pageNo":"' + page + '","pageSize":"10"}',
+        },
+        data: idNo,
+    })
+}
+//通用方法已阅
+export function queryReadDoneBase(page, seach, idNo) {
+    return axios({
+        url: "/market/waf/queryReadDoneBase",
+        method: "post",
+        method: "post",
+        headers: {
+            "Content-Type": "application/json",
+            page: '{"pageNo":"' + page + '","pageSize":"10"}',
+        },
+        data: idNo,
+    })
+}
+//通用方法发起
 export function getInitiateBase(page, seach, idNo) {
     return axios({
         url: "/market/waf/queryInitiateBase",
@@ -60,4 +86,4 @@ export function getNowdata(e) {
     let time = yy + e.a + mm + e.a + dd + e.b + hh + e.c + mf + e.c + ss
     return time
 }
-export default { getTodoBase, getDoneBase, getInitiateBase, updateBase, getNowdata };
+export default { getTodoBase, getDoneBase, getInitiateBase, updateBase, getNowdata, queryReadBase,queryReadDoneBase };

+ 2 - 0
src/main.js

@@ -12,6 +12,7 @@ import fullscreen from 'vue-fullscreen'
 import VueContextMenu from 'vue-contextmenu'
 
 import Urls from './assets/js/url.js' //路径共用
+import excelUrl from '../config/excel.env.js'
 import util from './assets/js/util.js'
 import common from './assets/js/common.js' //公共注册
 import http from './assets/js/http.js'
@@ -22,6 +23,7 @@ import VueEditor from "vue2-editor"
 Vue.use(VueEditor)
 Vue.use(FormMaking)
 Vue.prototype.$url = Urls
+Vue.prototype.$excelUrl = excelUrl
 Vue.prototype.$util = util
 Vue.prototype.common = common
 Vue.prototype.$axios = http //axios 设置

+ 161 - 357
src/pages/main/advertising/businessHall.vue

@@ -7,47 +7,23 @@
                 </el-button>
                 <el-button class="btn-check" size="medium" type="primary" @click="exportTempletelist">下载导入模板
                 </el-button>
-                <myUpload style="display:inline-block;" :fileInfo="fileInfot"
-                        :fileList="fileInfot.fileList" @uploadBack='uploadBack'></myUpload>
-                <el-button
-                    class="btn-check"
-                    size="medium"
-                    type="primary"
-                    @click="dialogCheck(3)"
-                    v-if="
-                        userInfo.countyName != null || userInfo.cityName != null
-                    "
-                    >添加
+                <myUpload style="display:inline-block;" :fileInfo="fileInfot" :fileList="fileInfot.fileList"
+                    @uploadBack='uploadBack'></myUpload>
+                <el-button class="btn-check" size="medium" type="primary" @click="dialogCheck(3)" v-if="
+                    userInfo.countyName != null || userInfo.cityName != null
+                ">添加
                 </el-button>
             </div>
             <div class="search">
-                <mySearch
-                    :searchList="searchList"
-                    @searchInfo="searchInfo"
-                ></mySearch>
-                <el-button
-                    class="btn-check"
-                    size="medium"
-                    type="primary"
-                    @click="dialogCheck(3)"
-                    v-if="
-                        userInfo.countyName != null || userInfo.cityName != null
-                    "
-                    >添加
+                <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                <el-button class="btn-check" size="medium" type="primary" @click="dialogCheck(3)" v-if="
+                    userInfo.countyName != null || userInfo.cityName != null
+                ">添加
                 </el-button>
             </div>
             <div class="tabbox">
-                <el-table
-                    height="calc(100% - 40px)"
-                    class="com-table"
-                    ref="multipleTable"
-                    :data="tableData"
-                    tooltip-effect="dark"
-                    size="small"
-                    border
-                    style="width: 100%"
-                    v-loading="loading"
-                >
+                <el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
+                    tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
                     <el-table-column prop="regionName" label="公司">
                     </el-table-column>
                     <el-table-column prop="regionCode" label="公司编码">
@@ -60,11 +36,11 @@
                     </el-table-column>
                     <el-table-column prop="countyType" label="表单类型">
                     </el-table-column>
-<!--                    <el-table-column prop="countyCityCode" label="渠道/小区编码">-->
-<!--&lt;!&ndash;                        待更改&ndash;&gt;-->
-<!--                    </el-table-column>-->
-<!--                    <el-table-column prop="countyCityCodeName" label="渠道/小区/校园名称">-->
-<!--                    </el-table-column>-->
+                    <!--                    <el-table-column prop="countyCityCode" label="渠道/小区编码">-->
+                    <!--&lt;!&ndash;                        待更改&ndash;&gt;-->
+                    <!--                    </el-table-column>-->
+                    <!--                    <el-table-column prop="countyCityCodeName" label="渠道/小区/校园名称">-->
+                    <!--                    </el-table-column>-->
                     <el-table-column prop="channelCode" label="渠道/小区编码">
                     </el-table-column>
                     <el-table-column prop="channelName" label="渠道/小区/校园名称">
@@ -73,30 +49,15 @@
                     </el-table-column>
                     <el-table-column prop="sceneName" label="使用场景">
                     </el-table-column>
-<!--                    <el-table-column prop="metirialType" label="物料类别">-->
-<!--                    </el-table-column>-->
-                    <el-table-column
-                        prop="metirialCode"
-                        label="物料编码"
-                        width="100"
-                        show-overflow-tooltip
-                    >
+                    <!--                    <el-table-column prop="metirialType" label="物料类别">-->
+                    <!--                    </el-table-column>-->
+                    <el-table-column prop="metirialCode" label="物料编码" width="100" show-overflow-tooltip>
                     </el-table-column>
-                    <el-table-column
-                        prop="metirialName"
-                        label="物料名称"
-                        width="100"
-                        show-overflow-tooltip
-                    >
+                    <el-table-column prop="metirialName" label="物料名称" width="100" show-overflow-tooltip>
                     </el-table-column>
                     <el-table-column prop="unit" label="物料单位">
                     </el-table-column>
-                    <el-table-column
-                        prop="size"
-                        label="规格尺寸"
-                        width="100"
-                        show-overflow-tooltip
-                    >
+                    <el-table-column prop="size" label="规格尺寸" width="100" show-overflow-tooltip>
                     </el-table-column>
                     <el-table-column prop="length" label="长(米)">
                     </el-table-column>
@@ -105,372 +66,211 @@
                     </el-table-column>
                     <el-table-column prop="coefficient" label="系数">
                     </el-table-column>
-                    <el-table-column
-                        prop="priority"
-                        label="优先级-仅灯箱画面填报"
-                    >
-                    </el-table-column>
-                    <el-table-column prop="quantity" label="数量">
-                    </el-table-column>
-                    <el-table-column prop="settlementAmount" label="结算金额">
+                    <el-table-column prop="priority" label="优先级-仅灯箱画面填报">
                     </el-table-column>
+                    <!-- <el-table-column prop="quantity" label="数量">
+                        </el-table-column>
+                        <el-table-column prop="settlementAmount" label="结算金额">
+                        </el-table-column> -->
                     <!-- <el-table-column prop="price" label="单价">
-					</el-table-column> -->
+    					</el-table-column> -->
 
-                    <el-table-column
-                        label="操作"
-                        width="160px"
-                        align="center"
-                        fixed="right"
-                    >
+                    <el-table-column label="操作" width="160px" align="center" fixed="right">
                         <template slot-scope="scope">
-                            <el-button
-                                size="mini"
-                                type="primary"
-                                @click="dialogCheck(1, scope.row)"
-                                >查看</el-button
-                            >
-                            <el-button
-                                size="mini"
-                                type="primary"
-                                @click="dialogCheck(2, scope.row)"
-                                v-if="
-                                    userInfo.countyName != null ||
-                                        userInfo.cityName != null
-                                "
-                                >修改</el-button
-                            >
-                            <el-button
-                                size="mini"
-                                type="danger"
-                                @click="delLine(scope.row)"
-                                v-if="
-                                    userInfo.countyName != null ||
-                                        userInfo.cityName != null
-                                "
-                                >删除</el-button
-                            >
+                            <el-button size="mini" type="primary" @click="dialogCheck(1, scope.row)">查看</el-button>
+                            <el-button size="mini" type="primary" @click="dialogCheck(2, scope.row)" v-if="
+                                userInfo.countyName != null ||
+                                userInfo.cityName != null
+                            ">修改</el-button>
+                            <el-button size="mini" type="danger" @click="delLine(scope.row)" v-if="
+                                userInfo.countyName != null ||
+                                userInfo.cityName != null
+                            ">删除</el-button>
                         </template>
                     </el-table-column>
                 </el-table>
-                <el-pagination
-                    class="pageBox"
-                    @current-change="currchange"
-                    layout="prev, pager, next"
-                    background
-                    :total="total"
-                >
+                <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+                    :total="total">
                 </el-pagination>
             </div>
         </div>
 
-        <el-dialog
-            :title="titname"
-            :visible.sync="dialogStatus"
-            width="100%"
-            :destroy-on-close="true"
-            :modal-append-to-body="false"
-            :close-on-click-modal="false"
-            :before-close="closedia"
-        >
+        <el-dialog :title="titname" :visible.sync="dialogStatus" width="100%" :destroy-on-close="true"
+            :modal-append-to-body="false" :close-on-click-modal="false" :before-close="closedia">
             <div v-loading="loadinged">
-                <el-form
-                    :model="infolist"
-                    ref="infolist"
-                    :rules="rules"
-                    style="height: 50vh; overflow-y: scroll"
-                >
+                <el-form :model="infolist" ref="infolist" :rules="rules" style="height: 50vh; overflow-y: scroll">
                     <div class="info-line">
                         <el-form-item prop="regionName">
                             <span>公司</span>
-                            <el-select
-                                :popper-append-to-body="false"
-                                v-model="infolist.regionCode"
-                                placeholder="公司"
-                                @change="verifcheck"
-                                :disabled="disableStatus"
-                            >
-                                <el-option
-                                    v-for="item in regionOpt"
-                                    :key="item.compId"
-                                    :label="item.compName"
-                                    :value="item.compId"
-                                >
+                            <el-select :popper-append-to-body="false" v-model="infolist.regionCode" placeholder="公司"
+                                @change="verifcheck" :disabled="disableStatus">
+                                <el-option v-for="item in regionOpt" :key="item.compId" :label="item.compName"
+                                    :value="item.compId">
                                 </el-option>
                             </el-select>
                         </el-form-item>
                         <el-form-item>
                             <span>公司编码</span>
-                            <el-input
-                                v-model="infolist.regionCode"
-                                placeholder="公司编码"
-                                disabled
-                            ></el-input>
+                            <el-input v-model="infolist.regionCode" placeholder="公司编码" disabled></el-input>
                         </el-form-item>
                         <el-form-item prop="countyName">
                             <span>区县名称</span>
-                            <el-select
-                                :popper-append-to-body="false"
-                                v-model="infolist.countyCode"
-                                placeholder="区县名称"
-                                @change="verifcheck(2)"
-                                :disabled="disableStatus"
-                            >
-                                <el-option
-                                    v-for="item in countyOpt"
-                                    :key="item.compId"
-                                    :label="item.compName"
-                                    :value="item.compId"
-                                >
+                            <el-select :popper-append-to-body="false" v-model="infolist.countyCode" placeholder="区县名称"
+                                @change="verifcheck(2)" :disabled="disableStatus">
+                                <el-option v-for="item in countyOpt" :key="item.compId" :label="item.compName"
+                                    :value="item.compId">
                                 </el-option>
                             </el-select>
                         </el-form-item>
                         <el-form-item>
                             <span>区县编码</span>
-                            <el-input
-                                v-model="infolist.countyCode"
-                                placeholder="区县编码"
-                                disabled
-                            ></el-input>
+                            <el-input v-model="infolist.countyCode" placeholder="区县编码" disabled></el-input>
                         </el-form-item>
                         <el-form-item>
                             <span>日期</span>
-                            <el-date-picker
-                                type="date"
-                                placeholder="选择日期"
-                                v-model="infolist.countyTime"
-                                style="width: 57%;"
-                            ></el-date-picker>
+                            <el-date-picker type="date" placeholder="选择日期" v-model="infolist.countyTime"
+                                style="width: 57%;"></el-date-picker>
                         </el-form-item>
                         <el-form-item>
                             <span>表单类型</span>
                             <el-select v-model="infolist.countyType" placeholder="请选择表单类型">
-                                <el-option v-for="(item,index) in optionList" :label="item.value" :value="item.id" :key="index"></el-option>
+                                <el-option v-for="(item, index) in optionList" :label="item.value" :value="item.id"
+                                    :key="index"></el-option>
                             </el-select>
                         </el-form-item>
                         <el-form-item prop="channelCode">
                             <span>渠道/小区编码</span>
-                            <el-input
-                                v-model="infolist.channelCode"
-                                placeholder="渠道编码"
-                                :disabled="disableStatus"
-                            >
+                            <el-input v-model="infolist.channelCode" placeholder="渠道编码" :disabled="disableStatus">
                             </el-input>
                         </el-form-item>
                         <el-form-item prop="channelName">
                             <span>渠道/小区/校园名称</span>
-                            <el-input
-                                v-model="infolist.channelName"
-                                placeholder="渠道/校园/小区名称"
-                                :disabled="disableStatus"
-                            >
+                            <el-input v-model="infolist.channelName" placeholder="渠道/校园/小区名称" :disabled="disableStatus">
                             </el-input>
                         </el-form-item>
 
                         <el-form-item prop="sts">
                             <span>营业状态</span>
-                            <el-select
-                                :popper-append-to-body="false"
-                                v-model="infolist.sts"
-                                placeholder="营业状态"
-                                :disabled="disableStatus"
-                            >
-                                <el-option
-                                    v-for="item in stsOpt"
-                                    :key="item.dataName"
-                                    :label="item.dataName"
-                                    :value="item.dataName"
-                                >
+                            <el-select :popper-append-to-body="false" v-model="infolist.sts" placeholder="营业状态"
+                                :disabled="disableStatus">
+                                <el-option v-for="item in stsOpt" :key="item.dataName" :label="item.dataName"
+                                    :value="item.dataName">
                                 </el-option>
                             </el-select>
                         </el-form-item>
                         <el-form-item prop="sceneName">
                             <span>使用场景</span>
-                            <el-select
-                                @change="accountcho"
-                                :popper-append-to-body="false"
-                                v-model="infolist.sceneName"
-                                placeholder="使用场景"
-                                :disabled="disableStatus"
-                            >
-                                <el-option
-                                    v-for="item in sceneOpt"
-                                    :key="item.dataCode"
-                                    :label="item.dataName"
-                                    :value="item.dataName"
-                                >
+                            <el-select @change="accountcho" :popper-append-to-body="false" v-model="infolist.sceneName"
+                                placeholder="使用场景" :disabled="disableStatus">
+                                <el-option v-for="item in sceneOpt" :key="item.dataCode" :label="item.dataName"
+                                    :value="item.dataName">
                                 </el-option>
                             </el-select>
                         </el-form-item>
-<!--                        <el-form-item prop="metirialType">-->
-<!--                            <span>物料类别</span>-->
-<!--                            <el-select-->
-<!--                                :disabled="disableStatus"-->
-<!--                                :popper-append-to-body="false"-->
-<!--                                v-model="infolist.metirialType"-->
-<!--                                placeholder="物料类别"-->
-<!--                            >-->
-<!--                                <el-option-->
-<!--                                    v-for="(item, index) in metirialTypeopt"-->
-<!--                                    :key="index"-->
-<!--                                    :label="item.dataName"-->
-<!--                                    :value="item.dataName"-->
-<!--                                >-->
-<!--                                </el-option>-->
-<!--                            </el-select>-->
-<!--                        </el-form-item>-->
+                        <!--                        <el-form-item prop="metirialType">-->
+                        <!--                            <span>物料类别</span>-->
+                        <!--                            <el-select-->
+                        <!--                                :disabled="disableStatus"-->
+                        <!--                                :popper-append-to-body="false"-->
+                        <!--                                v-model="infolist.metirialType"-->
+                        <!--                                placeholder="物料类别"-->
+                        <!--                            >-->
+                        <!--                                <el-option-->
+                        <!--                                    v-for="(item, index) in metirialTypeopt"-->
+                        <!--                                    :key="index"-->
+                        <!--                                    :label="item.dataName"-->
+                        <!--                                    :value="item.dataName"-->
+                        <!--                                >-->
+                        <!--                                </el-option>-->
+                        <!--                            </el-select>-->
+                        <!--                        </el-form-item>-->
                         <el-form-item>
                             <span>物料编码</span>
-                            <el-input
-                                v-model="infolist.metirialCode"
-                                disabled
-                            ></el-input>
+                            <el-input v-model="infolist.metirialCode" disabled></el-input>
                         </el-form-item>
                         <el-form-item prop="metirialName">
                             <span>物料名称</span>
-                            <el-select
-                                :disabled="disableStatus"
-                                :popper-append-to-body="false"
-                                v-model="infolist.metirialName"
-                                placeholder="物料名称"
-                                @change="materialNameChange"
-                            >
-                                <el-option
-                                    v-for="(item, index) in materialNameopt"
-                                    :key="index"
-                                    :label="item.metirialName"
-                                    :value="item.metirialName"
-                                >
+                            <el-select :disabled="disableStatus" :popper-append-to-body="false"
+                                v-model="infolist.metirialName" placeholder="物料名称" @change="materialNameChange">
+                                <el-option v-for="(item, index) in materialNameopt" :key="index" :label="item.metirialName"
+                                    :value="item.metirialName">
                                 </el-option>
                             </el-select>
                         </el-form-item>
                         <el-form-item>
                             <span>物料单位</span>
-                            <el-input
-                                v-model="infolist.unit"
-                                disabled
-                            ></el-input>
+                            <el-input v-model="infolist.unit" disabled></el-input>
                         </el-form-item>
                         <el-form-item>
                             <span>规格尺寸</span>
-                            <el-input
-                                v-model="infolist.size"
-
-                            ></el-input>
+                            <el-input v-model="infolist.size"></el-input>
                         </el-form-item>
-                        <el-form-item
-                            prop="length"
-                            v-if="
-                                infolist.unit == '平方米' ||
-                                    infolist.unit == '延长米'
-                            "
-                        >
+                        <el-form-item prop="length" v-if="
+                            infolist.unit == '平方米' ||
+                            infolist.unit == '延长米'
+                        ">
                             <span>长(米)</span>
-                            <el-input
-                                type="number"
-                                v-model="infolist.length"
-                                placeholder="长"
-                                :disabled="disableStatus"
-                            >
+                            <el-input type="number" v-model="infolist.length" placeholder="长" :disabled="disableStatus">
                             </el-input>
                         </el-form-item>
-                        <el-form-item
-                            prop="width"
-                            v-if="infolist.unit == '平方米'"
-                        >
+                        <el-form-item prop="width" v-if="infolist.unit == '平方米'">
                             <span>宽(米)</span>
-                            <el-input
-                                type="number"
-                                v-model="infolist.width"
-                                placeholder="宽"
-                                :disabled="disableStatus"
-                            >
+                            <el-input type="number" v-model="infolist.width" placeholder="宽" :disabled="disableStatus">
                             </el-input>
                         </el-form-item>
                         <el-form-item prop="direction">
                             <span>横/竖</span>
-                            <el-input
-                                :disabled="disableStatus"
-                                :popper-append-to-body="false"
-                                v-model="infolist.direction"
-                                placeholder="横/竖"
-                            >
+                            <el-input :disabled="disableStatus" :popper-append-to-body="false" v-model="infolist.direction"
+                                placeholder="横/竖">
                             </el-input>
                         </el-form-item>
                         <el-form-item>
                             <span>系数</span>
-                            <el-input
-                                :value="coefficient"
-                                placeholder="系数"
-                                disabled
-                            ></el-input>
+                            <el-input :value="coefficient" placeholder="系数" disabled></el-input>
                         </el-form-item>
                         <el-form-item>
                             <span>单价</span>
-                            <el-input
-                                :value="coefficient"
-                                placeholder="单价"
-                                disabled
-                            ></el-input>
+                            <el-input :value="coefficient" placeholder="单价" disabled></el-input>
                         </el-form-item>
-                        <el-form-item
-
-                        >
+                        <el-form-item>
                             <span>优先级-仅灯箱画面填报</span>
-                            <el-input
-                                v-model="infolist.priority"
-                                placeholder="优先级-仅灯箱画面填报"
-                                @keyup.native="numberVertify"
-                            ></el-input>
-                        </el-form-item>
-                        <el-form-item prop="quantity">
-                            <span>数量</span>
-                            <el-input
-                                v-model="infolist.quantity"
-                                placeholder="数量"
-                                :disabled="quantityDisabled"
-                            ></el-input>
+                            <el-input v-model="infolist.priority" placeholder="优先级-仅灯箱画面填报"
+                                @keyup.native="numberVertify"></el-input>
                         </el-form-item>
+                        <!-- <el-form-item prop="quantity">
+                                <span>数量</span>
+                                <el-input
+                                    v-model="infolist.quantity"
+                                    placeholder="数量"
+                                    :disabled="quantityDisabled"
+                                ></el-input>
+                            </el-form-item> -->
                         <el-form-item>
                             <span>物料单价(不含税)</span>
-                            <el-input
-                                v-model="infolist.price"
-                                disabled
-                            ></el-input>
-                        </el-form-item>
-                        <el-form-item prop="settlementAmount">
-                            <span>结算金额</span>
-                            <el-input
-                                v-model="infolist.settlementAmount"
-                                placeholder="结算金额"
-                                disabled
-                            ></el-input>
+                            <el-input v-model="infolist.price" disabled></el-input>
                         </el-form-item>
+                        <!-- <el-form-item prop="settlementAmount">
+                                <span>结算金额</span>
+                                <el-input
+                                    v-model="infolist.settlementAmount"
+                                    placeholder="结算金额"
+                                    disabled
+                                ></el-input>
+                            </el-form-item> -->
                     </div>
                 </el-form>
 
                 <div slot="footer" class="dialog-footer myfooter">
-                    <el-button
-                        type="primary"
-                        @click="dialogCli(2)"
-                        v-if="titname !== '查看'"
-                        >确 定</el-button
-                    >
-                    <el-button @click="dialogCli(1)" v-if="titname === '查看'"
-                        >确 定</el-button
-                    >
+                    <el-button type="primary" @click="dialogCli(2)" v-if="titname !== '查看'">确 定</el-button>
+                    <el-button @click="dialogCli(1)" v-if="titname === '查看'">确 定</el-button>
                     <el-button @click="dialogCli(1)">取 消</el-button>
                 </div>
             </div>
         </el-dialog>
 
-        <myMessage
-            :messTit="messTit"
-            @closeMessage="closeMessage"
-            :centerDialogVisible="centerDialogVisible"
-            v-if="centerDialogVisible"
-        ></myMessage>
-    </fullscreen>
+        <myMessage :messTit="messTit" @closeMessage="closeMessage" :centerDialogVisible="centerDialogVisible"
+            v-if="centerDialogVisible"></myMessage>
+</fullscreen>
 </template>
 <script>
 import mySearch from "../../../components/search.vue";
@@ -595,21 +395,21 @@ export default {
         // };
 
         return {
-            optionList:[{
-                id:'自有渠道',
-                value:'自有渠道'
-            },{
-                id:'合作渠道',
-                value:'合作渠道'
-            },{
-                id:'家庭市场',
-                value:'家庭市场'
-            },{
-                id:'个人市场',
-                value:'个人市场'
-            },{
-                id:'政企市场',
-                value:'政企市场'
+            optionList: [{
+                id: '自有渠道',
+                value: '自有渠道'
+            }, {
+                id: '合作渠道',
+                value: '合作渠道'
+            }, {
+                id: '家庭市场',
+                value: '家庭市场'
+            }, {
+                id: '个人市场',
+                value: '个人市场'
+            }, {
+                id: '政企市场',
+                value: '政企市场'
             }],
             rules: {
                 regionName: [
@@ -877,18 +677,18 @@ export default {
             metirialInfoSingle: [],
             quantityDisabled: true,
             fileInfot: {
-                    type: 'btn',
-                    typename: '导入',
-                    btntype: 'primary',
-                    limit: 1,
-                    url: '/market/cadvBusiMetirial/import',
-                    fileList: [],
-                    woNo: "",
-                },
+                type: 'btn',
+                typename: '导入',
+                btntype: 'primary',
+                limit: 1,
+                url: '/market/cadvBusiMetirial/import',
+                fileList: [],
+                woNo: "",
+            },
         };
     },
     computed: {
-        coefficient: function() {
+        coefficient: function () {
             if (
                 this.infolist.width == undefined &&
                 this.infolist.length == undefined
@@ -910,7 +710,7 @@ export default {
     },
     methods: {
         // 结算金额
-        settlementAmount: function() {
+        settlementAmount: function () {
             this.infolist.settlementAmount =
                 this.infolist.price *
                 this.infolist.coefficient *
@@ -1057,7 +857,7 @@ export default {
             } else if (v === 3) {
                 this.titname = "添加";
                 this.disableStatus = false;
-                this.infolist.countyTime = this.$formatDate(new Date(),"YYYY-MM-DD")
+                this.infolist.countyTime = this.$formatDate(new Date(), "YYYY-MM-DD")
                 // this.infolist.unit = "延长米";
             }
             // this.infolist.opNo = this.userInfo.loginNo;
@@ -1073,7 +873,10 @@ export default {
                     parentCompId: this.infolist.regionCode
                 }
             }).then(res => {
-                this.countyOpt = res.data;
+                if (v !== 3) {
+                    this.countyOpt = res.data;
+                }
+
             });
         },
         //添加
@@ -1087,7 +890,7 @@ export default {
                     new Date(),
                     "YYYY-MM-DD"
                 );
-                this.infolist.countyTime = this.$formatDate(this.infolist.countyTime,"YYYY-MM-DD")
+                this.infolist.countyTime = this.$formatDate(this.infolist.countyTime, "YYYY-MM-DD")
 
                 if (this.titname === "添加") {
                     this.submitInfo("/market/cadvBusiMetirial/add");
@@ -1180,7 +983,7 @@ export default {
         uploadBack(v) {
             let that = this;
             console.log(v);
-            if(v.data.result==0){
+            if (v.data.result == 0) {
                 that.getList({}, 1);
                 that.getUser();
                 that.getMetirialType();
@@ -1223,7 +1026,7 @@ export default {
                             } else if (this.userInfo.cityName != null && this.userInfo.countyName != null) {
                                 // this.countyOpt = res.data;
                                 this.countyOpt = res.data.filter(item => {
-                                    return ( item.compName == this.userInfo.countyName );
+                                    return (item.compName == this.userInfo.countyName);
                                 });
                                 // this.countyOpt = res.data;
                             }
@@ -1380,7 +1183,7 @@ export default {
         this.getMetirialType();
         this.getMetirialInfo();
     },
-    created() {}
+    created() { }
 };
 </script>
 <style scoped lang="scss">
@@ -1453,6 +1256,7 @@ export default {
         width: calc(100% - 120px);
     }
 }
+
 .search-box .box-l .box-info {
     margin-right: 20px !important;
 }

+ 138 - 157
src/pages/main/advertising/contractCap.vue

@@ -3,195 +3,138 @@
         <div class="container-box">
             <toolList @iconCli="iconCli" :tooltit="tooltit"></toolList>
             <div class="search">
-                <mySearch
-                    :searchList="searchList"
-                    @searchInfo="searchInfo"
-                ></mySearch>
-                <el-button
-                    class="btn-check"
-                    size="medium"
-                    type="primary"
-                    @click="dialogCheck(3)"
-                    v-if="userInfo.countyName == null && userInfo.cityName != null"
-                    >添加
-                </el-button>
+                <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                <!-- <el-button class="btn-check" size="medium" type="primary" @click="dialogCheck(3)"
+                            v-if="advLeader">添加
+                        </el-button> -->
             </div>
             <div class="tabbox">
-                <el-table
-                    height="calc(100% - 40px)"
-                    class="com-table"
-                    ref="multipleTable"
-                    :data="tableData"
-                    tooltip-effect="dark"
-                    size="small"
-                    border
-                    style="width: 100%"
-                    v-loading="loading"
-                >
+                <el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
+                    tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
                     <el-table-column prop="regionName" label="地市名称">
                     </el-table-column>
                     <!-- <el-table-column prop="regionCode" label="地市编码">
-                    </el-table-column> -->
+                                </el-table-column> -->
                     <!-- <el-table-column prop="preAccount" label="一采预算">
-                    </el-table-column> -->
-                    <el-table-column
-                        prop="secbuyPreAccount"
-                        label="二采预算总额"
-                    >
+                                </el-table-column> -->
+                    <el-table-column prop="secbuyPreAccount" label="二采预算总额">
                     </el-table-column>
                     <!-- <el-table-column prop="costAccount" label="一采累计使用">
-                    </el-table-column> -->
+                                </el-table-column> -->
                     <!-- <el-table-column prop="secbuyCostAccount" label="二采累计使用">
-                    </el-table-column> -->
-                    <el-table-column
-                        prop="secbuyLastAccount"
-                        label="二采剩余预算"
-                    >
+                                </el-table-column> -->
+                    <el-table-column prop="secbuyLastAccount" label="二采剩余预算">
                     </el-table-column>
                     <el-table-column prop="secbuySchedule" label="使用进度">
                     </el-table-column>
-                    <el-table-column
-                        :label="item.supplierName"
-                        v-for="(item, index) in supplierArr"
-                        :key="index"
-                    >
+                    <el-table-column :label="item.supplierName" v-for="(item, index) in supplierArr" :key="index">
                         <template slot-scope="scope">
-                            <div
-                                v-if="
-                                    scope.row.cMkSupplierCumulativeAmounts.filter(
-                                        n => {
-                                            return (
-                                                n.supplierName ==
-                                                item.supplierName
-                                            );
-                                        }
-                                    ).length > 0
-                                "
-                            >
+                            <div v-if="
+                                scope.row.cMkSupplierCumulativeAmounts.filter(
+                                    n => {
+                                        return (
+                                            n.supplierName ==
+                                            item.supplierName
+                                        );
+                                    }
+                                ).length > 0
+                            ">
                                 {{ item.sumBudget }}
                             </div>
                         </template>
                     </el-table-column>
                     <!-- <el-table-column prop="advYearn" :label="advYearnLabel">
-					</el-table-column> -->
-                    <el-table-column label="操作" width="160px" align="center" v-if="userInfo.countyName == null && userInfo.cityName != null">
+            					</el-table-column> -->
+                    <el-table-column label="操作" width="160px" align="center" v-if="advLeader">
                         <template slot-scope="scope">
                             <!-- <el-button
-                                size="mini"
-                                type="primary"
-                                @click="dialogCheck(1, scope.row)"
-                                >查看</el-button
-                            > -->
-                            <el-button
-                                size="mini"
-                                type="primary"
-                                @click="dialogCheck(2, scope.row)" 
-                                v-if="userInfo.countyName == null && userInfo.cityName != null"
-                                >编辑</el-button>
+                                            size="mini"
+                                            type="primary"
+                                            @click="dialogCheck(1, scope.row)"
+                                            >查看</el-button
+                                        > -->
+                            <el-button size="mini" type="primary" @click="dialogCheck(2, scope.row)"
+                                v-if="advLeader">编辑</el-button>
                             <!-- <el-button
-                                size="mini"
-                                type="danger"
-                                @click="delLine(scope.row)" 
-                                >删除</el-button
-                            > -->
+                                            size="mini"
+                                            type="danger"
+                                            @click="delLine(scope.row)" 
+                                            >删除</el-button
+                                        > -->
                         </template>
                     </el-table-column>
                 </el-table>
                 <!-- <el-pagination
-                    class="pageBox"
-                    @current-change="currchange"
-                    layout="prev, pager, next"
-                    background
-                    :total="total"
-                >
-                </el-pagination> -->
+                                class="pageBox"
+                                @current-change="currchange"
+                                layout="prev, pager, next"
+                                background
+                                :total="total"
+                            >
+                            </el-pagination> -->
             </div>
         </div>
 
-        <el-dialog
-            :title="titname"
-            :visible.sync="dialogStatus"
-            width="40%"
-            :destroy-on-close="true"
-            :modal-append-to-body="false"
-            :close-on-click-modal="false"
-            :before-close="closedia"
-        >
+        <el-dialog :title="titname" :visible.sync="dialogStatus" width="40%" :destroy-on-close="true"
+            :modal-append-to-body="false" :close-on-click-modal="false" :before-close="closedia">
             <div v-loading="loadinged">
                 <el-form :model="infolist" ref="infolist" :rules="rules">
                     <div class="info-line" style="width: 50%; margin: 0 auto;">
                         <!-- <el-form-item prop="regionCode">
-                            <span>地市名称</span>
-                            <el-select
-                                :popper-append-to-body="false"
-                                v-model="infolist.regionCode"
-                                placeholder="地市名称"
-                                @change="verifcheck"
-                                :disabled="secbuyLastDisableStatus"
-                            >
-                                <el-option
-                                    v-for="item in regionOpt"
-                                    :key="item.compId"
-                                    :label="item.compName"
-                                    :value="item.compId"
-                                >
-                                </el-option>
-                            </el-select>
-                        </el-form-item> -->
+                                        <span>地市名称</span>
+                                        <el-select
+                                            :popper-append-to-body="false"
+                                            v-model="infolist.regionCode"
+                                            placeholder="地市名称"
+                                            @change="verifcheck"
+                                            :disabled="secbuyLastDisableStatus"
+                                        >
+                                            <el-option
+                                                v-for="item in regionOpt"
+                                                :key="item.compId"
+                                                :label="item.compName"
+                                                :value="item.compId"
+                                            >
+                                            </el-option>
+                                        </el-select>
+                                    </el-form-item> -->
                         <el-form-item prop="secbuyPreAccount" style="width: 100%;">
                             <span>二采预算总额</span>
-                            <el-input
-                                v-model="infolist.secbuyPreAccount"
-                                placeholder="二采预算总额"
-                            ></el-input>
+                            <el-input v-model="infolist.secbuyPreAccount" placeholder="二采预算总额"></el-input>
                         </el-form-item>
                         <el-form-item prop="secbuyLastAccount" style="width: 100%;">
                             <span>二采剩余预算</span>
-                            <el-input
-                                v-model="infolist.secbuyLastAccount"
-                                placeholder="二采剩余预算"
-                            ></el-input>
+                            <el-input disabled v-model="infolist.secbuyLastAccount" placeholder="二采剩余预算"></el-input>
                         </el-form-item>
                         <!-- <el-form-item prop="secbuySchedule">
-                            <span>使用进度</span>
-                            <el-input
-                                v-model="infolist.secbuySchedule"
-                                placeholder="使用进度"
-                                disabled
-                            ></el-input>
-                        </el-form-item> -->
+                                        <span>使用进度</span>
+                                        <el-input
+                                            v-model="infolist.secbuySchedule"
+                                            placeholder="使用进度"
+                                            disabled
+                                        ></el-input>
+                                    </el-form-item> -->
                         <!-- <el-form-item prop="secbuyCostAccount">
-                            <span>二采使用</span>
-                            <el-input v-model="infolist.secbuyCostAccount" placeholder="二采累计使用" disabled></el-input>
-                        </el-form-item>
-						<el-form-item>
-						    <span>统计周期</span>
-						    <el-input v-model="infolist.advYearn" placeholder="统计周期" :disabled="disableStatus"></el-input>
-						</el-form-item> -->
+                                        <span>二采使用</span>
+                                        <el-input v-model="infolist.secbuyCostAccount" placeholder="二采累计使用" disabled></el-input>
+                                    </el-form-item>
+            						<el-form-item>
+            						    <span>统计周期</span>
+            						    <el-input v-model="infolist.advYearn" placeholder="统计周期" :disabled="disableStatus"></el-input>
+            						</el-form-item> -->
                     </div>
                 </el-form>
 
                 <div slot="footer" class="dialog-footer myfooter">
-                    <el-button
-                        type="primary"
-                        @click="dialogCli(2)"
-                        v-if="titname !== '查看'"
-                        >确 定</el-button
-                    >
-                    <el-button @click="dialogCli(1)" v-if="titname === '查看'"
-                        >确 定</el-button
-                    >
+                    <el-button type="primary" @click="dialogCli(2)" v-if="titname !== '查看'">确 定</el-button>
+                    <el-button @click="dialogCli(1)" v-if="titname === '查看'">确 定</el-button>
                     <el-button @click="dialogCli(1)">取 消</el-button>
                 </div>
             </div>
         </el-dialog>
-        <myMessage
-            :messTit="messTit"
-            @closeMessage="closeMessage"
-            :centerDialogVisible="centerDialogVisible"
-            v-if="centerDialogVisible"
-        ></myMessage>
-    </fullscreen>
+        <myMessage :messTit="messTit" @closeMessage="closeMessage" :centerDialogVisible="centerDialogVisible"
+            v-if="centerDialogVisible"></myMessage>
+</fullscreen>
 </template>
 <script>
 import mySearch from "../../../components/search.vue";
@@ -207,6 +150,7 @@ export default {
         MessageBox
     },
     data() {
+
         const regionCode = (rule, value, callback) => {
             if (!this.infolist.regionCode) {
                 callback(new Error("不能为空"));
@@ -230,6 +174,7 @@ export default {
         };
 
         return {
+            advLeader: false,
             rules: {
                 regionCode: [
                     {
@@ -297,20 +242,40 @@ export default {
         };
     },
     computed: {
-        // secbuySchedule: function() {
-        //     this.infolist.secbuySchedule = (this.infolist.secbuyPreAccount - this.infolist.secbuyLastAccount) / this.infolist.secbuyPreAccount;
-        //     this.infolist.secbuySchedule = ((parseFloat(this.infolist.secbuySchedule)*100).toFixed(2));
-        //     if(isNaN(this.infolist.secbuySchedule)){
-        //         this.infolist.secbuySchedule = ''
+
+        //     secbuySchedule: function() {
+        //         this.infolist.secbuySchedule = (this.infolist.secbuyPreAccount - this.infolist.secbuyLastAccount) / this.infolist.secbuyPreAccount;
+        //         this.infolist.secbuySchedule = ((parseFloat(this.infolist.secbuySchedule)*100).toFixed(2));
+        //         if(isNaN(this.infolist.secbuySchedule)){
+        //             this.infolist.secbuySchedule = ''
+        //         }
+        //         return this.infolist.secbuySchedule;
         //     }
-        //     return this.infolist.secbuySchedule;
-        // }
     },
     methods: {
         closedia() {
             this.infolist = {};
             this.dialogStatus = false;
         },
+        //获取权限
+        getJiangshuai() {
+            this.$http({
+                url: "/market/paraminfo/query",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: { paramKey: 'adv_leader' }
+            }).then(res => {
+                console.log(res);
+                console.log(res.data.paramValue);
+                console.log(this.userInfo.loginNo);
+                if (this.userInfo.loginNo === res.data.paramValue) {
+                    this.advLeader = true;
+                }
+
+            });
+        },
         //搜索数据
         searchInfo(v) {
             this.params = {};
@@ -332,6 +297,7 @@ export default {
                 },
                 data: v
             }).then(res => {
+                console.log(123);
                 if (
                     this.userInfo.countyName == null &&
                     this.userInfo.cityName == null
@@ -342,7 +308,14 @@ export default {
                         return item.regionName == this.userInfo.cityName;
                     });
                 }
-                
+                // console.log(this.tableData);
+                // this.tableData.map((item) => {
+                //     item.secbuySchedule = (item.secbuyPreAccount - item.secbuyLastAccount) / item.secbuyPreAccount;
+                //     item.secbuySchedule = ((parseFloat(item.secbuySchedule) * 100).toFixed(2));
+                //     if (isNaN(item.secbuySchedule)) {
+                //         item.secbuySchedule = ''
+                //     }
+                // })
                 this.total = res.data.totalRecord;
                 this.loading = false;
 
@@ -400,17 +373,17 @@ export default {
                 this.infolist.areaCode = this.areaCode;
                 this.infolist.areaName = this.areaName;
 
-                if(this.currentRole.length == 1){
-                   this.infolist.regionName = this.currentRole[0].compName;
-                   this.infolist.regionCode = this.currentRole[0].compId;
+                if (this.currentRole.length == 1) {
+                    this.infolist.regionName = this.currentRole[0].compName;
+                    this.infolist.regionCode = this.currentRole[0].compId;
                 }
 
                 if (this.titname === "添加") {
-                this.submitInfo("/market/cadvContract/add");
+                    this.submitInfo("/market/cadvContract/add");
                 } else if (this.titname === "编辑") {
                     this.submitInfo("/market/cadvContract/update", v);
                 }
-                
+
             }
         },
         submitInfo(u) {
@@ -436,7 +409,7 @@ export default {
                     }).then(res => {
                         this.loadinged = false;
                         if (res.data.result === 0) {
-                             _this.$message({
+                            _this.$message({
                                 message: "成功",
                                 type: "success"
                             });
@@ -546,7 +519,7 @@ export default {
                     parentCompId: "0"
                 }
             }).then(res => {
-                this.currentRole = res.data.filter(item=>{
+                this.currentRole = res.data.filter(item => {
                     return item.compName == this.userInfo.cityName
                 })
                 // if (
@@ -562,10 +535,18 @@ export default {
         }
     },
     mounted() {
+        this.getJiangshuai()
         this.getList({}, 1);
         this.getUser();
     },
-    created() {}
+    created() { },
+    watch: {
+        "infolist.secbuyPreAccount": {
+            handler(newVal) {
+                  this.infolist.secbuyLastAccount =  newVal -  this.infolist.costAccount
+            },
+        },
+    }
 };
 </script>
 <style scoped lang="scss">

+ 189 - 171
src/pages/main/advertising/index.vue

@@ -1,199 +1,217 @@
 <template>
-    <fullscreen :fullscreen.sync="fullscreen" class="container">
-        <div class="container-box">
-			
+	<fullscreen :fullscreen.sync="fullscreen" class="container">
+		<div class="container-box">
+
 			<!-- <h2>广告宣传费台账</h2>
-			<div class="adv-type">
-			    <div @click="jumpinfop('/publicityAccount',1,'宣传费台账')" v-if="lockFlag == 'updata'">
-			        <span><i class="el-icon-folder-opened"></i></span>
-			        <span>创建模板</span>
-			    </div>
-				<div @click="jumpinfop('/publicityAccount',2,'宣传费台账')">
-			        <span><i class="el-icon-folder-opened"></i></span>
-			        <span>录入/更新</span>
-			    </div>
-				<div @click="jumpinfop('/publicityAccount',3,'宣传费台账')" v-if="lockFlag == 'updata'">
-			        <span><i class="el-icon-folder-opened"></i></span>
-			        <span>查看/下载</span>
-			    </div>
-			</div> -->
+				<div class="adv-type">
+				    <div @click="jumpinfop('/publicityAccount',1,'宣传费台账')" v-if="lockFlag == 'updata'">
+				        <span><i class="el-icon-folder-opened"></i></span>
+				        <span>创建模板</span>
+				    </div>
+					<div @click="jumpinfop('/publicityAccount',2,'宣传费台账')">
+				        <span><i class="el-icon-folder-opened"></i></span>
+				        <span>录入/更新</span>
+				    </div>
+					<div @click="jumpinfop('/publicityAccount',3,'宣传费台账')" v-if="lockFlag == 'updata'">
+				        <span><i class="el-icon-folder-opened"></i></span>
+				        <span>查看/下载</span>
+				    </div>
+				</div> -->
 			<h2 class="font-ui" style="margin-top: 20px;">宣传物料管理</h2>
 			<div class="adv-type">
-			    <div class="wfour" @click="jumpinfo('/materialApplication','宣传物料申请及审批')">
+				 <div class="wfour" @click="jumpinfo('/materialApplication','宣传物料申请及审批-省代地市下单')">
 			        <span><i class="el-icon-folder-opened"></i></span>
-			        <span>宣传物料申请及审批</span>
+			        <span>宣传物料申请及审批-省代地市下单</span>
 			    </div>
-				<!-- <div class="wfour" @click="jumpinfo('/materialApplicationc','市级物料申请')">
+				 <div class="wfour" @click="jumpinfo('/materialApplicationds','宣传物料申请及审批-地市下单')">
 			        <span><i class="el-icon-folder-opened"></i></span>
-			        <span>市级物料申请</span>
+			        <span>宣传物料申请及审批-地市下单</span>
 			    </div>
-				<div class="wfour" @click="jumpinfo('/materialApplicationExa','物料申请审核')">
-				    <span><i class="el-icon-folder-opened"></i></span>
-				    <span>省级物料审批</span>
-				</div>
-				<div class="wfour" @click="jumpinfo('/materialApplicationExac','物料申请审核')">
-				    <span><i class="el-icon-folder-opened"></i></span>
-				    <span>市级物料审批</span>
-				</div> -->
+				<!-- <div class="wfour" @click="jumpinfo('/materialApplicationc','市级物料申请')">
+				        <span><i class="el-icon-folder-opened"></i></span>
+				        <span>市级物料申请</span>
+				    </div>
+					<div class="wfour" @click="jumpinfo('/materialApplicationExa','物料申请审核')">
+					    <span><i class="el-icon-folder-opened"></i></span>
+					    <span>省级物料审批</span>
+					</div>
+					<div class="wfour" @click="jumpinfo('/materialApplicationExac','物料申请审核')">
+					    <span><i class="el-icon-folder-opened"></i></span>
+					    <span>市级物料审批</span>
+					</div> -->
 			</div>
 			<h2 class="font-ui" style="margin-top: 20px;">基础数据管理</h2>
 			<div class="adv-type">
-			    <!-- <div class="wfive" @click="jumpinfo('/materielPick','一采物料类型建档')" v-if="province">
-			        <span><i class="el-icon-folder-opened"></i></span>
-			        <span>一采物料类型建档</span>
-			    </div> -->
-				<div class="wfive" @click="jumpinfo('/materiel','二采物料类型建档')" v-if="province">
-			        <span><i class="el-icon-folder-opened"></i></span>
-			        <span>二采物料类型建档</span>
-			    </div>
-				<div class="wfive" @click="jumpinfo('/contractCap','预算及合同上限')">
-			        <span><i class="el-icon-folder-opened"></i></span>
-			        <span>预算及合同上限</span>
-			    </div>
-				<div class="wfive" @click="jumpinfo('/supplier','供应商管理')" v-if="province">
-				    <span><i class="el-icon-folder-opened"></i></span>
-				    <span>供应商管理</span>
+				<!-- <div class="wfive" @click="jumpinfo('/materielPick','一采物料类型建档')" v-if="province">
+				        <span><i class="el-icon-folder-opened"></i></span>
+				        <span>一采物料类型建档</span>
+				    </div> -->
+				<div class="wfive" @click="jumpinfo('/materiel', '宣传物料及印刷品类型建档')" v-if="province">
+					<span><i class="el-icon-folder-opened"></i></span>
+					<span>宣传物料及印刷品类型建档</span>
+				</div>
+				<div class="wfive" @click="jumpinfo('/contractCap', '预算及合同上限')">
+					<span><i class="el-icon-folder-opened"></i></span>
+					<span>预算及合同上限</span>
+				</div>
+				<div class="wfive" @click="jumpinfo('/supplier', '供应商管理')" v-if="province">
+					<span><i class="el-icon-folder-opened"></i></span>
+					<span>供应商管理</span>
+				</div>
+				<div class="wfive" @click="jumpinfo('/businessHall', '物料基础信息维护')">
+					<span><i class="el-icon-folder-opened"></i></span>
+					<span>物料基础信息维护</span>
 				</div>
-				<div class="wfive" @click="jumpinfo('/businessHall','物料基础信息维护')">
-				    <span><i class="el-icon-folder-opened"></i></span>
-				    <span>物料基础信息维护</span>
+				<div class="wfive" @click="jumpinfo('/materialApplistatic', '物料统计')">
+					<span><i class="el-icon-folder-opened"></i></span>
+					<span>物料统计</span>
 				</div>
-				<div class="wfive" @click="jumpinfo('/materialApplistatic','物料统计')">
-				    <span><i class="el-icon-folder-opened"></i></span>
-				    <span>物料统计</span>
+				<div class="wfive" @click="jumpinfo('/materialAppMessage', '宣传物料制作费用明细')">
+					<span><i class="el-icon-folder-opened"></i></span>
+					<span>宣传物料制作费用明细</span>
 				</div>
+				<div class="wfive" @click="jumpinfo('/materialAppNum', '验收打分单')">
+					<span><i class="el-icon-folder-opened"></i></span>
+					<span>验收打分单</span>
+				</div>
+
 			</div>
-			
-      </div>
 
-    </fullscreen>
+		</div>
 
+</fullscreen>
 </template>
 <script>
-    import mySearch from "../../../components/search.vue";
-    import myMessage from "../../../components/myMessage.vue"
-    import toolList from '../../../components/toolList'
-	import myUpload from '../../../components/upload'
+import mySearch from "../../../components/search.vue";
+import myMessage from "../../../components/myMessage.vue"
+import toolList from '../../../components/toolList'
+import myUpload from '../../../components/upload'
+
+export default {
+	components: {
+		mySearch,
+		myMessage,
+		toolList,
+		myUpload
+	},
+	data() {
 
-    export default {
-        components: {
-            mySearch,
-            myMessage,
-            toolList,
-			myUpload
-        },
-        data() {
-          
-            return {
-                fullscreen: false,
-				lockFlag:'see',
-				province:true
-            }
-        },
-        methods: {
-            jumpinfop(p,v,n){
-				this.$router.push({
-				    path: p,
-				    query:{
-				        type:v
-				    }
-				});
-				this.setabList(n, p+"?type="+v);
-			},
-			jumpinfo(p,n){
-				this.$router.push({
-				    path: p,
-				});
-				this.setabList(n, p);
-			},
-			setabList(n, p) {
-			    let params = {
-			        children: "",
-			        name: n,
-			        rountPath: p,
-			        target: "_self",
-			    };
-			    for (let i = 0; i < this.$store.state.tabList.length; i++) {
-			        if (this.$store.state.tabList[i].name === params.name) {
-			            this.$store.state.tabList[i] = params;
-			        }
-			    }
-			    let set = new Set([...this.$store.state.tabList, params]);
-			    set.add(params);
-			    this.$store.commit("setDefaultActive", params.rountPath);
-			    this.$store.commit("setTabList", Array.from(set));
-			},
-            getUser() {
-                this.userInfo = JSON.parse(window.sessionStorage.userInfo);
-				let Menus = JSON.parse(window.sessionStorage.childrenMenus);
-				for (let i = 0; i < Menus.length; i++) {
-					if(Menus[i].systemflag == 1 && Menus[i].jspUrl == '/publicityAccount'){
-						this.lockFlag = 'add';//省级
-					}
-					if(Menus[i].systemflag == 1 && Menus[i].jspUrl == '/publicity'){
-						this.lockFlag = 'updata';//管理员
-						i = Menus.length;
-					}
+		return {
+			fullscreen: false,
+			lockFlag: 'see',
+			province: true
+		}
+	},
+	methods: {
+		jumpinfop(p, v, n) {
+			this.$router.push({
+				path: p,
+				query: {
+					type: v
+				}
+			});
+			this.setabList(n, p + "?type=" + v);
+		},
+		jumpinfo(p, n) {
+			this.$router.push({
+				path: p,
+			});
+			this.setabList(n, p);
+		},
+		setabList(n, p) {
+			let params = {
+				children: "",
+				name: n,
+				rountPath: p,
+				target: "_self",
+			};
+			for (let i = 0; i < this.$store.state.tabList.length; i++) {
+				if (this.$store.state.tabList[i].name === params.name) {
+					this.$store.state.tabList[i] = params;
 				}
-				for (let i = 0; i < Menus.length; i++) {
-					if(Menus[i].systemflag == 1 && Menus[i].jspUrl == '/province'){
-						this.province = true;//省公司
-					}
+			}
+			let set = new Set([...this.$store.state.tabList, params]);
+			set.add(params);
+			this.$store.commit("setDefaultActive", params.rountPath);
+			this.$store.commit("setTabList", Array.from(set));
+		},
+		getUser() {
+			this.userInfo = JSON.parse(window.sessionStorage.userInfo);
+			let Menus = JSON.parse(window.sessionStorage.childrenMenus);
+			for (let i = 0; i < Menus.length; i++) {
+				if (Menus[i].systemflag == 1 && Menus[i].jspUrl == '/publicityAccount') {
+					this.lockFlag = 'add';//省级
 				}
-            }
-        },
-        mounted() {
-            this.getUser();
-        },
-        created() {
+				if (Menus[i].systemflag == 1 && Menus[i].jspUrl == '/publicity') {
+					this.lockFlag = 'updata';//管理员
+					i = Menus.length;
+				}
+			}
+			for (let i = 0; i < Menus.length; i++) {
+				if (Menus[i].systemflag == 1 && Menus[i].jspUrl == '/province') {
+					this.province = true;//省公司
+				}
+			}
+		}
+	},
+	mounted() {
+		this.getUser();
+	},
+	created() {
 
-        }
-    }
+	}
+}
 </script>
 <style scoped lang="scss">
-	.container-box{
-		height: calc(100vh - 200px);
-		overflow-y: scroll;
-		padding-bottom: 20px;
+.container-box {
+	height: calc(100vh - 200px);
+	overflow-y: scroll;
+	padding-bottom: 20px;
+}
+
+.adv-type {
+	margin-top: 20px;
+	display: flex;
+	// justify-content: space-between;
+	flex-wrap: wrap;
+	// border: 1px solid #ddd;
+	border-radius: 5px;
+	padding: 20px;
+	box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1);
+
+	div {
+		width: 33%;
+		text-align: center;
+		height: 80px;
+		overflow: hidden;
+		min-width: 100px;
+		cursor: pointer;
+		padding-top: 10px;
+		margin: 10px 0;
 	}
-	.adv-type{
-	    margin-top: 20px;
-	    display: flex;
-	    justify-content: space-between;
-	    flex-wrap: wrap;
-	    // border: 1px solid #ddd;
-	    border-radius: 5px;
-	    padding: 20px;
-	    box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
-	    div{
-	        width: 33%;
-	        text-align: center;
-	        height: 80px;
-	        overflow: hidden;
-	        min-width: 100px;
-	        cursor: pointer;
-	        padding-top: 10px;
-	        margin: 10px 0;
-	    }
-	    div:hover{
-	        background: #CFE8FC;
-	        border-radius: 5px;
-	    }
-	    span{
-	        width: 100%;
-	        display: inline-block;
-	        height: 40px;
-	        // line-height: 40px;
-	        i{
-	            color: #0074D9;
-	            font-size: 36px;
-	        }
-	    }
-		.wfour{
-			width: 25%;
-		}
-		.wfive{
-			width: 20%;
+
+	div:hover {
+		background: #CFE8FC;
+		border-radius: 5px;
+	}
+
+	span {
+		width: 100%;
+		display: inline-block;
+		height: 40px;
+
+		// line-height: 40px;
+		i {
+			color: #0074D9;
+			font-size: 36px;
 		}
 	}
-</style>
+
+	.wfour {
+		width: 25%;
+	}
+
+	.wfive {
+		width: 20%;
+	}
+}</style>

+ 447 - 0
src/pages/main/advertising/materialAppMessage.vue

@@ -0,0 +1,447 @@
+<template>
+    <fullscreen :fullscreen.sync="fullscreen" class="container">
+        <div class="container-box">
+            <toolList @iconCli="iconCli" :tooltit="tooltit"></toolList>
+            <div class="search">
+                <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                <el-button class="btn-check" size="medium" type="primary" @click="exportTempletelist">导出
+                </el-button>
+            </div>
+            <div class="tabbox">
+                <el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
+                    tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
+                    <el-table-column prop="region" label="城市">
+                    </el-table-column>
+                    <el-table-column prop="district" label="区县">
+                    </el-table-column>
+
+                    <el-table-column prop="selectedGys" label="供应商(全称)">
+                    </el-table-column>
+                    <el-table-column prop="useCase" label="使用场景">
+                    </el-table-column>
+                    <el-table-column prop="materialNo" label="物料编码">
+                    </el-table-column>
+                    <el-table-column prop="material" label="物料名称">
+                    </el-table-column>
+                    <el-table-column prop="unit" label="物料单位">
+                    </el-table-column>
+                    <el-table-column prop="spec" label="规格尺寸">
+                    </el-table-column>
+                    <el-table-column prop="chang" label="长(M)">
+                    </el-table-column>
+                    <el-table-column prop="kuan" label="宽(M)">
+                    </el-table-column>
+                    <el-table-column prop="coefficient" label="系数">
+                    </el-table-column>
+
+                    <el-table-column prop="quantity" label="数量">
+                    </el-table-column>
+                    <el-table-column prop="settlementAmount" label="结算金额(元,不含税)">
+                    </el-table-column>
+                </el-table>
+                <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+                    :total="total">
+                </el-pagination>
+            </div>
+        </div>
+</fullscreen>
+</template>
+<script>
+import mySearch from "../../../components/search.vue";
+import toolList from "../../../components/toolList";
+
+export default {
+    components: {
+        mySearch,
+        toolList,
+    },
+    data() {
+       
+        return {
+            searchList: [
+                {
+                    type: "sel",
+                    tit: "使用场景",
+                    value: "",
+                    width: "31%",
+                    options: [
+                        {
+                            dataCode: "营业厅-VI改造-自有渠道",
+                            dataName: "营业厅-VI改造-自有渠道"
+                        },
+                        {
+                            dataCode: "营业厅-常规物料-自有渠道",
+                            dataName: "营业厅-常规物料-自有渠道"
+                        },
+                        {
+                            dataCode: "营业厅-VI改造-合作渠道",
+                            dataName: "营业厅-VI改造-合作渠道"
+                        },
+                        {
+                            dataCode: "营业厅-常规物料-合作渠道",
+                            dataName: "营业厅-常规物料-合作渠道"
+                        },
+                        {
+                            dataCode: "小区",
+                            dataName: "小区"
+                        },
+                        {
+                            dataCode: "校园",
+                            dataName: "校园"
+                        },
+                        {
+                            dataCode: "政企",
+                            dataName: "政企"
+                        }
+                    ]
+                },
+                { type: "input", tit: "供应商", value: "", width: "31%" },
+                { type: "input", tit: "城市名称", value: "", width: "31%" },
+                { type: "input", tit: "区县名称", value: "", width: "31%" },
+                { type: "input", tit: "物料编码", value: "", width: "31%" }
+            ],
+            tooltit: "宣传物料制作费用明细",
+            fullscreen: false,
+            total: 0,
+            pageSize: 1,
+            tableData: [],
+            dialogStatus: false,
+            disableStatus: false,
+            titname: "",
+            infolist: {},
+            userInfo: {},
+            params: {},
+            centerDialogVisible: false,
+            messTit: "",
+            delid: "",
+            loading: false,
+            loadinged: false,
+            //使用场景
+            sceneopt: [
+                {
+                    dataCode: "1",
+                    dataName: "小区"
+                },
+                {
+                    dataCode: "2",
+                    dataName: "校园"
+                },
+                {
+                    dataCode: "3",
+                    dataName: "营业厅-VI改造-自有渠道"
+                },
+                {
+                    dataCode: "4",
+                    dataName: "营业厅-常规物料-自有渠道"
+                },
+                {
+                    dataCode: "5",
+                    dataName: '营业厅-VI改造-合作渠道'
+                },
+                {
+                    dataCode: "6",
+                    dataName: '营业厅-常规物料-合作渠道'
+                },
+                {
+                    dataCode: "7",
+                    dataName: "政企"
+                }
+            ],
+            // 基础数据
+            isAsicopt: [
+                {
+                    id: "0",
+                    name: "是"
+                },
+                {
+                    id: "1",
+                    name: "否"
+                }
+            ],
+            coefficientopt: [
+                {
+                    id: "0",
+                    name: "按需录入"
+                },
+                {
+                    id: "1",
+                    name: "1"
+                }
+            ],
+            //单位
+            unitopt: [
+                {
+                    id: "0",
+                    name: "平方米"
+                },
+                {
+                    id: "1",
+                    name: "个"
+                },
+                {
+                    id: "2",
+                    name: "延长米"
+                },
+                {
+                    id: "3",
+                    name: "套"
+                },
+                {
+                    id: "4",
+                    name: "组"
+                }, {
+                    id: "5",
+                    name: "延米"
+                }, {
+                    id: '6',
+                    name: '张'
+                }
+            ],
+            //物料名称
+            nameopt: [],
+            //供应商
+            suppOpt: [],
+            usePlanceArr: [],
+            metirialTypeopt: [],
+            metirialCodeDisableStatus: false,
+            // scene:[]
+        };
+    },
+    methods: {
+        exportTempletelist() {
+            let data = this.params;
+            // return
+            this.$http({
+                url: "/market/xcwlProcess/excelExportFeeDetail",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                responseType: "blob",
+                data: {},
+            }).then((response) => {
+                if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                    let blob = new Blob([response.data], {
+                        type: 'application/vnd.ms-excel'
+                    })
+                    window.navigator.msSaveOrOpenBlob(blob,
+                        new Date().getTime() + '.xlsx')
+                } else {
+                    /* 火狐谷歌的文件下载方式 */
+                    var blob = new Blob([response.data])
+                    var downloadElement = document.createElement('a')
+                    var href = window.URL.createObjectURL(blob)
+                    downloadElement.href = href
+                    downloadElement.download = new Date().getTime() + '.xlsx'
+                    document.body.appendChild(downloadElement)
+                    downloadElement.click()
+                    document.body.removeChild(downloadElement)
+                    window.URL.revokeObjectURL(href)
+                }
+            });
+        },
+        usePlance(v) {
+            this.usePlanceArr = v;
+
+        },
+        closedia() {
+            this.infolist = {};
+            this.dialogStatus = false;
+        },
+        //搜索数据
+        searchInfo(v) {
+            this.params = {};
+            v[0] ? (this.params.useCase = v[0]) : "";
+            v[1] ? (this.params.selectedGys = v[1]) : "";
+            v[2] ? (this.params.region = v[2]) : "";
+            v[3] ? (this.params.district = v[3]) : "";
+            v[4] ? (this.params.materialNo = v[4]) : "";
+            this.getList(this.params, this.pageSize);
+        },
+        uploadBack(v) {
+            let that = this;
+            console.log(v);
+            if (v.data.result == 0) {
+                that.getList({}, 1);
+                that.getUser();
+                that.getMetirialType();
+                that.getMetirialInfo();
+            }
+        },
+        getMetirialInfo() {
+            this.$http({
+                url: "/market/cadvSecbuyMetirial/queryList",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json"
+                },
+                data: {
+                    dictCodePks: "metirialType"
+                }
+            }).then(res => {
+                this.materialNameopt = res.data;
+            });
+        },
+        getMetirialType() {
+            this.$http({
+                url: "/sysmgr/cfgDataDicts/queryMap",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json"
+                },
+                data: {
+                    dictCodePks: "metirialType"
+                }
+            }).then(res => {
+                this.metirialTypeopt = res.data.body.metirialType;
+            });
+        },
+        //获取列表
+        getList(v, n) {
+            this.pageSize = n;
+            let _this = this;
+            this.loading = true;
+            this.tableData = [];
+            this.$http({
+                url: "/market/xcwlProcess/queryDonePage",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                    page: '{"pageNo":"' + n + '","pageSize":"10"}'
+                },
+                data: v
+            }).then(res => {
+                res.data.data.forEach(item => {
+                    for (let i = 0; i < this.sceneopt.length; i++) {
+                        if (this.sceneopt[i].dataCode == item.sceneName) {
+                            item.sceneName = this.sceneopt[i].dataName;
+                        }
+                    }
+                });
+                this.tableData = res.data.data;
+                this.total = res.data.totalRecord;
+                this.loading = false;
+            });
+        },
+
+        // 分页
+        currchange(v) {
+            this.pageSize = v;
+            this.getList(this.params, this.pageSize);
+        },
+        //功能栏
+        iconCli(v) {
+            if (v === 1) {
+                this.getList(this.params, this.pageSize);
+            }
+            if (v === 2) {
+                this.fullscreen = !this.fullscreen;
+            }
+        },
+        getUser() {
+            this.userInfo = JSON.parse(window.sessionStorage.userInfo);
+            this.$http({
+                url: "/market/cadvSupplier/queryValidSupplierList",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json"
+                },
+                // data: { buyTypeCode: "2" }
+                data: {}
+            }).then(res => {
+                this.suppOpt = res.data;
+            });
+        }
+    },
+    mounted() {
+        this.getList({}, 1);
+        this.getUser();
+
+        this.$http({
+            url: "/sysmgr/cfgDataDicts/queryMap",
+            method: "post",
+            headers: {
+                "Content-Type": "application/json"
+            },
+            data: {
+                dictCodePks: "metirialType"
+            }
+        }).then(res => {
+            this.metirialTypeopt = res.data.body.metirialType;
+            // this.stypeList = res.data.body.materType;
+        });
+    },
+    created() { }
+};
+</script>
+<style scoped lang="scss">
+.onetab {
+    margin-bottom: 20px;
+    padding: 0 20px;
+}
+
+.titbox {
+    div {
+        float: right;
+
+        i {
+            font-size: 22px;
+            margin-left: 20px;
+            cursor: pointer;
+        }
+    }
+}
+
+.tabbox {
+    margin-top: 15px;
+}
+
+.pageBox {
+    text-align: right;
+    margin-top: 10px;
+}
+
+.info-line {
+    width: 100%;
+    display: block;
+    padding-left: 20px;
+
+    div {
+        width: 50%;
+        display: inline-block;
+    }
+
+    span {
+        width: 80px;
+        display: inline-block;
+        text-align: left;
+
+        i {
+            color: red;
+            display: inline-block;
+            padding-right: 5px;
+        }
+    }
+
+    .el-select,
+    .el-input {
+        width: calc(100% - 100px);
+    }
+}
+
+.online {
+    width: 100%;
+
+    .el-select {
+        width: calc(100% - 100px);
+    }
+
+    span {
+        vertical-align: top;
+    }
+
+    .el-textarea {
+        width: calc(100% - 100px);
+    }
+}
+</style>

+ 415 - 0
src/pages/main/advertising/materialAppNum.vue

@@ -0,0 +1,415 @@
+<template>
+    <fullscreen :fullscreen.sync="fullscreen" class="container">
+        <div class="container-box">
+            <toolList @iconCli="iconCli" :tooltit="tooltit"></toolList>
+            <div class="search">
+                <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                <el-button class="btn-check" size="medium" type="primary" @click="exportTempletelist">导出验收单
+                </el-button>
+            </div>
+            <div class="tabbox">
+                <el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
+                    tooltip-effect="dark" size="small" border style="width: 100%" @selection-change="selectionChange"
+                    v-loading="loading">
+                    <el-table-column type="selection" width="55">
+                    </el-table-column>
+                    <el-table-column prop="needName" label="业务名称">
+                    </el-table-column>
+                    <el-table-column prop="state" label="需求编号">
+                    </el-table-column>
+                    <el-table-column prop="materialNo" label="物料编码">
+                    </el-table-column>
+                    <el-table-column prop="material" label="物料名称">
+                    </el-table-column>
+                    <el-table-column prop="unit" label="物料单位">
+                    </el-table-column>
+                    <el-table-column prop="spec" label="规格尺寸">
+                    </el-table-column>
+                    <el-table-column prop="quantity" label="数量">
+                    </el-table-column>
+                    <el-table-column prop="districtScore" label="区县验收打分">
+                    </el-table-column>
+                </el-table>
+                <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+                    :total="total">
+                </el-pagination>
+            </div>
+        </div>
+</fullscreen>
+</template>
+<script>
+import { log } from "console";
+import mySearch from "../../../components/search.vue";
+import toolList from "../../../components/toolList";
+
+export default {
+    components: {
+        mySearch,
+        toolList,
+    },
+    data() {
+
+
+        return {
+            exportList:[],
+            searchList: [
+
+                { type: "input", tit: "供应商", value: "", width: "31%" },
+                { type: "input", tit: "城市名称", value: "", width: "31%" },
+                { type: "input", tit: "区县名称", value: "", width: "31%" },
+                { type: "input", tit: "物料编码", value: "", width: "31%" }
+            ],
+            tooltit: "宣传物料制作验收及打分",
+            fullscreen: false,
+            total: 0,
+            pageSize: 1,
+            tableData: [],
+            dialogStatus: false,
+            disableStatus: false,
+            titname: "",
+            infolist: {},
+            userInfo: {},
+            params: {},
+            centerDialogVisible: false,
+            messTit: "",
+            delid: "",
+            loading: false,
+            loadinged: false,
+            //使用场景
+            sceneopt: [
+                {
+                    dataCode: "1",
+                    dataName: "小区"
+                },
+                {
+                    dataCode: "2",
+                    dataName: "校园"
+                },
+                {
+                    dataCode: "3",
+                    dataName: "营业厅-VI改造-自有渠道"
+                },
+                {
+                    dataCode: "4",
+                    dataName: "营业厅-常规物料-自有渠道"
+                },
+                {
+                    dataCode: "5",
+                    dataName: '营业厅-VI改造-合作渠道'
+                },
+                {
+                    dataCode: "6",
+                    dataName: '营业厅-常规物料-合作渠道'
+                },
+                {
+                    dataCode: "7",
+                    dataName: "政企"
+                }
+            ],
+            // 基础数据
+            isAsicopt: [
+                {
+                    id: "0",
+                    name: "是"
+                },
+                {
+                    id: "1",
+                    name: "否"
+                }
+            ],
+            coefficientopt: [
+                {
+                    id: "0",
+                    name: "按需录入"
+                },
+                {
+                    id: "1",
+                    name: "1"
+                }
+            ],
+            //单位
+            unitopt: [
+                {
+                    id: "0",
+                    name: "平方米"
+                },
+                {
+                    id: "1",
+                    name: "个"
+                },
+                {
+                    id: "2",
+                    name: "延长米"
+                },
+                {
+                    id: "3",
+                    name: "套"
+                },
+                {
+                    id: "4",
+                    name: "组"
+                }, {
+                    id: "5",
+                    name: "延米"
+                }, {
+                    id: '6',
+                    name: '张'
+                }
+            ],
+            //物料名称
+            nameopt: [],
+            //供应商
+            suppOpt: [],
+            usePlanceArr: [],
+            metirialTypeopt: [],
+            metirialCodeDisableStatus: false,
+            // scene:[]
+        };
+    },
+    methods: {
+        selectionChange(val){
+          this.exportList =  val;
+        },  
+        exportTempletelist() {
+            if(this.exportList.length==0){
+                this.$message.error('请选择导出文件')
+                return
+            }
+            // return
+            this.$http({
+                url: "/market/xcwlProcess/excelExportDistrictScore",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                responseType: "blob",
+                data: this.exportList,
+            }).then((response) => {
+                if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                    let blob = new Blob([response.data], {
+                        type: 'application/vnd.ms-excel'
+                    })
+                    window.navigator.msSaveOrOpenBlob(blob,
+                        new Date().getTime() + '.xlsx')
+                } else {
+                    /* 火狐谷歌的文件下载方式 */
+                    var blob = new Blob([response.data])
+                    var downloadElement = document.createElement('a')
+                    var href = window.URL.createObjectURL(blob)
+                    downloadElement.href = href
+                    downloadElement.download = new Date().getTime() + '.xlsx'
+                    document.body.appendChild(downloadElement)
+                    downloadElement.click()
+                    document.body.removeChild(downloadElement)
+                    window.URL.revokeObjectURL(href)
+                }
+            });
+        },
+        usePlance(v) {
+            this.usePlanceArr = v;
+
+        },
+        closedia() {
+            this.infolist = {};
+            this.dialogStatus = false;
+        },
+        //搜索数据
+        searchInfo(v) {
+            this.params = {};
+            v[0] ? (this.params.selectedGys = v[0]) : "";
+            v[1] ? (this.params.region = v[1]) : "";
+            v[2] ? (this.params.district = v[2]) : "";
+            v[3] ? (this.params.materialNo = v[3]) : "";
+            this.getList(this.params, this.pageSize);
+        },
+        uploadBack(v) {
+            let that = this;
+            console.log(v);
+            if (v.data.result == 0) {
+                that.getList({}, 1);
+                that.getUser();
+                that.getMetirialType();
+                that.getMetirialInfo();
+            }
+        },
+        getMetirialInfo() {
+            this.$http({
+                url: "/market/cadvSecbuyMetirial/queryList",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json"
+                },
+                data: {
+                    dictCodePks: "metirialType"
+                }
+            }).then(res => {
+                this.materialNameopt = res.data;
+            });
+        },
+        getMetirialType() {
+            this.$http({
+                url: "/sysmgr/cfgDataDicts/queryMap",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json"
+                },
+                data: {
+                    dictCodePks: "metirialType"
+                }
+            }).then(res => {
+                this.metirialTypeopt = res.data.body.metirialType;
+            });
+        },
+        //获取列表
+        getList(v, n) {
+            this.pageSize = n;
+            let _this = this;
+            this.loading = true;
+            this.tableData = [];
+            this.$http({
+                url: "/market/xcwlProcess/queryDonePage",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                    page: '{"pageNo":"' + n + '","pageSize":"10"}'
+                },
+                data: v
+            }).then(res => {
+                res.data.data.forEach(item => {
+                    for (let i = 0; i < this.sceneopt.length; i++) {
+                        if (this.sceneopt[i].dataCode == item.sceneName) {
+                            item.sceneName = this.sceneopt[i].dataName;
+                        }
+                    }
+                });
+                this.tableData = res.data.data;
+                console.log(this.tableData);
+                this.total = res.data.totalRecord;
+                this.loading = false;
+            });
+        },
+
+        // 分页
+        currchange(v) {
+            this.pageSize = v;
+            this.getList(this.params, this.pageSize);
+        },
+        //功能栏
+        iconCli(v) {
+            if (v === 1) {
+                this.getList(this.params, this.pageSize);
+            }
+            if (v === 2) {
+                this.fullscreen = !this.fullscreen;
+            }
+        },
+        getUser() {
+            this.userInfo = JSON.parse(window.sessionStorage.userInfo);
+            this.$http({
+                url: "/market/cadvSupplier/queryValidSupplierList",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json"
+                },
+                // data: { buyTypeCode: "2" }
+                data: {}
+            }).then(res => {
+                this.suppOpt = res.data;
+            });
+        },
+        handleSelectionChange() {
+
+        }
+    },
+    mounted() {
+        this.getList({}, 1);
+        this.getUser();
+
+        this.$http({
+            url: "/sysmgr/cfgDataDicts/queryMap",
+            method: "post",
+            headers: {
+                "Content-Type": "application/json"
+            },
+            data: {
+                dictCodePks: "metirialType"
+            }
+        }).then(res => {
+            this.metirialTypeopt = res.data.body.metirialType;
+            // this.stypeList = res.data.body.materType;
+        });
+    },
+    created() { }
+};
+</script>
+<style scoped lang="scss">
+.onetab {
+    margin-bottom: 20px;
+    padding: 0 20px;
+}
+
+.titbox {
+    div {
+        float: right;
+
+        i {
+            font-size: 22px;
+            margin-left: 20px;
+            cursor: pointer;
+        }
+    }
+}
+
+.tabbox {
+    margin-top: 15px;
+}
+
+.pageBox {
+    text-align: right;
+    margin-top: 10px;
+}
+
+.info-line {
+    width: 100%;
+    display: block;
+    padding-left: 20px;
+
+    div {
+        width: 50%;
+        display: inline-block;
+    }
+
+    span {
+        width: 80px;
+        display: inline-block;
+        text-align: left;
+
+        i {
+            color: red;
+            display: inline-block;
+            padding-right: 5px;
+        }
+    }
+
+    .el-select,
+    .el-input {
+        width: calc(100% - 100px);
+    }
+}
+
+.online {
+    width: 100%;
+
+    .el-select {
+        width: calc(100% - 100px);
+    }
+
+    span {
+        vertical-align: top;
+    }
+
+    .el-textarea {
+        width: calc(100% - 100px);
+    }
+}
+</style>

Файловите разлики са ограничени, защото са твърде много
+ 1707 - 172
src/pages/main/advertising/materialApplication.vue


Файловите разлики са ограничени, защото са твърде много
+ 576 - 440
src/pages/main/advertising/materialApplicationadd.vue


Файловите разлики са ограничени, защото са твърде много
+ 2238 - 0
src/pages/main/advertising/materialApplicationds.vue


+ 28 - 24
src/pages/main/advertising/materialApplistatic.vue

@@ -4,22 +4,22 @@
             <toolList @iconCli='iconCli' :tooltit='tooltit'></toolList>
             <div class="search">
                 <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
-				<span class="allprice">合计总额:3000</span>
+				<span class="allprice">合计总额:{{ allNum }}</span>
             </div>
             <div class="tabbox">
                 <el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
                     tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
-                    <el-table-column prop="name" label="地市">
+                    <el-table-column prop="countyName" label="地市">
                     </el-table-column>
-                    <el-table-column prop="type" label="物料类型">
+                    <el-table-column prop="metirialType" label="物料类型">
                     </el-table-column>
-                    <el-table-column prop="money" label="单价">
+                    <el-table-column prop="price" label="单价">
                     </el-table-column>
                     <el-table-column prop="size" label="规格">
                     </el-table-column>
-                    <el-table-column prop="num" label="数量">
+                    <el-table-column prop="priority" label="数量">
                     </el-table-column>
-					<el-table-column prop="all" label="小计">
+					<el-table-column prop="settlementAmount" label="小计">
                     </el-table-column>
                 </el-table>
                 <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
@@ -42,6 +42,8 @@
         },
         data() {
             return {
+                allNum:'',
+                params:{},
                 searchList: [
                     {
                         type: 'input',
@@ -82,23 +84,25 @@
             },
             //获取列表
             getList(v, n) {
-                // this.pageSize = n;
-                // let _this = this;
-                // this.loading = true;
-                // this.tableData = [];
-                // this.$http({
-                //     url: "/bpm/api/queryBpmPrePluginPage",
-                //     method: "post",
-                //     headers: {
-                //         "Content-Type": "application/json",
-                //         "page": '{"pageNo":"' + n + '","pageSize":"10"}'
-                //     },
-                //     data: v,
-                // }).then((res) => {
-                //     this.tableData = res.data.data;
-                //     this.total = res.data.totalRecord;
-                //     this.loading = false;
-                // });
+                console.log(v);
+                this.pageSize = n;
+                this.loading = true;
+                this.tableData = [];
+                this.$http({
+                    url: "/market/cadvBusiMetirial/queryPageReport",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                        "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                    },
+                    data: v,
+                }).then((res) => {
+                    console.log(res);
+                    this.tableData = res.data.data;
+                    this.allNum = res.data.retMsg;
+                    this.total = res.data.totalRecord;
+                    this.loading = false;
+                });
             },
             // 分页
             currchange(v) {
@@ -116,7 +120,7 @@
             },
         },
         mounted() {
-            // this.getList({}, 1);
+            this.getList({}, 1);
         },
         created() {
 

+ 18 - 8
src/pages/main/advertising/materiel.vue

@@ -7,16 +7,17 @@
                     :searchList="searchList"
                     @searchInfo="searchInfo"
                 ></mySearch>
-                <el-button class="btn-check" size="medium" type="primary" @click="exportTempletelist">下载导入模板
+                <el-button class="btn-check" size="medium" type="primary" @click="exportTempletelist" v-if="userInfo.duty <= 9">下载导入模板
                 </el-button>
                 <el-button
                     class="btn-check"
                     size="medium"
                     type="primary"
-                    @click="dialogCheck(3)" v-if="userInfo.loginNo=='jiangshuai'"
+                    @click="dialogCheck(3)" v-if="userInfo.loginNoStr == 'jiangshuai'"
                     >添加
                 </el-button>
-                <myUpload style="display:inline-block;" :fileInfo="fileInfot"
+                
+                <myUpload style="display:inline-block;" :fileInfo="fileInfot" v-if="userInfo.loginNoStr == 'jiangshuai'"
                           :fileList="fileInfot.fileList" @uploadBack='uploadBack'></myUpload>
             </div>
             <div class="tabbox">
@@ -78,13 +79,15 @@
                             <el-button
                                 size="mini"
                                 type="primary"
-                                @click="dialogCheck(2, scope.row)" v-if="userInfo.loginNo=='jiangshuai'"
+                                @click="dialogCheck(2, scope.row)" v-if="userInfo.loginNoStr == 'jiangshuai'"
                                 >修改</el-button
                             >
+                            
+                             <!-- v-if="userInfo.loginNo=='jiangshuai'" -->
                             <el-button
                                 size="mini"
                                 type="danger"
-                                @click="delLine(scope.row)" v-if="userInfo.loginNo=='jiangshuai'"
+                                @click="delLine(scope.row)" v-if="userInfo.loginNoStr == 'jiangshuai'"
                                 >删除</el-button
                             >
                         </template>
@@ -607,13 +610,13 @@ export default {
                 fileList: [],
                 woNo: "",
             },
-            tooltit: "二采物料类型建档",
+            tooltit: "宣传物料及印刷品类型建档",
             fullscreen: false,
             total: 0,
             pageSize: 1,
             tableData: [],
             dialogStatus: false,
-            disableStatus: false,
+            disableStatus: false,//是否禁用弹窗
             titname: "",
             infolist: {},
             userInfo: {},
@@ -728,7 +731,7 @@ export default {
             suppOpt: [],
             usePlanceArr: [],
             metirialTypeopt: [],
-            metirialCodeDisableStatus: false,
+            metirialCodeDisableStatus: false,//物料编码是否禁用
             // scene:[]
         };
     },
@@ -815,6 +818,13 @@ export default {
         uploadBack(v) {
             let that = this;
             console.log(v);
+            console.log(v.data.desc);
+            if(v.data.desc != "导入成功"){
+                let timer = setTimeout(() => {
+                   this.$message.error("物料编码已存在,请更改物料编码"); 
+                },800)
+                
+            }
             if(v.data.result==0){
                 that.getList({}, 1);
                 that.getUser();

+ 15 - 0
src/pages/main/advertising/supplier.vue

@@ -25,6 +25,10 @@
                     </el-table-column>
                     <el-table-column prop="schedule" label="框架总额进度">
 					</el-table-column>
+                    <el-table-column prop="preCost" label="预占总额">
+					</el-table-column>
+                    <el-table-column prop="billCost" label="下单总额">
+					</el-table-column>
 					<!-- <el-table-column prop="buyTypeName" label="采购类型">
 					</el-table-column> -->
 					<el-table-column prop="contractEndTime" label="截止时间">
@@ -87,6 +91,17 @@
 						    <el-date-picker v-model="infolist.contractEndTime" type="datetime" placeholder="截止时间" :disabled="disableStatus">
 						    </el-date-picker>
 						</el-form-item>
+                        <el-form-item prop="contractEndTime">
+						    <span>预占总额</span>
+						    <el-input v-model="infolist.preCost"  placeholder="预占总额" :disabled="disableStatus">
+						    </el-input>
+						</el-form-item>
+                        <el-form-item prop="contractEndTime">
+						    <span>下单总额</span>
+						    <el-input v-model="infolist.billCost"  placeholder="下单总额" :disabled="disableStatus">
+						    </el-input>
+						</el-form-item>
+               
 						<!-- <el-form-item prop="type">
 						    <span>采购类型</span>
 						    <el-select :disabled="disableStatus" :popper-append-to-body="false"

Файловите разлики са ограничени, защото са твърде много
+ 1952 - 0
src/pages/main/closeFill/advanceDeposit.vue


+ 535 - 0
src/pages/main/documentCollection/documentCollectionApproval.vue

@@ -0,0 +1,535 @@
+<template>
+    <fullscreen :fullscreen.sync="fullscreen" class="container" style="margin: 0;width: 100%;">
+        <div class="container-box">
+            <!-- <toolList @iconCli='iconCli' :tooltit='tooltit'></toolList> -->
+            <div>
+                <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                <!-- <div style="margin-top: 20px;float: right;" class="bigbtns">
+                    <el-button style="margin-left: 20px;" class="btn-check" size="medium" type="primary"
+                               @click="addNew()">新增模板
+                    </el-button>
+                </div> -->
+            </div>
+            <div class="tabbox">
+                <el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
+                    tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
+                    <el-table-column prop="templateName" label="模板名称" align="center">
+                    </el-table-column>
+                    <el-table-column prop="reason" label="填报事由" align="center">
+                    </el-table-column>
+                    <el-table-column prop="precautions" label="填报注意事项" align="center">
+                    </el-table-column>
+                    <el-table-column prop="endTime" label="截至时间" align="center">
+                    </el-table-column>
+                    <el-table-column prop="createName" label="工单发起人" align="center">
+                    </el-table-column>
+                    <el-table-column prop="receiverName" label="接收人" align="center">
+                        <template slot-scope="scope">
+                            <span @click="toOneDialog(scope.row.id)" style="cursor:pointer;color: #007eff;">{{
+                                scope.row.receiverName
+                            }}</span>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="processName" label="当前处理人" align="center">
+                    </el-table-column>
+                    <el-table-column prop="createTime" label="发起时间" align="center">
+                    </el-table-column>
+
+                    <el-table-column prop="status" label="状态" align="center">
+                        <template slot-scope="scope">
+                            <!-- -1.已撤销 0.待处理 1.部门人员审批 2.部门领导审批 3.退回修改 4.已完成 -->
+                            <span v-if="scope.row.status == -1">已撤销</span>
+                            <span v-if="scope.row.status == 0">待处理</span>
+                            <span v-if="scope.row.status == 1">部门人员审批</span>
+                            <span v-if="scope.row.status == 2">部门领导审批</span>
+                            <span v-if="scope.row.status == 3">退回修改</span>
+                            <span v-if="scope.row.status == 4">已完成</span>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="superviseFlag" label="是否为督办" align="center">
+                        <template slot-scope="scope">
+                            <span v-if="scope.row.superviseFlag == 0">否</span>
+                            <span v-if="scope.row.superviseFlag == null">否</span>
+                            <span v-if="scope.row.superviseFlag == 1">是</span>
+                        </template>
+                    </el-table-column>
+                    <el-table-column label="操作" width="220px" align="center" fixed="right">
+                        <template slot-scope="scope">
+                            <el-button size="mini" @click="toView(scope.row)">查看</el-button>
+                            <el-button size="mini" @click="toChuli(scope.row)"
+                                v-if="scope.row.status != 4 && (loginNo == scope.row.processId)">处理</el-button>
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+                    :total="total">
+                </el-pagination>
+            </div>
+            <el-dialog title="下发" :visible.sync="issuedAddStatus" width="40%" :destroy-on-close="true"
+                :modal-append-to-body="false" :close-on-click-modal="false" :fullscreen="false">
+                <el-form :model="issuedParam" ref="addInfoList">
+                    <div class="info-line">
+                        <el-form-item prop="testInfo">
+                            <span style="width: 6px;color: red">*</span><span>填报事由</span>
+                            <el-input v-model="issuedParam.editReason" placeholder="填报事由"></el-input>
+                        </el-form-item>
+                    </div>
+                    <div class="info-line">
+                        <el-form-item prop="testInfo">
+                            <span style="width: 6px;color: red">*</span><span>填报注意事项</span>
+                            <el-input v-model="issuedParam.editRemark" placeholder="填报注意事项"></el-input>
+                        </el-form-item>
+                    </div>
+                    <div class="info-line">
+                        <el-form-item prop="testInfo">
+                            <span style="width: 6px;color: red">*</span><span>截止时间</span>
+                            <el-date-picker type="date" placeholder="截止时间" v-model="issuedParam.endTime"
+                                :picker-options="pickerOptions" value-format="yyyy-MM-dd"></el-date-picker>
+                        </el-form-item>
+                    </div>
+                </el-form>
+                <div slot="footer" class="dialog-footer myfooter">
+
+                    <el-button @click="issuedAddStatus = false">取消</el-button>
+                    <el-button @click="processNewIssued()" type="primary">确定</el-button>
+                </div>
+            </el-dialog>
+            <el-dialog :title="'回复详情'" :visible.sync="toOnevisible" width="50%" :destroy-on-close="true"
+                :modal-append-to-body="false" :close-on-click-modal="false">
+                <div style="height: 450px;">
+                    <el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableDataDialog"
+                        tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loadingDialog">
+                        <el-table-column prop="receiveName" label="接收人" align="center">
+                        </el-table-column>
+                        <el-table-column prop="dept" label="接收人科室" align="center">
+                        </el-table-column>
+                        <el-table-column prop="arriveTime" label="到达时间" align="center">
+                        </el-table-column>
+                        <el-table-column prop="processTime" label="处理时间" align="center">
+                        </el-table-column>
+                        <el-table-column prop="selectionPath" label="选择路径" align="center">
+                        </el-table-column>
+                        <el-table-column prop="replyComments" label="回复意见" align="center">
+                        </el-table-column>
+                    </el-table>
+                    <el-pagination class="pageBox" @current-change="currchangeDialog" layout="prev, pager, next" background
+                        :total="totalDialog">
+                    </el-pagination>
+                </div>
+
+                <div slot="footer" style="text-align: right;padding-bottom: 20px">
+                    <el-button type="primary" @click="toOnevisible = false">确 定</el-button>
+                </div>
+            </el-dialog>
+        </div>
+        <myMessageNew :messTit='deleteTag' @closeMessage="processDelete" :centerDialogVisible="centerDialogVisible"
+            v-if="centerDialogVisible" yes-btn-name="是" no-btn-name="否"></myMessageNew>
+    </fullscreen>
+</template>
+<script>
+import mySearch from "./search.vue";
+import myUpload from "../../../components/upload";
+import toolList from "../../../components/toolList";
+import myMessageNew from "../../../components/myMessageNew.vue"
+
+export default {
+    components: {
+        myUpload,
+        mySearch,
+        toolList,
+        myMessageNew
+    },
+    data() {
+        return {
+            tableData: [{}],
+            total: 0,
+            params: {},
+            deleteTag: '',
+            loginNo: '',
+            centerDialogVisible: false,
+            loading: false,
+            issuedAddStatus: false,
+            issuedParam: {},
+            pickerOptions: {
+                disabledDate(time) {
+                    return time.getTime() < Date.now();
+                }
+            },
+            tooltit: '收入模板管理',
+            searchList: [{
+                type: 'input',
+                tit: '模板名称',
+                value: '',
+                width: '22%',
+            }, {
+                type: 'date',
+                tit: '截止时间',
+                value: '',
+                width: '22%',
+            }, {
+                type: 'sel',
+                tit: '是否为督办',
+                value: '',
+                width: '22%',
+                options: [
+                    {
+                        dataCode: "0",
+                        dataName: "否"
+                    },
+                    {
+                        dataCode: "1",
+                        dataName: "是"
+                    }
+                ]
+            },
+            {
+                type: 'sel',
+                tit: '状态',
+                value: '',
+                width: '22%',
+                options: [
+                    {
+                        dataName: "待处理",
+                        dataCode: "0",
+                    },
+                    {
+                        dataName: "部门人员审核",
+                        dataCode: "1",
+                    },
+                    {
+                        dataName: "部门领导审批",
+                        dataCode: "2",
+                    },
+
+                    {
+                        dataName: "已完成",
+                        dataCode: "4",
+                    },
+                    {
+                        dataName: "退回修改",
+                        dataCode: "3",
+                    },
+                ]
+            },],
+            delTemplateId: '',
+            fullscreen: false,
+            toOnevisible: false,
+            loadingDialog: false,
+            totalDialog: 0,
+            pageSize: 0,
+            pageSizeDialog: 0,
+            paramsDialog: {},
+            tableDataDialog: [{}],
+        }
+    },
+    methods: {
+        checkDelete(row) {
+            this.deleteTag = '确认删除吗?';
+            this.centerDialogVisible = true;
+            this.delTemplateId = row.id;
+        },
+        processDelete(v) {
+            this.centerDialogVisible = false;
+            var _this = this;
+            if (v === 1) {
+                this.$http({
+                    url: "/market/cIncomeExcelTemplate/deleteTemplate",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: { excelId: this.delTemplateId },
+                }).then((res) => {
+                    if (res.data.result === 1) {
+                        _this.$message({
+                            message: '删除失败',
+                            type: 'error'
+                        });
+                    } else {
+                        _this.$message({
+                            message: '删除成功',
+                            type: 'success'
+                        });
+                        _this.getList({}, _this.pageSize);
+                    }
+                });
+            }
+        },
+        //搜索数据
+        searchInfo(v) {
+            this.params = {};
+            v[0] ? this.params.templateName = v[0] : '';
+            v[1] ? this.params.endTime = this.$formatDate(v[1], "YYYY-MM-DD") : '';
+            v[2] ? this.params.superviseFlag = v[2] : '';
+            v[3] ? this.params.status = v[3] : '';
+            this.getList(this.params, this.pageSize);
+        },
+        //功能栏
+        iconCli(v) {
+            if (v === 1) {
+                this.getList(this.params, this.pageSize);
+            }
+            if (v === 2) {
+                this.fullscreen = !this.fullscreen
+            }
+        },
+        // 分页
+        currchange(v) {
+            this.pageSize = v;
+            this.getList(this.params, this.pageSize);
+        },
+
+        getList(v, n) {
+            this.pageSize = n;
+            this.loading = true;
+            this.tableData = [];
+            let _this = this;
+            this.$http({
+                url: "/market/Issued/queryPage",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                    "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                },
+                data: {
+                    ...v,
+                },
+            }).then(({ data: { totalRecord, data } }) => {
+                this.tableData = data;
+                this.total = totalRecord;
+                this.loading = false;
+            });
+        },
+        toOneDialog(o) {
+            this.toOnevisible = true
+            this.paramsDialog.issuedId = o
+            this.getListDialog(this.paramsDialog, 1);
+        },
+        // 分页
+        currchangeDialog(v) {
+            this.pageSizeDialog = v;
+            this.getListDialog(this.paramsDialog, this.pageSizeDialog);
+        },
+        getListDialog(v, n) {
+            this.pageSizeDialog = n;
+            this.loadingDialog = true;
+            this.tableDataDialog = [];
+            let _this = this;
+            this.$http({
+                url: "/market/FileOperateLog/queryPage",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                    "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                },
+                data: {
+                    ...v,
+                },
+            }).then(({ data: { totalRecord, data } }) => {
+                this.tableDataDialog = data;
+                this.totalDialog = totalRecord;
+                this.loadingDialog = false;
+            });
+        },
+        addNew() {
+            var _this = this;
+            _this.jumpinfop('/incomeExcelInfo', 1, '新增模板', "")
+        },
+        toEdit(row) {
+            var _this = this;
+            _this.jumpinfop('/incomeExcelInfo', 2, '修改模板', row.id);
+        },
+        toView(row) {
+            var _this = this;
+            _this.jumpinfop('/documentCollectionApprovalExcel', 5, '查看', row.id);
+        },
+        toChuli(row) {
+            var _this = this;
+            _this.jumpinfop('/documentCollectionApprovalExcel', 4, '处理', row.id, row.status);
+        },
+        addNewIssued(row) {
+            this.issuedParam = {
+                templateId: row.id,
+            };
+            this.issuedAddStatus = true;
+        },
+        processNewIssued() {
+            if (!this.issuedParam.editReason) {
+                this.$message({
+                    message: '填报事由不能为空',
+                    type: 'error'
+                });
+                return;
+            }
+            if (!this.issuedParam.editRemark) {
+                this.$message({
+                    message: '填报注意事项不能为空',
+                    type: 'error'
+                });
+                return;
+            }
+            if (!this.issuedParam.endTime) {
+                this.$message({
+                    message: '截止时间不能为空',
+                    type: 'error'
+                });
+                return;
+            }
+            if (this.issuedParam.editReason.length > 240) {
+                this.$message({
+                    message: '填报事由长度不能大于240字',
+                    type: 'error'
+                });
+                return;
+            }
+            if (this.issuedParam.editRemark.length > 240) {
+                this.$message({
+                    message: '填报注意事项长度不能大于240字',
+                    type: 'error'
+                });
+                return;
+            }
+            var _this = this;
+            //执行下发
+            this.$http({
+                url: '/market/cIncomeExcelIssued/addNewIssued',
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: this.issuedParam,
+            }).then((res) => {
+                this.loading = false;
+                if (res.data.result === 1) {
+                    _this.$message({
+                        message: res.data.desc,
+                        type: 'error'
+                    });
+                } else {
+                    _this.$message({
+                        message: '下发成功',
+                        type: 'success'
+                    });
+                    this.issuedAddStatus = false;
+                    this.getList({}, 1);
+                }
+            });
+        },
+        //跳转页面
+        jumpinfop(p, v, n, id, status) {
+            this.$router.push({
+                path: p,
+                query: {
+                    type: v,
+                    id: id,
+                    status: status,
+                }
+            });
+            this.setabList(n, p + '?type=' + v + '&id=' + id);
+        },
+        //新建一个页面
+        setabList(n, p) {
+            let params = {
+                children: "",
+                name: n,
+                rountPath: p,
+                target: "_self",
+            };
+            for (let i = 0; i < this.$store.state.tabList.length; i++) {
+                if (this.$store.state.tabList[i].name === params.name) {
+                    this.$store.state.tabList[i] = params;
+                }
+            }
+            let set = new Set([...this.$store.state.tabList, params]);
+            set.add(params);
+            this.$store.commit("setDefaultActive", params.rountPath);
+            this.$store.commit("setTabList", Array.from(set));
+        },
+        getUrlKey(name) {
+            return (
+                decodeURIComponent(
+                    (new RegExp("[?|&]" + name + "=" + "([^&;]+?)(&|#|;|$)").exec(
+                        location.href
+                    ) || [, ""])[1].replace(/\+/g, "%20")
+                ) || null
+            );
+        },
+    },
+    mounted() {
+        this.getList({
+            id: this.getUrlKey("id"),//获取地址栏参数
+        }, 1);
+        this.loginNo = JSON.parse(window.sessionStorage.userInfo).loginNo
+    },
+    created() {
+
+    }
+}
+</script>
+<style scoped lang="scss">
+.titbox {
+    div {
+        float: right;
+
+        i {
+            font-size: 22px;
+            margin-left: 20px;
+            cursor: pointer;
+        }
+    }
+}
+
+.tabbox {
+    margin-top: 16px;
+}
+
+.pageBox {
+    text-align: right;
+    margin-top: 10px;
+}
+
+.info-line {
+    width: 100%;
+    display: block;
+    padding-left: 20px;
+
+    div {
+        width: 90%;
+        display: inline-block;
+    }
+
+    span {
+        width: 100px;
+        display: inline-block;
+        text-align: left;
+
+        i {
+            color: red;
+            display: inline-block;
+            padding-right: 5px;
+        }
+    }
+
+    .el-select,
+    .el-input {
+        width: calc(100% - 150px);
+    }
+}
+
+.online {
+    width: 100%;
+
+    .el-select {
+        width: calc(100% - 100px);
+    }
+
+    span {
+        vertical-align: top;
+    }
+
+    .el-textarea {
+        width: calc(100% - 100px);
+    }
+}
+</style>
+

Файловите разлики са ограничени, защото са твърде много
+ 1183 - 0
src/pages/main/documentCollection/documentCollectionApprovalExcel.vue


+ 472 - 0
src/pages/main/documentCollection/documentCollectionApprovalIssuedCollect.vue

@@ -0,0 +1,472 @@
+<template>
+    <fullscreen :fullscreen.sync="fullscreen" class="container" style="margin: 0;width: 100%;">
+        <div class="container-box">
+            <!-- <toolList @iconCli='iconCli' :tooltit='tooltit'></toolList> -->
+            <div>
+                <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+            </div>
+            <div class="tabbox">
+                <el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
+                    tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
+                    <el-table-column prop="templateName" label="模板名称" align="center">
+                    </el-table-column>
+                    <el-table-column prop="reason" label="填报事由" align="center">
+                    </el-table-column>
+                    <el-table-column prop="precautions" label="填报注意事项" align="center">
+                    </el-table-column>
+                    <el-table-column prop="endTime" label="截至时间" align="center">
+                    </el-table-column>
+                    <el-table-column prop="createName" label="工单发起人" align="center">
+                    </el-table-column>
+                    <el-table-column prop="receiveNameList" label="接收人" align="center">
+                        <template slot-scope="scope">
+                            <span v-for="(item, index) in scope.row.receiveNameList" :key="index">
+                                <span @click="toOneDialog(item)" style="cursor:pointer;color: #007eff;">{{
+                                    item.name
+                                }}</span>
+                                <span @click="toOneDialog(item)" style="cursor:pointer;color: #007eff;">,</span>
+                            </span>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="currentProcessName" label="当前处理人" align="center">
+                    </el-table-column>
+                    <el-table-column prop="createTime" label="发起时间" align="center">
+                    </el-table-column>
+                    <el-table-column prop="progressBar" label="完成进度" align="center">
+                        <template slot-scope="props">
+                            <el-progress :percentage="props.row.progressBar"></el-progress>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="superviseFlag" label="是否为督办" align="center">
+                        <template slot-scope="scope">
+                            <span v-if="scope.row.superviseFlag == 0">否</span>
+                            <span v-if="scope.row.superviseFlag == null">否</span>
+                            <span v-if="scope.row.superviseFlag == 1">是</span>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="status" label="状态" align="center">
+                        <template slot-scope="scope">
+                            <span v-if="scope.row.status == -1">已撤销</span>
+                            <span v-if="scope.row.status == 0">待处理</span>
+                            <span v-if="scope.row.status == 1">已完成</span>
+                            <!-- <span v-if="scope.row.status == 1">待汇总</span> -->
+                            <!-- <span v-if="scope.row.status == 2">待审批</span> -->
+                            <!-- <span v-if="scope.row.status == 3">已完成</span> -->
+                        </template>
+                    </el-table-column>
+                    <el-table-column label="操作" width="220px" align="center" fixed="right">
+                        <template slot-scope="scope">
+                            <el-button size="mini" @click="toView(scope.row)">查看
+                            </el-button>
+                            <el-button size="mini" @click="toChehuiBtn(scope.row)" v-if="scope.row.status != '-1'">撤回
+                            </el-button>
+                            <el-button size="mini" @click="delDialog(scope.row)">删除
+                            </el-button>
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+                    :total="total">
+                </el-pagination>
+            </div>
+
+
+            <el-dialog :title="'回复详情'" :visible.sync="toOnevisible" width="50%" :destroy-on-close="true"
+                :modal-append-to-body="false" :close-on-click-modal="false">
+                <div style="height: 450px;">
+                    <el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableDataDialog"
+                        tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loadingDialog">
+                        <el-table-column prop="receiveName" label="接收人" align="center">
+                        </el-table-column>
+                        <el-table-column prop="dept" label="接收人科室" align="center">
+                        </el-table-column>
+                        <el-table-column prop="arriveTime" label="到达时间" align="center">
+                        </el-table-column>
+                        <el-table-column prop="processTime" label="处理时间" align="center">
+                        </el-table-column>
+                        <el-table-column prop="selectionPath" label="选择路径" align="center">
+                        </el-table-column>
+                        <el-table-column prop="replyComments" label="回复意见" align="center">
+                        </el-table-column>
+                    </el-table>
+                    <el-pagination class="pageBox" @current-change="currchangeDialog" layout="prev, pager, next"
+                        background :total="totalDialog">
+                    </el-pagination>
+                </div>
+
+                <div slot="footer" style="text-align: right;padding-bottom: 20px">
+                    <el-button type="primary" @click="toOnevisible = false">确 定</el-button>
+                </div>
+            </el-dialog>
+
+
+        </div>
+        <myMessageNew :messTit='deleteTag' @closeMessage="processDel" :centerDialogVisible="centerDialogVisible"
+            v-if="centerDialogVisible" yes-btn-name="是" no-btn-name="否"></myMessageNew>
+    </fullscreen>
+</template>
+<script>
+import mySearch from "./search.vue";
+import myUpload from "../../../components/upload";
+import toolList from "../../../components/toolList";
+import myMessageNew from "../../../components/myMessageNew.vue"
+
+export default {
+    components: {
+        myUpload,
+        mySearch,
+        toolList,
+        myMessageNew
+    },
+    data() {
+        return {
+            tableData: [{}],
+            tableDataDialog: [{}],
+            total: 0,
+            totalDialog: 0,
+            pageSize: 0,
+            pageSizeDialog: 0,
+            params: {},
+            paramsDialog: {},
+            deleteTag: '',
+            centerDialogVisible: false,
+            toOnevisible: false,
+            loadingDialog: false,
+            loading: false,
+            issuedAddStatus: false,
+            issuedParam: {},
+            tooltit: '收入信息发布',
+            searchList: [
+                //     {
+                //     type: 'input',
+                //     tit: '模板类型',
+                //     value: '',
+                //     width: '18%',
+                // },
+                {
+                    type: 'input',
+                    tit: '模板名称',
+                    value: '',
+                    width: '22%',
+                }, {
+                    type: 'daterange',
+                    tit: '截至时间',
+                    value: '',
+                    width: '43%',
+                }, {
+                    type: 'sel',
+                    tit: '是否为督办',
+                    value: '',
+                    width: '22%',
+                    options: [
+                        {
+                            dataCode: "0",
+                            dataName: "否"
+                        },
+                        {
+                            dataCode: "1",
+                            dataName: "是"
+                        }
+                    ]
+                },],
+            fullscreen: false,
+            delViewId: ''
+        }
+    },
+    methods: {
+        delDialog(row) {
+            // this.delViewId = row.id;
+            // this.deleteTag = '确认删除吗?';
+            // this.centerDialogVisible = true;
+
+            this.$confirm("确认删除吗?", "提示", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+            }).then(() => {
+                this.$http({
+                    url: '/market/IssuedCollect/del',
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: { id: row.id },
+                }).then((res) => {
+                    if (res.data.result === 1) {
+                        this.$message({
+                            message: res.data.desc,
+                            type: 'error'
+                        });
+                    } else {
+                        this.$message({
+                            message: '成功',
+                            type: 'success'
+                        });
+                        this.getList({}, this.pageSize);
+                    }
+                });
+            }).catch(() => { });
+        },
+        processDel(v) {
+            this.centerDialogVisible = false;
+            var _this = this;
+            if (v === 1) {
+                this.$http({
+                    url: "/market/IssuedCollect/del",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: { id: this.delViewId },
+                }).then((res) => {
+                    if (res.data.result === 1) {
+                        _this.$message({
+                            message: '删除失败',
+                            type: 'error'
+                        });
+                    } else {
+                        _this.$message({
+                            message: '删除成功',
+                            type: 'success'
+                        });
+                        _this.getList({}, _this.pageSize);
+                    }
+                });
+            }
+        },
+        //搜索数据
+        searchInfo(v) {
+            this.params = {};
+            v[0] ? this.params.templateName = v[0] : '';
+            v[2] ? this.params.superviseFlag = v[2] : '';
+            // v[3] ? this.params.deptName = v[3] : '';
+            v[1] ? this.params.endTimeFrom = v[1][0] : '';
+            v[1] ? this.params.endTimeTo = v[1][1] : '';
+            this.getList(this.params, this.pageSize);
+        },
+        //功能栏
+        iconCli(v) {
+            if (v === 1) {
+                this.getList(this.params, this.pageSize);
+            }
+            if (v === 2) {
+                this.fullscreen = !this.fullscreen
+            }
+        },
+        // 分页
+        currchange(v) {
+            this.pageSize = v;
+            this.getList(this.params, this.pageSize);
+        },
+        // 分页
+        currchangeDialog(v) {
+            this.pageSizeDialog = v;
+            this.getListDialog(this.paramsDialog, this.pageSizeDialog);
+        },
+        getList(v, n) {
+            this.pageSize = n;
+            this.loading = true;
+            this.tableData = [];
+            let _this = this;
+            this.$http({
+                url: "/market/IssuedCollect/queryPage",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                    "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                },
+                data: {
+                    ...v,
+                },
+            }).then(({ data: { totalRecord, data } }) => {
+                this.tableData = data;
+                this.total = totalRecord;
+                this.loading = false;
+            });
+        },
+        getListDialog(v, n) {
+            this.pageSizeDialog = n;
+            this.loadingDialog = true;
+            this.tableDataDialog = [];
+            let _this = this;
+            this.$http({
+                url: "/market/FileOperateLog/queryPage",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                    "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                },
+                data: {
+                    ...v,
+                },
+            }).then(({ data: { totalRecord, data } }) => {
+                this.tableDataDialog = data;
+                this.totalDialog = totalRecord;
+                this.loadingDialog = false;
+            });
+        },
+        processDelete(v) {
+            this.centerDialogVisible = false;
+            if (v === 1) {
+                console.log("删除")
+            }
+        },
+        addNew() {
+            var _this = this;
+            _this.jumpinfop('/incomeExcelViewInfo', 1, '新增收入信息', "")
+        },
+        toEdit(row) {
+            var _this = this;
+            _this.jumpinfop('/incomeExcelViewInfo', 2, '修改收入信息', row.viewId);
+        },
+        toView(row) {
+            var _this = this;
+            _this.jumpinfop('/documentCollectionApprovalExcel', 6, '查看', row.id);
+        },
+        toOneDialog(o) {
+            this.toOnevisible = true
+            this.paramsDialog.issuedId = o.id
+            this.getListDialog(this.paramsDialog, 1);
+        },
+        toChehuiBtn(row) {
+            this.$confirm("确认撤回吗?", "提示", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+            }).then(() => {
+                this.$http({
+                    url: '/market/IssuedCollect/withdraw',
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: row.id,
+                }).then((res) => {
+                    if (res.data.result === 1) {
+                        this.$message({
+                            message: res.data.desc,
+                            type: 'error'
+                        });
+                    } else {
+                        this.$message({
+                            message: '成功',
+                            type: 'success'
+                        });
+                        this.getList({}, this.pageSize);
+                    }
+                });
+            }).catch(() => { });
+            // var _this = this;
+            // _this.jumpinfop('/incomeExcelViewInfo', 4, '查看收入信息', row.id);
+        },
+        addNewIssued(row) {
+            this.issuedParam = {
+                templateId: row.id,
+            };
+            this.issuedAddStatus = true;
+        },
+        //跳转页面
+        jumpinfop(p, v, n, id) {
+            this.$router.push({
+                path: p,
+                query: {
+                    type: v,
+                    id: id
+                }
+            });
+            this.setabList(n, p + '?type=' + v + '&id=' + id);
+        },
+        //新建一个页面
+        setabList(n, p) {
+            let params = {
+                children: "",
+                name: n,
+                rountPath: p,
+                target: "_self",
+            };
+            for (let i = 0; i < this.$store.state.tabList.length; i++) {
+                if (this.$store.state.tabList[i].name === params.name) {
+                    this.$store.state.tabList[i] = params;
+                }
+            }
+            let set = new Set([...this.$store.state.tabList, params]);
+            set.add(params);
+            this.$store.commit("setDefaultActive", params.rountPath);
+            this.$store.commit("setTabList", Array.from(set));
+        },
+    },
+    mounted() {
+        this.getList({}, 1);
+    },
+    created() {
+
+    }
+}
+</script>
+<style scoped lang="scss">
+.titbox {
+    div {
+        float: right;
+
+        i {
+            font-size: 22px;
+            margin-left: 20px;
+            cursor: pointer;
+        }
+    }
+}
+
+.tabbox {
+    margin-top: 16px;
+}
+
+.pageBox {
+    text-align: right;
+    margin-top: 10px;
+}
+
+.info-line {
+    width: 100%;
+    display: block;
+    padding-left: 20px;
+
+    div {
+        width: 90%;
+        display: inline-block;
+    }
+
+    span {
+        width: 100px;
+        display: inline-block;
+        text-align: left;
+
+        i {
+            color: red;
+            display: inline-block;
+            padding-right: 5px;
+        }
+    }
+
+    .el-select,
+    .el-input {
+        width: calc(100% - 150px);
+    }
+}
+
+.online {
+    width: 100%;
+
+    .el-select {
+        width: calc(100% - 100px);
+    }
+
+    span {
+        vertical-align: top;
+    }
+
+    .el-textarea {
+        width: calc(100% - 100px);
+    }
+}
+</style>
+

+ 689 - 0
src/pages/main/documentCollection/documentCollectionApprovalIssuedMoud.vue

@@ -0,0 +1,689 @@
+<template>
+    <fullscreen :fullscreen.sync="fullscreen" class="container" style="margin: 0;width: 100%;">
+        <div class="container-box">
+            <!-- <toolList @iconCli='iconCli' :tooltit='tooltit'></toolList> -->
+            <div>
+                <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                <div style="float: right;" class="bigbtns">
+                    <el-button style="margin-top: 10px;" class="btn-check" size="medium" @click="addNew()">
+                        <i class="el-icon-document-add font-weight-bold" />新增模板
+                    </el-button>
+                </div>
+            </div>
+
+            <div class="tabbox">
+                <el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
+                    tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
+                    <el-table-column prop="number" label="序号" align="center">
+                        <template slot-scope="scope">
+                            <span> {{ scope.$index + 1 }}</span>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="templateName" label="模板名称" align="center">
+                    </el-table-column>
+                    <el-table-column prop="templateType" label="模板类型" align="center">
+                    </el-table-column>
+                    <el-table-column prop="updateTime" label="配置时间" align="center">
+                    </el-table-column>
+                    <el-table-column prop="createId" label="配置人员" align="center">
+                    </el-table-column>
+
+                    <el-table-column prop="status" label="模板状态" align="center">
+                        <template slot-scope="scope">
+                            <span v-if="scope.row.status == 0">已创建</span>
+                            <span v-if="scope.row.status == 2">起草中</span>
+                            <span v-if="scope.row.status == 3">已下发</span>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="superviseFlag" label="是否为督办" align="center">
+                        <template slot-scope="scope">
+                            <span v-if="scope.row.superviseFlag == 0">否</span>
+                            <span v-if="scope.row.superviseFlag == null">否</span>
+                            <span v-if="scope.row.superviseFlag == 1">是</span>
+                        </template>
+                    </el-table-column>
+                    <el-table-column label="操作" width="220px" align="center" fixed="right">
+                        <template slot-scope="scope">
+                            <el-button size="mini" @click="toView(scope.row)">查看</el-button>
+                            <el-button size="mini"
+                                v-if="scope.row.status == '0' || scope.row.status == '3' || scope.row.status == '2'"
+                                @click="checkDelete(scope.row)">删除
+                            </el-button>
+                            <el-button size="mini" v-if="scope.row.status == '0'" @click="xiafaBtn(scope.row)">下发
+                            </el-button>
+                            <el-button size="mini"
+                                v-if="scope.row.status == '0' || scope.row.status == '2' || scope.row.status == '3' && (scope.row.status == '3' && scope.row.superviseFlag == '0')"
+                                @click="toEdit(scope.row)">编辑
+                            </el-button>
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+                    :total="total">
+                </el-pagination>
+            </div>
+
+            <el-dialog :title="'下发'" :visible.sync="issue_visible" width="50%" :destroy-on-close="true"
+                :modal-append-to-body="false" :close-on-click-modal="false">
+                <div style="width:60%;margin:0 auto;">
+                    <el-form label-width="120px" :model="issue_form" ref="issue_ref" :rules="rules">
+                        <el-form-item label="填报事由" prop="reason" :rules="{
+                            required: true,
+                            message: '填报事由不能为空',
+                            trigger: 'blur',
+                        }">
+                            <el-input v-model="issue_form.reason"></el-input>
+                        </el-form-item>
+                        <el-form-item label="填报注意事项" prop="precautions" :rules="{
+                            required: true,
+                            message: '填报注意事项不能为空',
+                            trigger: 'blur',
+                        }">
+                            <el-input v-model="issue_form.precautions"></el-input>
+                        </el-form-item>
+                        <el-form-item label="截止时间" prop="endTime" v-if="superviseFlag !== '1'" :rules="{
+                            required: true,
+                            message: '截止时间不能为空',
+                            trigger: 'change',
+                        }">
+                            <el-date-picker v-model="issue_form.endTime" type="datetime"
+                                value-format="yyyy-MM-dd HH:mm:ss" style="width: 100%;">
+                            </el-date-picker>
+                        </el-form-item>
+                    </el-form>
+                </div>
+
+                <div slot="footer" style="text-align: right;padding-bottom: 20px">
+                    <el-button type="primary" @click="xiafaqueding()" :disabled="BtnDisabled">确 定</el-button>
+                    <el-button @click="issue_visible = false">取 消</el-button>
+                </div>
+            </el-dialog>
+
+
+            <el-dialog :title="'收入信息处理'" :visible.sync="authDialog" width="50%" :destroy-on-close="true"
+                :modal-append-to-body="false" :close-on-click-modal="false">
+                <el-form :model="testModel">
+                    <div>
+                        <div class="info-line">
+                            <span style="margin-right: 20px;margin-left: 40px">选择路径:</span>
+                            <el-select v-model="auditForm.authType" placeholder="选择路径">
+                                <el-option v-for="(item, index) in auditBoxList" :key="index" :label="item.name"
+                                    :value="item.value"></el-option>
+                            </el-select>
+                        </div>
+                        <br />
+                        <div class="info-line" v-if="auditForm.authType == 1">
+                            <span style="margin-right: 20px;margin-left: 40px">下一步处理人:</span>
+                            <el-button type="primary" @click="checkexa = true;">选择处理人</el-button>
+                            <span style="width: 80px;margin-right: 20px;margin-left: 20px">{{ auditUserName }}</span>
+                        </div>
+                        <br />
+                        <div class="info-line">
+                            <span style="margin-right: 20px;margin-left: 40px;">意见内容:</span>
+                            <el-input type="textarea" v-model="auditForm.auditRemark" style="width: 400px"></el-input>
+                        </div>
+                        <br />
+                        <div slot="footer" style="text-align: right;padding-bottom: 20px;padding-top: 20px">
+                            <el-button @click="authDialog = false">取 消</el-button>
+                            <el-button type="primary" @click="processAudit()">确 定</el-button>
+                        </div>
+                    </div>
+                </el-form>
+            </el-dialog>
+
+            <el-dialog title="选择审批人" :visible.sync="checkexa" width="50%" :destroy-on-close="true"
+                :modal-append-to-body="false" :close-on-click-modal="false">
+                <div>
+                    <el-form :model="addInfoList" ref="addInfoList">
+                        <el-form-item prop="processUserId" class="info-line online">
+                            <span style="width: 80px">审批人员&nbsp;</span>
+                            <deptTreeOnly class="tree" @treeCheck="treeCheckonly" :defaultList="defaultList"
+                                :type="depttype" :closeList="closeList"></deptTreeOnly>
+                            <div class="tree treeUser">
+                                <p>{{ treeListonly.leaderAuditName }}
+                                    <i v-if="treeListonly.leaderAuditName" @click="treeDelete()"
+                                        class="el-icon-error"></i>
+                                </p>
+                            </div>
+                            <el-form-item style="margin-bottom:0;display:none;">
+                                <el-input></el-input>
+                            </el-form-item>
+                        </el-form-item>
+                    </el-form>
+
+                    <div slot="footer" style="text-align: right;padding-bottom: 20px">
+                        <el-button type="primary" @click="processAuditUser()">确 定</el-button>
+                        <el-button @click="checkexa = false">取 消</el-button>
+                    </div>
+                </div>
+            </el-dialog>
+
+            <el-dialog title="回复详情" :visible.sync="issuedLogStatus" width="70%" :close-on-press-escape="false"
+                :show-close="true" :before-close="closeIssuedLog" :destroy-on-close="true" :modal-append-to-body="false"
+                :close-on-click-modal="false" :fullscreen="true">
+                <div class="tabbox" style="height: 500px">
+                    <el-table height="calc(100% - 50px)" class="com-table" ref="multipleTable" :data="issuedLogData"
+                        tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
+                        <el-table-column prop="beforeUserName" label="接收人">
+                        </el-table-column>
+                        <el-table-column prop="beforeUserDept" label="部门">
+                        </el-table-column>
+                        <el-table-column prop="opTime" label="回复时间">
+                        </el-table-column>
+                        <el-table-column prop="remark" label="审批记录">
+                        </el-table-column>
+                        <el-table-column prop="status" label="审批意见">
+                        </el-table-column>
+                    </el-table>
+                    <el-pagination class="pageBox" @current-change="issuedLogChange" layout="prev, pager, next"
+                        background :total="issuedLogTotal">
+                    </el-pagination>
+                </div>
+            </el-dialog>
+        </div>
+        <myMessageNew :messTit='deleteTag' @closeMessage="processDelete" :centerDialogVisible="centerDialogVisible"
+            v-if="centerDialogVisible" yes-btn-name="是" no-btn-name="否"></myMessageNew>
+    </fullscreen>
+</template>
+
+<script>
+import mySearch from "./search.vue";
+import myUpload from "../../../components/upload";
+import toolList from "../../../components/toolList";
+import myMessageNew from "../../../components/myMessageNew.vue"
+import deptTreeOnly from "../../../components/deptTreeOnly.vue"
+
+export default {
+    components: {
+        myUpload,
+        mySearch,
+        toolList,
+        myMessageNew,
+        deptTreeOnly
+    },
+    data() {
+        return {
+            rules: {
+                endTime: [
+                    {
+                        required: true,
+                        trigger: "change",
+                        message: "截止时间不能为空",
+                    },
+                ],
+                reason: [
+                    {
+                        required: true,
+                        trigger: "blur",
+                        message: "填报事由不能为空",
+                    },
+                ],
+                precautions: [
+                    {
+                        required: true,
+                        trigger: "blur",
+                        message: "填报注意事项不能为空",
+                    },
+                ],
+            },
+            testModel: {},
+            issue_form: {},
+            tableData: [{}],
+            total: 0,
+            params: {},
+            deleteTag: '',
+            centerDialogVisible: false,
+            BtnDisabled: false,
+            loading: false,
+            tooltit: '收入信息收集',
+            searchList: [{
+                type: 'input',
+                tit: '模板名称',
+                value: '',
+                width: '48%',
+            }, {
+                type: 'input',
+                tit: '模板类型',
+                value: '',
+                width: '48%',
+            },],
+            nowUserId: '',
+            auditBoxList: [{}],
+            authDialog: false,
+            auditForm: {},
+            auditUserName: '',
+            auditUserId: '',
+            //选择审批人
+            checkexa: false,
+            //审批人用到的
+            treeListonly: {},
+            excelData: {},
+            fullscreen: false,
+            defaultList: [],
+            addInfoList: [],
+            closeList: [],
+            depttype: '',
+            issuedLogStatus: false,
+            issue_visible: false,
+            issuedLogData: [],
+            issuedLogPageSize: 1,
+            issuedLogParams: {},
+            issuedLogTotal: 0,
+            delIssuedUserId: '',
+            superviseFlag: ''
+        }
+    },
+    methods: {
+        xiafaBtn(row) {
+            this.issue_form.templateId = row.id
+            this.issue_visible = true
+            this.superviseFlag = row.superviseFlag
+        },
+        addNew() {
+            var _this = this;
+            _this.jumpinfop('/documentCollectionApprovalExcel', 1, '新增模板', "")
+        },
+        processIssuedLog(row) {
+            this.issuedLogParams = {
+                issuedUserId: row
+            };
+            console.log(this.issuedLogParams);
+            this.getIssuedLog(this.issuedLogParams, this.issuedLogPageSize);
+            this.issuedLogStatus = true;
+        },
+        xiafaqueding() {
+            console.log(this.issue_form);
+            console.log(this.$refs.issue_ref);
+            
+            this.$refs.issue_ref.validate((valid) => {
+                if (valid) {
+                    this.BtnDisabled=true
+                    if (this.issue_form.endTime) {
+                        this.$http({
+                            url: "/market/Issued/issuedTemplate",
+                            method: "post",
+                            headers: {
+                                "Content-Type": "application/json",
+                            },
+                            data: this.issue_form,
+                        }).then((res) => {
+                            if (res.data.result === 1) {
+                                this.$message({
+                                    message: res.data.desc,
+                                    type: 'error'
+                                });
+                            } else {
+                                this.$message({
+                                    message: '下发成功',
+                                    type: 'success'
+                                });
+                                this.getList({}, this.pageSize);
+                            }
+                            this.issue_visible = false;
+                            this.BtnDisabled=false;
+                        });
+                    } else {
+                        this.$http({
+                            url: "/market/Issued/issuedSuperviseTemplate",
+                            method: "post",
+                            headers: {
+                                "Content-Type": "application/json",
+                            },
+                            data: this.issue_form,
+                        }).then((res) => {
+                            if (res.data.result === 1) {
+                                this.$message({
+                                    message: res.data.desc,
+                                    type: 'error'
+                                });
+                            } else {
+                                this.$message({
+                                    message: '下发成功',
+                                    type: 'success'
+                                });
+                                this.getList({}, this.pageSize);
+                            }
+                            this.issue_visible = false;
+                            this.BtnDisabled=false;
+                        });
+                    }
+
+
+                } else {
+                    // this.$message.error("请完善表单信息");
+                    return false;
+                }
+            });
+
+
+        },
+        getIssuedLog(v, n) {
+            this.issuedLogPageSize = n;
+            this.loading = true;
+            this.issuedLogData = [];
+            this.$http({
+                url: "/market/cIncomeExcelIssued/getIssuedLog",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                    "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                },
+                data: v,
+            }).then((res) => {
+                this.issuedLogData = res.data.data;
+                this.issuedLogTotal = res.data.totalRecord;
+                this.loading = false;
+            });
+        },
+        issuedLogChange(v) {
+            this.issuedLogPageSize = v;
+            this.getIssuedLog(this.issuedLogParams, this.issuedLogPageSize);
+        },
+        closeIssuedLog() {
+            this.issuedLogStatus = false;
+        },
+        //搜索数据
+        searchInfo(v) {
+            this.params = {};
+            v[0] ? this.params.templateName = v[0] : '';
+            v[1] ? this.params.templateType = v[1] : '';
+            this.getList(this.params, this.pageSize);
+        },
+        //功能栏
+        iconCli(v) {
+            if (v === 1) {
+                this.getList(this.params, this.pageSize);
+            }
+            if (v === 2) {
+                this.fullscreen = !this.fullscreen
+            }
+        },
+        // 分页
+        currchange(v) {
+            this.pageSize = v;
+            this.getList(this.params, this.pageSize);
+        },
+        getList(v, n) {
+            this.pageSize = n;
+            this.loading = true;
+            this.tableData = [];
+            let _this = this;
+            this.$http({
+                url: "/market/FileTemplate/queryPage",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                    "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                },
+                data: {
+                    ...v,
+                },
+            }).then(({ data: { totalRecord, data } }) => {
+                this.tableData = data;
+                this.total = totalRecord;
+                this.loading = false;
+            });
+        },
+        toView(row) {
+            var _this = this;
+            _this.jumpinfop('/documentCollectionApprovalExcel', 3, '查看', row.id);
+        },
+        checkDelete(row) {
+            this.deleteTag = '确认删除吗?';
+            this.centerDialogVisible = true;
+            this.delIssuedUserId = row.id;
+        },
+        processDelete(v) {
+            this.centerDialogVisible = false;
+            var _this = this;
+            if (v === 1) {
+                this.$http({
+                    url: "/market/FileTemplate/del",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: { id: this.delIssuedUserId },
+                }).then((res) => {
+                    if (res.data.result === 1) {
+                        _this.$message({
+                            message: '删除失败',
+                            type: 'error'
+                        });
+                    } else {
+                        _this.$message({
+                            message: '删除成功',
+                            type: 'success'
+                        });
+                        _this.getList({}, _this.pageSize);
+                    }
+                });
+            }
+        },
+        toEdit(row) {
+            var _this = this;
+            if (row.status == '2') {
+                _this.jumpinfop('/documentCollectionApprovalExcel', 2, '编辑模板', row.id);
+            } else {
+                _this.jumpinfop('/documentCollectionApprovalExcel', 2, '编辑模板', row.id, 1);
+            }
+
+        },
+        toAudit(row) {
+            this.auditForm = {};
+            this.auditUserId = '';
+            this.auditUserName = '';
+            this.auditBoxList = [{
+                name: '提交审核',
+                value: '1'
+            }, {
+                name: '退回修改',
+                value: '3'
+            }, {
+                name: '结束',
+                value: '2'
+            }];
+            this.nowUserId = row.id;
+            this.authDialog = true;
+        },
+        processAuditUser() {
+            console.log(this.treeListonly);
+            this.auditUserId = this.treeListonly.leaderAuditNo;
+            this.auditUserName = this.treeListonly.leaderAuditName;
+            this.checkexa = false;
+        },
+        processAudit() {
+            //检查选项
+            if (this.auditForm.authType == null) {
+                this.$message({
+                    message: '请选择路径',
+                    type: 'error'
+                });
+                return;
+            }
+            if (this.auditForm.authType == '1') {
+                if (this.auditUserId == '') {
+                    this.$message({
+                        message: '请选择下一步处理人',
+                        type: 'error'
+                    });
+                    return;
+                }
+            }
+            if (this.auditForm.auditRemark
+                && this.auditForm.auditRemark.length > 240) {
+                this.$message({
+                    message: '意见内容长度不能大于240字',
+                    type: 'error'
+                });
+                return;
+            }
+            //提交
+            var _this = this;
+            var url = '/market/cIncomeExcelIssued/issuedUserProcessAuth';
+            this.loading = true;
+            this.$http({
+                url: url,
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: {
+                    issuedUserId: this.nowUserId,
+                    type: this.auditForm.authType,
+                    nextUserId: this.auditUserId,
+                    auditRemark: this.auditForm.auditRemark
+                },
+            }).then((res) => {
+                this.loading = false;
+                if (res.data.result === 1) {
+                    _this.$message({
+                        message: res.data.desc,
+                        type: 'error'
+                    });
+                } else {
+                    this.authDialog = false;
+                    _this.$message({
+                        message: '处理成功',
+                        type: 'success'
+                    });
+                    //刷新列表
+                    this.getList({}, 1);
+                }
+            });
+
+        },
+        //跳转页面
+        jumpinfop(p, v, n, id, s) {
+            this.$router.push({
+                path: p,
+                query: {
+                    type: v,
+                    id: id,
+                    types: s,
+                }
+            });
+            this.setabList(n, p + '?type=' + v + '&id=' + id);
+        },
+        //新建一个页面
+        setabList(n, p) {
+            let params = {
+                children: "",
+                name: n,
+                rountPath: p,
+                target: "_self",
+            };
+            for (let i = 0; i < this.$store.state.tabList.length; i++) {
+                if (this.$store.state.tabList[i].name === params.name) {
+                    this.$store.state.tabList[i] = params;
+                }
+            }
+            let set = new Set([...this.$store.state.tabList, params]);
+            set.add(params);
+            this.$store.commit("setDefaultActive", params.rountPath);
+            this.$store.commit("setTabList", Array.from(set));
+        },
+        //填报人相关
+        deletes(val, index) {
+            this.treeList.splice(index, 1);
+            this.closeList = this.treeList;
+        },
+        treeCheckonly(v) {
+            this.treeList = v;
+            this.treeListonly = v;
+        },
+        treeDelete() {
+            this.treeListonly = {};
+            this.closeList = !this.closeList;
+        },
+    },
+    mounted() {
+        this.getList({}, 1);
+    },
+    created() {
+
+    }
+}
+</script>
+
+<style scoped lang="scss">
+.titbox {
+    div {
+        float: right;
+
+        i {
+            font-size: 22px;
+            margin-left: 20px;
+            cursor: pointer;
+        }
+    }
+}
+
+.tabbox {
+    margin-top: 16px;
+}
+
+.pageBox {
+    text-align: right;
+    margin-top: 10px;
+}
+
+
+.online {
+    width: 100%;
+
+    .el-select {
+        width: calc(100% - 100px);
+    }
+
+    span {
+        vertical-align: top;
+    }
+
+    .el-textarea {
+        width: calc(100% - 100px);
+    }
+
+    .tree {
+        width: calc(50% - 60px);
+        display: inline-block;
+        margin-right: 20px;
+        height: 300px;
+        overflow-y: scroll;
+
+        .el-icon-error {
+            float: right;
+            font-size: 20px;
+            margin-top: 9px;
+            cursor: pointer;
+        }
+    }
+
+    .treeUser {
+        margin: 0;
+        border: 1px solid #ddd;
+
+        p {
+            background: #f4f4f4;
+            padding: 0 20px;
+            margin-bottom: 5px;
+        }
+    }
+
+    .treeUserb {
+        width: calc(100% - 100px);
+        border: 1px solid #ddd;
+        background: #f4f4f4;
+        border-radius: 3px;
+        height: auto;
+        overflow: hidden;
+
+        p {
+            display: inline-block;
+            padding: 0 20px;
+            margin-bottom: 5px;
+        }
+    }
+}
+</style>
+

+ 131 - 0
src/pages/main/documentCollection/home.vue

@@ -0,0 +1,131 @@
+<template>
+    <div class="inner-container">
+        <div class="tabBox">
+            <el-tabs tab-position="top" v-model="activeName" @tab-click="handleClick" type="card">
+                <el-tab-pane v-for="(item, index) in routerList" :key="index" :name="item.path" :label="item.label">
+                </el-tab-pane>
+            </el-tabs>
+        </div>
+        <div class="infoBox">
+            <router-view />
+        </div>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        return {
+            activeName: "",
+            showList: [],
+            routerList: [
+                { label: "我接收的", path: "/documentCollectionApproval", name: "incomeExcelTemplate" },
+                { label: "我发起的", path: "/documentCollectionApprovalIssuedCollect", name: "incomeExcelView" },
+                { label: "模板管理", path: "/documentCollectionApprovalIssuedMoud", name: "incomeExcelIssued" },
+                
+                // { label: "收入附件收集", path: "/incomeExcelAppendixs", name: "incomeExcelAppendix" }
+            ],
+        };
+    },
+    computed: {
+        menuList: function () {
+            let arr = [];
+            this.routerList.map((item) => {
+                this.showList.map((row) => {
+                    if (item.path == row) {
+                        arr.push(item);
+                    }
+                });
+            });
+            return arr;
+        },
+    },
+    methods: {
+        handleClick(val) {
+            if (this.$route.path != this.activeName) {
+                console.log(this.activeName);
+                this.$router.push(this.activeName);
+            }
+        },
+    },
+    mounted() {
+        this.activeName = this.$route.path;
+    },
+    created() {
+        JSON.parse(sessionStorage.childrenMenus).map((item) => {
+            this.showList.push(item.jspUrl);
+        });
+    },
+    watch: {
+        $route(to, from) {
+            this.activeName = this.$route.path;
+        },
+    },
+};
+</script>
+<style  lang="scss" scoped>
+.el-tabs__content {
+    display: none;
+}
+
+.inner-container {
+    background: #ffffff;
+    padding-top: 20px;
+    margin: 15px;
+    overflow: auto;
+    width: calc(100% - 30px);
+    max-width: calc(100% - 30px);
+    height: 100%;
+    overflow-x: hidden;
+
+    &-viewport {
+        width: 100%;
+        overflow: auto;
+    }
+}
+
+.tabBox {
+    border-bottom: 1px solid #e1e1e1;
+    height: 60px;
+}
+
+.infoBox {
+    background: #f4f4f4 !important;
+    height: 100%;
+    width: calc(100%)
+}
+
+::v-deep .el-tabs__item {
+    width: 166px;
+    text-align: center;
+    border-left: 10px solid #ffffff;
+    border-right: 10px solid #ffffff;
+
+}
+
+::v-deep .el-tabs__header {
+    margin: 0px;
+    background: #d8eaf6;
+    color: black;
+    margin-left: 20px;
+    display: inline-block;
+    border: 0px
+}
+
+::v-deep .is-active {
+    background: #0583cd;
+    color: white;
+}
+
+::v-deep .el-tabs__item:hover {
+    color: black;
+}
+
+::v-deep .is-active:hover {
+    background: #0583cd;
+    color: white;
+}
+
+::v-deep .el-tabs--card>.el-tabs__header .el-tabs__nav {
+    border: 0px
+}
+</style>

+ 296 - 0
src/pages/main/documentCollection/newTree.vue

@@ -0,0 +1,296 @@
+<template>
+  <div class="flex-box">
+    <div class="treebox">
+      <!-- <div class="tree-text">组织机构</div> -->
+      <el-input placeholder="可按名字匹配所在部门" v-model="filterText">
+      </el-input>
+      <el-tree ref="tree" @node-click="handleNodeClick" :data="treeList" node-key="o" :indent="20"
+        :default-checked-keys="defaultListc" :default-expanded-keys="defaultList">
+        <span class="span-ellipsis" slot-scope="{ node, data }">
+          <span :title="node.label"><i v-if="data.children.length === 0" class="el-icon-caret-right icon-right"></i>
+            {{ node.label }}</span>
+        </span>
+      </el-tree>
+    </div>
+    <div class="flex-transfer">
+      <el-transfer v-model="value" :titles="['待选人员', '已选人员']" @change="handleCheckChange"
+        :data="transferList"></el-transfer>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  props: ["defaultList", "type", "oneORmore","treeListType"],
+  data() {
+    return {
+      filterTexts: "",
+      filterText: "",
+      transferList: [],
+      treeList: [],
+      treeLists: [],
+      rightList: [],
+      value: [],
+      newArr: [],
+      opt: [],
+      treeId: 1,
+      defaultProps: {
+        children: "children",
+        label: "label",
+      },
+      defaultListc: [],
+    };
+  },
+  methods: {
+    handleNodeClick(v) {
+      for (let i = v.children.length - 1; i >= 0; i--) {
+        if (v.children[i].haveUserFlag == "N") {
+          v.children.splice(i, 1);
+        }
+      }
+      // v.children.map((item,index) =>{
+
+      //   if(item.haveUserFlag == "N"){
+      //     v.children.splice(index, 1);
+      //   }
+      //   console.log(v.children);
+      // })
+      let list = {
+        groupId: v.o,
+      };
+      if (this.filterTexts) {
+        list.loginNameStr = this.filterTexts;
+      }
+      if (v.o !== this.treeId) {
+        if (this.value.length !== 0) {
+          let a = [];
+          for (let i = 0; i <= this.transferList.length - 1; i++) {
+            for (let y = 0; y <= this.value.length; y++) {
+              if (this.transferList[i].key === this.value[y]) {
+                console.log(this.transferList[i].key);
+                console.log(this.value[y]);
+                a.push(this.transferList[i]);
+
+              }
+            }
+          }
+          console.log(a);
+          this.transferList = a;
+          // console.log(this.transferList);
+        } else {
+          this.transferList = [];
+        }
+      }
+      let s = false;
+      if (v.children && v.children.length == 0) {
+        s = true;
+      }
+      if (v.type) {
+        return;
+      }
+      if (
+        v.children &&
+        v.children.length > 0 &&
+        v.children[v.children.length - 1].type == 1
+      ) {
+        return;
+      }
+      if (v.o !== this.treeId) {
+        this.$http({
+          url: "/sysmgr/sysuserinfo/queryListByName",
+          method: "post",
+          headers: {
+            "Content-Type": "application/json",
+          },
+          data: list
+        }).then((res) => {
+          v.children = v.children ? v.children : [];
+          this.treeId = v.o;
+          this.treeLists = res.data;
+          res.data.map((item, index) => {
+            this.transferList.push({
+              label: item.loginNameStr,
+              key: item.loginNoStr,
+              groupName: item.groupName,
+            });
+          });
+          const dalaoyang = (arr, key) => {
+            let map = new Map()
+            return arr.filter(item => !map.has(item[key]) && map.set(item[key], 1))
+          }
+          this.transferList = dalaoyang(this.transferList, "key")
+          console.log(this.transferList);
+        });
+      } else {
+        console.log(this.transferList);
+      }
+    },
+    getTree(v, e) {
+      let list = {
+        parentorgId: v,
+        type:this.treeListType,//* 1:全部传递 2:值传递第一层 3:值传递第一层之后数据
+      };
+      if (e) {
+        list.name = e;
+      }
+      this.loading = true;
+      this.$http({
+        // url: "/sysmgr/csysdept/queryAllList",
+        url: "/sysmgr/csysdept/queryAllListByParentorgId",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: list,
+      }).then((res) => {
+        this.loading = false;
+        this.treeList = res.data;
+        let list = res.data[0].children.filter((item, i, array) => {
+          return item.haveUserFlag === "Y";
+        });
+        this.treeList[0].children = list;
+      });
+    },
+    handleCheckChange(v) {
+      // console.log(this.value);
+      if (this.oneORmore == '2') {
+        if (this.value.length > 1) {
+
+          this.$message({
+            message: '只能选择一人',
+            type: 'error'
+          });
+          this.value = [this.value[0]]
+          let opt = [];
+          this.transferList.map((item) => {
+            this.value.map((items) => {
+              if (item.key === items) {
+                opt.push(item);
+              }
+            });
+          });
+          // console.log(opt);
+          this.$emit("treeCheck", opt);
+        } else {
+          let opt = [];
+          this.transferList.map((item) => {
+            this.value.map((items) => {
+              if (item.key === items) {
+                opt.push(item);
+              }
+            });
+          });
+          // console.log(opt);
+          this.$emit("treeCheck", opt);
+        }
+      } else {
+        let opt = [];
+        this.transferList.map((item) => {
+          this.value.map((items) => {
+            if (item.key === items) {
+              opt.push(item);
+            }
+          });
+        });
+        // console.log(opt);
+        this.$emit("treeCheck", opt);
+      }
+
+
+    },
+  },
+  created() {
+    this.getTree('00440063000000000000');
+    this.defaultListc = this.defaultList;
+  },
+  watch: {
+    filterText(val) {
+      // this.$refs.tree.filter(val);
+      console.log(val);
+      this.filterTexts = val;
+      this.getTree("00440063000000000000", this.filterTexts);
+    },
+  },
+};
+</script>
+
+
+<style scoped lang="scss">
+::v-deep .el-checkbox.el-transfer-panel__item {
+  display: block !important;
+}
+
+// ::v-deep .el-transfer-panel__list.is-filterable {
+//   height: calc(100%);
+// }
+
+// ::v-deep .el-checkbox-group .el-transfer-panel__list {
+//   height: 388px;
+// }
+
+.el-transfer-panel {
+  height: 500px;
+}
+
+.el-transfer-panel__list.is-filterable {
+  height: 400px;
+}
+
+::v-deep .el-transfer-panel__body {
+  height: 100%;
+}
+::v-deep .el-transfer-panel__list{
+  height: 100%;
+}
+
+.tree-text {
+  font-size: 20px;
+  color: black;
+  padding: 15px;
+  font-weight: 600;
+}
+
+.flex-box {
+  display: flex;
+  width: 100%;
+  justify-content: center;
+  height: 80%;
+}
+
+::v-deep .el-icon-caret-right {
+  font-size: 12px;
+  background-size: cover;
+  margin-left: px;
+}
+
+.icon-right {
+  margin-left: 5px;
+  color: #fff;
+}
+
+.treebox {
+  width: 30%;
+  border: 1px solid #ddd;
+  height: 100%;
+  background-color: #fff;
+  overflow: scroll;
+  overflow-x: hidden;
+  max-height: 390px;
+  height: 390px;
+}
+
+.flex-transfer {
+  width: 50%;
+  height: 390px;
+  margin-left: 30px;
+}
+
+::v-deep .el-transfer-panel {
+  width: 35%;
+  height: 100%;
+}
+
+::v-deep .el-transfer {
+  height: 100%;
+}
+</style>

+ 95 - 0
src/pages/main/documentCollection/search.vue

@@ -0,0 +1,95 @@
+<template>
+	<div class="search-box">
+		<div class="box-l">
+			<div v-for="(item, index) in searchList" :key="index" class="box-info" :style="'width:' + item.width">
+				<!-- <span>{{ item.tit }}</span> -->
+				<el-form>
+					<el-form-item :label="item.tit"   label-width="90px">
+						<el-input v-model="item.value" v-if="item.type === 'input'" size="medium"
+							:placeholder="item.tit">
+						</el-input>
+						<el-select :popper-append-to-body="false" clearable v-if="item.type === 'sel'"
+							v-model="item.value" :placeholder="item.tit" size="medium">
+							<el-option v-for="items in item.options" :key="items.dataCode" :label="items.dataName"
+								:value="items.dataCode">
+							</el-option>
+						</el-select>
+						<el-date-picker :append-to-body="false" v-model="item.value" v-if="item.type === 'date'"
+							size="medium" type="date" :placeholder="item.tit">
+						</el-date-picker>
+						<el-date-picker :append-to-body="false" v-model="item.value" v-if="item.type === 'datetime'"
+							size="medium" type="datetime" :placeholder="item.tit">
+						</el-date-picker>
+						<el-date-picker :append-to-body="false" v-model="item.value" v-if="item.type === 'month'"
+							size="medium" type="month" :placeholder="item.tit">
+						</el-date-picker>
+						<el-date-picker :append-to-body="false" v-model="item.value" v-if="item.type === 'year'"
+							size="medium" type="year" :placeholder="item.tit">
+						</el-date-picker>
+						<el-date-picker :append-to-body="false" v-model="item.value" v-if="item.type === 'daterange'"
+							size="medium" type="daterange" :placeholder="item.tit" format="yyyy-MM-dd HH:mm:ss"
+							value-format="yyyy-MM-dd HH:mm:ss" :default-time="defaultTime" start-placeholder="开始时间"
+							end-placeholder="结束时间" />
+					</el-form-item>
+				</el-form>
+			</div>
+		</div>
+		<el-button class="btn-check" size="medium" type="primary" plain icon="el-icon-search" @click="searchInfo">搜索
+		</el-button>
+	</div>
+</template>
+<script>
+export default {
+	props: ["searchList"],
+	data() {
+		return {
+			infoList: [],
+			defaultTime: ['00:00:00', '23:59:59'],
+		};
+	},
+	methods: {
+		searchInfo() {
+			this.infoList = [];
+			for (let i = 0; i < this.searchList.length; i++) {
+				if (this.searchList[i].type === "date" && this.searchList[i].value) {
+					this.infoList.push(Date.parse(this.searchList[i].value));
+				} else {
+					this.infoList.push(this.searchList[i].value);
+				}
+			}
+			this.$emit("searchInfo", this.infoList);
+		},
+	},
+	mounted() { },
+	created() { },
+};
+</script>
+<style scoped lang="scss">
+.search-box {
+	display: flex;
+	justify-content: space-between;
+
+	.box-l {
+		display: flex;
+		justify-content: space-between;
+
+		.box-info {
+			display: inline-block;
+			// min-width: 100px;
+		}
+	}
+
+	.btn-check {
+		height: 38px;
+	}
+
+	.el-date-editor.el-input,
+	.el-date-editor.el-input__inner {
+		width: 100%;
+	}
+
+	.el-select-dropdown {
+		z-index: 100000 !important;
+	}
+}
+</style>

+ 4 - 67
src/pages/main/leader/demand/demandHome.vue

@@ -199,9 +199,9 @@ export default {
         processDefinitionKey: "request_form_process",
       },
       requestForm: {
-        // fresourceId: "0d94de8a-0281-11ed-a302-4ae7da54db39", // 本地环境
+        fresourceId: "0d94de8a-0281-11ed-a302-4ae7da54db39", // 本地环境
         // fresourceId: "bf79721c-33f3-11ed-ba0b-00505687dcd3", //测试环境
-        fresourceId:'81455799-600d-11ed-b399-e00084564cce',//生产环境
+        // fresourceId:'81455799-600d-11ed-b399-e00084564cce',//生产环境
         processDefinitionKey: "request_form_process",
       },
       treeList: [], //候选人列表
@@ -768,71 +768,6 @@ export default {
   },
   created() {
     this.getUserIndex();
-    // let A = [
-    //   {
-    //     id: 1,
-    //     b: "456",
-    //   },
-    //   {
-    //     id: 2,
-    //     b: "456",
-    //   },
-    // ];
-    // let B = [
-    //   {
-    //     a: 1,
-    //     b: "4567",
-    //   },
-    //   {
-    //     a: 1,
-    //     b: "4568",
-    //   },
-    //   {
-    //     a: 2,
-    //     b: "4567",
-    //   },
-    // ];
-    // A.map((item) => {
-    //   item.c = [];
-    //   let index = B.findIndex((items) => {
-    //     if (items.a == item.id) {
-    //       item.c.push(items);
-    //     }
-    //   });
-    //   console.log(index);
-    //  B.map((items,index) =>{
-    //   if(item.id == items.a){
-    //     item.c.push(items)
-    //   }
-
-    //  })
-    // });
-    // console.log(A);
-    // function getUserDescribe(name) {
-    //   const describeForNameMap = [
-    //     [
-    //       (name) => name.length > 3, // 判断条件
-    //       () => console.log("名字太长"), // 执行函数
-    //     ],
-    //     [(name) => name.length < 2, () => console.log("名字太短")],
-    //     [(name) => name[0] === "陈", () => console.log("小陈")],
-    //     [(name) => name === "大鹏", () => console.log("管理员")],
-    //     [
-    //       (name) => name[0] === "李" && name !== "李鹏",
-    //       () => console.log("小李"),
-    //     ],
-    //   ];
-    //   // 获取符合条件的子数组
-    //   const getDescribe = describeForNameMap.find((item) => item[0](name));
-    //   // 子数组存在则运行子数组中的第二个元素(执行函数)
-    //   getDescribe ? getDescribe[1]() : console.log("此人比较神秘!");
-    // }
-    // getUserDescribe('张元芳微软')
-    // const func = (name, age = "fatfish") => {
-    //   console.log(name);
-    // };
-    // func("123123123");
-
     //oa跳转回来显示
     let status = JSON.stringify(this.$route.query) == "{}";
     if (status) {
@@ -1304,6 +1239,8 @@ export default {
       this.dialogTitle = "新建";
       this.lables.data = [];
       this.disabled = false;
+      this.saveStatus = false;
+      this.startStatus = false
       await this.getDepartmentName();
     },
     //获取用户部门名称

+ 232 - 0
src/pages/main/luckySheet/index.vue

@@ -0,0 +1,232 @@
+<template>
+  <div class="flex-count">
+    <div class="flex-count-header">
+      <span>在线文档-文件管理</span>
+      <el-button type="primary" class="header-button" @click="clickSave"
+        >新建</el-button
+      >
+    </div>
+
+    <Table @clickDemand="clickDemand" :list="lable" ref="TableList"> </Table>
+    <!-- <div v-for="(item, index) in optionsExcel" :key="index">
+      <div @click="clickSee(item)">{{ item.option.title }}</div>
+    </div>
+    <el-button @click="newExcle">新建</el-button>
+    <div
+      id="luckysheet"
+      v-show="excelStatus"
+      style="
+        margin: 0px;
+        padding: 0px;
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        left: 0px;
+        top: 0px;
+      "
+    ></div> -->
+  </div>
+</template>
+
+<script>
+import axios from "axios";
+import luckyexcel from "luckyexcel";
+import Table from "../../../components/el-form.vue";
+export default {
+  components: {
+    Table,
+  },
+  data() {
+    return {
+      excelStatus: false,
+      optionsExcel: [],
+      ids: "",
+      lable: {
+        name: "first",
+        height: "650",
+        titledata: [
+          {
+            label: "名称",
+            prop: "needName",
+            width: 300,
+            color: "#0682CD",
+          },
+          {
+            label: "创建时间",
+            prop: "needType",
+            width: 200,
+          },
+          {
+            label: "创建科室",
+            prop: "applyDept",
+            width: 200,
+          },
+          {
+            label: "创建人",
+            prop: "applyDepartment",
+            width: 200,
+          },
+          {
+            label: "权限状态",
+            prop: "proposer",
+            width: 200,
+          },
+        ], //表格头
+        data: [], //内容数据
+        loading: true,
+        pageData: {
+          total: 100, // 总条数
+          pageSize: 10, // 每页数量
+          pageNum: 1, // 页码
+        },
+        isSelection: true, // 表格有多选时设置
+        isOperation: false, // 表格有操作列时设置
+        isIndex: false, // 列表序号
+        operation: {
+          // 表格有操作列时设置
+          label: "操作", // 列名
+          width: "50", // 根据实际情况给宽度
+          data: [
+            {
+              label: "操作", // 操作名称
+              type: "", //按钮类型
+              handleRow: (e, r, o) => {
+                // this.disabled = true;
+                // this.dialogTitle = "查看";
+                // if (r.taskName === "起草") {
+                //   this.disabled = false;
+                // } else {
+                //   this.disabled = true;
+                // }
+                // this.fromList = r;
+                // this.clickForm(r);
+                // this.getFromQuery(r);
+                // this.dialogStatus = true;
+                // setTimeout(() => {
+                //   this.getBtnStatus(r);
+                // }, 500);
+                // this.formWorkId = r.id;
+                // this.formId = r.taskId;
+                // this.taskName = r.taskName;
+                // this.getQuery()
+              }, // 自定义事件
+            },
+          ],
+        },
+      },
+    };
+  },
+  created() {
+    this.getAllExcel();
+  },
+  mounted() {},
+  methods: {
+    clickSave() {
+      this.$http({
+        url: "/market/cOnlineExcel/addExcel",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {
+          folderId: '',
+        },
+      }).then((res) => {
+        // if (res.data.result === 1) {
+        //   _this.$message({
+        //     message: res.data.desc,
+        //     type: "error",
+        //   });
+        // } else {
+        //   _this.$message({
+        //     message: "成功",
+        //     type: "success",
+        //   });
+        //   var id = res.data.desc;
+        //   _this.addNewStatus = false;
+        //   //放入id,切换到excel模式
+        //   document.getElementById("excelId").setAttribute("value", id);
+        //   _this.showExcel = true;
+        // }
+      });
+    },
+    clickSee(e) {
+      this.$http({
+        url: "/api/sheet/workbook/" + e.id,
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {},
+      }).then((res) => {
+        this.ids = e.id;
+        // this.optionsExcel = res.data;
+        let options = {
+          container: "luckysheet",
+          title: "123123",
+          allowUpdate: true,
+          lang: "zh",
+          loadUrl:
+            window.location.protocol +
+            "//43.138.50.94:7777" +
+            "/sheet/worksheet/" +
+            this.ids,
+          loadSheetUrl:
+            window.location.protocol +
+            "//43.138.50.94:7777" +
+            "/sheet/loadsheet/" +
+            this.ids,
+          updateUrl:
+            "ws://" +
+            "//43.138.50.94:7777" +
+            "/ws/" +
+            JSON.parse(window.sessionStorage.userInfo).loginName +
+            "/" +
+            this.ids,
+        };
+        window.luckysheet.create(options);
+        this.excelStatus = true;
+      });
+    },
+    //获取所有
+    getAllExcel() {
+      let data = {};
+      axios
+        .post("http://43.138.50.94:7777/sheet/allSheet", data)
+        .then((res) => {
+          console.log(res);
+          this.optionsExcel = res.data;
+        });
+    },
+    newExcle() {
+      let data = {};
+      axios.post("http://43.138.50.94:7777/sheet/create", data).then((res) => {
+        console.log(res);
+        let list = {
+          name: res.data.name,
+          id: res.data.id,
+        };
+        this.optionsExcel.push(list);
+      });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.flex-count {
+  background-color: #fff;
+  .flex-count-header {
+    display: flex;
+    flex-direction: column;
+    span {
+      font-size: 22px;
+      margin: 20px 0 0 30px;
+    }
+    .header-button {
+      width: 10%;
+      margin: 20px 0 20px 30px;
+    }
+  }
+}
+</style>

+ 125 - 52
src/pages/main/onlineExcel/index.vue

@@ -2,7 +2,7 @@
     <fullscreen :fullscreen.sync="fullscreen" class="container">
         <div class="container">
             <div class="main-box container-box">
-                <input type="hidden" id="excelId"/>
+                <input type="hidden" id="excelId" />
                 <div class="inner-left" style="overflow: hidden">
                     <!--                <div class="button-list">-->
                     <!--                    <el-button type="primary" @click="showExcel = true" plain>excel</el-button>-->
@@ -10,27 +10,26 @@
                     <!--                </div>-->
                     <div style="margin: 10px 0">
                         <el-input placeholder="请输入内容" v-model="filterText" class="input-with-select" clearable
-                                  @change="() => {if (!filterText) {searchMenu();}}">
+                            @change="() => { if (!filterText) { searchMenu(); } }">
                             <el-button slot="append" @click="searchMenu" icon="el-icon-search"></el-button>
                         </el-input>
                     </div>
                     <div v-loading="loading" style="height: calc(100% - 100px);overflow-y: scroll;overflow-x: scroll">
                         <el-tree ref="tree" class="tree-line" :expand-on-click-node="false" :auto-expand-parent="true"
-                                 :default-expand-all="true" :default-checked-keys="checkedMenu" :data="menuList"
-                                 @check="checkChange"
-                                 @node-click="nodeClick" :filter-node-method="filterNode" node-key="functionCode"
-                                 style="width: 300px">
-                        <span class="custom-tree-node" slot-scope="{ node }">
-                            <span>
-                                <span v-if="node.data.type == 4"
-                                      style="color: #009cff" class="iconfont icon-wenjianjia"></span>
-                                <span v-else style="color: #fdb441" class="iconfont icon-wenjian"></span>
-                                <span
-                                    :style="node.data.hasOwnProperty('parent')? 'font-size:14px;padding-left:5px':'font-size:12px;padding-left:5px'">{{
-                                        node.data.functionName
-                                    }}</span>
+                            :default-expand-all="true" :default-checked-keys="checkedMenu" :data="menuList"
+                            @check="checkChange" @node-click="nodeClick" :filter-node-method="filterNode"
+                            node-key="functionCode" style="width: 300px">
+                            <span class="custom-tree-node" slot-scope="{ node }">
+                                <span>
+                                    <span v-if="node.data.type == 4" style="color: #009cff"
+                                        class="iconfont icon-wenjianjia"></span>
+                                    <span v-else style="color: #fdb441" class="iconfont icon-wenjian"></span>
+                                    <span
+                                        :style="node.data.hasOwnProperty('parent') ? 'font-size:14px;padding-left:5px' : 'font-size:12px;padding-left:5px'">{{
+                                            node.data.functionName
+                                        }}</span>
+                                </span>
                             </span>
-                        </span>
                         </el-tree>
                     </div>
                     <div class="tree-action"></div>
@@ -40,19 +39,21 @@
                         <toolList @iconCli='iconCli' :tooltit='tooltit' style="margin: 10px"></toolList>
                         <div style="margin-top: 20px;float: left;" class="bigbtns">
                             <el-button style="margin-left: 20px;" class="btn-check" size="medium" type="primary"
-                                       @click="addNewStatus = true">新建
+                                @click="addNewStatus = true">新建
                             </el-button>
+                            <input style="margin-left:30px" id="upload-file" name="file" type="file" @change="handleUpload">
                         </div>
+                        
                         <div style="margin-top: 20px;float: right;margin-right: 20px" class="bigbtns"
-                             v-if="selectionSize != 0">
+                            v-if="selectionSize != 0">
                             <el-button style="margin-left: 5px;" class="btn-check" size="small" type="primary"
-                                       @click="delExcel()">删除
+                                @click="delExcel()">删除
                             </el-button>
                             <el-button style="margin-left: 5px;" class="btn-check" size="small" type="primary"
-                                       @click="cancelSelection()">取消
+                                @click="cancelSelection()">取消
                             </el-button>
                             <el-button style="margin-left: 5px;" class="btn-check" size="small" type="primary"
-                                       @click="moveStatus = true">移动到
+                                @click="moveStatus = true">移动到
                             </el-button>
                         </div>
                     </div>
@@ -61,8 +62,8 @@
                             <span v-if="selectionSize != 0">已选{{ selectionSize }}项</span>
                         </div>
                         <el-table height="calc(100% - 60px)" class="com-table" ref="multipleTable" :data="tableData"
-                                  tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading"
-                                  @selection-change="handleSelectionChange">
+                            tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading"
+                            @selection-change="handleSelectionChange">
                             <el-table-column type="selection" width="45"></el-table-column>
                             <el-table-column prop="fileName" label="名称">
                             </el-table-column>
@@ -81,38 +82,40 @@
                             <el-table-column label="操作" width="180px" align="center" fixed="right">
                                 <template slot-scope="scope">
                                     <el-button size="mini" type="primary" @click="moveToEdit(scope.row)"
-                                               :disabled="scope.row.shareEditStatus==1">编辑
+                                        :disabled="scope.row.shareEditStatus == 1">编辑
                                     </el-button>
                                 </template>
                             </el-table-column>
                         </el-table>
                         <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next"
-                                       background
-                                       :total="total">
+                            background :total="total">
                         </el-pagination>
                     </div>
 
                     <div class="container" id="container" v-else>
                         <fullscreen :fullscreen.sync="excelFullScreen" class="container">
                             <iframe id="excelIframe" height="100%" width="100%"
-                                    src="/marketfront/static/views/onlineShareExcel.html"
-                                    frameborder="0"></iframe>
+                                src="/static/views/onlineShareExcel.html" frameborder="0"></iframe>
                         </fullscreen>
                     </div>
                 </div>
             </div>
-            <el-dialog :title="'新建'" :visible.sync="addNewStatus" width="300px" :destroy-on-close="true"
-                       :modal-append-to-body="false" :close-on-click-modal="false">
+            <el-dialog :title="'新建'" :visible.sync="addNewStatus" width="450px" :destroy-on-close="true"
+                :modal-append-to-body="false" :close-on-click-modal="false">
                 <div>
                     <!--                <el-button type="primary" @click="addExcel()" plain class="iconfont icon-wenjian">在线文档</el-button>-->
                     <!--                <el-button type="primary" @click="addFolderStatus = true" plain class="iconfont icon-wenjianjia">文件夹</el-button>-->
-                    <div style="padding-bottom: 30px">
+                    <div style="padding-bottom: 30px;display:flex">
                         <div style="width: 85px;display: inline-block;cursor: pointer" @click="addExcel()">
                             <span class="iconfont icon-wenjian" style="font-size: 80px;color: dodgerblue"></span>
                             <p style="margin-left: 20px;margin-top: 10px">在线文档</p>
                         </div>
+                        <div style="width: 85px;display: inline-block;margin-left: 70px;cursor: pointer">
+                            <span class="iconfont icon-excel" style="font-size: 80px;color: dodgerblue"></span>
+                            <input id="upload-file" name="file" type="file" @change="handleUpload">
+                        </div>
                         <div style="width: 85px;display: inline-block;margin-left: 70px;cursor: pointer"
-                             @click="addFolderStatus = true">
+                            @click="addFolderStatus = true">
                             <span class="iconfont icon-wenjianjia" style="font-size: 80px;color: dodgerblue"></span>
                             <p style="margin-left: 20px;margin-top: 10px">文件夹</p>
                         </div>
@@ -120,14 +123,14 @@
                 </div>
             </el-dialog>
             <el-dialog :title="'新增文件夹'" :visible.sync="addFolderStatus" width="50%" :destroy-on-close="true"
-                       :modal-append-to-body="false" :close-on-click-modal="false">
+                :modal-append-to-body="false" :close-on-click-modal="false">
                 <div v-loading="loading">
                     <el-form :model="infolist" ref="infolist">
                         <div class="online">
                             <el-form-item prop="name">
                                 <span>文件夹名称</span>
                                 <el-input v-model="infolist.name" placeholder="文件夹名称"
-                                          :disabled="disableStatus"></el-input>
+                                    :disabled="disableStatus"></el-input>
                             </el-form-item>
                         </div>
                     </el-form>
@@ -138,7 +141,7 @@
                 </div>
             </el-dialog>
             <el-dialog :title="'分享选项'" :visible.sync="shareStatus" width="550px" :destroy-on-close="true"
-                       :modal-append-to-body="false" :close-on-click-modal="false">
+                :modal-append-to-body="false" :close-on-click-modal="false">
                 <div style="margin-left: 30px;padding-bottom: 20px" v-loading='shareLoading'>
                     <el-button type="primary" @click="processExcelShare(1)" plain>仅我可编辑</el-button>
                     <el-button type="primary" @click="openOADialog(2)" plain>部门内所有人可编辑</el-button>
@@ -146,16 +149,16 @@
                 </div>
             </el-dialog>
             <el-dialog title="选择填报人" :visible.sync="checkexa" width="50%" :destroy-on-close="true"
-                       :modal-append-to-body="false" :close-on-click-modal="false" v-loading="shareLoading">
+                :modal-append-to-body="false" :close-on-click-modal="false" v-loading="shareLoading">
                 <div>
                     <el-form :model="exaList" ref="addInfoList">
                         <el-form-item prop="processUserId" class="info-line online">
                             <span style="width: 80px;margin-right: 20px">审批人员</span>
                             <deptTreeUserNew class="tree" @treeCheck="treeCheckonly" :defaultList="defaultList"
-                                             :type="depttype" :closeList="closeList"></deptTreeUserNew>
+                                :type="depttype" :closeList="closeList"></deptTreeUserNew>
                             <div class="tree treeUser">
-                                <p v-for="(item,index) in treeList" :key="index">{{ item.receiveName }}
-                                    <i @click="deletes(item,index)" class="el-icon-error"></i>
+                                <p v-for="(item, index) in treeList" :key="index">{{ item.receiveName }}
+                                    <i @click="deletes(item, index)" class="el-icon-error"></i>
                                 </p>
                             </div>
                         </el-form-item>
@@ -168,19 +171,19 @@
                 </div>
             </el-dialog>
             <el-dialog title="移动到" :visible.sync="moveStatus" width="500px" :destroy-on-close="true"
-                       :modal-append-to-body="false" :close-on-click-modal="false">
+                :modal-append-to-body="false" :close-on-click-modal="false">
                 <div>
                     <el-tree ref="tree" class="tree-line" :expand-on-click-node="false" :auto-expand-parent="true"
-                             :default-expand-all="true" :default-checked-keys="checkedMenu" :data="moveMenuList"
-                             @check="checkChange"
-                             @node-click="folderNodeClick" node-key="functionCode" @expand-on-click-node="false">
+                        :default-expand-all="true" :default-checked-keys="checkedMenu" :data="moveMenuList"
+                        @check="checkChange" @node-click="folderNodeClick" node-key="functionCode"
+                        @expand-on-click-node="false">
                         <span class="custom-tree-node" slot-scope="{ node }">
                             <span>
-                                <span v-if="node.data.type == 4"
-                                      style="color: #009cff" class="iconfont icon-wenjianjia"></span>
+                                <span v-if="node.data.type == 4" style="color: #009cff"
+                                    class="iconfont icon-wenjianjia"></span>
                                 <span v-else style="color: #fdb441" class="iconfont icon-wenjian"></span>
                                 <span
-                                    :style="node.data.hasOwnProperty('parent')? 'font-size:14px;padding-left:5px':'font-size:12px;padding-left:5px'">{{
+                                    :style="node.data.hasOwnProperty('parent') ? 'font-size:14px;padding-left:5px' : 'font-size:12px;padding-left:5px'">{{
                                         node.data.functionName
                                     }}</span>
                             </span>
@@ -195,20 +198,22 @@
                 </div>
             </el-dialog>
             <myMessage :messTit='messTit' @closeMessage="processDel" :centerDialogVisible="delVisible"
-                       v-if="delVisible"></myMessage>
+                v-if="delVisible"></myMessage>
             <myMessageRadio :messTit='oaTitle' @closeMessage="processOa" :centerDialogVisible="oaVisible"
-                            v-if="oaVisible" yesBtnName="是" noBtnName="否" ok-btn-name="提交"></myMessageRadio>
+                v-if="oaVisible" yesBtnName="是" noBtnName="否" ok-btn-name="提交"></myMessageRadio>
         </div>
     </fullscreen>
 </template>
 
 <script>
+import LuckyExcel from "luckyexcel";
 import pForm from "../../../components/p-form";
 import toolList from "../../../components/toolList";
 import myMessage from "../../../components/myMessage.vue";
 import myMessageNew from "../../../components/myMessageNew.vue";
 import myMessageRadio from "../../../components/myMessageRadio.vue";
 import deptTreeUserNew from "../../../components/deptTreeUserNew.vue"
+import {ajaxJson} from '../../../../public/static/js/util'
 
 export default {
     components: {
@@ -274,6 +279,71 @@ export default {
         }
     },
     methods: {
+        //外部导入
+        addExport(e) {
+            this.$http({
+                url: '/market/cOnlineExcel/addExcel',
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: {
+                    folderId: '',
+                },
+            }).then((res) => {
+                console.log(res);
+                res.data.desc
+                this.startUpload(e, res.data.desc)
+            });
+        },
+        startUpload(e, res) {
+            let _this = this;
+            let files = e.target.files;
+            if (files == null || files.length == 0) {
+                window.top.$vm.$message({
+                    message: '没有文件导入',
+                    type: 'info'
+                })
+                return;
+            }
+            let name = files[0].name;
+            let suffixArr = name.split("."),
+                suffix = suffixArr[suffixArr.length - 1];
+            if (suffix != "xlsx") {
+                window.top.$vm.$message({
+                    message: '目前只支持xlsx文件的导入',
+                    type: 'info'
+                })
+                return;
+            }
+            // 解析文件
+            LuckyExcel.transformExcelToLucky(files[0], function (exportJson, luckysheetfile) {
+                if (exportJson.sheets == null || exportJson.sheets.length == 0) {
+                    window.top.$vm.$message({
+                        message: '无法读取excel文件的内容,当前不支持xls文件',
+                        type: 'info'
+                    })
+                    return;
+                }
+                let exceljson = JSON.stringify(exportJson)
+                _this.$util.ajaxJson("正在导入中", "http://192.168.2.124:7777/sheet/excel/importFile", { exceldata: exceljson, id: res }, function (res) {
+                    // console.log('[ res ] >', res)
+                    _this.addNewStatus = false;
+                    document.getElementById('excelId').setAttribute("value", res.id);
+                    _this.showExcel = true;
+  
+
+                });
+            }
+            );
+            console.log(e); //文件
+            console.log(res);//excel id
+
+        },
+        handleUpload(e) {
+            this.addExport(e)
+
+        },
         processWoNo() {
             console.log(this.woNo);
             var _this = this;
@@ -303,6 +373,7 @@ export default {
                     //放入id,切换到excel模式
                     document.getElementById('excelId').setAttribute("value", id);
                     _this.showExcel = true;
+                    console.log(_this.showExcel);
                 }
             });
         },
@@ -462,6 +533,7 @@ export default {
         },
         //打开excel
         moveToEdit(row) {
+
             //放入id,切换到excel模式
             document.getElementById('excelId').setAttribute("value", row.id);
             this.showExcel = true;
@@ -483,6 +555,7 @@ export default {
                     folderId: folderId,
                 },
             }).then((res) => {
+                console.log(res);
                 if (res.data.result === 1) {
                     _this.$message({
                         message: res.data.desc,
@@ -806,7 +879,7 @@ export default {
         overflow: hidden;
         display: flex;
 
-        > div {
+        >div {
             background-color: white;
         }
 
@@ -828,7 +901,7 @@ export default {
     }
 }
 
-.el-button + .el-button {
+.el-button+.el-button {
     margin-left: 20px;
 }
 
@@ -899,11 +972,11 @@ export default {
     }
 
     // 去掉最顶层的虚线,放最下面样式才不会被上面的覆盖了
-    & > .el-tree-node::after {
+    &>.el-tree-node::after {
         border-top: none;
     }
 
-    & > .el-tree-node::before {
+    &>.el-tree-node::before {
         border-left: none;
     }
 

+ 614 - 0
src/pages/main/postage/formTable.vue

@@ -0,0 +1,614 @@
+<template>
+  <div>
+    <div>
+      <div class="flex-title">资费配置工单</div>
+      <el-form ref="form" :model="form" :rules="rule" :disabled="disabled">
+        <el-row>
+          <el-col :span="12">
+
+            <el-form-item label="文件标题:" prop="needName">
+              <el-input v-model="form.needName"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="申请部门:" prop="applydept">
+              <el-input v-model="form.applydept" :disabled="true"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+
+            <el-form-item label="申请科室:" prop="applydepartment">
+              <el-input v-model="form.applydepartment" :disabled="true"></el-input>
+            </el-form-item>
+          </el-col>
+
+        </el-row>
+
+
+        <el-row>
+          <el-col :span="6">
+            <el-form-item label="拟稿时间:">
+              <el-date-picker type="date" :disabled="true" placeholder="选择日期" v-model="form.proposerTime"
+                :picker-options="pickerOptions" value-format="yyyy-MM-dd" style="width: 100%"></el-date-picker>
+            </el-form-item>
+
+          </el-col>
+          <el-col :span="6">
+
+            <el-form-item label="拟稿人:" prop="proposer">
+              <el-input v-model="form.proposer" :disabled="true"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+
+            <el-form-item label="编号:" prop="fileno">
+              <el-input v-model="form.fileno" :disabled="true"></el-input>
+            </el-form-item>
+          </el-col>
+
+
+          <el-col :span="6">
+            <el-form-item label="联系电话" prop="phone">
+              <el-input v-model="form.phone" :disabled="true"></el-input>
+            </el-form-item>
+
+          </el-col>
+
+
+        </el-row>
+
+        <el-row>
+          <el-col :span="6">
+
+            <el-form-item label="操作类型:" prop="operationType">
+              <el-select v-model="form.operationType" placeholder="请选择">
+                <el-option label="新资费配置" value="新资费配置"></el-option>
+                <el-option label="资费修改" value="资费修改"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+
+            <el-form-item label="业务线条:" prop="businessLine">
+              <el-select v-model="form.businessLine" placeholder="请选择">
+                <el-option label="市场线条" value="是"></el-option>
+                <el-option label="政企线条" value="否"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+
+            <el-form-item label="宽带配置选项:" prop="isSevenProject">
+              <el-select v-model="form.broadband" placeholder="请选择">
+                <el-option label="是" value="是"></el-option>
+                <el-option label="无" value="否"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="资费价格:" prop="proposer">
+              <el-input v-model="form.tariffPrice"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+
+        <el-row>
+          <!-- 新资费配置显示表单 -->
+          <div v-if="newPostAge">
+            <el-row>
+              <el-col :span="6">
+
+                <el-form-item label="需求时限:">
+                  <el-date-picker type="date" :disabled="timeStatus" placeholder="选择日期" v-model="form.demandTime"
+                    :picker-options="pickerOptions" value-format="yyyy-MM-dd" style="width: 100%"></el-date-picker>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="资费名称:" prop="proposer">
+                  <el-input v-model="form.tariffName"></el-input>
+                </el-form-item>
+              </el-col>
+            </el-row>
+
+            <el-row>
+              <el-col :span="24">
+                <el-form-item label="资费描述" prop="tariffDesc" label-width="110px">
+                  <el-input type="textarea" maxlength="300" show-word-limit v-model="form.tariffDesc"></el-input>
+                </el-form-item>
+
+              </el-col>
+            </el-row>
+
+            <el-row :gutter="20">
+              <el-col :span="4">
+                <el-form-item label="费用收取方式:" prop="costPayWay" label-width="150px">
+                  <el-select v-model="form.costPayWay" placeholder="请选择">
+                    <el-option label="费用一次性收取" value="费用一次性收取"></el-option>
+                    <el-option label="按日分摊" value="按日分摊"></el-option>
+                    <el-option label="区分上下半月" value="区分上下半月"></el-option>
+                    <el-option label="不区分上下半月" value="不区分上下半月"></el-option>
+                    <el-option label="月租日计" value="月租日计"></el-option>
+                    <el-option label="其他" value="其他"></el-option>
+                  </el-select>
+                </el-form-item>
+
+              </el-col>
+              <el-col :span="20">
+                <el-form-item prop="costPayWayInput">
+                  <el-input type="textarea" maxlength="300" show-word-limit v-model="form.costPayWayInput"></el-input>
+                </el-form-item>
+
+              </el-col>
+
+            </el-row>
+            <el-row>
+              <el-col :span="24">
+
+                <el-form-item label="办理场景" prop="handleWay" label-width="110px">
+                  <el-input type="textarea" maxlength="300" show-word-limit v-model="form.handleWay"></el-input>
+                </el-form-item>
+              </el-col>>
+
+            </el-row>
+            <el-row>
+              <el-col :span="10">
+
+                <el-form-item label="提醒短信:" prop="remindMmsg">
+                  <el-checkbox-group v-model="remindMmsg">
+                    <el-checkbox label="无" name="remindMmsg" :disabled="checkBoxNone"></el-checkbox>
+                    <el-checkbox label="到期提醒" name="remindMmsg" :disabled="checkBoxStatus"></el-checkbox>
+                    <el-checkbox label="办理成功" name="remindMmsg" :disabled="checkBoxStatus"></el-checkbox>
+                    <el-checkbox label="退订成功" name="remindMmsg" :disabled="checkBoxStatus"></el-checkbox>
+                    <el-checkbox label="限速提醒" name="remindMmsg" :disabled="checkBoxStatus"></el-checkbox>
+                    <el-checkbox label="余额提醒" name="remindMmsg" :disabled="checkBoxStatus"></el-checkbox>
+                    <el-checkbox label="用尽失效" name="remindMmsg" :disabled="checkBoxStatus"></el-checkbox>
+                  </el-checkbox-group>
+                </el-form-item>
+              </el-col>
+              <el-col :span="14">
+                <el-form-item prop="remindMsgInput" label-width="110px">
+                  <el-input type="textarea" maxlength="300" show-word-limit v-model="form.remindMsgInput"></el-input>
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <el-row :gutter="20">
+              <el-col :span="6">
+                <el-form-item label="酬金要求:" prop="gratuity">
+                  <el-select v-model="form.gratuity" placeholder="请选择">
+                    <el-option label="无" value="无"></el-option>
+                    <el-option label="有" value="有"></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="18">
+                <el-form-item prop="gratuityInput" style="width:100%">
+                  <el-input type="textarea" maxlength="300" show-word-limit v-model="form.gratuityInput"></el-input>
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <el-row :gutter="20">
+              <el-col :span="6">
+                <el-form-item label="报表要求:" prop="reportForm">
+                  <el-select v-model="form.reportForm" placeholder="请选择">
+                    <el-option label="无" value="无"></el-option>
+                    <el-option label="有" value="有"></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="18">
+                <el-form-item prop="reportFormInput">
+                  <el-input type="textarea" maxlength="300" show-word-limit v-model="form.reportFormInput"></el-input>
+                </el-form-item>
+              </el-col>
+
+            </el-row>
+            <el-row>
+              <el-form-item label="工单协议条款内容调整" prop="clause" label-width="140px">
+                <el-input type="textarea" maxlength="500" show-word-limit v-model="form.clause"></el-input>
+              </el-form-item>
+            </el-row>
+            <el-row>
+              <el-form-item label="备注/内容" prop="needBackdrop">
+                <el-input type="textarea" maxlength="500" show-word-limit v-model="form.content"></el-input>
+              </el-form-item>
+            </el-row>
+          </div>
+        </el-row>
+        <el-row>
+
+          <div v-if="postEdit">
+            <el-row>
+              <el-form-item label="内容" prop="count" label-width="110px">
+                <el-input type="textarea" maxlength="300" show-word-limit v-model="form.count"></el-input>
+              </el-form-item>
+            </el-row>
+
+
+            <el-row>
+              <el-form-item label="资费工单协议条款内容调整" prop="clause" label-width="170px">
+                <el-input type="textarea" maxlength="500" show-word-limit v-model="form.clause"></el-input>
+              </el-form-item>
+            </el-row>
+          </div>
+        </el-row>
+        <el-row>
+          <el-form-item label="附件:" prop="mkFileShareAttachList" label-width="120px">
+            <my-upload ref="upload" @uploadBack="uploadBack" @delloadBack="delloadBack" @clickDownload="download"
+              :fileInfo="fileInfo" :fileList="list.mkFileShareAttachList"></my-upload>
+          </el-form-item>
+        </el-row>
+
+
+      </el-form>
+    </div>
+    <div></div>
+    <div></div>
+  </div>
+</template>
+
+<script>
+import myUpload from "../../../components/workflowUpload";
+
+export default {
+  components: {
+    myUpload,
+  },
+  data() {
+    return {
+      costPayWayInputRule: {
+        costPayWayInput: [
+          { required: true, message: "请填写", trigger: "blur" },
+        ],
+      },
+      gratuityInputRule: {
+        gratuityInput: [
+          { required: true, message: "请填写", trigger: "blur" },
+        ],
+      },
+      reportFormInputRule: {
+        reportFormInput: [
+          { required: true, message: "请填写", trigger: "blur" },
+        ],
+      },
+      checkBoxNone: false,
+      checkBoxStatus: false,
+      fileInfo: {
+        type: "bt1n",
+        typename: "上传文件",
+        limit: 5,
+        url: "/market/waf/upload",
+        fileList: [],
+      },
+      postEdit: false,
+      newPostAge: false,
+      pickerOptions: {
+        disabledDate(time) {
+          return time.getTime() < Date.now() - 8.64e7;
+        },
+      },
+      oneList: [],
+      childrenList: [],
+      twoList: [],
+      twoStatus: false,
+      threeList: [],
+      threeStatus: false,
+      fourList: [],
+      fourStatus: false,
+      fiveList: [],
+      fiveStatus: false,
+      isSensitiveDataStatus: false,
+      timeStatus: false,
+      functionStatus: false,
+      reportStatus: false,
+      Length: "",
+      form: {},
+      rules: {},
+      rule: {
+        needName: [
+          { required: true, message: "请输入需求名称", trigger: "blur" },
+        ],
+        operationType: [
+          { required: true, message: "请选择操作类型", trigger: "change" },
+        ]
+      },
+      copyRule: {},
+      isList: [],
+      remindMmsg: []
+    };
+  },
+  props: {
+    list: {
+      type: Object,
+      default: () => { },
+    },
+    disabled: {
+      type: Boolean,
+      default: () => { },
+    },
+  },
+  mounted() {
+    if (this.list.mkFileShareAttachList) {
+      this.$refs.upload.attList = this.list.mkFileShareAttachList;
+      this.list.mkFileShareAttachList.map((item) => {
+        item.name = item.fileName;
+      });
+    }
+  },
+  created() {
+    this.form = this.list;
+    this.copyRule = this.rule;
+    console.log(this.form);
+  },
+
+  methods: {
+    uploadBack(v) {
+      if (this.form.mkFileShareAttachList) {
+        this.form.mkFileShareAttachList = [];
+        this.form.mkFileShareAttachList = v;
+      } else {
+        let mkFileShareAttachList = [];
+        mkFileShareAttachList = v;
+        this.$set(this.form, "mkFileShareAttachList", mkFileShareAttachList);
+      }
+    },
+    delloadBack(v) {
+      this.form.mkFileShareAttachList = v;
+      this.$http({
+        url: "/market/zfpzProcess/update",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: this.form,
+      }).then((res) => {
+        console.log(res);
+        // if (res.data.result === 0) {
+        //   this.$message.success("工作流更新成功");
+        // }
+      });
+    },
+    download() {
+      console.log(123);
+      if (this.form.mkFileShareAttachList.length > 1) {
+        this.$http({
+          url: "/market/waf/downAllFile",
+          method: "post",
+          headers: {
+            "Content-Type": "application/json",
+          },
+          responseType: "blob",
+          data: { mkFileShareAttachList: this.form.mkFileShareAttachList },
+        }).then((response) => {
+          if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+            let blob = new Blob([response.data], {
+              type: "application/vnd.ms-excel",
+            });
+            window.navigator.msSaveOrOpenBlob(
+              blob,
+              new Date().getTime().toString() + ".zip"
+            );
+          } else {
+            /* 火狐谷歌的文件下载方式 */
+            var blob = new Blob([response.data]);
+            var downloadElement = document.createElement("a");
+            var href = window.URL.createObjectURL(blob);
+            downloadElement.href = href;
+            downloadElement.download = this.form.needName + ".zip";
+            document.body.appendChild(downloadElement);
+            downloadElement.click();
+            document.body.removeChild(downloadElement);
+            window.URL.revokeObjectURL(href);
+          }
+          if (this.infolist.authType === "3") {
+            this.dialogCli(10);
+          }
+        });
+      } else {
+        console.log(this.form.mkFileShareAttachList);
+        let list = {
+          id: this.form.mkFileShareAttachList[0].fileCode,
+          fileName: this.form.mkFileShareAttachList[0].name,
+        };
+        this.$http({
+          url: "/market/waf/downFile",
+          method: "post",
+          headers: {
+            "Content-Type": "application/json",
+          },
+          responseType: "blob",
+          data: list,
+        }).then((response) => {
+          console.log(response);
+          if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+            let blob = new Blob([response.data], {
+              type: "application/vnd.ms-excel",
+            });
+            //window.navigator.msSaveOrOpenBlob(blob, this.form.needName);
+            window.navigator.msSaveOrOpenBlob(
+              blob,
+              this.form.mkFileShareAttachList[0].name
+            );
+          } else {
+            /* 火狐谷歌的文件下载方式 */
+            var blob = new Blob([response.data]);
+            var downloadElement = document.createElement("a");
+            var href = window.URL.createObjectURL(blob);
+            downloadElement.href = href;
+            downloadElement.download = this.form.mkFileShareAttachList[0].name;
+            document.body.appendChild(downloadElement);
+            downloadElement.click();
+            document.body.removeChild(downloadElement);
+            window.URL.revokeObjectURL(href);
+          }
+        });
+      }
+    },
+  },
+  watch: {
+    "form.operationType": {
+      handler(newVal) {
+        console.log(newVal);
+        if (newVal === "资费修改") {
+          this.newPostAge = false;
+          this.postEdit = true;
+        } else {
+          this.postEdit = false;
+          this.newPostAge = true;
+        }
+      },
+    },
+    "remindMmsg": {
+      handler(newVal) {
+        this.form.remindMmsg = newVal;
+        if (newVal.length === 0) {
+          this.checkBoxStatus = false;
+          this.checkBoxNone = false;
+        }
+        newVal.map((item) => {
+          if (item === '无') {
+            this.checkBoxStatus = !this.checkBoxNone;
+            console.log(this.checkBoxStatus);
+          } else {
+            this.checkBoxNone = !this.checkBoxStatus
+          }
+
+
+        })
+
+      }
+    },
+    "form.costPayWay": {
+      handler(newVal) {
+        console.log(newVal);
+        if (newVal === '其他') {
+          this.rule = { ...this.rule, ...this.costPayWayInputRule }
+
+        } else {
+          this.rule = this.copyRule
+        }
+      }
+    },
+    "form.gratuity": {
+      handler(newVal) {
+        console.log(newVal);
+        if (newVal === '有') {
+          this.rule = { ...this.rule, ...this.gratuityInputRule }
+          console.log(this.rule);
+        } else {
+          this.rule = this.copyRule
+        }
+      }
+    },
+    "form.reportForm": {
+      handler(newVal) {
+        if (newVal === '有') {
+          this.rule = { ...this.rule, ...this.reportFormInputRule }
+
+        } else {
+          this.rule = this.copyRule
+        }
+      }
+    }
+
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+::v-deep .el-row{
+  margin-top: 16px;
+}
+a {
+  text-decoration: none;
+}
+
+::v-deep .el-upload-list {
+  width: 23rem;
+}
+
+.flex-title {
+  text-align: center;
+  font-size: 24px;
+  line-height: 60px;
+
+  font-weight: bold;
+}
+
+.flex-header {
+  margin-top: 20px;
+  display: flex;
+  //   justify-content: space-between;
+
+  ::v-deep .el-form-item {
+    width: 20%;
+    margin-right: 60px;
+  }
+}
+
+.flex-upload {
+  ::v-deep .el-form-item {
+    width: 100%;
+  }
+}
+
+.flex-input-tare {
+  ::v-deep .el-form-item {
+    width: 100%;
+    margin-right: 5%;
+  }
+
+  ::v-deep .el-form-item__label {
+    width: 9rem !important;
+  }
+}
+
+.flex-textarea {
+  width: 70.5%;
+}
+
+.el-upload__tip {
+  color: red;
+}
+
+// ::v-deep .el-input--suffix .el-input__inner {
+//   width: 119% !important;
+// }
+::v-deep .el-input__inner {
+  color: black !important;
+}
+
+::v-deep .el-textarea.is-disabled .el-textarea__inner {
+  color: black !important;
+}
+
+::v-deep .el-form-item {
+  display: flex;
+}
+
+::v-deep .el-form-item__label {
+  // width:100%;
+  height: 50px;
+  line-height: 40px !important;
+  width: 130px;
+  font-size: 0.5rem;
+}
+
+::v-deep .el-form-item__content {
+  width: 100%;
+  margin-left: 0% !important;
+}
+
+.el-select,
+::v-deep.el-input_inner {
+  width: 100%;
+}
+
+::v-deep.el-form-item.foldLabel .el-form-item__label {
+  white-space: pre-line;
+  /*换行显示*/
+  height: 10px;
+  /*设置lable高度,input高度一样*/
+  line-height: 30px !important;
+}
+</style>

+ 924 - 0
src/pages/main/postage/index.vue

@@ -0,0 +1,924 @@
+<template>
+  <div class="flex-box">
+    <!-- v-show="lable.name === 'first'" -->
+    <div class="flex-header" :span="24">
+      <Tabs :tabList="tabList" @status="clickTabTops" />
+      <el-button type="primary" @click="clickNewTag">+新建</el-button>
+    </div>
+    <div class="flex-count">
+      <Table @clickDemand="clickDemand" :list="lableTable" ref="TableList" @num="getNum" @changeNum="changeNum">
+      </Table>
+    </div>
+    <el-dialog :title="'需求'" :visible.sync="dialogStatus" width="100%" :before-close="handleClose" :modal="false"
+      v-if="dialogStatus" style="display: flex; flex-direction: column" :destroy-on-close="true">
+      <!-- 后期维护 -->
+      <div style="position: fixed; z-index: 10000">
+        <el-button type="primary" v-if="startStatus" @click="clickHandles">处理</el-button>
+        <el-button type="primary" @click="handleClose">关闭</el-button>
+        <el-button type="primary" @click="clickSave" v-if="saveStatus">保存</el-button>
+      </div>
+
+      <FormTable :list="fromList" :disabled="disabled" class="flex-form" ref="formTable" />
+      <div>
+        <div class="table-title">流程追踪</div>
+        <div v-if="abc == true">
+          <Tables :list="lables"></Tables>
+        </div>
+      </div>
+      <div>
+        <!-- <div class="table-title">流程追踪</div>
+        <div v-if="abc == true">
+          <Tables :list="lables"></Tables>
+        </div> -->
+      </div>
+    </el-dialog>
+    <div v-if="destroy">
+      <el-dialog title="处理操作" width="100%" :visible.sync="handleStatus" :before-close="handleCloses" :modal="false"
+        v-if="handleStatus" :destroy-on-close="true">
+        <Workflow ref="workflow" :list="fromList" v-if="isWorkflowStatus == true" @updateForm="beforeClose"
+          :requestForm="requestForm" :adminResourceId="adminResourceId" />
+        <WorkflowEntrance :list="fromList" v-else :lastManList="lastManList" @beforeClose="beforeClose"
+          :requestForm="requestForm" />
+
+        <!-- 后期维护 -->
+      </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script>
+import Workflow from "../../../components/workflowBase";
+import WorkflowEntrance from "../../../components/workflowEntrance";
+import Tabs from "../../../components/el-tabs.vue";
+import Table from "../../../components/el-form.vue";
+import Tables from "../../../components/el-forms.vue";
+import FormTable from "./formTable.vue";
+import { updateBase } from "../../../http/api.js";
+import {
+  getTodoBase,
+  getDoneBase,
+  getInitiateBase,
+} from "../../../http/api.js";
+export default {
+  components: {
+    Tabs,
+    Table,
+    Tables,
+    FormTable,
+    Workflow,
+    WorkflowEntrance,
+  },
+  data() {
+    return {
+      abc: true,
+      disabled: false,
+      total: "",
+      lableTable: {}, //传给子组件table
+      pageSize: "1",
+      requestForm: {
+        // fresourceId: "91e8c4fd-33ed-11ed-a6ed-02427ba2d388", // 本地环境
+        fresourceId: "bf79721c-33f3-11ed-ba0b-00505687dcd3", //测试环境
+        // fresourceId:'81455799-600d-11ed-b399-e00084564cce',//生产环境
+        processDefinitionKey: "zfpz_pro_process",
+      },
+      adminResourceId: "", //多人处理最后人id
+      isWorkflowStatus: true, //真假工作流权限
+      destroy: false, //工作流组件
+      phone: "", //用户电话号
+      disabled: false, //表单权限控制
+      saveStatus: true, //保存按钮权限
+      startStatus: true, // 处理按钮权限
+      fromList: {}, //表单数据
+      dialogStatus: false, //表单状态控制
+      tabList: [
+        {
+          index: "first",
+          label: "我的待办",
+          number: "",
+          name: "prosss_key",
+        },
+        {
+          index: "two",
+          label: "我的已办",
+          number: "",
+        },
+        {
+          index: "three",
+          label: "我发起的",
+          number: "",
+        },
+      ],
+      firstTable: {
+        name: "first",
+        height: "600",
+        titledata: [
+          {
+            label: "文件标题",
+            prop: "need_name",
+            width: 300,
+            color: "#0682CD",
+          },
+          {
+            label: "发起部门",
+            prop: "applydept",
+            width: 200,
+          },
+          {
+            label: "发起科室",
+            prop: "applydepartment",
+            width: 200,
+          },
+          {
+            label: "发起人",
+            prop: "proposer",
+            width: 200,
+          },
+
+          {
+            label: "发起时间",
+            prop: "proposer_time",
+            width: 250,
+          },
+          {
+            label: "上一步处理人",
+            prop: "predealman",
+            width: 200,
+          },
+          {
+            label: "状态",
+            prop: "taskName",
+            width: 200,
+          },
+        ], //表格头
+        data: [], //内容数据
+        loading: true,
+        pageData: {
+          total: 100, // 总条数
+          pageSize: 10, // 每页数量
+          pageNum: 1, // 页码
+        },
+        isSelection: false, // 表格有多选时设置
+        isOperation: false, // 表格有操作列时设置
+        isIndex: false, // 列表序号
+        operation: {
+          // 表格有操作列时设置
+          label: "操作", // 列名
+          width: "50", // 根据实际情况给宽度
+          data: [
+            {
+              label: "操作", // 操作名称
+              type: "", //按钮类型
+              handleRow: (e, r, o) => { }, // 自定义事件
+            },
+          ],
+        },
+      },
+      twoTable: {
+        name: "two",
+        height: "600",
+        titledata: [
+          {
+            label: "文件标题",
+            prop: "need_name",
+            width: 300,
+            color: "#0682CD",
+          },
+          {
+            label: "发起部门",
+            prop: "applydept",
+            width: 200,
+          },
+          {
+            label: "发起科室",
+            prop: "applydepartment",
+            width: 200,
+          },
+          {
+            label: "发起人",
+            prop: "proposer",
+            width: 200,
+          },
+
+          {
+            label: "发起时间",
+            prop: "proposer_time",
+            width: 250,
+          },
+
+          {
+            label: "状态",
+            prop: "taskName",
+            width: 200,
+          },
+        ], //表格头
+        data: [], //内容数据
+        loading: true,
+        pageData: {
+          total: 100, // 总条数
+          pageSize: 10, // 每页数量
+          pageNum: 1, // 页码
+        },
+        isSelection: false, // 表格有多选时设置
+        isOperation: false, // 表格有操作列时设置
+        isIndex: false, // 列表序号
+        operation: {
+          // 表格有操作列时设置
+          label: "操作", // 列名
+          width: "50", // 根据实际情况给宽度
+          data: [
+            {
+              label: "操作", // 操作名称
+              type: "", //按钮类型
+              handleRow: (e, r, o) => { }, // 自定义事件
+            },
+          ],
+        },
+      },
+      threeTable: {
+        name: "three",
+        height: "600",
+        titledata: [
+          {
+            label: "文件标题",
+            prop: "need_name",
+            width: 300,
+            color: "#0682CD",
+          },
+          {
+            label: "发起部门",
+            prop: "applydept",
+            width: 200,
+          },
+          {
+            label: "发起科室",
+            prop: "applydepartment",
+            width: 200,
+          },
+          {
+            label: "发起人",
+            prop: "proposer",
+            width: 200,
+          },
+          {
+            label: "发起时间",
+            prop: "proposer_time",
+            width: 250,
+          },
+          {
+            label: "状态",
+            prop: "taskName",
+            width: 200,
+          },
+        ], //表格头
+        data: [], //内容数据
+        loading: true,
+        pageData: {
+          total: 100, // 总条数
+          pageSize: 10, // 每页数量
+          pageNum: 1, // 页码
+        },
+        isSelection: false, // 表格有多选时设置
+        isOperation: false, // 表格有操作列时设置
+        isIndex: false, // 列表序号
+        operation: {
+          // 表格有操作列时设置
+          label: "操作", // 列名
+          width: "50", // 根据实际情况给宽度
+          data: [
+            {
+              label: "操作", // 操作名称
+              type: "", //按钮类型
+              handleRow: (e, r, o) => { }, // 自定义事件
+            },
+          ],
+        },
+      },
+      request_form: {
+        userId: "",
+        userName: "",
+        path: this.$router.currentRoute.name,
+        userCode: JSON.parse(window.sessionStorage.userInfo).loginNo,
+        title: "title",
+        businessKey: "288",
+        processDefinitionKey: "zfpz_pro_process",
+      },
+      lables: {
+        height: "400",
+        titledata: [
+          {
+            id: 1,
+            label: "环节名称",
+            prop: "taskName",
+            width: 300,
+          },
+          {
+            id: 2,
+            label: "处理人",
+            prop: "assignee",
+            width: 300,
+          },
+          {
+            id: 3,
+            label: "到达时间",
+            prop: "startTime",
+            width: 300,
+          },
+          {
+            id: 4,
+            label: "处理时间",
+            prop: "endTime",
+            width: 300,
+          },
+          {
+            id: 5,
+            label: "回复意见",
+            prop: "content",
+            width: 300,
+          },
+        ], //表格头
+        data: [], //内容数据
+        loading: true,
+        pageData: {
+          total: 0, // 总条数
+          pageSize: 10, // 每页数量
+          pageNum: 1, // 页码
+        },
+        isSelection: false, // 表格有多选时设置
+        isOperation: false, // 表格有操作列时设置
+        isIndex: true, // 列表序号
+        operation: {
+          // 表格有操作列时设置
+          label: "操作", // 列名
+          width: "50", // 根据实际情况给宽度
+          data: [
+            {
+              label: "操作", // 操作名称
+              type: "", //按钮类型
+              handleRow: function () { }, // 自定义事件
+            },
+          ],
+        },
+      },
+      clickTagNameTop: "first",
+      totalPage: "1",
+    };
+  },
+  created() {
+    this.getQueryList();
+    this.getMeLaunch();
+    this.getQueryDone();
+    this.lableTable = this.firstTable;
+  },
+  mounted() {
+    this.getUserPhone();
+  },
+  methods: {
+    clickTabTops(e) {
+      console.log(e);
+      this.$refs.TableList.page = 1;
+      this.totalPage = "1";
+      this.clickTagNameTop = e;
+      // this.pageNo = 1
+      // this.$refs.TableList.page = 1;
+      if (this.clickTagNameTop == "first") {
+        this.lableTable = this.firstTable;
+        this.getQueryList();
+      } else if (this.clickTagNameTop == "two") {
+        this.lableTable = this.twoTable;
+        this.getQueryDone();
+      } else {
+        this.lableTable = this.threeTable;
+        this.getMeLaunch();
+      }
+    },
+    //我的待办
+    getQueryList() {
+      let list = {
+        tableName: this.request_form.processDefinitionKey,
+      };
+      getTodoBase(this.totalPage, "", list).then((res) => {
+        this.lableTable.data = res.data.data;
+        // this.tableData.map((item) => {
+        //   item.status = "1";
+        // });
+        this.tabList[0].number = res.data.totalRecord;
+        this.lableTable.pageData.total = res.data.totalRecord;
+        // this.loading = false;
+      });
+    },
+    getQueryDone() {
+      let list = {
+        tableName: this.request_form.processDefinitionKey,
+      };
+      getDoneBase(this.totalPage, "", list).then((res) => {
+        this.lableTable.data = res.data.data;
+        this.lableTable.pageData.total = res.data.totalRecord;
+        // this.tableData.map((item) => {
+        //   item.status = "2";
+        // });
+        this.tabList[1].number = res.data.totalRecord;
+        this.total = res.data.totalRecord;
+        this.loading = false;
+      });
+    },
+    getMeLaunch() {
+      let list = {
+        tableName: this.request_form.processDefinitionKey,
+      };
+      getInitiateBase(this.totalPage, "", list).then((res) => {
+        this.lableTable.data = res.data.data;
+        this.lableTable.pageData.total = res.data.totalRecord;
+        this.tabList[2].number = res.data.totalRecord;
+        // this.tableData.map((item) => {
+        //   if (item.taskName === "起草") {
+        //     item.status = "1";
+        //   } else {
+        //     item.status = "2";
+        //   }
+        // });
+        this.total = res.data.totalRecord;
+        this.loading = false;
+      });
+    },
+    async getLastName() {
+      console.log(this.fromList);
+      let list = {
+        procinstid: this.fromList.processId,
+        taskid: this.fromList.taskId,
+
+        // taskId:e.taskId
+      };
+      let _this = this;
+      let obj = {
+        url: this.$url.formList.getLastName, //流程追踪接口
+        data: list,
+        // status: "form",
+        headers: {
+          "Content-Type": "application/json",
+        },
+      };
+
+      let res = await this.common.httpPost(obj, success);
+      function success(data) {
+        console.log(data);
+        if (data.lastMan == true) {
+          _this.adminResourceId = data.adminResourceId;
+        }
+        _this.destroy = true;
+        _this.handleStatus = true;
+        _this.isWorkflowStatus = data.lastMan == false ? false : true;
+        _this.lastManList = data;
+
+        // console.log(_this.isWorkflowStatus);
+      }
+    },
+    //生成随机编号
+    getProjectNum() {
+      const time = new Date();
+      const year = time.getFullYear();
+      const Mouth = time.getMonth() + 1;
+      const Day = time.getDate();
+      let currentDate = year;
+      if (Mouth >= 10) {
+        currentDate += Mouth;
+      } else {
+        currentDate += "0" + Mouth;
+      }
+      if (Day >= 10) {
+        currentDate += Day;
+      } else {
+        currentDate += "0" + Day;
+      }
+      return currentDate;
+    },
+    getUserPhone() {
+      this.$http({
+        url: "/market/tygdProProcess/getPhone",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {},
+      }).then((res) => {
+        this.phone = res.data;
+      });
+    },
+    //获取用户部门名称
+    getDepartmentName() {
+      this.$http({
+        url: "/market/waf/queryDept",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {},
+      }).then((res) => {
+        let list = {
+          applydept: res.data,
+          applydepartment: JSON.parse(window.sessionStorage.userInfo).groupName,
+          proposer: JSON.parse(window.sessionStorage.userInfo).loginName,
+          fileno: this.getProjectNum() + Math.floor(Math.random() * 100000),
+          proposerTime: new Date(),
+          phone: this.phone,
+        };
+        this.fromList = list;
+        if (this.$refs.formTable) {
+          this.$refs.formTable.form = list;
+        }
+      });
+    },
+    setForm(e) {
+      this.request_form.title = this.$refs.formTable.form.needName;
+      this.$http({
+        url: "/market/zfpzProcess/add",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: this.$refs.formTable.form,
+      }).then((res) => {
+        console.log(res);
+        this.request_form.businessKey = res.data.body;
+        this.clickHandle(res.data.body);
+      });
+    },
+    getUserIds() {
+      this.$http({
+        url: "/market/waf/queryRoleByName",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: {
+          userCode: JSON.parse(window.sessionStorage.userInfo).loginNo,
+        },
+      }).then((res) => {
+        console.log(res);
+        this.request_form.userName = res.data.data.rows[0].name;
+        this.request_form.userId = res.data.data.rows[0].userCode;
+      });
+    },
+    async clickHandle(e) {
+      let _this = this;
+      let obj = {
+        url: this.$url.formList.startWork, //开始工作流接口
+        data: _this.request_form,
+        status: "form",
+        headers: {
+          "Content-Type": "application/x-www-form-urlencoded",
+        },
+      };
+
+      let res = await this.common.httpPost(obj, success);
+      function success(data) {
+        console.log(data);
+        _this.fromList.processId = data.data;
+        _this.taskId = data.data;
+        let list = {
+          id: e,
+          // taskId:_this.formId,
+          tableName: _this.request_form.processDefinitionKey,
+          processId: _this.fromList.processId,
+          // resourceId: _this.nextPath.currentShape[0].resourceId,
+        };
+        _this.setUpdate(list);
+      }
+    },
+    setUpdate(e) {
+      updateBase(e).then((res) => {
+        this.fromList.taskId = res.data.body[0].taskId;
+        // this.fromList.taskId = '1111111111';
+        this.fromList.taskName = res.data.body[0].taskName;
+        // this.fromList = concat;
+      });
+    },
+    setUpdateCopy(e) {
+      this.$http({
+        url: "/market/zfpzProcess/update",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: e
+      }).then((res) => {
+        console.log(res);
+        this.$message.success(res.data.desc)
+      });
+
+    },
+    //点击保存
+    clickSave() {
+      // if (this.fromList.id) {
+      //   let list = this.$refs.formTable.form;
+      //   // list.tableName = this.request_form.processDefinitionKey;
+      //   // list.processId = null
+      //   // list.taskId = null
+      //   this.setUpdateCopy(list)
+      // } else {
+      //   this.getUserIds();
+      //   this.setForm();
+      // }
+
+      this.$refs.formTable.$refs.form.validate((valid) => {
+        if (valid) {
+          console.log(this.fromList);
+          if (this.fromList.id) {
+            this.setUpdateCopy(this.$refs.formTable.form)
+          } else {
+            this.getUserIds();
+            this.setForm();
+          }
+        } else {
+          this.$message.error("请完善表单信息");
+          return false;
+        }
+      });
+    },
+    //点击新建
+    async clickNewTag() {
+
+      this.dialogStatus = true;
+      this.lables.data = [];
+      this.disabled = false;
+      this.saveStatus = true;
+      this.startStatus = true;
+      console.log();
+      this.fromList = {}
+      await this.getDepartmentName();
+    },
+    //处理按钮,开始工作流接口
+    clickHandles() {
+      this.getNextPath(this.fromList.resourceId || "");
+    },
+    //查询form表单数据
+    getFromQuery(e) {
+      this.$http({
+        url: "/market/zfpzProcess/query",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: { id: e.id },
+      }).then((res) => {
+        // this.dialogStatus = true;
+        this.fromList = res.data
+        this.fromList.resourceId = e.resourceId
+        this.fromList.taskId = e.taskId
+        this.fromList.createId = e.createId
+        this.fromList.mkFileShareAttachList = res.data.mkFileShareAttachList;
+        this.dialogStatus = true;
+      });
+    },
+    getNextPath(e) {
+      let list = {
+        fresourceId: this.requestForm.fresourceId, // 本地环境
+        processId: this.requestForm.processDefinitionKey,
+      };
+      if (e) {
+        list.resourceId = e;
+      }
+      this.$http({
+        url: "/market/waf/queryPath",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: list,
+      }).then((res) => {
+        if (res.data.body.nextShapes[0].multi) {
+          if (res.data.body.nextShapes[0].multi.multi === "true") {
+            this.getLastName();
+          } else {
+            this.adminResourceId = "";
+          }
+        } else {
+          this.adminResourceId = "";
+
+          // this.destroy = true;
+          // this.handleStatus = true;
+        }
+        if (this.fromList.processId || this.fromList.taskId) {
+          this.destroy = true;
+          this.handleStatus = true;
+        } else {
+          this.$message.error("请先点击保存按钮");
+        }
+      });
+    },
+    async clickForm(e) {
+      console.log(e);
+      let list = {
+        processInstanceId: e.process_id,
+        // taskId:e.taskId
+      };
+      let _this = this;
+      let obj = {
+        url: this.$url.formList.getCommentsByProcessId, //流程追踪接口
+        data: list,
+        headers: {
+          "Content-Type": "application/json",
+        },
+      };
+
+      let res = await this.common.httpPost(obj, success);
+      function success(data) {
+        console.log("[ 接口返回值第一曾 ] >", data);
+        let list = [];
+        list = data.data.data;
+        if (data.data.lastmandata.length != 0) {
+          data.data.lastmandata.map((item, index) => {
+            item.id = index + 22;
+          });
+        }
+        list.map((item, index) => {
+          item.startTime = _this.$util.datetimeFormat(item.startTime);
+          item.endTime = _this.$util.datetimeFormat(item.endTime);
+          item.id = index + 1;
+          item.children = [];
+          if (data.data.lastmandata.length != 0) {
+            let indexs = data.data.lastmandata.findIndex((items) => {
+              if (items.taskId == item.taskId) {
+                item.children.push(items);
+              }
+            });
+          }
+        });
+
+        _this.lables.data = list;
+        console.log("[ _this.lables.data ] >", _this.lables.data);
+        _this.abc = true;
+      }
+    },
+    clickDemand(e, res) {
+      console.log(this.clickTagNameTop);
+      if (e === "工单状态" || e === "文件标题") {
+        if (this.clickTagNameTop === "first") {
+          // this.disabled = true;
+          // this.dialogTitle = "查看";
+          if (res.taskName === "起草") {
+            console.log(123);
+            this.disabled = false;
+            this.saveStatus = true;
+          } else {
+            console.log(456);
+            this.disabled = true;
+            this.saveStatus = false;
+          }
+          // setTimeout(() => {
+          //   // this.getBtnStatus(res);
+          // }, 500);
+        }
+        if (this.clickTagNameTop === "two") {
+          this.disabled = true;
+          this.startStatus = false;
+          this.saveStatus = false;
+          // this.forwardStatus = false;
+          // this.exportBtnStatus = false;
+        }
+        if (this.clickTagNameTop === "three") {
+          if (res.taskName === "起草") {
+            this.startStatus = true;
+            this.disabled = false;
+            this.saveStatus = true;
+          } else {
+            this.startStatus = false;
+            this.disabled = true;
+            this.saveStatus = false;
+          }
+        }
+        // console.log('[ res ] >', res)
+        // res.needName = res.need_name;
+        // this.fromList = res;
+
+        // console.log(res);
+        // this.disabled = true
+
+        this.clickForm(res);
+        this.getFromQuery(res);
+      }
+    },
+    getNum() { },
+    getCurrentPageList(e) {
+      this.totalPage = Math.ceil(e.length / this.pageSize);
+      this.totalPage = this.totalPage == 0 ? 1 : this.totalPage;
+      let begin = (this.currentPage - 1) * this.pageSize;
+      let end = this.currentPage * this.pageSize;
+      this.currentPageList = e.slice(begin, end);
+      return this.currentPageList;
+    },
+    //获取页码
+    changeNum(e) {
+      console.log(e);
+      this.totalPage = e;
+      if (this.clickTagNameTop === "first") {
+        this.getQueryList();
+      } else if (this.clickTagNameTop === "two") {
+        this.getQueryDone();
+      } else if (this.clickTagNameTop === "three") {
+        this.getMeLaunch();
+      }
+    },
+    //表单详情状态控制
+    handleClose() {
+      this.handleCloses();
+      // console.log(123);
+      // this.dialogStatus = false;
+      // this.forwardStatus = false;
+      // // this.exportBtnStatus = false;
+      // this.saveStatus = false;
+      // this.startStatus = true;
+      // this.closeStatus = true;
+      // this.abc = false;
+      // this.handleCloses();
+      // this.getQueryList();
+      // this.getMeLaunch();
+      // this.getQueryDone();
+    },
+    handleCloses() {
+      this.treeList = [];
+      this.textarea = "";
+      this.handleStatus = false;
+      this.destroy = false;
+      this.dialogStatus = false;
+      this.saveStatus = false;
+      this.startStatus = true;
+      // this.closeStatus = true;
+    },
+    beforeClose() {
+      this.dialogStatus = false;
+      this.handleCloses();
+      this.getQueryList();
+      this.getMeLaunch();
+      this.getQueryDone();
+    },
+  },
+  watch: {
+    fromList: {
+      handler(newVal) {
+        console.log(newVal);
+      },
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+//设置子组件样式
+::v-deep .el-tabs__item {
+  padding: 0;
+  margin-right: 20px;
+  width: 166px;
+  text-align: center;
+  background-color: #d8eaf6;
+  color: black;
+}
+
+::v-deep .is-active {
+  color: #fff;
+  background-color: #0583cd;
+}
+
+::v-deep .el-tabs__active-bar {
+  display: none;
+}
+
+::v-deep .el-tabs__nav-wrap::after {
+  display: none !important;
+}
+
+.flex-form {
+  margin-top: 50px;
+}
+
+.flex-box {
+  display: flex;
+  // overflow: auto;
+  overflow-y: auto;
+  overflow-x: hidden;
+  width: calc(100% - 40px);
+  border-radius: 20px;
+  background-color: #fff;
+  margin: 0 auto;
+  margin-top: 20px;
+  position: relative;
+  flex-direction: column;
+
+  // height: 100%;
+  .flex-header {
+    display: flex;
+    width: 100%;
+    position: relative;
+    height: 60px;
+    margin: 1%;
+    border-bottom: 1px solid #e1e1e1;
+    justify-content: space-between;
+
+    .el-button {
+      width: 150px;
+      float: right;
+      height: 40px !important;
+      margin-right: 30px;
+    }
+  }
+}
+</style>

Файловите разлики са ограничени, защото са твърде много
+ 1342 - 0
src/pages/main/productionDataExport/cityHome.vue


+ 113 - 0
src/pages/main/productionDataExport/form.vue

@@ -0,0 +1,113 @@
+<template>
+  <div>
+    <slot :name="list.name"></slot>
+    <el-table  ref="table" style="width: 100%" :data="list.data" :height="list.height + 'px'"
+      :max-height="list.height + 'px'" @row-click="getRowData" @selection-change="selectionChange"
+      :cell-style="columnbackgroundStyle" empty-text="暂无数据" @cell-click="getRowList">
+      <!-- 是否多选 -->
+      <el-table-column v-if="list.isSelection" :selecttable="list" type="selection" :width="100" align="center" />
+
+      <!-- 是否需要序号 -->
+      <el-table-column v-if="list.isIndex" type="index" label="序号" width="55" align="center" />
+      <template v-for="item in list.titledata">
+        <el-table-column :key="item.prop" :prop="item.prop" :label="item.label" align="center" show-overflow-tooltip
+          :width="item.width || 100" />
+      </template>
+      <!-- 操作列 -->
+      <el-table-column v-if="list.isOperation" v-bind="list.data && list.data.length ? { fixed: 'right' } : null"
+        style="margin-right: 20px" class-name="handle-td" label-class-name="tc" :label="list.operation.label"
+        align="center">
+        <!-- UI统一一排放3个,4个以上出现更多 -->
+        <template slot-scope="scope">
+          <!-- 三个一排的情况,去掉隐藏的按钮后的长度 -->
+          <template v-if="list.operation.data.length > 0">
+            <div class="btn">
+              <div v-for="item in list.operation.data" :key="item.label">
+                <template v-if="item.type !== 'icon'">
+                  <el-button v-bind="item" :type="item.type ? item.type : ''" size="mini" @click.native.prevent="
+                    item.handleRow(scope.$index, scope.row, item.label)
+                  ">
+                    {{ item.label }}
+                  </el-button>
+                </template>
+                <template v-else>
+                  <i :class="[icon, item.icon]" v-bind="item"
+                    @click="item.handleRow(scope.$index, scope.row, item.label)" />
+                </template>
+              </div>
+            </div>
+          </template>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="page">
+      <el-pagination  style="display: flex; flex-direction: row-reverse;margin-bottom: 4%" v-if="list.pageData.total > 0"
+        :current-page.sync="page" :page-sizes="list.pageData.pageSizes ? list.pageData.pageSizes : [10]"
+        :page-size="list.pageData.pageSize" layout="total, sizes, prev, pager, next, jumper"
+        :total="list.pageData.total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      page: 1,
+    };
+  },
+  props: {
+    //  表格数据和表格部分属性的对象
+    // eslint-disable-next-line vue/require-default-prop
+    list: {
+      type: Object,
+    },
+  },
+  created() {
+    console.log(this.list);
+    // this.columnbackgroundStyle()
+  },
+  mounted() {
+    console.log(this.list);
+  },
+  methods: {
+    columnbackgroundStyle({ row, column, rowIndex, columnIndex }) {
+      if (column.type === 'default') {
+        if (column.label === '文件标题') {
+          return 'color:#0682CD;'
+        }
+      }
+    },
+    selectionChange(val) {
+      //多选数字回调
+      this.$emit("num", val);
+    },
+    handleAdd(name) {
+      this.$emit("toolMsg", name);
+    },
+    handleRow(index, row, lable) { },
+    handleSizeChange(val) {
+      this.$emit("changeSize", val);
+      console.log(`每页 ${val} 条`);
+    },
+    handleCurrentChange(val) {
+      this.$emit("changeNum", val);
+      console.log(`当前页: ${val}`);
+    },
+    // 点击行即可选中
+    getRowData(row) {
+      this.$refs.table.toggleRowSelection(row);
+    },
+    getRowList(row, column, event, cell) {
+      this.$emit("clickDemand", column.label, row);
+    },
+  },
+};
+</script>
+
+<style>
+.btn {
+  display: flex;
+  justify-content: center;
+}
+</style>

+ 604 - 0
src/pages/main/productionDataExport/formTable.vue

@@ -0,0 +1,604 @@
+<template>
+    <div>
+        <div>
+            <div class="flex-title">生产数据导出工单</div>
+            <el-form
+                ref="form"
+                :model="form"
+                :rules="rule"
+                label-width="130px"
+                style="margin-top: 30px"
+                :disabled="disabled"
+            >
+                <div class="flex-header">
+                    <el-form-item
+                        label="申请部门:"
+                        prop="applyDepartment"
+                        style="width: 25%; margin-right: 10px"
+                    >
+                        <el-input v-model="form.applyDepartment" :disabled="true"
+                        ></el-input>
+                    </el-form-item>
+
+                    <el-form-item
+                        label="申请科室:"
+                        prop="applyOffice"
+                        style="width: 25%; margin-right: 10px"
+                    >
+                        <el-input v-model="form.applyOffice" :disabled="true"
+                        ></el-input>
+                    </el-form-item>
+
+                    <el-form-item label="拟稿人:" prop="proposer" :disabled="true"
+                    >
+                        <el-input v-model="form.proposer" :disabled="true"></el-input>
+                    </el-form-item>
+                    <el-form-item label="拟稿时间:" prop="proposerTime"
+                    >
+                        <el-input
+                            v-model="form.proposerTime"
+                            :disabled="true"
+                        ></el-input>
+                    </el-form-item>
+                </div>
+
+                <div class="flex-header">
+                    <el-form-item
+                        label="文件标题:"
+                        prop="needName"
+                        style="width: 42%; margin-right: 10px"
+                    >
+                        <el-input v-model="form.needName" placeholder="关于XX单位导出XX业务XX数据的申请"></el-input>
+                    </el-form-item>
+
+                    <el-form-item label="文件编号:" prop="needNo"
+                                  style="width: 42%; margin-left: 11px"
+                    >
+                        <el-input v-model="form.needNo" :disabled="true"></el-input>
+                    </el-form-item>
+                </div>
+
+                <div class="flex-header">
+                    <el-form-item
+                        style="width: 33%; margin-right: 10%"
+                        label="联系电话:"
+                        prop="phoneNo"
+                    >
+                        <el-input v-model="form.phoneNo" :disabled="true"></el-input>
+                    </el-form-item>
+
+                    <el-form-item label="需求类型:" prop="requirementType"
+                                  style="width: 33%; margin-right: 10%"
+
+                    >
+                        <el-select v-model="form.requirementType" placeholder="需求类型">
+                            <el-option
+                                v-for="(item, index) in requirementTypeList"
+                                :label="item.name"
+                                :value="item.code"
+                                :key="index"
+                            >{{ item.name }}
+                            </el-option
+                            >
+                        </el-select>
+                    </el-form-item>
+
+                    <el-form-item label="数据导出类型:" prop="exportType"
+                                  style="width: 33%; margin-right: 10%"
+
+                    >
+                        <el-select v-model="form.exportType" placeholder="数据导出类型">
+                            <el-option
+                                v-for="(item, index) in exportTypeList"
+                                :label="item.name"
+                                :value="item.code"
+                                :key="index"
+                            >{{ item.name }}
+                            </el-option
+                            >
+                        </el-select>
+                    </el-form-item>
+                </div>
+
+
+                <div class="flex-header">
+                    <el-form-item
+                        label="数据库名:"
+                        style="width: 33%; margin-right: 10%"
+                        prop="sourceDatabase"
+                    >
+                        <el-input v-model="form.sourceDatabase"
+                                  placeholder="库名或IP"
+                        ></el-input>
+                    </el-form-item>
+
+                    <el-form-item label="数据表:" prop="sourceTable"
+                                  style="width: 33%; margin-right: 10%"
+
+                    >
+                        <el-input v-model="form.sourceTable" placeholder="用户.表名"></el-input>
+                    </el-form-item>
+
+                    <el-form-item label="主机IP:" prop="hostIp"
+                                  style="width: 33%; margin-right: 10%"
+
+                    >
+                        <el-input v-model="form.hostIp" placeholder="数据源所在主机IP"></el-input>
+                    </el-form-item>
+                </div>
+
+                <div class="flex-header">
+                    <el-form-item
+                        style="width: 90%; margin-right: 10%"
+                        label="导出文件名称:"
+                        prop="exportFileName"
+                    >
+                        <el-input v-model="form.exportFileName" placeholder="导出文件名称"></el-input>
+                    </el-form-item>
+                </div>
+                <div class="flex-header">
+                    <el-form-item
+                        style="width: 90%; margin-right: 10%"
+                        label="文件路径:"
+                        prop="exportFilePath"
+                    >
+                        <el-input v-model="form.exportFilePath"
+                                  placeholder="导出文件所在路径"
+                        ></el-input>
+                    </el-form-item>
+                </div>
+
+                <div class="flex-header">
+                    <el-form-item
+                        style="width: 90%; margin-right: 10%"
+                        label-width="120px" label="需求内容:"
+                        prop="requirementContent"
+                    >
+                        <el-input type="textarea"
+                                  show-word-limit v-model="form.requirementContent"
+                                  placeholder="如为明细级数据导出,请详细描述具体原由,至少50字。"
+                        ></el-input>
+                    </el-form-item>
+                </div>
+
+                <div class="flex-header">
+                    <el-form-item
+                        label="是否涉及敏感信息:"
+                        style="white-space: nowrap;margin-right: 10%"
+                        prop="isSensitiveInformation"
+                    >
+                        <el-select v-model="form.isSensitiveInformation" placeholder="请选择">
+                            <el-option label="是" value="是"></el-option>
+                            <el-option label="否" value="否"></el-option>
+                        </el-select>
+                    </el-form-item>
+                </div>
+                <div class="flex-header">
+                    <el-form-item
+                        style="width: 90%; margin-right: 10%"
+                        label-width="120px" label="涉敏信息范围:"
+                        prop="sensitiveScope"
+                    >
+                        <el-input type="textarea" @input="change($event)"
+                                  :disabled="this.isEditSensitiveScope"
+                                   v-model="form.sensitiveScope"></el-input>
+                    </el-form-item>
+                </div>
+
+                <div class="flex-load" style="display: flex; flex-direction: column">
+                    <el-form-item label="附件:" :disabled="disabled" prop="mkFileShareAttachList">
+                        <my-upload :showFileList ="true" :drag ="!disabled" :disabled ="disabled"  @uploadBack="uploadBack" @delloadBack="delloadBack"
+                                   @clickDownload="downloadOne" :fileInfo="fileInfo"
+                                   @downloadBack = "downloadBack"
+                                   :fileList="list.mkFileShareAttachList"
+                                   style="width: 30% !important"></my-upload>
+
+                    </el-form-item>
+                    <div @click="downExcel" class="el-upload__tip" slot="tip">
+                        附件模板: 生产数据导出申请表.doc
+                    </div>
+                </div>
+
+            </el-form>
+        </div>
+        <div></div>
+        <div></div>
+    </div>
+</template>
+
+<script>
+    import myUpload from "../../../components/uploadMultiConfig";
+
+    export default {
+        components: {
+            myUpload,
+        },
+        data() {
+            var validateRequirementContent = (rule, value, callback) => {
+                if (!this.disabled) {
+                    if (this.form.exportType === '2' && (!value || value.length <= 50)) {
+                        callback(new Error('如为明细级数据导出,请详细描述具体原由,至少50字。'));
+                    } else if (!value) {
+                        callback(new Error('请输入需求内容'));
+                    } else {
+                        callback();
+                    }
+                } else {
+                    callback();
+                }
+            };
+
+            var validateSensitiveScope = (rule, value, callback) => {
+                if (!this.disabled) {
+                    if (this.form.isSensitiveInformation === "是") {
+                        if (!value) {
+                            callback(new Error('请输入涉敏信息范围'));
+                        } else {
+                            callback();
+                        }
+                    } else {
+                        callback();
+                    }
+                } else {
+                    callback();
+                }
+            };
+            return {
+                fileInfo: {
+                    type: "bt1n",
+                    typename: "上传文件",
+                    limit: 5,
+                    url: "/market/waf/upload",
+                    fileList: [],
+                },
+                //需求类型
+                requirementTypeList: [],
+                //数据导出类型
+                exportTypeList: [],
+                isEditSensitiveScope: false,
+
+                form: {
+                },
+                rule: {},
+                copyRule: {
+                    needName: [
+                        {required: true, message: "请输入文件标题", trigger: "blur"},
+                    ],
+                    requirementType: [
+                        {required: true, message: "请选择需求类型", trigger: "change"},
+                    ],
+                    exportType: [
+                        {required: true, message: "请选择数据导出类型", trigger: "change"},
+                    ],
+                    exportFileName: [
+                        {required: true, message: "请选择导出文件名称", trigger: "blur"},
+                    ],
+                    requirementContent: [
+                        {validator: validateRequirementContent, trigger: "blur"},
+                    ],
+                    isSensitiveInformation: [
+                        {required: true, message: "请选择是否涉及敏感信息", trigger: "change"},
+                    ],
+                    mkFileShareAttachList: [
+                        {required: true, message: "请选择上传附件", trigger: "change"},
+                    ],
+                    sensitiveScope: [
+                        {validator: validateSensitiveScope, trigger: 'blur'}
+                    ],
+                },
+                temprulers: {
+                    sensitiveScope: [
+                        {required: true, message: "请输入涉敏信息范围", trigger: "blur"},
+                    ],
+                }
+            };
+        },
+        props: {
+            list: {
+                type: Object,
+                default: () => {
+                },
+            },
+            disabled: {
+                type: Boolean,
+                default: () => {
+                },
+            },
+        },
+        mounted() {
+            if (this.list.mkFileShareAttachList) {
+                this.$refs.upload.attList = this.list.mkFileShareAttachList;
+                this.list.mkFileShareAttachList.map((item) => {
+                    item.name = item.fileName;
+                });
+            }
+        },
+        created() {
+            this.getRequirementTypeList();
+            this.getExportTypeList();
+            this.form = this.list;
+            this.isList = this.list;
+            if (!this.disabled) {
+                 this.rule = this.copyRule;
+            }
+            this.fileInfo.fileList = this.list.mkFileShareAttachList;
+        },
+        watch: {
+            "form.isSensitiveInformation": {
+                handler(newVal, oldVal) {
+                    if (!this.disabled) {
+                        if (newVal === "否") {
+                            this.isEditSensitiveScope = true;
+                            this.form.sensitiveScope = "";
+                        } else {
+                            this.isEditSensitiveScope = false;
+                        }
+                    }
+                },
+            },
+        },
+        methods: {
+            change(){
+                this.$forceUpdate();
+            },
+            getRequirementTypeList() {
+                this.$http({
+                    url: "/market/sysConfig/queryList",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: {"type": "1"},
+                }).then((res) => {
+                    this.requirementTypeList = res.data;
+                });
+            },
+            getExportTypeList() {
+                this.$http({
+                    url: "/market/sysConfig/queryList",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: {"type": "2"},
+                }).then((res) => {
+                    this.exportTypeList = res.data;
+                });
+            },
+            clickLLength(e) {
+                if (e !== 0) {
+                    this.Length = true;
+                } else {
+                    this.Length = false;
+                }
+            },
+            clickSelect(e) {
+            },
+
+            uploadBack(v) {
+                if (v && v.fileName) {
+                    v.name = v.fileName;
+                }
+                if (this.form.mkFileShareAttachList) {
+                    this.form.mkFileShareAttachList = [];
+                    this.form.mkFileShareAttachList = v;
+                } else {
+                    let mkFileShareAttachList = [];
+                    mkFileShareAttachList = v;
+                    this.$set(this.form, "mkFileShareAttachList", mkFileShareAttachList);
+                }
+            },
+            downloadBack(v) {
+            },
+            delloadBack(v) {
+                this.form.mkFileShareAttachList = v;
+                this.$http({
+                    url: "/market/waf/update",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: this.form,
+                }).then((res) => {
+                });
+            },
+            downloadOne(e) {
+                let list = {
+                    id: e.fileCode,
+                    fileName: e.fileName,
+                };
+
+                this.$http({
+                    url: "/market/waf/downFile",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    responseType: "blob",
+                    data: list,
+                }).then((response) => {
+                    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                        let blob = new Blob([response.data], {
+                            type: "application/vnd.ms-excel",
+                        });
+                        //window.navigator.msSaveOrOpenBlob(blob, this.form.needName);
+                        window.navigator.msSaveOrOpenBlob(
+                            blob,
+                            list.fileName
+                        );
+                    } else {
+                        /* 火狐谷歌的文件下载方式 */
+                        var blob = new Blob([response.data]);
+                        var downloadElement = document.createElement("a");
+                        var href = window.URL.createObjectURL(blob);
+                        downloadElement.href = href;
+                        downloadElement.download =
+                            list.fileName;
+                        document.body.appendChild(downloadElement);
+                        downloadElement.click();
+                        document.body.removeChild(downloadElement);
+                        window.URL.revokeObjectURL(href);
+                    }
+                });
+            },
+            download() {
+                if (this.form.mkFileShareAttachList.length > 1) {
+                    this.$http({
+                        url: "/market/CMKFile/downAllFile",
+                        method: "post",
+                        headers: {
+                            "Content-Type": "application/json",
+                        },
+                        responseType: "blob",
+                        data: {mkFileShareAttachList: this.form.mkFileShareAttachList},
+                    }).then((response) => {
+                        if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                            let blob = new Blob([response.data], {
+                                type: "application/vnd.ms-excel",
+                            });
+                            window.navigator.msSaveOrOpenBlob(
+                                blob,
+                                new Date().getTime().toString() + ".zip"
+                            );
+                        } else {
+                            /* 火狐谷歌的文件下载方式 */
+                            var blob = new Blob([response.data]);
+                            var downloadElement = document.createElement("a");
+                            var href = window.URL.createObjectURL(blob);
+                            downloadElement.href = href;
+                            downloadElement.download = this.form.needName + ".zip";
+                            document.body.appendChild(downloadElement);
+                            downloadElement.click();
+                            document.body.removeChild(downloadElement);
+                            window.URL.revokeObjectURL(href);
+                        }
+                        if (this.infolist.authType === "3") {
+                            this.dialogCli(10);
+                        }
+                    });
+                } else {
+                    let list = {
+                        id: this.form.mkFileShareAttachList[0].fileCode,
+                        fileName: this.form.mkFileShareAttachList[0].fileName,
+                    };
+                    this.$http({
+                        url: "/market/waf/downFile",
+                        method: "post",
+                        headers: {
+                            "Content-Type": "application/json",
+                        },
+                        responseType: "blob",
+                        data: list,
+                    }).then((response) => {
+                        if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                            let blob = new Blob([response.data], {
+                                type: "application/vnd.ms-excel",
+                            });
+                            //window.navigator.msSaveOrOpenBlob(blob, this.form.needName);
+                            window.navigator.msSaveOrOpenBlob(
+                                blob,
+                                this.form.mkFileShareAttachList[0].fileName
+                            );
+                        } else {
+                            /* 火狐谷歌的文件下载方式 */
+                            var blob = new Blob([response.data]);
+                            var downloadElement = document.createElement("a");
+                            var href = window.URL.createObjectURL(blob);
+                            downloadElement.href = href;
+                            downloadElement.download =
+                                this.form.mkFileShareAttachList[0].fileName;
+                            document.body.appendChild(downloadElement);
+                            downloadElement.click();
+                            document.body.removeChild(downloadElement);
+                            window.URL.revokeObjectURL(href);
+                        }
+                    });
+                }
+            },
+            //上传文件钩子函数
+            clickUpload(file) {
+            },
+            //下载文件
+            downExcel() {
+                this.$http({
+                    url: "/market/scsjdcProProcess/downloadTemp",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    responseType: "blob",
+                    data: {},
+                }).then((response) => {
+                    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                        let blob = new Blob([response.data], {
+                            type: "application/vnd.ms-excel",
+                        });
+                        window.navigator.msSaveOrOpenBlob(blob, "生产数据导出申请表.doc");
+                    } else {
+                        /* 火狐谷歌的文件下载方式 */
+                        var blob = new Blob([response.data]);
+                        var downloadElement = document.createElement("a");
+                        var href = window.URL.createObjectURL(blob);
+                        downloadElement.href = href;
+                        downloadElement.download = "生产数据导出申请表.doc";
+                        document.body.appendChild(downloadElement);
+                        downloadElement.click();
+                        document.body.removeChild(downloadElement);
+                        window.URL.revokeObjectURL(href);
+                    }
+                });
+            },
+            changeSelect(e) {
+            },
+        },
+    };
+</script>
+
+<style lang="scss" scoped>
+    ::v-deep .el-upload-list {
+        width: 23rem;
+    }
+
+    .flex-title {
+        text-align: center;
+        font-size: 24px;
+        line-height: 60px;
+        border-bottom: 1px solid #e1e1e1;
+        font-weight: bold;
+    }
+
+    .flex-header {
+        margin-top: 20px;
+        display: flex;
+        //   justify-content: space-between;
+        border-bottom: 1px solid #e1e1e1;
+
+        ::v-deep .el-form-item {
+            width: 25%;
+            margin-right: 5%;
+        }
+    }
+
+    .flex-input-tare {
+        ::v-deep .el-form-item {
+            width: 100%;
+            margin-right: 5%;
+        }
+    }
+
+    .el-upload__tip {
+        color: red;
+    }
+
+    ::v-deep .el-input--suffix .el-input__inner {
+        width: 119% !important;
+    }
+
+    ::v-deep .el-input__inner {
+        color: black !important;
+    }
+
+    ::v-deep .el-textarea.is-disabled .el-textarea__inner {
+        color: black !important;
+    }
+</style>

Файловите разлики са ограничени, защото са твърде много
+ 1347 - 0
src/pages/main/productionDataExport/provinceHome.vue


Файловите разлики са ограничени, защото са твърде много
+ 1557 - 0
src/pages/main/provincialWorkOrder/provincialWorkOrder.vue


Файловите разлики са ограничени, защото са твърде много
+ 1325 - 0
src/pages/main/provincialWorkOrder/provincialWorkOrderArea.vue


Файловите разлики са ограничени, защото са твърде много
+ 742 - 641
src/pages/main/terminal/advertincrease.vue


+ 20 - 12
src/pages/main/terminals/advchecks.vue

@@ -45,8 +45,14 @@
       <el-dialog title="广告管理" v-if="dialogStatus" :visible.sync="dialogStatus" width="80%" :destroy-on-close="true"
         :modal-append-to-body="false" :close-on-click-modal="false">
         <div>
-          <advert v-if="typestatsu === 2" @closeEdio="closeEdio" :componentInfo="componentInfo"
-            :componentStatus="componentStatus" :changeinfo="changeinfo" :saveStatus="saveStatus"></advert>
+          <advert
+            v-if="typestatsu === 2"
+            @closeEdio="closeEdio"
+            :draftStatus="draftStatus"
+            :componentInfo="componentInfo"
+            :componentStatus="componentStatus"
+            :changeinfo="changeinfo"
+          ></advert>
         </div>
       </el-dialog>
 
@@ -88,7 +94,8 @@ export default {
   },
   data() {
     return {
-      clickStatus: '',
+      draftStatus:true,
+      clickStatus:"",
       tooltit: "广告管理",
       auditStatus: false,
       fullscreen: false,
@@ -397,27 +404,27 @@ export default {
     },
     // 分页
     currchange(v) {
+      console.log(123);
+      console.log(v);
       this.pageSize = v;
-      this.getList(this.advstatus);
+      console.log(this.clickStatus);
+      this.getList(this.clickStatus);
     },
     advchange(e) {
-      this.pageSize = 1
       this.total = 0
-      this.getList(e);
-
+      this.pageSize = 1
+      this.clickStatus = e
+      this.getList(this.clickStatus);
     },
     //处理申请
     dialogCheck(n, v) {
 
       if (v == 1) {
-        console.log(n);
         this.changeinfo = false;
         this.saveStatus = false
       } else {
-        if (n.taskName == '起草') {
-          this.saveStatus = true;
-        }else{
-          this.saveStatus = false
+        if(n.taskName == "科室经理审批"){
+          this.draftStatus = false;
         }
         this.changeinfo = true;
       }
@@ -496,6 +503,7 @@ export default {
       this.getList(this.params, this.pageSize);
       this.typestatsu = 1;
       this.dialogStatus = false;
+      this.draftStatus = true;
       this.componentStatus = false;
     },
     gettype() {

+ 6 - 3
src/pages/main/terminals/advertincreases.vue

@@ -207,6 +207,7 @@
               <p>
                 {{ treeListonly.leaderAuditName }}
                 <i
+
                   v-if="treeListonly.leaderAuditName"
                   @click="deletes()"
                   class="el-icon-error"
@@ -425,11 +426,12 @@ export default {
         fileList: [],
       },
       checkList: [],
+      rest:'',//自有渠道其他
       spreadchannelzList: [],
       checkList1: "",
       checkList2: [],
       spreadchannelwList: [],
-      checkList3: "",
+      other: "",
       checkexa: false,
       treeListonly: {},
       defaultList: [],
@@ -446,8 +448,8 @@ export default {
         processDefinitionKey: "ggsj_process",
       },
       requestForm: {
-          fresourceId: "99e7da22-5f04-11ed-b399-e00084564cce", //线上环境
-        // fresourceId: "e817fc35-5a51-11ed-8912-00505687dcd3", //测试环境
+          // fresourceId: "99e7da22-5f04-11ed-b399-e00084564cce", //线上环境
+        fresourceId: "e817fc35-5a51-11ed-8912-00505687dcd3", //测试环境
         // fresourceId: "3c9baf21-3e43-11ed-ad6b-d6cd97160e00",//本地环境
         processDefinitionKey: "ggsj_process",
       },
@@ -521,6 +523,7 @@ export default {
       }).then((res) => {
         this.request_form.businessKey = res.data.body;
         this.clickHandle(res.data.body);
+        this.$message.success('保存成功')
       });
     },
     async clickHandle(e) {

+ 120 - 31
src/pages/main/terminals/components/adverts.vue

@@ -5,17 +5,29 @@
         <div class="info-line">
           <el-form-item prop="need_name">
             <span>申请标题</span>
-            <el-input :disabled="!saveStatus" v-model="infoApply.need_name" placeholder="申请标题"></el-input>
+            <el-input
+              :disabled="draftStatus"
+              v-model="infoApply.need_name"
+              placeholder="申请标题"
+            ></el-input>
           </el-form-item>
           <el-form-item prop="applydept">
             <span>申请流程</span>
-            <el-input disabled v-model="applydept" placeholder="广告申请"></el-input>
+            <el-input
+              disabled
+              v-model="applydept"
+              placeholder="广告申请"
+            ></el-input>
           </el-form-item>
         </div>
         <div class="info-line">
           <el-form-item prop="applydept">
             <span>申请部门</span>
-            <el-input :disabled="!saveStatus" v-model="infoApply.applydept" placeholder="申请部门"></el-input>
+            <el-input
+              :disabled="draftStatus"
+              v-model="infoApply.applydept"
+              placeholder="申请部门"
+            ></el-input>
             <!-- <el-select disabled clearable v-model="infoApply.dept" placeholder="申请部门">
                             <el-option v-for="items in terminalopt" :key="items.id" :label="items.ou" :value="items.id">
                             </el-option>
@@ -29,12 +41,21 @@
         <div class="info-line">
           <el-form-item>
             <span>申请时间</span>
-            <el-date-picker disabled v-model="infoApply.time" type="date" placeholder="申请时间">
+            <el-date-picker
+              disabled
+              v-model="infoApply.proposer_time"
+              type="date"
+              placeholder="申请时间"
+            >
             </el-date-picker>
           </el-form-item>
           <el-form-item prop="tel">
             <span>联系电话</span>
-            <el-input :disabled="!saveStatus" v-model="infoApply.tel" placeholder="联系电话"></el-input>
+            <el-input
+              :disabled="draftStatus"
+              v-model="infoApply.tel"
+              placeholder="联系电话"
+            ></el-input>
           </el-form-item>
         </div>
         <div class="info-line">
@@ -45,8 +66,13 @@
           </el-form-item>
           <el-form-item>
             <span>完成时间</span>
-            <el-date-picker :disabled="!saveStatus" v-model="infoApply.donetime" type="date" placeholder="完成时间"
-              :pickerOptions="pickerOptions">
+            <el-date-picker
+              v-model="infoApply.donetime"
+              type="date"
+              :disabled="draftStatus"
+              placeholder="完成时间"
+              :pickerOptions="pickerOptions"
+            >
             </el-date-picker>
           </el-form-item>
         </div>
@@ -54,16 +80,35 @@
         <div class="info-line">
           <el-form-item>
             <span>紧急程度</span>
-            <el-select :disabled="!saveStatus" clearable v-model="infoApply.importance" placeholder="紧急程度">
-              <el-option v-for="items in fireopt" :key="items.dataCode" :label="items.dataName" :value="items.dataCode">
+            <el-select
+              clearable
+              :disabled="draftStatus"
+              v-model="infoApply.importance"
+              placeholder="紧急程度"
+            >
+              <el-option
+                v-for="items in fireopt"
+                :key="items.dataCode"
+                :label="items.dataName"
+                :value="items.dataCode"
+              >
               </el-option>
             </el-select>
           </el-form-item>
           <el-form-item>
             <span>素材类型</span>
-            <el-select :disabled="!saveStatus" clearable v-model="infoApply.sourcetype" placeholder="素材类型">
-              <el-option v-for="items in materTypeopt" :key="items.dataCode" :label="items.dataName"
-                :value="items.dataCode">
+            <el-select
+              clearable
+              :disabled="draftStatus"
+              v-model="infoApply.sourcetype"
+              placeholder="素材类型"
+            >
+              <el-option
+                v-for="items in materTypeopt"
+                :key="items.dataCode"
+                :label="items.dataName"
+                :value="items.dataCode"
+              >
               </el-option>
             </el-select>
           </el-form-item>
@@ -84,16 +129,31 @@
 
         <el-form-item class="info-line online">
           <span>宣传内容</span>
-          <el-input :disabled="!saveStatus" v-model="infoApply.sellingpoint" placeholder="广告宣传内容" type="textarea"
-            :rows="3"></el-input>
+          <el-input
+            v-model="infoApply.sellingpoint"
+            :disabled="draftStatus"
+            placeholder="广告宣传内容"
+            type="textarea"
+            :rows="3"
+          ></el-input>
         </el-form-item>
         <el-form-item class="info-line online">
           <span>其他说明</span>
-          <el-input :disabled="!saveStatus" v-model="infoApply.procontent" placeholder="设计稿内容描述" type="textarea"
-            :rows="3"></el-input>
+          <el-input
+            v-model="infoApply.procontent"
+            :disabled="draftStatus"
+            placeholder="设计稿内容描述"
+            type="textarea"
+            :rows="3"
+          ></el-input>
         </el-form-item>
         <div style="padding: 0 20px 0 100px; margin-bottom: 20px">
-          <uploadDown ref="myupload" :datalist="datalist" :dialogStatus="uploadstatus"></uploadDown>
+          <uploadDown
+            v-if="uploadDownStatus"
+            ref="myupload"
+            :datalist="datalist"
+            :dialogStatus="uploadstatus"
+          ></uploadDown>
         </div>
         <div style="padding: 0 20px 0 100px; margin-bottom: 20px" v-if="uploadsts">
           <myUpload @uploadBack="uploadBack" :fileInfo="fileInfo" :fileList="fileInfo.fileList">
@@ -146,8 +206,12 @@
       <Workflow :list="infoApply" :requestForm="requestForm" @updateForm="updateForm" />
     </el-dialog>
     <div slot="footer" class="dialog-footer">
-      <el-button v-if="changeinfo" type="primary" @click="dialogCli(2)">处 理</el-button>
-      <el-button v-if="saveStatus" type="primary" @click="dialogCli(4)">保 存</el-button>
+      <el-button v-if="changeinfo" type="primary" @click="dialogCli(2)"
+        >处 理</el-button
+      >
+      <el-button v-if="!draftStatus" type="primary" @click="dialogClis()"
+        >保 存</el-button
+      >
       <!-- <el-button v-if="changeinfo" type="primary" @click="dialogCli(1)"
         >驳 回</el-button
       > -->
@@ -162,7 +226,7 @@ import Workflow from "../../../../components/workflowBase";
 import uploadDown from "../../../../components/uploadDown.vue";
 import myUpload from "../../../../components/upload.vue";
 export default {
-  props: ["componentInfo", "componentStatus", "changeinfo", "saveStatus"],
+  props: ["componentInfo", "componentStatus", "changeinfo", "draftStatus"],
   components: {
     uploadDown,
     myUpload,
@@ -170,10 +234,12 @@ export default {
   },
   data() {
     return {
-      applydept: '广告申请',
+      applydept:'广告申请',
+      // draftStatus:'',//起草状态更改表单状态
+      uploadDownStatus: false,
       requestForm: {
-        fresourceId: "99e7da22-5f04-11ed-b399-e00084564cce", //线上环境
-        // fresourceId: "e817fc35-5a51-11ed-8912-00505687dcd3", //测试环境
+        // fresourceId: "99e7da22-5f04-11ed-b399-e00084564cce", //线上环境
+        fresourceId: "e817fc35-5a51-11ed-8912-00505687dcd3", //测试环境
         // fresourceId: "3c9baf21-3e43-11ed-ad6b-d6cd97160e00", //本地环境
         processDefinitionKey: "ggsj_process",
       },
@@ -402,6 +468,18 @@ export default {
       return list;
     },
     //添加
+    dialogClis() {
+      this.$http({
+        url: "/market/ggsj/update",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json",
+        },
+        data: this.infoApply,
+      }).then((res) => {
+        console.log(res);
+      });
+    },
     dialogCli(v) {
       if(v ==2 ){
         this.checkexa = true;
@@ -470,8 +548,8 @@ export default {
           list.mkFileShareAttachList = this.attList;
           if (this.mkFileShareAttachList) {
             this.mkFileShareAttachList.map((item) => {
-              list.mkFileShareAttachList.push(item)
-            })
+              list.mkFileShareAttachList.push(item);
+            });
           }
           this.$http({
             url: "/market/ggsj/update",
@@ -687,18 +765,15 @@ export default {
         console.log(res);
         this.mkFileShareAttachList = res.data.mkFileShareAttachList;
         if (res.data.paramVal) {
-
         }
-        console.log(
-          (this.$refs.myupload.infolist = res.data.mkFileShareAttachList)
-        );
-        // this.datalist.attList = res.data.mkFileShareAttachList;
+        this.datalist.attList = res.data.mkFileShareAttachList;
+        this.uploadDownStatus = true;
       });
     },
     handleClose() {
       console.log(123);
       this.checkexa = false;
-    }
+    },
   },
   computed: {
     pickerOptions: function () {
@@ -730,6 +805,20 @@ export default {
       }
     },
   },
+  computed: {
+    pickerOptions: function () {
+      return {
+        disabledDate(time) {
+          // if(time.getTime() < Date.now() - 8.64e7 || (time.getTime() > Date.now() && time.getTime() < Date.now() + 8.64e7*3) ){
+          //     return true
+          // }
+          if (time.getTime() < Date.now() + 8.64e7 * 3) {
+            return true;
+          }
+        },
+      };
+    },
+  },
 };
 </script>
 

Файловите разлики са ограничени, защото са твърде много
+ 1630 - 0
src/pages/main/workingCon/configUration.vue


+ 107 - 1
src/router/index.js

@@ -208,12 +208,39 @@ const routes = [{
             component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/organizaStructure/roleManage.vue'], resolve)
         },
         {
+            meta: { name:  '收补预存款', keepAlive: false },
+            path: '/closeFill',
+            name: 'closeFill',
+            component: (resolve) => require( /* webpackChunkName: "system" */
+                ['../pages/main/closeFill/advanceDeposit.vue'], resolve)
+        },
+        {
+            meta: { name:  '工号配置', keepAlive: false },
+            path: '/workingCon',
+            name: 'workingCon',
+            component: (resolve) => require( /* webpackChunkName: "system" */
+                ['../pages/main/workingCon/configUration.vue'], resolve)
+        },
+        {
             meta: { name: '组织架构管理', keepAlive: false },
             path: '/organization',
             name: 'organization',
             component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/organizaStructure/organization.vue'], resolve)
         },
         {
+            meta: { name: '验收打分单', keepAlive: false },
+            path: '/materialAppNum',
+            name: 'materialAppNum',
+            component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/advertising/materialAppNum.vue'], resolve)
+        },
+        {
+            meta: { name: '宣传物料制作费用明细', keepAlive: false },
+            path: '/materialAppMessage',
+            name: 'materialAppMessage',
+            component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/advertising/materialAppMessage.vue'], resolve)
+        },
+
+        {
             meta: { name: '人员信息', keepAlive: false },
             path: '/personinfo',
             name: 'personinfo',
@@ -600,6 +627,12 @@ const routes = [{
             component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/advertising/materialApplication.vue'], resolve)
         },
         {
+            meta: { name: '宣传物料管理地市', keepAlive: false },
+            path: '/materialApplicationds',
+            name: 'materialApplicationds',
+            component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/advertising/materialApplicationds.vue'], resolve)
+        },
+        {
             meta: { name: '宣传物料管理', keepAlive: false },//地市
             path: '/materialApplicationc',
             name: 'materialApplicationc',
@@ -2115,7 +2148,22 @@ const routes = [{
             },
             path: '/editOnline',
             name: 'editOnline',
-            component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/onlineExcel/index'], resolve)
+            component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/onlineExcel/index'], resolve),
+            meta: {title: '运行流程'}
+        },
+        {
+            meta: {name: '', keepAlive: false},
+            path: '/productionDataExport/cityHome',
+            name: 'cityHome',
+            component: (resolve) => require( /* webpackChunkName: "system" */
+                ['../pages/main/productionDataExport/cityHome.vue'], resolve)
+        },
+        {
+            meta: {name: '', keepAlive: false},
+            path: '/productionDataExport/provinceHome',
+            name: 'provinceHome',
+            component: (resolve) => require( /* webpackChunkName: "system" */
+                ['../pages/main/productionDataExport/provinceHome.vue'], resolve)
         },
         {
             meta: {
@@ -2175,6 +2223,64 @@ const routes = [{
             component: (resolve) => require( /* webpackChunkName: "system" */
                 ['../pages/main/leader/risk/riskManagement.vue'], resolve)
         },
+        {
+            meta: { name: '资费管理', keepAlive: false },
+            path: '/postage',
+            name: 'postage',
+            component: (resolve) => require( /* webpackChunkName: "system" */
+                ['../pages/main/postage/index.vue'], resolve)
+        },
+        {
+            meta: { name: '新文件收集与审批', keepAlive: false },
+            path: '/documentCollectionApprovalHome',
+            name: 'documentCollectionApprovalHome',
+            redirect: 'documentCollectionApproval',
+            component: (resolve) => require( /* webpackChunkName: "system" */
+                ['../pages/main/documentCollection/home.vue'], resolve),
+            children: [
+                {
+                    meta: { name: '文件收集与审批我接收的', keepAlive: false },
+                    path: '/documentCollectionApproval',
+                    name: 'documentCollectionApproval',
+                    component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/documentCollection/documentCollectionApproval'], resolve)
+                },
+                {
+                    meta: { name: '收入信息收集', keepAlive: false },
+                    path: '/documentCollectionApprovalIssuedMoud',
+                    name: 'documentCollectionApprovalIssuedMoud',
+                    component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/documentCollection/documentCollectionApprovalIssuedMoud'], resolve)
+                }, {
+                    meta: { name: '文件收集与审批我发起的', keepAlive: false },
+                    path: '/documentCollectionApprovalIssuedCollect',
+                    name: 'documentCollectionApprovalIssuedCollect',
+                    component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/documentCollection/documentCollectionApprovalIssuedCollect'], resolve)
+                },
+               
+            ]
+        },
+        {
+            meta: {
+                name: '模板详情',
+                keepAlive: false
+            },
+            path: '/documentCollectionApprovalExcel',
+            name: 'documentCollectionApprovalExcel',
+            component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/documentCollection/documentCollectionApprovalExcel'], resolve)
+        },
+        {
+            path: '/provincialWorkOrder',
+            name: 'provincialWorkOrder',
+            component: resolve => require(['../pages/main/provincialWorkOrder/provincialWorkOrder.vue'], resolve),
+            meta: { title: '省-通用工单' }
+        },
+        {
+            path: '/provincialWorkOrderArea',
+            name: 'provincialWorkOrderArea',
+            component: resolve => require(['../pages/main/provincialWorkOrder/provincialWorkOrderArea.vue'], resolve),
+            meta: { title: '地市-通用工单' }
+        }
+
+
     ]
 },
 {

+ 14 - 1
vue.config.js

@@ -86,6 +86,7 @@ module.exports = {
             //     new WebpackLifeCyclePlugin(),
             //     // new BundleAnalyzerPlugin()
             // ]
+
         }
     },
     parallel: true,
@@ -125,6 +126,14 @@ module.exports = {
                     "^/market": "",
                 },
             },
+            "/api": {
+                target: "http://43.138.50.94:7777",
+                ws: false,
+                changeOrigin: true,
+                pathRewrite: {
+                    "^/api": "",
+                },
+            },
             // 开发环境变化可注释 ⬆️⬆️
             "/": {
                 // target: 'http://192.168.2.145:9600/spfm',
@@ -134,10 +143,14 @@ module.exports = {
                 // target: 'http://192.168.1.9:9600/spfm',
                 // target: 'http://127.0.0.1:9600/',
                 // target: 'http://192.168.0.156:9600/',
-                // target: 'http://192.168.2.44:9600/',
+                // target: 'http://192.168.2.92:9600/',
                 // target: 'http://192.168.2.124:9600/',
                 // target: "http://124.223.66.248:9600",
                 target: "http://43.138.50.94:9600",
+                // target: 'http://192.168.2.44:9600/',
+                // target: 'http://192.168.2.92:9600',
+                // target: "http://124.223.66.248:9600",
+                // target: "http://43.138.50.94:9600",
                 changeOrigin: true,
             },
         },

+ 1 - 1
yarn.lock

@@ -3179,7 +3179,7 @@ console-browserify@^1.1.0:
 
 console@^0.7.2:
   version "0.7.2"
-  resolved "https://registry.yarnpkg.com/console/-/console-0.7.2.tgz#f9a4331249291591b7bf9bffa8e205356f20a9f0"
+  resolved "https://registry.npmmirror.com/console/-/console-0.7.2.tgz#f9a4331249291591b7bf9bffa8e205356f20a9f0"
   integrity sha512-+JSDwGunA4MTEgAV/4VBKwUHonP8CzJ/6GIuwPi6acKFqFfHUdSGCm89ZxZ5FfGWdZfkdgAroy5bJ5FSeN/t4g==
 
 consolidate@^0.15.1: