347617796@qq.com 4 gadi atpakaļ
vecāks
revīzija
0c40a5eeeb

+ 204 - 32
package-lock.json

@@ -1069,6 +1069,12 @@
       "integrity": "sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=",
       "dev": true
     },
+    "@polka/url": {
+      "version": "1.0.0-next.11",
+      "resolved": "https://registry.npm.taobao.org/@polka/url/download/@polka/url-1.0.0-next.11.tgz",
+      "integrity": "sha1-rrFvUGSaka952+NldLZtD55Nn3E=",
+      "dev": true
+    },
     "@soda/friendly-errors-webpack-plugin": {
       "version": "1.7.1",
       "resolved": "https://registry.npm.taobao.org/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.7.1.tgz",
@@ -1478,6 +1484,16 @@
             "path-exists": "^4.0.0"
           }
         },
+        "gzip-size": {
+          "version": "5.1.1",
+          "resolved": "https://registry.npm.taobao.org/gzip-size/download/gzip-size-5.1.1.tgz?cache=0&sync_timestamp=1605523115814&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgzip-size%2Fdownload%2Fgzip-size-5.1.1.tgz",
+          "integrity": "sha1-y5vuaS+HwGErIyhAqHOQTkwTUnQ=",
+          "dev": true,
+          "requires": {
+            "duplexer": "^0.1.1",
+            "pify": "^4.0.1"
+          }
+        },
         "locate-path": {
           "version": "5.0.0",
           "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz",
@@ -1558,6 +1574,27 @@
             "terser": "^4.6.12",
             "webpack-sources": "^1.4.3"
           }
+        },
+        "webpack-bundle-analyzer": {
+          "version": "3.9.0",
+          "resolved": "https://registry.npm.taobao.org/webpack-bundle-analyzer/download/webpack-bundle-analyzer-3.9.0.tgz?cache=0&sync_timestamp=1608133719952&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-bundle-analyzer%2Fdownload%2Fwebpack-bundle-analyzer-3.9.0.tgz",
+          "integrity": "sha1-9vlNsQj7V05BWtMT3kGicH0z7zw=",
+          "dev": true,
+          "requires": {
+            "acorn": "^7.1.1",
+            "acorn-walk": "^7.1.1",
+            "bfj": "^6.1.1",
+            "chalk": "^2.4.1",
+            "commander": "^2.18.0",
+            "ejs": "^2.6.1",
+            "express": "^4.16.3",
+            "filesize": "^3.6.1",
+            "gzip-size": "^5.0.0",
+            "lodash": "^4.17.19",
+            "mkdirp": "^0.5.1",
+            "opener": "^1.5.1",
+            "ws": "^6.0.0"
+          }
         }
       }
     },
@@ -3589,6 +3626,52 @@
         "sha.js": "^2.4.8"
       }
     },
+    "cross-env": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npm.taobao.org/cross-env/download/cross-env-7.0.3.tgz",
+      "integrity": "sha1-hlJkspZ33AFbqEGJGJZd0jL8VM8=",
+      "requires": {
+        "cross-spawn": "^7.0.1"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz",
+          "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=",
+          "requires": {
+            "path-key": "^3.1.0",
+            "shebang-command": "^2.0.0",
+            "which": "^2.0.1"
+          }
+        },
+        "path-key": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz",
+          "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U="
+        },
+        "shebang-command": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz",
+          "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=",
+          "requires": {
+            "shebang-regex": "^3.0.0"
+          }
+        },
+        "shebang-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz",
+          "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI="
+        },
+        "which": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz?cache=0&sync_timestamp=1574116720213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-2.0.2.tgz",
+          "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=",
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        }
+      }
+    },
     "cross-spawn": {
       "version": "6.0.5",
       "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz",
@@ -4299,9 +4382,9 @@
       "dev": true
     },
     "duplexer": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npm.taobao.org/duplexer/download/duplexer-0.1.1.tgz",
-      "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+      "version": "0.1.2",
+      "resolved": "https://registry.npm.taobao.org/duplexer/download/duplexer-0.1.2.tgz",
+      "integrity": "sha1-Or5DrvODX4rgd9E23c4PJ2sEAOY=",
       "dev": true
     },
     "duplexify": {
@@ -5453,13 +5536,12 @@
       "dev": true
     },
     "gzip-size": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npm.taobao.org/gzip-size/download/gzip-size-5.1.1.tgz",
-      "integrity": "sha1-y5vuaS+HwGErIyhAqHOQTkwTUnQ=",
+      "version": "6.0.0",
+      "resolved": "https://registry.npm.taobao.org/gzip-size/download/gzip-size-6.0.0.tgz?cache=0&sync_timestamp=1605523115814&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgzip-size%2Fdownload%2Fgzip-size-6.0.0.tgz",
+      "integrity": "sha1-BlNn/VDCOcBnHLy61b4+LusQ5GI=",
       "dev": true,
       "requires": {
-        "duplexer": "^0.1.1",
-        "pify": "^4.0.1"
+        "duplexer": "^0.1.2"
       }
     },
     "handle-thing": {
@@ -6442,8 +6524,7 @@
     "isexe": {
       "version": "2.0.0",
       "resolved": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz",
-      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
-      "dev": true
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
     },
     "isobject": {
       "version": "3.0.1",
@@ -7396,6 +7477,11 @@
         "path-key": "^2.0.0"
       }
     },
+    "nprogress": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npm.taobao.org/nprogress/download/nprogress-0.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnprogress%2Fdownload%2Fnprogress-0.2.0.tgz",
+      "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E="
+    },
     "nth-check": {
       "version": "1.0.2",
       "resolved": "https://registry.npm.taobao.org/nth-check/download/nth-check-1.0.2.tgz",
@@ -7583,9 +7669,9 @@
       }
     },
     "opener": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npm.taobao.org/opener/download/opener-1.5.1.tgz",
-      "integrity": "sha1-bS8Od/GgrwAyrKcWwsH7uOfoq+0=",
+      "version": "1.5.2",
+      "resolved": "https://registry.npm.taobao.org/opener/download/opener-1.5.2.tgz",
+      "integrity": "sha1-XTfh81B3udysQwE3InGv3rKhNZg=",
       "dev": true
     },
     "opn": {
@@ -9524,6 +9610,17 @@
         }
       }
     },
+    "sirv": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npm.taobao.org/sirv/download/sirv-1.0.10.tgz",
+      "integrity": "sha1-PlkfWpriUg9Q1YMPX6442X574ZQ=",
+      "dev": true,
+      "requires": {
+        "@polka/url": "^1.0.0-next.9",
+        "mime": "^2.3.1",
+        "totalist": "^1.0.0"
+      }
+    },
     "slash": {
       "version": "2.0.0",
       "resolved": "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz",
@@ -10610,6 +10707,12 @@
       "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=",
       "dev": true
     },
+    "totalist": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/totalist/download/totalist-1.1.0.tgz",
+      "integrity": "sha1-pNZaPlRlF3AePlw3pHpwrJf+Vt8=",
+      "dev": true
+    },
     "tough-cookie": {
       "version": "2.5.0",
       "resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz?cache=0&sync_timestamp=1584646121003&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftough-cookie%2Fdownload%2Ftough-cookie-2.5.0.tgz",
@@ -11334,30 +11437,99 @@
       }
     },
     "webpack-bundle-analyzer": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npm.taobao.org/webpack-bundle-analyzer/download/webpack-bundle-analyzer-3.8.0.tgz?cache=0&sync_timestamp=1589893683541&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-bundle-analyzer%2Fdownload%2Fwebpack-bundle-analyzer-3.8.0.tgz",
-      "integrity": "sha1-zms/kI2vBp/R9yZvaSy7O97ZuhY=",
+      "version": "4.3.0",
+      "resolved": "https://registry.npm.taobao.org/webpack-bundle-analyzer/download/webpack-bundle-analyzer-4.3.0.tgz?cache=0&sync_timestamp=1608133719952&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-bundle-analyzer%2Fdownload%2Fwebpack-bundle-analyzer-4.3.0.tgz",
+      "integrity": "sha1-LzwMqQQdXuR/pBhpPPVrSlGLV4s=",
       "dev": true,
       "requires": {
-        "acorn": "^7.1.1",
-        "acorn-walk": "^7.1.1",
-        "bfj": "^6.1.1",
-        "chalk": "^2.4.1",
-        "commander": "^2.18.0",
-        "ejs": "^2.6.1",
-        "express": "^4.16.3",
-        "filesize": "^3.6.1",
-        "gzip-size": "^5.0.0",
-        "lodash": "^4.17.15",
-        "mkdirp": "^0.5.1",
-        "opener": "^1.5.1",
-        "ws": "^6.0.0"
+        "acorn": "^8.0.4",
+        "acorn-walk": "^8.0.0",
+        "chalk": "^4.1.0",
+        "commander": "^6.2.0",
+        "gzip-size": "^6.0.0",
+        "lodash": "^4.17.20",
+        "opener": "^1.5.2",
+        "sirv": "^1.0.7",
+        "ws": "^7.3.1"
       },
       "dependencies": {
         "acorn": {
-          "version": "7.3.1",
-          "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.3.1.tgz?cache=0&sync_timestamp=1591869398104&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.3.1.tgz",
-          "integrity": "sha1-hQEHVNtTw/uvO56j4IOqXF0Uf/0=",
+          "version": "8.0.4",
+          "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-8.0.4.tgz?cache=0&sync_timestamp=1602534280466&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-8.0.4.tgz",
+          "integrity": "sha1-ejrkGRRmpphO7g/jQHpPOqnbg1Q=",
+          "dev": true
+        },
+        "acorn-walk": {
+          "version": "8.0.0",
+          "resolved": "https://registry.npm.taobao.org/acorn-walk/download/acorn-walk-8.0.0.tgz?cache=0&sync_timestamp=1597235812490&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-walk%2Fdownload%2Facorn-walk-8.0.0.tgz",
+          "integrity": "sha1-Vq5MD0NKRf/0oSXn6pX6nJj2ehY=",
+          "dev": true
+        },
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1606792371412&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-4.1.0.tgz?cache=0&sync_timestamp=1591687070184&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-4.1.0.tgz",
+          "integrity": "sha1-ThSHCmGNni7dl92DRf2dncMVZGo=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "commander": {
+          "version": "6.2.1",
+          "resolved": "https://registry.npm.taobao.org/commander/download/commander-6.2.1.tgz?cache=0&sync_timestamp=1607933281807&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-6.2.1.tgz",
+          "integrity": "sha1-B5LraC37wyWZm7K4T93duhEKxzw=",
+          "dev": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "lodash": {
+          "version": "4.17.20",
+          "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.20.tgz",
+          "integrity": "sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1608033349725&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "ws": {
+          "version": "7.4.2",
+          "resolved": "https://registry.npm.taobao.org/ws/download/ws-7.4.2.tgz?cache=0&sync_timestamp=1609271318119&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-7.4.2.tgz",
+          "integrity": "sha1-eCEABI5U6zb+mEM2OrHGhnKyYd0=",
           "dev": true
         }
       }

+ 6 - 2
package.json

@@ -7,15 +7,18 @@
     "build": "vue-cli-service build",
     "lint": "vue-cli-service lint",
     "devbuild": "vue-cli-service build --mode development",
-    "prebuild": "vue-cli-service build --mode production"
+    "prebuild": "vue-cli-service build --mode production",
+    "analyzer": "cross-env use_analyzer=true npm run serve"
   },
   "dependencies": {
     "axios": "^0.19.2",
     "core-js": "^3.6.5",
+    "cross-env": "^7.0.3",
     "dingtalk-jsapi": "^2.11.25",
     "echarts": "^4.9.0",
     "element-ui": "^2.13.2",
     "moment": "^2.29.0",
+    "nprogress": "^0.2.0",
     "vconsole": "^3.3.4",
     "vue": "^2.6.11",
     "vue-router": "^3.2.0",
@@ -33,6 +36,7 @@
     "sass": "^1.26.5",
     "sass-loader": "^8.0.2",
     "svg-sprite-loader": "^5.2.1",
-    "vue-template-compiler": "^2.6.11"
+    "vue-template-compiler": "^2.6.11",
+    "webpack-bundle-analyzer": "^4.3.0"
   }
 }

+ 12 - 1
src/api/axios.js

@@ -16,8 +16,10 @@ const service = axios.create({
 		return qs.stringify(data)
 	}]
 })
+var url='';
 service.interceptors.request.use(
 	config => {
+		url=config.url;
 		if (getToken()) {
 			config.headers['A-Token'] = getToken()
 			// config.headers['A-Token'] = ' eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvdGVzdC1kaW5nLmcxMDcuY29tXC9hcGlcL2RpbmdcL2xvZ2luIiwiaWF0IjoxNjA4NTM1Nzc1LCJleHAiOjE2MDkxMzU3NzUsIm5iZiI6MTYwODUzNTc3NSwianRpIjoidWd5NjNHYTNBY1Jid2JFOCIsInN1YiI6MTY3LCJwcnYiOiJjYTY0ODlkNTBmMjQwN2E2NzgzMGU4MDkwZDAxNDg4MzU2ODU5NjJiIiwicm9sZSI6ImVtcGxveWVlIn0.89yfeHMATS4YIhMn3JTUOc3zdX9W1Q_4pPmKHQB5HVY'
@@ -48,7 +50,16 @@ service.interceptors.response.use(
 			})
 			return Promise.reject(response.data.msg)
 		}else if(response.data.code === 2001){ //免登时用,2001为过期
-			return response;
+		console.log(url)
+			if(url=='/api/ding/login'){
+				return response;
+			}else{
+				Message({
+					message: response.data.msg,
+					type: 'error',
+				})
+				return Promise.reject(response.data.msg)
+			}
 		}else{
 			Message({
 				message: response.data.msg,

+ 7 - 4
src/components/EmployeeSelector.vue

@@ -23,7 +23,7 @@
 						<div class="flex-1"></div>
 						<el-checkbox v-if="isChecKedAll&&multi" v-model="checked" @change="checkedChange" :indeterminate="indeterminate">全选</el-checkbox>
 					</div>
-					<el-scrollbar wrap-class="column-wrapper scrollable-items-container" :native="false" style="height: 354px;" v-loading="table_loading">
+					<el-scrollbar wrap-class="column-wrapper scrollable-items-container" :style="{height: height}" :native="false" v-loading="table_loading">
 						<div class="choose_left">
 							<div class="persons_box" style="padding-top:4px;" v-if="list.length > 0">
 								<a class="employee_cell_a" href="javascript:void(0)" v-for="(item, index) in list" :key="index">
@@ -35,7 +35,8 @@
 									</div>
 								</a>
 							</div>
-							<div v-else class="fontColorF" style="text-align: center;margin-top: 50px;">暂无可选人员,请先在<span class="blue"> “设置-组织架构” </span>中为员工【开启积分管理】</div>
+							<div v-else class="fontColorF" style="text-align: center;margin-top: 50px;">暂无可选人员</div>
+							<!-- <div v-else class="fontColorF" style="text-align: center;margin-top: 50px;">暂无可选人员,请先在<span class="blue"> “设置-组织架构” </span>中为员工【开启积分管理】</div> -->
 						</div>
 					</el-scrollbar>
 				</el-col>
@@ -45,7 +46,7 @@
 						<div class="fontColorF flex-1" v-show="multi">已选择{{ employee_selected_list.length }}个员工</div>
 						<el-button type="type" @click="clear_data()">清空</el-button>
 					</div>
-					<el-scrollbar wrap-class="column-wrapper scrollable-items-container" :native="false" style="height: 400px;">
+					<el-scrollbar wrap-class="column-wrapper scrollable-items-container" :native="false" style="height: 390px;">
 						<div class="choose_right">
 							<div class="employee_cell flex-box flex-v-ce" v-for="(item, index) in dept_selected_list" :key="index">
 								<div class="employee_name">{{ item.dept_name }}</div>
@@ -140,6 +141,7 @@ export default {
   data() {
     let selected = JSON.parse(JSON.stringify(this.selected));
     let user_no_select = JSON.parse(JSON.stringify(this.user_no_select));
+	let height=this.can_select_dept? '310px':'350px'
     return {
       table_loading:false,
       employee_selected_list: selected.employee,
@@ -147,7 +149,8 @@ export default {
       employee_selected: [],
       dept_selected: [],
       com_height: '100%',
-
+		
+	  height:height,	
       list: [],//人员列表
 	  dept_name: '',//部门名称
 	  dept_id: 0,//部门ID

+ 15 - 51
src/components/bonusPointsPopup.vue

@@ -15,6 +15,7 @@
 							<EmployeeSelector
 								v-if="show_employee_selector"
 								ref="members"
+								:isCreatorSelect="true"
 								:employee_list="manage_scope"
 								:user_no_select="false"
 								:can_select_dept="false"
@@ -84,8 +85,8 @@
 							<div style="line-height: 24px;">{{ item.rule_item_details.name }}</div>
 						</el-form-item>
 						<el-form-item label="积分" :prop="'items.' + index + '.point'" :rules="[{ required: true, message: '请输入分值', trigger: 'blur' }]">
-							<el-input-number v-if="item.rule_item_details.range_type == 2" :min="item.min" :max="item.max" v-model="item.point" type="number"></el-input-number>
-							<el-input-number v-else :disabled="item.rule_item_details.range_type == 1" v-model="item.point" type="number"></el-input-number>
+							<el-input-number v-if="item.rule_item_details.range_type == 2" :min="item.min" :max="item.max" v-model.number="item.point"></el-input-number>
+							<el-input-number v-else :disabled="item.rule_item_details.range_type == 1" v-model.number="item.point" ></el-input-number>
 						</el-form-item>
 
 						<el-form-item label="发生时间" :prop="'items.' + index + '.event_time'" :rules="[{ required: true, message: '请选择时间', trigger: 'blur' }]">
@@ -267,51 +268,19 @@ export default {
 		}
 	},
 	mounted() {
-		this.manage_scope = this.$getUserData().employee_detail.manage_scope;
-		this.superior_list = this.$getUserData().employee_detail.superior_list;
-		// var user = {
-		// 	accedence_time: '2020-12-16 16:32:27',
-		// 	company_id: '',
-		// 	company_info: { creator_ids: [167, 166, 165], id: 15, industry: '计算机软件', is_official: 1, logo_url: '', name: '测试组织', status: 1, user_count_max: 50 },
-		// 	employee_detail: {
-		// 		dept_list: [{ dept_id: 432675338, dept_name: '技术' }],
-		// 		manage_scope: [{ id: 164, name: '刘瑞欣' }, { id: 184, name: '莫仕钊' }],
-		// 		permission_list: [],
-		// 		role_list: [
-		// 			{ id: 15, name: 'employee', remark: '员工' },
-		// 			{ id: 12, name: 'admin', remark: '公司管理员' },
-		// 			{ id: 14, name: 'dept_manager', remark: '部门管理者' },
-		// 			{ id: 13, name: 'point_manager', remark: '积分管理员' },
-		// 			{ id: 11, name: 'creator', remark: '创始人' }
-		// 		],
-		// 		superior_list: []
-		// 	},
-		// 	id: 167,
-		// 	img_url: '',
-		// 	is_admin: 0,
-		// 	is_creator: 1,
-		// 	is_official: 1,
-		// 	is_scope: 1,
-		// 	letter_index: 'C',
-		// 	name: '蔡文',
-		// 	point_config: {
-		// 		deduct_task_monthly: [{ name: 'A分', point: 0, pt_id: 2 }, { name: 'B分', point: 0, pt_id: 3 }],
-		// 		entry_limit: 0,
-		// 		exec_count: 0,
-		// 		exec_count_point: 0,
-		// 		point_limit: [{ name: 'A分', point: 0, pt_id: 2 }, { name: 'B分', point: 0, pt_id: 3 }],
-		// 		reward_ratio: 0,
-		// 		reward_ratio_point: 0,
-		// 		reward_task_monthly: [{ name: 'A分', point: 0, pt_id: 2 }, { name: 'B分', point: 0, pt_id: 3 }],
-		// 		service_point: 0
-		// 	},
-		// 	post: '',
-		// 	site_config: { a2b: 0, base_point: 0, rule_limit_check: 1, service_point: 0, task_review: 0 },
-		// 	site_id: 15
-		// };
-		// localStorage.setItem('userData',JSON.stringify(user));
+		var that=this;
+		this.getUserDetail(function(data){
+			that.manage_scope = data.manage_scope;
+			that.superior_list = data.superior_list;
+		});
 	},
 	methods: {
+		getUserDetail(func){
+			this.$axios('get', '/api/employee/detail').then(res => {
+				this.$setUserData(res.data.data.user);
+				func(res.data.data.user.employee_detail)
+			});
+		},
 		submitEmployee(name) {
 			this.$refs[name][0].confirm(); //调用组件的confirm();
 		},
@@ -645,12 +614,7 @@ export default {
 							});
 							this.$refs['dialogData'].resetFields();
 							this.$emit('update:visible', false);
-							this.$emit(
-								'update:refresh',
-								this.$moment()
-									.format()
-									.valueOf()
-							);
+							this.$emit('update:refresh',this.$moment().format().valueOf());
 							this.$message.success(res.data.msg);
 							this.closePopup();
 						} else {

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1224 - 1371
src/home.vue


+ 1 - 1
src/init.vue

@@ -80,7 +80,7 @@ export default {
 							var { token, user } = res.data.data;
 							user.employee_detail.role_list.forEach(item => {
 								// if (user.is_official == 1) {
-									if (item.name == 'admin' || item.name == 'creator' || item.name == 'point_manager'||item.name=='dept_manager') {is = true;}
+									if (item.name == 'admin' || item.name == 'creator' || item.name == 'point_manager') {is = true;}
 								// }
 							});
 							if (is) {

+ 10 - 4
src/main.js

@@ -11,6 +11,8 @@ import './icons' // icon
 import axios from 'axios'
 import service from './api/axios'
 import echarts from 'echarts'
+import NProgress from 'nprogress';
+import 'nprogress/nprogress.css'
 import { getToken, setToken,getUserData,setUserData,getTyps,setTyps,getIsCreator } from './api/auth';
 
 // 头像
@@ -18,9 +20,9 @@ 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;
 Vue.prototype.$getToken = getToken
@@ -103,13 +105,17 @@ Vue.prototype.$axios = (type, url, data,heaStr) => {
 };
 
 router.beforeEach((to, from, next) => {   //路由切换检测是否强行中断,
-    if(Vue.$httpRequestList.length>0){        //强行中断时才向下执行
+    NProgress.start();
+	if(Vue.$httpRequestList.length>0){        //强行中断时才向下执行
         Vue.$httpRequestList.forEach(item=>{
             item('interrupt');//给个标志,中断请求
         })  
     }
     next();    
 });
+router.afterEach(() => {
+  NProgress.done();
+});
 
 Vue.config.productionTip = false
 new Vue({

+ 1 - 1
src/views/abPoint/award_punish.vue

@@ -352,7 +352,7 @@ export default {
 			this.getData();
 		},
 		refreshData(val) {
-			// this.getData();
+			this.getData();
 		}
 	},
 	methods: {

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

@@ -393,7 +393,6 @@
   </div>
 </template>
 <script>
-import ECharts from "echarts";
 export default {
   data() {
     return {
@@ -517,8 +516,8 @@ export default {
     
     //echarts自适应
     selfAdaption() {
-      var myChart1 = ECharts.init(this.$refs.monthlyIntegralChart);
-      var myChart2 = ECharts.init(this.$refs.IntegralFormChart);
+      var myChart1 = this.$echarts.init(this.$refs.monthlyIntegralChart);
+      var myChart2 = this.$echarts.init(this.$refs.IntegralFormChart);
       // myChart.setOption(option);
       myChart1.resize();
       myChart2.resize();
@@ -578,7 +577,7 @@ export default {
       //   leftBT = "18%";
       // }
       if (chart) {
-        const myChart = ECharts.init(chart);
+        const myChart = this.$echarts.init(chart);
         var legendData1 = legendDataOne;
         // var legendData2 = DataLengths;
         const option = {
@@ -770,7 +769,7 @@ export default {
     monthlyIntegralRanking(date, total, reward, deduction) {
       const chart = this.$refs.monthlyIntegralChart;
       if (chart) {
-        const myChart = ECharts.init(chart);
+        const myChart = this.$echarts.init(chart);
         const option = {
           tooltip: {
             trigger: "axis",

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 902 - 1105
src/views/ranking/individual_statistics.vue


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

@@ -347,11 +347,11 @@ export default {
     exportExcel() {
       let data = "";
       //部门
-        this.condition.dept_id>0?data+="&rule_id="+ this.condition.dept_id:data+="&rule_id=0"
+        this.condition.dept_id>0?data+="&dept_id="+ this.condition.dept_id:data+="&dept_id=0"
       //时间
         data+="&month="+this.condition.month
       //搜索框
-        this.condition.keyword==''?data+="&keyword=0":data+="&keyword="+this.condition.keyword
+        this.condition.keyword==''?data+="&keyword=":data+="&keyword="+this.condition.keyword
       //是否达标
         this.condition.complete!=0?data+="&complete="+this.condition.complete:data+="&complete=0"
       //当前页数

+ 88 - 47
src/views/set/jurisdiction.vue

@@ -267,7 +267,7 @@
 				v-if="add_employee_show"
 				ref="Employee"
 				:user_no_select="false"
-				:can_select_dept="false"
+				:can_select_dept="true"
 				@confirm="add_employee_confirm"
 			></EmployeeSelector>
 			<span slot="footer">
@@ -286,16 +286,16 @@
 		  width="700px">
 		  <el-form label-width="160px" :model="integral_limit_form" ref="integral_limit_form" v-loading="integral_limit_loading">
 		    <span v-for="(item,index) in integral_limit_form.point_limit" :key="index" v-show="item.pt_id !== 1">
-		      <el-form-item :label="item.name+'权限(单次奖扣)'" :rules="[{required: true, message: '请输入', trigger: 'blur'}]">
-		        <el-input v-model="item.point" type="Number"></el-input>
+		      <el-form-item :label="item.name+'权限(单次奖扣)'"  :rules="[{ required: true, message: '分值不能为空'},{ type: 'number', message: '分值必须为数字值'}]">
+		        <el-input v-model.number="item.point" oninput="value=value.replace(/[^\d]/g,'')"></el-input>
 		      </el-form-item>
 		    </span>
-		    <el-form-item label="每月奖分上限" :rules="[{required: true, message: '请输入', trigger: 'blur'}]">
-		      <el-input v-model="integral_limit_form.entry_limit" type="Number"></el-input>
+		    <el-form-item label="每月奖分上限" prop="entry_limit" >
+		      <el-input v-model.number="integral_limit_form.entry_limit" oninput="value=value.replace(/[^\d]/g,'')"></el-input>
 		    </el-form-item>
 		    <el-form-item style="text-align: right; margin-bottom: 0">
 		      <el-button @click="integral_limit_show = false">取消</el-button>
-		      <el-button type="primary" :loading="integral_loading"  :disabled="integral_loading"  @click="sub_employee_limit">确定</el-button>
+		      <el-button type="primary" :loading="integral_loading"  :disabled="integral_loading"  @click="sub_employee_limit('integral_limit_form')">确定</el-button>
 		    </el-form-item>
 		  </el-form>
 		</el-dialog>
@@ -307,7 +307,7 @@
 		  :my_no_select="my_no_select"
 		  :user_no_select="false" 
 		  :selected="management_scope_arr" 
-		  :can_select_dept="false" 
+		  :can_select_dept="true" 
 		  @confirm="management_scope_confirm">
 		  </EmployeeSelector>
 		  <span slot="footer">
@@ -316,10 +316,7 @@
 		  </span>
 		</el-dialog>
 		
-		<el-dialog
-		  title="B分奖扣任务"
-		  :visible.sync="bonus_deducted_show"
-		  width="600px">
+		<el-dialog title="B分奖扣任务"  :visible.sync="bonus_deducted_show"  width="600px">
 		  <el-form :model="integral_limit_form" ref="integral_limit_form" :rules="integral_limit_rules" label-width="130px" v-loading="bonus_deducted_loading">
 		    <span v-for="(item,index) in integral_limit_form.reward_task_monthly" :key="index" v-show="item.name == 'B分'">
 		      <el-form-item>
@@ -330,11 +327,11 @@
 		            <span class="tips">?</span>
 		          </el-tooltip>
 		        </template>
-		        <el-input v-model="item.point" type="Number" placeholder="请输入数值"></el-input>
+		        <el-input v-model.number="item.point"  type="number" oninput="value=value.replace(/[^\d]/g,'')"  placeholder="请输入数值"></el-input>
 		      </el-form-item>
 		    </span>
 		    <span v-for="(item,index) in integral_limit_form.deduct_task_monthly" :key="item.name" v-show="item.name == 'B分'">
-		      <el-form-item style="margin-bottom: 0;">
+		      <el-form-item style="margin-bottom: 0;" prop="point">
 		        <template slot="label">
 		          <span>月扣分任务</span>
 		          <el-tooltip placement="top">
@@ -342,7 +339,7 @@
 		            <span class="tips">?</span>
 		          </el-tooltip>
 		        </template>
-		        <el-input v-model="item.point" type="Number" placeholder="请输入数值"></el-input>
+		        <el-input v-model.number="item.point" type="number" oninput="value=value.replace(/[^\d]/g,'')"  placeholder="请输入数值"></el-input>
 		      </el-form-item>
 		    </span>
 		    <el-form-item>
@@ -359,9 +356,9 @@
 		          <span class="tips">?</span>
 		        </el-tooltip>
 		      </template>
-		
-		      <el-input v-model="integral_limit_form.exec_count" type="Number" placeholder="请输入数值"></el-input>
+		      <el-input v-model.number="integral_limit_form.exec_count" oninput="value=value.replace(/[^\d]/g,'')" type="number" placeholder="请输入数值"></el-input>
 		    </el-form-item>
+			
 		    <el-form-item prop="exec_count_point">
 		      <template slot="label">
 		        <span>每少一次奖扣</span>
@@ -370,8 +367,9 @@
 		          <span class="tips">?</span>
 		        </el-tooltip>
 		      </template>
-		      <el-input v-model="integral_limit_form.exec_count_point" type="Number" placeholder="请输入数值"></el-input>
+		      <el-input v-model.number="integral_limit_form.exec_count_point"  oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入数值"></el-input>
 		    </el-form-item>
+			
 		    <el-form-item prop="reward_ratio">
 		      <template slot="label">
 		        <span>月奖扣比例</span>
@@ -380,9 +378,10 @@
 		          <span class="tips">?</span>
 		        </el-tooltip>
 		      </template>
-		      <el-input style="width: 100px;" type="Number" disabled placeholder="1" ></el-input>:<el-input v-model="integral_limit_form.reward_ratio" style="width: 100px;" type="Number" placeholder="请输入数值" ></el-input>
+		      <el-input style="width: 100px;"   disabled placeholder="1" ></el-input>:<el-input v-model.number="integral_limit_form.reward_ratio" style="width: 100px;" oninput="value=value.replace(/[^\d]/g,'')"  placeholder="请输入数值" ></el-input>
 		    </el-form-item>
-		    <el-form-item prop="reward_ratio_point">
+		    
+			<el-form-item prop="reward_ratio_point">
 		      <template slot="label">
 		        <span>比例未达标</span>
 		        <el-tooltip placement="top">
@@ -390,12 +389,14 @@
 		          <span class="tips">?</span>
 		        </el-tooltip>
 		      </template>
-		      <el-input v-model="integral_limit_form.reward_ratio_point" type="Number" placeholder="请输入数值"></el-input>
+		      <el-input v-model.number="integral_limit_form.reward_ratio_point" oninput="value=value.replace(/[^\d]/g,'')"  placeholder="请输入数值"></el-input>
 		    </el-form-item>
-		    <el-form-item style=" text-align: right; margin-bottom: 0;">
+		    
+			<el-form-item style=" text-align: right; margin-bottom: 0;">
 		      <el-button @click="bonus_deducted_colse('integral_limit_form')">取消</el-button>
 		      <el-button type="primary" :loading="bonus_loading" :disabled="bonus_loading"  @click="sub_bonus_deducted('integral_limit_form')">确定</el-button>
 		    </el-form-item>
+		  
 		  </el-form>
 		</el-dialog>
 		<!-- 添加老板 -->
@@ -405,7 +406,7 @@
 			ref="boss" 
 			:multi="false"
 			:user_no_select="false" 
-			:can_select_dept="false" 
+			:can_select_dept="true" 
 			@confirm="selectBoss">
 			</EmployeeSelector>
 		  <div style="text-align: center;" class="fontColorT">创始人至少有一位,创始人不能删除自己</div>
@@ -443,7 +444,7 @@ import EmployeeSelector from '@/components/EmployeeSelector.vue';
 import noData from '@/components/noData';
   const minimum = (rule, value,callback)=>{
     if (value < 0){
-      callback(new Error('请输入正确的数值'))
+      callback(new Error('数值不能为负数'))
     }else {
       callback()
     }
@@ -481,18 +482,23 @@ export default {
 			bonus_deducted_loading:false,
 			bonus_loading:false,
 			integral_limit_rules:{
-			  // exec_count:[
-			  //   { required: true, validator: minimum, trigger: 'blur' },
-			  // ],
-			  // exec_count_point:[
-			  //   { required: true, validator: minimum, trigger: 'blur' },
-			  // ],
-			  // reward_ratio:[
-			  //   { required: true, validator: minimum, trigger: 'blur' },
-			  // ],
-			  // reward_ratio_point:[
-			  //   { required: true, validator: minimum, trigger: 'blur' },
-			  // ],
+			  exec_count:[
+			    { required: true, validator: minimum, trigger: 'blur' },
+				{ type: 'number', message: '分值必须为数字值'}
+			  ],
+			  exec_count_point:[
+			    { required: true, validator: minimum, trigger: 'blur' },
+				{ type: 'number', message: '分值必须为数字值'}
+			  ],
+			  reward_ratio:[
+			    { required: true, validator: minimum, trigger: 'blur' },
+				{ type: 'number', message: '分值必须为数字值'}
+				
+			  ],
+			  reward_ratio_point:[
+			    { required: true, validator: minimum, trigger: 'blur' },
+				{ type: 'number', message: '分值必须为数字值'}
+			  ],
 			},
 			my_no_select:'',//设置人的ID
 			isStart:false,//是否是创始人或者积分负责人
@@ -673,9 +679,21 @@ export default {
 		sub_bonus_deducted(fromName){
 		  this.bonus_loading=true;	
 		  this.integral_limit_form.employee_id = this.set_mployee_limit_id
+		  var data=this.integral_limit_form;
+		  data.reward_task_monthly[1].point=Number(data.reward_task_monthly[1].point);
+		  data.deduct_task_monthly[1].point=Number(data.deduct_task_monthly[1].point);
+		  if(!this.isNumber(data.reward_task_monthly[1].point)||data.reward_task_monthly[1].point<0){
+		  	  this.$message.error('月奖分任务必须为整数且不能为负分');	 
+		  		return;			  
+		  }
+		  if(!this.isNumber(data.deduct_task_monthly[1].point)||data.deduct_task_monthly[1].point<0){
+				this.$message.error('月扣分任务必须为整数且不能为负分');
+		  		return;
+		  }
+		  // return;
 		  this.$refs[fromName].validate((valid) => {
 		    if (valid) {
-		      this.$axios('post','/api/integral/employee/limit',this.integral_limit_form).then((res) => {
+		      this.$axios('post','/api/integral/employee/limit',data).then((res) => {
 		        if (res.data.code == 1) {
 		          this.$message.success(res.data.msg)
 		          setTimeout(() => {
@@ -684,7 +702,9 @@ export default {
 		          this.bonus_deducted_show = false
 		        }
 		      }).finally(() => { this.bonus_loading=false;})
-		    }
+		    }else{
+				this.bonus_loading=false;	
+			}
 		  });
 		},
 		bonus_deducted_colse(fromName){
@@ -727,16 +747,32 @@ export default {
 		    this.role_loading = false
 		  })
 		},
-		sub_employee_limit(){
-		  this.integral_loading=true;
-		  this.integral_limit_form.employee_id = this.set_mployee_limit_id
-		  this.$axios('post','/api/integral/employee/limit',this.integral_limit_form).then((res) => {
-		    if (res.data.code == 1) {
-		      this.$message.success(res.data.msg)
-		      this.get_table_list()
-		      this.integral_limit_show = false
-		    }
-		  }).finally(() => {this.integral_loading = false;});
+		
+		isNumber(obj) {
+		    return obj === +obj
+		},
+		sub_employee_limit(fromName){
+			this.$refs[fromName].validate((valid) => {
+			  if(!this.isNumber(this.integral_limit_form.point_limit[0].point)||this.integral_limit_form.point_limit[0].point<0){
+			  	  this.$message.error('权限分必须为整数且不能为负分');	 
+				return;			  
+			  }
+			  if(!this.isNumber(this.integral_limit_form.point_limit[1].point)||this.integral_limit_form.point_limit[1].point<0){
+				  this.$message.error('权限分必须为整数且不能为负分');
+				  return;
+			  }
+			  if(valid)	{
+				 this.integral_loading=true;
+				 this.integral_limit_form.employee_id = this.set_mployee_limit_id
+				 this.$axios('post','/api/integral/employee/limit',this.integral_limit_form).then((res) => {
+				 				if (res.data.code == 1) {
+				 				  this.$message.success(res.data.msg)
+				 				  this.get_table_list()
+				 				  this.integral_limit_show = false
+				 				}
+				 }).finally(() => {this.integral_loading = false;}); 
+			  }
+			});
 		},
 		open_integral_limit(item){
 		  this.integral_limit_show = true
@@ -757,6 +793,11 @@ export default {
 				if (item.reward_task_monthly == null || item.reward_task_monthly == undefined||item.reward_task_monthly.length==0) {
 					item.reward_task_monthly = [{ name: 'A分', point: '0', pt_id: this.$getTyps('AF').id }, { name: 'B分', point: '0', pt_id: this.$getTyps('BF').id }];
 				}
+				if(item.point_limit[0].point||item.point_limit[1].point){
+					item.point_limit[0].point=Number(item.point_limit[0].point)
+					item.point_limit[1].point=Number(item.point_limit[1].point)
+				}
+				
 				this.integral_limit_form=item
 		    }
 		  }).finally(() => {

+ 9 - 0
vue.config.js

@@ -2,6 +2,8 @@ const path = require('path')
 function resolve (dir){
     return path.join(__dirname,dir)
 } 
+const WebpackBundleAnalyzer = require('webpack-bundle-analyzer');
+
 module.exports = {
 	// 选项...
 	publicPath: './',
@@ -21,6 +23,13 @@ module.exports = {
 		disableHostCheck: true,
 	},
 	chainWebpack: (config) => {
+		// 配置可视化打包结构构成
+		if (process.env.use_analyzer) {
+		      config
+		        .plugin('webpack-bundle-analyzer')
+		        .use(WebpackBundleAnalyzer.BundleAnalyzerPlugin);
+		}
+		
 		//配置 svg-sprite-loader
 		// 第一步:让其他svg loader不要对src/icons进行操作
 		config.module

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels