347617796@qq.com 4 年之前
父節點
當前提交
1e24b12b05

+ 126 - 0
package-lock.json

@@ -2031,6 +2031,15 @@
       "integrity": "sha1-vxEWycdYxRt6kz0pa3LCIe2UKLY=",
       "dev": true
     },
+    "adler-32": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz",
+      "integrity": "sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=",
+      "requires": {
+        "exit-on-epipe": "~1.0.1",
+        "printj": "~1.1.0"
+      }
+    },
     "aggregate-error": {
       "version": "3.1.0",
       "resolved": "https://registry.npm.taobao.org/aggregate-error/download/aggregate-error-3.1.0.tgz",
@@ -2961,6 +2970,16 @@
       "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
       "dev": true
     },
+    "cfb": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.0.tgz",
+      "integrity": "sha512-sXMvHsKCICVR3Naq+J556K+ExBo9n50iKl6LGarlnvuA2035uMlGA/qVrc0wQtow5P1vJEw9UyrKLCbtIKz+TQ==",
+      "requires": {
+        "adler-32": "~1.2.0",
+        "crc-32": "~1.2.0",
+        "printj": "~1.1.2"
+      }
+    },
     "chalk": {
       "version": "2.4.2",
       "resolved": "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1618995367379&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz",
@@ -3293,6 +3312,22 @@
         "q": "^1.1.2"
       }
     },
+    "codepage": {
+      "version": "1.14.0",
+      "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz",
+      "integrity": "sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k=",
+      "requires": {
+        "commander": "~2.14.1",
+        "exit-on-epipe": "~1.0.1"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.14.1",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz",
+          "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw=="
+        }
+      }
+    },
     "collection-visit": {
       "version": "1.0.0",
       "resolved": "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz",
@@ -3908,6 +3943,15 @@
         }
       }
     },
+    "crc-32": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz",
+      "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==",
+      "requires": {
+        "exit-on-epipe": "~1.0.1",
+        "printj": "~1.1.0"
+      }
+    },
     "create-ecdh": {
       "version": "4.0.4",
       "resolved": "https://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.4.tgz",
@@ -5302,6 +5346,11 @@
         }
       }
     },
+    "exit-on-epipe": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
+      "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw=="
+    },
     "expand-brackets": {
       "version": "2.1.4",
       "resolved": "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz",
@@ -5574,6 +5623,11 @@
         "websocket-driver": ">=0.5.1"
       }
     },
+    "fflate": {
+      "version": "0.3.11",
+      "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.3.11.tgz",
+      "integrity": "sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A=="
+    },
     "figgy-pudding": {
       "version": "3.5.2",
       "resolved": "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.2.tgz",
@@ -5608,6 +5662,11 @@
         "schema-utils": "^2.5.0"
       }
     },
+    "file-saver": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
+      "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
+    },
     "file-uri-to-path": {
       "version": "1.0.0",
       "resolved": "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz",
@@ -5766,6 +5825,11 @@
       "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
       "dev": true
     },
+    "frac": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz",
+      "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
+    },
     "fragment-cache": {
       "version": "0.2.1",
       "resolved": "https://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz",
@@ -9236,6 +9300,11 @@
         "renderkid": "^2.0.4"
       }
     },
+    "printj": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
+      "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ=="
+    },
     "process": {
       "version": "0.11.10",
       "resolved": "https://registry.npm.taobao.org/process/download/process-0.11.10.tgz",
@@ -9436,6 +9505,12 @@
         "unpipe": "1.0.0"
       }
     },
+    "raw-loader": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz",
+      "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=",
+      "dev": true
+    },
     "read-pkg": {
       "version": "5.2.0",
       "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-5.2.0.tgz",
@@ -9837,6 +9912,15 @@
         "ajv-keywords": "^3.5.2"
       }
     },
+    "script-loader": {
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/script-loader/-/script-loader-0.7.2.tgz",
+      "integrity": "sha512-UMNLEvgOAQuzK8ji8qIscM3GIrRCWN6MmMXGD4SD5l6cSycgGsCo0tX5xRnfQcoghqct0tjHjcykgI1PyBE2aA==",
+      "dev": true,
+      "requires": {
+        "raw-loader": "~0.5.1"
+      }
+    },
     "select-hose": {
       "version": "2.0.0",
       "resolved": "https://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz",
@@ -10454,6 +10538,14 @@
       "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
       "dev": true
     },
+    "ssf": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz",
+      "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
+      "requires": {
+        "frac": "~1.1.2"
+      }
+    },
     "sshpk": {
       "version": "1.16.1",
       "resolved": "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz",
@@ -12608,6 +12700,16 @@
       "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
       "dev": true
     },
+    "wmf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz",
+      "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw=="
+    },
+    "word": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz",
+      "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA=="
+    },
     "word-wrap": {
       "version": "1.2.3",
       "resolved": "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz",
@@ -12684,6 +12786,30 @@
         "async-limiter": "~1.0.0"
       }
     },
+    "xlsx": {
+      "version": "0.17.0",
+      "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.17.0.tgz",
+      "integrity": "sha512-bZ36FSACiAyjoldey1+7it50PMlDp1pcAJrZKcVZHzKd8BC/z6TQ/QAN8onuqcepifqSznR6uKnjPhaGt6ig9A==",
+      "requires": {
+        "adler-32": "~1.2.0",
+        "cfb": "^1.1.4",
+        "codepage": "~1.14.0",
+        "commander": "~2.17.1",
+        "crc-32": "~1.2.0",
+        "exit-on-epipe": "~1.0.1",
+        "fflate": "^0.3.8",
+        "ssf": "~0.11.2",
+        "wmf": "~1.0.1",
+        "word": "~0.3.0"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.17.1",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+          "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
+        }
+      }
+    },
     "xtend": {
       "version": "4.0.2",
       "resolved": "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz",

+ 4 - 1
package.json

@@ -18,6 +18,7 @@
     "dingtalk-jsapi": "^2.13.20",
     "echarts": "^4.9.0",
     "element-ui": "^2.13.2",
+    "file-saver": "^2.0.5",
     "moment": "^2.29.0",
     "nprogress": "^0.2.0",
     "qrcodejs2": "0.0.2",
@@ -25,7 +26,8 @@
     "vue": "^2.6.11",
     "vue-json-excel": "^0.3.0",
     "vue-router": "^3.2.0",
-    "vuex": "^3.4.0"
+    "vuex": "^3.4.0",
+    "xlsx": "^0.17.0"
   },
   "devDependencies": {
     "@vue/cli-plugin-babel": "~4.4.0",
@@ -39,6 +41,7 @@
     "eslint-plugin-vue": "^6.2.2",
     "sass": "^1.26.5",
     "sass-loader": "^8.0.2",
+    "script-loader": "^0.7.2",
     "svg-sprite-loader": "^5.2.1",
     "vue-template-compiler": "^2.6.11",
     "webpack-bundle-analyzer": "^4.3.0"

+ 26 - 11
src/components/examinePopup.vue

@@ -161,6 +161,8 @@
 						}"
 						:show-all-levels="false"
 						ref="ruleItem"
+						filterable
+						clearable
 						@change="cascaderItemIdChange"
 						placeholder="请选择规则细则"
 					></el-cascader>
@@ -369,19 +371,32 @@ export default {
 			done();
 		},
 		cascaderItemIdChange(val) {
-			let datas = this.$refs['ruleItem'].getCheckedNodes()[0].data;
-			if (datas.range_type == 1) {
-				this.forbiddenInputNum = true;
-			} else {
+			if(val.length>0){
+				let datas = this.$refs['ruleItem'].getCheckedNodes()[0].data;
+				if (datas.range_type == 1) {
+					this.forbiddenInputNum = true;
+				} else {
+					this.forbiddenInputNum = false;
+				}
+				this.rangeType.rule_range_type = datas.range_type;
+				this.rangeType.rule_min_point = datas.min_point;
+				this.rangeType.rule_max_point = datas.max_point;
+				this.rangeType.rule_rangeType_pt_id = datas.pt_id;
+				this.rangeType.rule_rangeType_name = datas.name;
+				this.adoptForm.point = datas.min_point;
+				this.adoptForm.rule_id = datas.rule_id;
+			}else{
+				this.rangeType = {
+					rule_range_type: 0,
+					rule_min_point: 0,
+					rule_max_point: 0,
+					rule_rangeType_pt_id: 0,
+					rule_rangeType_name: ''
+				};
+				this.adoptForm.point = '';
 				this.forbiddenInputNum = false;
+				this.adoptForm.item_id = 0;
 			}
-			this.adoptForm.point = datas.min_point;
-			this.rangeType.rule_range_type = datas.range_type;
-			this.rangeType.rule_min_point = datas.min_point;
-			this.rangeType.rule_max_point = datas.max_point;
-			this.rangeType.rule_rangeType_pt_id = datas.pt_id;
-			this.rangeType.rule_rangeType_name = datas.name;
-			this.adoptForm.rule_id = datas.rule_id;
 		},
 		//审批撤销
 		revokeApproval() {

+ 3 - 3
src/main.js

@@ -23,9 +23,9 @@ Vue.component("downloadExcel", JsonExcel);
 import userImage from '@/components/UserImage'
 Vue.component('userImage', userImage)
 Vue.use(ElementUI);
-if (process.env.NODE_ENV === 'development') {
-  new VConsole()
-}
+// if (process.env.NODE_ENV === 'development') {
+//   new VConsole()
+// }
 
 Vue.prototype.$echarts = echarts
 Vue.prototype.$dd=dd;

+ 210 - 0
src/vendors/Blob.js

@@ -0,0 +1,210 @@
+/* eslint-disable */
+/* Blob.js*/
+
+/*global self, unescape */
+/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true,
+  plusplus: true */
+
+/*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */
+
+(function (view) {
+    "use strict";
+  
+    view.URL = view.URL || view.webkitURL;
+  
+    if (view.Blob && view.URL) {
+      try {
+        new Blob;
+        return;
+      } catch (e) {
+      }
+    }
+  
+    // Internally we use a BlobBuilder implementation to base Blob off of
+    // in order to support older browsers that only have BlobBuilder
+    var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || (function (view) {
+      var
+        get_class = function (object) {
+          return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1];
+        }
+        , FakeBlobBuilder = function BlobBuilder() {
+          this.data = [];
+        }
+        , FakeBlob = function Blob(data, type, encoding) {
+          this.data = data;
+          this.size = data.length;
+          this.type = type;
+          this.encoding = encoding;
+        }
+        , FBB_proto = FakeBlobBuilder.prototype
+        , FB_proto = FakeBlob.prototype
+        , FileReaderSync = view.FileReaderSync
+        , FileException = function (type) {
+          this.code = this[this.name = type];
+        }
+        , file_ex_codes = (
+          "NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR "
+          + "NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR"
+        ).split(" ")
+        , file_ex_code = file_ex_codes.length
+        , real_URL = view.URL || view.webkitURL || view
+        , real_create_object_URL = real_URL.createObjectURL
+        , real_revoke_object_URL = real_URL.revokeObjectURL
+        , URL = real_URL
+        , btoa = view.btoa
+        , atob = view.atob
+  
+        , ArrayBuffer = view.ArrayBuffer
+        , Uint8Array = view.Uint8Array
+  
+        , origin = /^[\w-]+:\/*\[?[\w\.:-]+\]?(?::[0-9]+)?/
+      ;
+      FakeBlob.fake = FB_proto.fake = true;
+      while (file_ex_code--) {
+        FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1;
+      }
+      // Polyfill URL
+      if (!real_URL.createObjectURL) {
+        URL = view.URL = function (uri) {
+          var
+            uri_info = document.createElementNS("http://www.w3.org/1999/xhtml", "a")
+            , uri_origin
+          ;
+          uri_info.href = uri;
+          if (!("origin" in uri_info)) {
+            if (uri_info.protocol.toLowerCase() === "data:") {
+              uri_info.origin = null;
+            } else {
+              uri_origin = uri.match(origin);
+              uri_info.origin = uri_origin && uri_origin[1];
+            }
+          }
+          return uri_info;
+        };
+      }
+      URL.createObjectURL = function (blob) {
+        var
+          type = blob.type
+          , data_URI_header
+        ;
+        if (type === null) {
+          type = "application/octet-stream";
+        }
+        if (blob instanceof FakeBlob) {
+          data_URI_header = "data:" + type;
+          if (blob.encoding === "base64") {
+            return data_URI_header + ";base64," + blob.data;
+          } else if (blob.encoding === "URI") {
+            return data_URI_header + "," + decodeURIComponent(blob.data);
+          }
+          if (btoa) {
+            return data_URI_header + ";base64," + btoa(blob.data);
+          } else {
+            return data_URI_header + "," + encodeURIComponent(blob.data);
+          }
+        } else if (real_create_object_URL) {
+          return real_create_object_URL.call(real_URL, blob);
+        }
+      };
+      URL.revokeObjectURL = function (object_URL) {
+        if (object_URL.substring(0, 5) !== "data:" && real_revoke_object_URL) {
+          real_revoke_object_URL.call(real_URL, object_URL);
+        }
+      };
+      FBB_proto.append = function (data/*, endings*/) {
+        var bb = this.data;
+        // decode data to a binary string
+        if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) {
+          var
+            str = ""
+            , buf = new Uint8Array(data)
+            , i = 0
+            , buf_len = buf.length
+          ;
+          for (; i < buf_len; i++) {
+            str += String.fromCharCode(buf[i]);
+          }
+          bb.push(str);
+        } else if (get_class(data) === "Blob" || get_class(data) === "File") {
+          if (FileReaderSync) {
+            var fr = new FileReaderSync;
+            bb.push(fr.readAsBinaryString(data));
+          } else {
+            // async FileReader won't work as BlobBuilder is sync
+            throw new FileException("NOT_READABLE_ERR");
+          }
+        } else if (data instanceof FakeBlob) {
+          if (data.encoding === "base64" && atob) {
+            bb.push(atob(data.data));
+          } else if (data.encoding === "URI") {
+            bb.push(decodeURIComponent(data.data));
+          } else if (data.encoding === "raw") {
+            bb.push(data.data);
+          }
+        } else {
+          if (typeof data !== "string") {
+            data += ""; // convert unsupported types to strings
+          }
+          // decode UTF-16 to binary string
+          bb.push(unescape(encodeURIComponent(data)));
+        }
+      };
+      FBB_proto.getBlob = function (type) {
+        if (!arguments.length) {
+          type = null;
+        }
+        return new FakeBlob(this.data.join(""), type, "raw");
+      };
+      FBB_proto.toString = function () {
+        return "[object BlobBuilder]";
+      };
+      FB_proto.slice = function (start, end, type) {
+        var args = arguments.length;
+        if (args < 3) {
+          type = null;
+        }
+        return new FakeBlob(
+          this.data.slice(start, args > 1 ? end : this.data.length)
+          , type
+          , this.encoding
+        );
+      };
+      FB_proto.toString = function () {
+        return "[object Blob]";
+      };
+      FB_proto.close = function () {
+        this.size = 0;
+        delete this.data;
+      };
+      return FakeBlobBuilder;
+    }(view));
+  
+    view.Blob = function (blobParts, options) {
+      var type = options ? (options.type || "") : "";
+      var builder = new BlobBuilder();
+      if (blobParts) {
+        for (var i = 0, len = blobParts.length; i < len; i++) {
+          if (Uint8Array && blobParts[i] instanceof Uint8Array) {
+            builder.append(blobParts[i].buffer);
+          }
+          else {
+            builder.append(blobParts[i]);
+          }
+        }
+      }
+      var blob = builder.getBlob(type);
+      if (!blob.slice && blob.webkitSlice) {
+        blob.slice = blob.webkitSlice;
+      }
+      return blob;
+    };
+  
+    var getPrototypeOf = Object.getPrototypeOf || function (object) {
+      return object.__proto__;
+    };
+    view.Blob.prototype = getPrototypeOf(new view.Blob());
+  }(
+    typeof self !== "undefined" && self
+    || typeof window !== "undefined" && window
+    || this
+  ));

+ 189 - 0
src/vendors/Export2Excel.js

@@ -0,0 +1,189 @@
+require('script-loader!file-saver');
+/* 这里的路径换成自己的 */
+require('@/vendors/Blob.js')
+require('script-loader!xlsx/dist/xlsx.core.min');
+
+function generateArray(table) {
+  var out = [];
+  var rows = table.querySelectorAll('tr');
+  var ranges = [];
+  for (var R = 0; R < rows.length; ++R) {
+    var outRow = [];
+    var row = rows[R];
+    var columns = row.querySelectorAll('td');
+    for (var C = 0; C < columns.length; ++C) {
+      var cell = columns[C];
+      var colspan = cell.getAttribute('colspan');
+      var rowspan = cell.getAttribute('rowspan');
+      var cellValue = cell.innerText;
+      if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue;
+
+      //Skip ranges
+      ranges.forEach(function (range) {
+        if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {
+          for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);
+        }
+      });
+
+      //Handle Row Span
+      if (rowspan || colspan) {
+        rowspan = rowspan || 1;
+        colspan = colspan || 1;
+        ranges.push({s: {r: R, c: outRow.length}, e: {r: R + rowspan - 1, c: outRow.length + colspan - 1}});
+      }
+      ;
+
+      //Handle Value
+      outRow.push(cellValue !== "" ? cellValue : null);
+
+      //Handle Colspan
+      if (colspan) for (var k = 0; k < colspan - 1; ++k) outRow.push(null);
+    }
+    out.push(outRow);
+  }
+  return [out, ranges];
+};
+
+function datenum(v, date1904) {
+  if (date1904) v += 1462;
+  var epoch = Date.parse(v);
+  return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
+}
+
+function sheet_from_array_of_arrays(data, opts) {
+  var ws = {};
+  var range = {s: {c: 10000000, r: 10000000}, e: {c: 0, r: 0}};
+  for (var R = 0; R != data.length; ++R) {
+    for (var C = 0; C != data[R].length; ++C) {
+      if (range.s.r > R) range.s.r = R;
+      if (range.s.c > C) range.s.c = C;
+      if (range.e.r < R) range.e.r = R;
+      if (range.e.c < C) range.e.c = C;
+      var cell = {v: data[R][C]};
+      if (cell.v == null) continue;
+      var cell_ref = XLSX.utils.encode_cell({c: C, r: R});
+
+      if (typeof cell.v === 'number') cell.t = 'n';
+      else if (typeof cell.v === 'boolean') cell.t = 'b';
+      else if (cell.v instanceof Date) {
+        cell.t = 'n';
+        cell.z = XLSX.SSF._table[14];
+        cell.v = datenum(cell.v);
+      }
+      else cell.t = 's';
+
+      ws[cell_ref] = cell;
+    }
+  }
+  if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
+  return ws;
+}
+
+function Workbook() {
+  if (!(this instanceof Workbook)) return new Workbook();
+  this.SheetNames = [];
+  this.Sheets = {};
+}
+
+function s2ab(s) {
+  var buf = new ArrayBuffer(s.length);
+  var view = new Uint8Array(buf);
+  for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
+  return buf;
+}
+
+export function export_table_to_excel(id) {
+  var theTable = document.getElementById(id);
+  console.log('a')
+  var oo = generateArray(theTable);
+  var ranges = oo[1];
+
+  /* original data */
+  var data = oo[0];
+  var ws_name = "SheetJS";
+  console.log(data);
+
+  var wb = new Workbook(), ws = sheet_from_array_of_arrays(data);
+
+  /* add ranges to worksheet */
+  // ws['!cols'] = ['apple', 'banan'];
+  ws['!merges'] = ranges;
+
+  /* add worksheet to workbook */
+  wb.SheetNames.push(ws_name);
+  wb.Sheets[ws_name] = ws;
+
+  var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'});
+
+  saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), "test.xlsx")
+}
+
+function formatJson(jsonData) {
+  console.log(jsonData)
+}
+
+export function export_json_to_excel(th, jsonData, defaultTitle) {
+
+  /* original data */
+
+  var data = jsonData;
+  data.unshift(th);
+  var ws_name = "SheetJS";
+
+  var wb = new Workbook(), ws = sheet_from_array_of_arrays(data);
+
+
+  /* add worksheet to workbook */
+  wb.SheetNames.push(ws_name);
+  wb.Sheets[ws_name] = ws;
+
+  var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'});
+  var title = defaultTitle || '列表'
+  saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), title + ".xlsx")
+}
+// export default{
+// 	export_json_to_excel(th, jsonData, defaultTitle) {
+	
+// 	  /* original data */
+	
+// 	  var data = jsonData;
+// 	  data.unshift(th);
+// 	  var ws_name = "SheetJS";
+	
+// 	  var wb = new Workbook(), ws = sheet_from_array_of_arrays(data);
+	
+	
+// 	  /* add worksheet to workbook */
+// 	  wb.SheetNames.push(ws_name);
+// 	  wb.Sheets[ws_name] = ws;
+	
+// 	  var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'});
+// 	  var title = defaultTitle || '列表'
+// 	  saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), title + ".xlsx")
+// 	},
+// 	export_table_to_excel(id) {
+// 	  var theTable = document.getElementById(id);
+// 	  console.log('a')
+// 	  var oo = generateArray(theTable);
+// 	  var ranges = oo[1];
+	
+// 	  /* original data */
+// 	  var data = oo[0];
+// 	  var ws_name = "SheetJS";
+// 	  console.log(data);
+	
+// 	  var wb = new Workbook(), ws = sheet_from_array_of_arrays(data);
+	
+// 	  /* add ranges to worksheet */
+// 	  // ws['!cols'] = ['apple', 'banan'];
+// 	  ws['!merges'] = ranges;
+	
+// 	  /* add worksheet to workbook */
+// 	  wb.SheetNames.push(ws_name);
+// 	  wb.Sheets[ws_name] = ws;
+	
+// 	  var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'});
+	
+// 	  saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), "test.xlsx")
+// 	}
+// }

+ 2 - 2
src/views/ranking/department_statistics.vue

@@ -87,11 +87,11 @@
                   ></div>
                   <span class="title1"
                     >暂无积分数据
-                    <!-- ,<span
+                    ,<span
 						@click="$router.push({ path: '/award_punish' })"
 						style="color:#409EFF;cursor:pointer;"
 						>去奖扣积分></span
-					> -->
+					>
                   </span>
                 </div>
                 <div v-show="!IntegralFormnone">

+ 4 - 5
src/views/ranking/dept_rank.vue

@@ -71,12 +71,11 @@
 						:props="props2"
 						ref="rule"
 						clearable
-						collapse-tags
 						placeholder="请选择规则分类"
 					></el-cascader>
 				</el-form-item>
 				<el-form-item label="积分分类">
-					<el-select class="date-picker-width" size="medium" v-model="formData.pt_id" clearable placeholder="请选择积分分类">
+					<el-select class="date-picker-width" size="medium" v-model="formData.pt_id" placeholder="请选择积分分类">
 						<el-option v-for="item in point_types" :key="item.name" :label="item.name" :value="item.id"></el-option>
 					</el-select>
 				</el-form-item>
@@ -270,7 +269,7 @@ export default {
 			sort: false,
 			time_types: [{ label: '月份', value: '1' }, { label: '年份', value: '2' }, { label: '季度', value: '3' }],
 			props: { value: 'id', label: 'name', children: 'child', multiple: true },
-			props2: { value: 'id', label: 'name', children: 'child'},
+			props2: { value: 'id', label: 'name', children: 'child', checkStrictly: true},
 			time_type: '月份',
 			export_from: {
 				year: '',
@@ -333,9 +332,9 @@ export default {
 			}
 			
 			if(val.length==1){
-				this.formData.rule_id=JSON.stringify(val)
+				this.formData.rule_id=(val).toString()
 			}else{
-				this.formData.rule_id=JSON.stringify([val[val.length-1]]);
+				this.formData.rule_id=(val[val.length-1]).toString()
 			}
 		}
 	},

+ 1 - 58
src/views/ranking/individual_statistics.vue

@@ -35,14 +35,6 @@
 						placeholder="选择月份排名"
 					></el-date-picker>
 				</el-col>
-				<!-- <el-col style="margin-left:20px;" :span="5">
-			<el-date-picker
-			v-model="formData.month"
-			type="month"
-			placeholder="请选择月份"
-			value-format="yyyy-MM"
-			></el-date-picker>
-		</el-col> -->
 			</el-row>
 
 			<el-col :span="24" style="min-width:1160px;margin-top:10px;">
@@ -74,50 +66,6 @@
 								</el-col>
 							</el-row>
 						</el-col>
-						<!-- <div>
-              <el-col
-                :span="8"
-                style="margin-top:34px;padding:0;border-right: 1px #cecccc solid;height:58px;"
-                v-loading="authorityManagerHeaderLoad"
-              >
-                <el-col
-                  :gutter="50"
-                  style="margin:0;padding:0;"
-                  class="quick_button_box"
-                >
-                  <div style="display:flex;justify-content: space-around;">
-                    <p style="text-align:center;cursor:pointer;margin: 0;"><b style="color:#26A2FF;font-size:27px;">{{authorityManagerHeaders.b? authorityManagerHeaders.b: "0"}}</b><br /><span style="color:#606266;font-size:14px;padding-top:8px;display: inline-block;">{{ yearhORmontStr }}度B分</span></p>
-                    <p style="text-align:center;cursor:pointer;margin: 0;"><b style="color:#26A2FF;font-size:27px;">{{ authorityManagerHeaders.a? authorityManagerHeaders.a: "0"}}</b><br /><span style="color:#606266;font-size:14px;padding-top:8px;display: inline-block;">{{ yearhORmontStr }}度A分</span></p>
-                  </div>
-                </el-col>
-              </el-col>
-              <el-col :span="8" style="margin:0;padding:0;">
-                <el-col
-                  :gutter="50"
-                  style="margin:0;padding:34px 0 0 0;"
-                  class="quick_button_box"
-                >
-                  <div
-                    style="display:flex;justify-content: space-around;"
-                    v-loading="authorityManagerHeaderLoad"
-                  >
-                    <p style="text-align:center;cursor:pointer;margin: 0;">
-                      <b style="color:#26A2FF;font-size:27px;">{{
-                        authorityManagerHeaders.performance
-                          ? authorityManagerHeaders.performance.review_point
-                          : "0"
-                      }}</b
-                      ><br /><span
-                        style="color:#606266;font-size:14px;padding-top:8px;display: inline-block;"
-                        >绩效分</span
-                      >
-                    </p>
-                    <p style="text-align:center;cursor:pointer;margin: 0;"><b style="color:#26A2FF;font-size:27px;">{{authorityManagerHeaders.performance? authorityManagerHeaders.performance.total_count + "/" +authorityManagerHeaders.performance.complete_count: "0/0"}}</b><br /><span style="color:#606266;font-size:14px;padding-top:8px;display: inline-block;">任务进度</span></p>
-                  </div>
-                </el-col>
-              </el-col>
-            </div> -->
-
 						<el-col :span="17" style="margin-top:34px;padding:0 0 10px 0;height:58px;" v-loading="authorityManagerHeaderLoad">
 							<el-col :gutter="50" style="margin:0;padding:0;" class="quick_button_box">
 								<div style="display:flex;justify-content: space-around;">
@@ -157,10 +105,7 @@
 								<div v-loading="IntegralFormChartLoad">
 									<div class="nopoint_box" style="height:307px;" v-show="IntegralFormnone">
 										<div class="noimg" style="width: 150px;height: 150px;margin-top:80px;"></div>
-										<span class="title1">
-											暂无积分数据,
-											<span @click="$router.push({ path: '/award_punish' })" style="color:#409EFF;cursor:pointer;">去奖扣积分></span>
-										</span>
+										<span class="title1">暂无积分数据</span>
 									</div>
 									<div v-show="!IntegralFormnone"><div ref="IntegralFormChart" :style="{ width: '100%', height: '350px' }"></div></div>
 								</div>
@@ -303,8 +248,6 @@
 			</el-col>
 		</el-row>
 
-		<!-- <el-col  style="display:flex;justify-content: space-between;"> -->
-		<!-- </el-col> -->
 	</div>
 </template>
 <script>

+ 0 - 1
src/views/ranking/integral_event.vue

@@ -216,7 +216,6 @@
 						:src="item"
 						:preview-src-list="ding_report.images"
 					></el-image>
-					<!-- 				  <img class="imgs" :src="imgs" v-for="(imgs,index) in ding_report.images" :key="index"/> -->
 				</div>
 			</div>
 		</el-dialog>

+ 5 - 0
src/views/set/framework.vue

@@ -215,6 +215,7 @@ export default {
 		  })
 		},
 		dept_id(val) {
+			 this.page = 1;
 			this.getEmployee();
 		},
 		status(){
@@ -270,6 +271,7 @@ export default {
 					.then(res => {
 						if (res) {
 							this.$message.success('已禁用');
+							this.page=1;
 							this.getEmployee();
 						}
 					})
@@ -328,6 +330,7 @@ export default {
 						this.$message.success({ message: '同步成功' });
 						this.dept_id = 0;
 						this.getInfo();
+						this.page=1;
 						this.getEmployee();
 					})
 					.finally(() => {
@@ -350,6 +353,7 @@ export default {
 					} else {
 						this.$message.success({ message: res.data.msg });
 					}
+					this.page=1;
 					this.getEmployee();
 				}
 			});
@@ -366,6 +370,7 @@ export default {
 				.then(res => {
 					if (res) {
 						this.$message.success({ message: '开启成功,可在"角色权限设置对应管理范围"' });
+						this.page=1;
 						this.getEmployee();
 					}
 				})

+ 56 - 23
src/views/set/initialPoint.vue

@@ -1,28 +1,32 @@
 <template>
 	<div v-loading="loading">
 		<workpoints :initia_arr="initia_arr" :initia_head="initia_head" @initia="initia" />
-		<!-- 	<download-excel
-	    :fields="exportDataStandard"
-	    :data="exportData"
-	    type="xlsx"
-	    :name="exportName"
-	    :header="exportHeader"
-	    :footer="exportFooter"
-	    :defaultValue="exportDefaultValue"
-	    :fetch="createExportData"
-	    :before-generate="startDownload"
-	    :before-finish="finishDownload"
-	    worksheet="导出信息"
-	>
-	  <el-button icon="el-icon-download">导出</el-button>
-	</download-excel> -->
+<!-- 		<download-excel
+			:fields="exportDataStandard"
+			:data="exportData"
+			type="xlsx"
+			:name="exportName"
+			:header="exportHeader"
+			:footer="exportFooter"
+			:defaultValue="exportDefaultValue"
+			:fetch="createExportData"
+			:before-generate="startDownload"
+			:before-finish="finishDownload"
+			:stringifyLongNum="true"
+			worksheet="导出信息"
+		>
+			<el-button icon="el-icon-download">导出</el-button>
+		</download-excel> -->
+		<el-button @click="exportExcel">导出Excel</el-button>
 	</div>
 </template>
 <script>
 import workpoints from '@/components/publics/workpoints';
+import {export_json_to_excel} from '@/vendors/Export2Excel'
 export default {
 	data() {
 		return {
+			
 			exportDataStandard: {
 				名称: 'name',
 				性别: 'sex',
@@ -34,11 +38,11 @@ export default {
 				}
 			},
 			exportData: [
-				{ name: '甲', sex: '女', phone: 15521103211 },
-				{ name: '乙', sex: '', phone: 15521103222 },
-				{ name: '丙', sex: '女', phone: 15521103233 },
+				{ name: '甲', sex: 123456, phone: 15521103211 },
+				{ name: '乙', sex: '00123', phone: 15521103222 },
+				{ name: '丙', sex: 123, phone: 15521103233 },
 				{ area: '北京市朝阳区' },
-				{ name: '丁', sex: '男', phone: 15521103233 },
+				{ name: '丁', sex: 123, phone: 15521103233 },
 				{ name: '丁', sex: '男', phone: 15521103233 }
 			],
 			exportName: '导出数据',
@@ -46,6 +50,10 @@ export default {
 			exportFooter: ['用户的信息页脚1', '用户的信息页脚2'],
 			exportDefaultValue: '这一行这一列没有数据',
 
+
+
+
+
 			loading: false,
 			initia_head: {
 				initial_suername: '初始分',
@@ -88,15 +96,40 @@ export default {
 		this.cheak_ax();
 	},
 	methods: {
+		exportExcel() {          
+		    const excelHeader = ['ICD10编码', '诊断名称'];
+		    const keys = ['temp_column1', 'temp_column2'];
+		    const _dataSource = this.dataTabel();
+		    const excelData = _dataSource.map(item => keys.map(i => item[i] || ''))
+			const excelName='规则表'
+		    export_json_to_excel(excelHeader, excelData, excelName)
+		
+		},
+		dataTabel(){
+		  return [
+		      {
+		        "temp_column_id": "100000202102251058271000000001",
+		        "temp_column1": "00C97",
+		        "temp_column2": "哎呀呀呀1111"
+		      },
+		      {
+		        "temp_column_id": "232423423",
+		        "temp_column1": "00C97",
+		        "temp_column2": "哎呀呀呀2222"
+		      }
+		  ]
+		},
+		
+		
 		createExportData() {
 			// 点击导出按钮之后,开始导出数据之前的执行函数,返回值为需要下载的数据
 			// TODO:构造需要下载的数据返回
 			return [
-				{ name: '甲', sex: '女', phone: 15521103211 },
-				{ name: '乙', sex: '男', phone: 15521103222 },
-				{ name: '丙', sex: '女', phone: 15521103233 },
+				{ name: '甲', sex: 123456, phone: 15521103211 },
+				{ name: '乙', sex: '00123', phone: 15521103222 },
+				{ name: '丙', sex: 123, phone: 15521103233 },
 				{ area: '北京市朝阳区' },
-				{ name: '丁', sex: '男', phone: 15521103233 },
+				{ name: '丁', sex: 123, phone: 15521103233 },
 				{ name: '丁', sex: '男', phone: 15521103233 }
 			];
 		},

+ 4 - 1
src/views/set/log.vue

@@ -40,7 +40,6 @@
 					<noData></noData>
 				</template>
 			</el-table>
-			
 		</div>
 		<el-dialog title="设置" :visible.sync="dialogVisible" top="25vh" width="520px" class="dialog">
 			<el-alert class="el-dialog__body" title="日志名称必须与钉钉日志模板名称一致,否则设置无效,不会产生积分" type="warning" :closable="false" show-icon></el-alert>
@@ -186,6 +185,10 @@ export default {
 			});
 		},
 		add(){
+			if(this.list.length==20){
+				this.$message.warning('日志模板最多有20个');
+				return false;
+			}
 			this.isAdd=true;
 			this.dialogVisible=true;
 		},