提交 f846d2ea 编写于 作者: wensu.huang's avatar wensu.huang

Merge branch 'release' into 'master'

Release



See merge request !8
......@@ -7,7 +7,7 @@ module.exports = {
index: path.resolve(__dirname, '../dist/index.html'),
assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static',
assetsPublicPath: '/meddic/',
assetsPublicPath: '/sensitive/', // 上线前改为相应的路径名称
productionSourceMap: false,
// Gzip off by default as many popular static hosts such as
// Surge or Netlify already gzip all static assets for you.
......
......@@ -2,19 +2,30 @@
<html>
<head>
<meta charset="utf-8">
<title>敏感数据查看系统</title>
<title>数据服务</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<meta name ="viewport" content ="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<meta content="" name="description"/>
<meta content="" name="author"/>
<link rel="shortcut icon" href="./static/img/index_logoicon.png">
<link
rel="stylesheet"
href="https://uicdn.toast.com/tui-image-editor/latest/tui-image-editor.css"
/>
</head>
<body>
<div id="app"></div>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/3.6.0/fabric.js"></script>
<script type="text/javascript" src="https://uicdn.toast.com/tui.code-snippet/v1.5.0/tui-code-snippet.min.js"></script>
<script type="text/javascript" src="https://uicdn.toast.com/tui-color-picker/v2.2.6/tui-color-picker.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.3/FileSaver.min.js"></script>
<script src="https://uicdn.toast.com/tui-image-editor/latest/tui-image-editor.js"></script>
<script src="https://pv.sohu.com/cityjson?ie=utf-8"></script>
<!--oss upload start-->
<script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-5.1.1.min.js"></script>
<script src="https://unpkg.com/qiniu-js@2.2.0/dist/qiniu.min.js"></script>
<!--oss upload end-->
</body>
</html>
......@@ -4,11 +4,36 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@toast-ui/vue-image-editor": {
"version": "1.3.0",
"resolved": "http://192.168.110.93:4873/@toast-ui%2fvue-image-editor/-/vue-image-editor-1.3.0.tgz",
"integrity": "sha1-GUMGI4ygYAMje0lZz3JCKwgzegA=",
"requires": {
"fabric": "4.2.0",
"tui-image-editor": "^3.11.0"
},
"dependencies": {
"fabric": {
"version": "4.2.0",
"resolved": "http://192.168.110.93:4873/fabric/-/fabric-4.2.0.tgz",
"integrity": "sha1-wW2vVVmp7UV9Ue65OAmVZe8bRLo=",
"requires": {
"canvas": "^2.6.1",
"jsdom": "^15.2.1"
}
}
}
},
"abab": {
"version": "2.0.5",
"resolved": "http://192.168.110.93:4873/abab/-/abab-2.0.5.tgz",
"integrity": "sha1-wLZ4+zLWD8EhnHhNaoJv44Wut5o=",
"optional": true
},
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
},
"accepts": {
"version": "1.3.5",
......@@ -43,6 +68,30 @@
}
}
},
"acorn-globals": {
"version": "4.3.4",
"resolved": "http://192.168.110.93:4873/acorn-globals/-/acorn-globals-4.3.4.tgz",
"integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==",
"optional": true,
"requires": {
"acorn": "^6.0.1",
"acorn-walk": "^6.0.1"
},
"dependencies": {
"acorn": {
"version": "6.4.2",
"resolved": "http://192.168.110.93:4873/acorn/-/acorn-6.4.2.tgz",
"integrity": "sha1-NYZv1xBSjpLeEM8GAWSY5H454eY=",
"optional": true
}
}
},
"acorn-walk": {
"version": "6.2.0",
"resolved": "http://192.168.110.93:4873/acorn-walk/-/acorn-walk-6.2.0.tgz",
"integrity": "sha1-Ejy487hMIXHx9/slJhWxx4prGow=",
"optional": true
},
"adler-32": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.0.0.tgz",
......@@ -110,8 +159,7 @@
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
"dev": true
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
},
"ansi-styles": {
"version": "2.2.1",
......@@ -405,6 +453,54 @@
}
}
},
"aproba": {
"version": "1.2.0",
"resolved": "http://192.168.110.93:4873/aproba/-/aproba-1.2.0.tgz",
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
"optional": true
},
"are-we-there-yet": {
"version": "1.1.5",
"resolved": "http://192.168.110.93:4873/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
"integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
"optional": true,
"requires": {
"delegates": "^1.0.0",
"readable-stream": "^2.0.6"
},
"dependencies": {
"isarray": {
"version": "1.0.0",
"resolved": "http://192.168.110.93:4873/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"optional": true
},
"readable-stream": {
"version": "2.3.7",
"resolved": "http://192.168.110.93:4873/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"optional": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"string_decoder": {
"version": "1.1.1",
"resolved": "http://192.168.110.93:4873/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"optional": true,
"requires": {
"safe-buffer": "~5.1.0"
}
}
}
},
"argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
......@@ -435,6 +531,12 @@
"integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
"dev": true
},
"array-equal": {
"version": "1.0.0",
"resolved": "http://192.168.110.93:4873/array-equal/-/array-equal-1.0.0.tgz",
"integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
"optional": true
},
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
......@@ -458,7 +560,6 @@
"version": "0.2.4",
"resolved": "http://192.168.110.93:4873/asn1/-/asn1-0.2.4.tgz",
"integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=",
"dev": true,
"optional": true,
"requires": {
"safer-buffer": "~2.1.0"
......@@ -505,7 +606,7 @@
"version": "1.0.0",
"resolved": "http://192.168.110.93:4873/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"dev": true
"optional": true
},
"assign-symbols": {
"version": "1.0.0",
......@@ -536,8 +637,8 @@
},
"async-validator": {
"version": "1.8.5",
"resolved": "http://registry.npm.taobao.org/async-validator/download/async-validator-1.8.5.tgz",
"integrity": "sha1-3D4I7B/Q3dtn5ghC8CwM0c7G1/A=",
"resolved": "http://192.168.110.93:4873/async-validator/-/async-validator-1.8.5.tgz",
"integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==",
"requires": {
"babel-runtime": "6.x"
}
......@@ -546,7 +647,6 @@
"version": "0.4.0",
"resolved": "http://192.168.110.93:4873/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
"dev": true,
"optional": true
},
"atob": {
......@@ -573,14 +673,12 @@
"version": "0.7.0",
"resolved": "http://192.168.110.93:4873/aws-sign2/-/aws-sign2-0.7.0.tgz",
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
"dev": true,
"optional": true
},
"aws4": {
"version": "1.8.0",
"resolved": "http://192.168.110.93:4873/aws4/-/aws4-1.8.0.tgz",
"integrity": "sha1-8OAD2cqef1nHpQiUXXsu+aBKVC8=",
"dev": true,
"optional": true
},
"axios": {
......@@ -798,8 +896,8 @@
},
"babel-helper-vue-jsx-merge-props": {
"version": "2.0.3",
"resolved": "http://registry.npm.taobao.org/babel-helper-vue-jsx-merge-props/download/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
"integrity": "sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY="
"resolved": "http://192.168.110.93:4873/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
"integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg=="
},
"babel-helpers": {
"version": "6.24.1",
......@@ -1368,8 +1466,7 @@
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
"base": {
"version": "0.11.2",
......@@ -1448,7 +1545,6 @@
"version": "1.0.2",
"resolved": "http://192.168.110.93:4873/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
"dev": true,
"optional": true,
"requires": {
"tweetnacl": "^0.14.3"
......@@ -1517,7 +1613,6 @@
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
......@@ -1540,6 +1635,12 @@
"integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
"dev": true
},
"browser-process-hrtime": {
"version": "1.0.0",
"resolved": "http://192.168.110.93:4873/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
"integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
"optional": true
},
"browserify-aes": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
......@@ -1722,11 +1823,29 @@
"integrity": "sha1-vSWDDEHvq2Qzmi44H0lnc0PIRQk=",
"dev": true
},
"canvas": {
"version": "2.6.1",
"resolved": "http://192.168.110.93:4873/canvas/-/canvas-2.6.1.tgz",
"integrity": "sha1-DQh91NYPWlqe+iAnVycKvqi++J4=",
"optional": true,
"requires": {
"nan": "^2.14.0",
"node-pre-gyp": "^0.11.0",
"simple-get": "^3.0.3"
},
"dependencies": {
"nan": {
"version": "2.14.2",
"resolved": "http://192.168.110.93:4873/nan/-/nan-2.14.2.tgz",
"integrity": "sha1-9TdkAGlRaPTMaUrJOT0MlYXu6hk=",
"optional": true
}
}
},
"caseless": {
"version": "0.12.0",
"resolved": "http://192.168.110.93:4873/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
"dev": true,
"optional": true
},
"center-align": {
......@@ -1893,6 +2012,12 @@
}
}
},
"chownr": {
"version": "1.1.4",
"resolved": "http://192.168.110.93:4873/chownr/-/chownr-1.1.4.tgz",
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
"optional": true
},
"cipher-base": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
......@@ -1999,8 +2124,7 @@
"code-point-at": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
"dev": true
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
},
"codemirror": {
"version": "5.35.0",
......@@ -2112,7 +2236,7 @@
"version": "1.0.8",
"resolved": "http://192.168.110.93:4873/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=",
"dev": true,
"optional": true,
"requires": {
"delayed-stream": "~1.0.0"
}
......@@ -2138,8 +2262,7 @@
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"concat-stream": {
"version": "1.6.1",
......@@ -2205,6 +2328,12 @@
"date-now": "^0.1.4"
}
},
"console-control-strings": {
"version": "1.1.0",
"resolved": "http://192.168.110.93:4873/console-control-strings/-/console-control-strings-1.1.0.tgz",
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
"optional": true
},
"consolidate": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.14.5.tgz",
......@@ -2261,6 +2390,11 @@
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
"integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4="
},
"core-js-pure": {
"version": "3.8.1",
"resolved": "http://192.168.110.93:4873/core-js-pure/-/core-js-pure-3.8.1.tgz",
"integrity": "sha1-I/hASPNm/fz1LT/Rxo/sNJF30Rk="
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
......@@ -2521,16 +2655,49 @@
"source-map": "^0.5.3"
}
},
"cssom": {
"version": "0.4.4",
"resolved": "http://192.168.110.93:4873/cssom/-/cssom-0.4.4.tgz",
"integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
"optional": true
},
"cssstyle": {
"version": "2.3.0",
"resolved": "http://192.168.110.93:4873/cssstyle/-/cssstyle-2.3.0.tgz",
"integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
"optional": true,
"requires": {
"cssom": "~0.3.6"
},
"dependencies": {
"cssom": {
"version": "0.3.8",
"resolved": "http://192.168.110.93:4873/cssom/-/cssom-0.3.8.tgz",
"integrity": "sha1-nxJ29bK0Y/IRTT8sdSUK+MGjb0o=",
"optional": true
}
}
},
"dashdash": {
"version": "1.14.1",
"resolved": "http://192.168.110.93:4873/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"dev": true,
"optional": true,
"requires": {
"assert-plus": "^1.0.0"
}
},
"data-urls": {
"version": "1.1.0",
"resolved": "http://192.168.110.93:4873/data-urls/-/data-urls-1.1.0.tgz",
"integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
"optional": true,
"requires": {
"abab": "^2.0.0",
"whatwg-mimetype": "^2.2.0",
"whatwg-url": "^7.0.0"
}
},
"date-now": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
......@@ -2564,15 +2731,36 @@
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
"dev": true
},
"decompress-response": {
"version": "4.2.1",
"resolved": "http://192.168.110.93:4873/decompress-response/-/decompress-response-4.2.1.tgz",
"integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
"optional": true,
"requires": {
"mimic-response": "^2.0.0"
}
},
"deep-equal": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
"integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
},
"deep-extend": {
"version": "0.6.0",
"resolved": "http://192.168.110.93:4873/deep-extend/-/deep-extend-0.6.0.tgz",
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
"optional": true
},
"deep-is": {
"version": "0.1.3",
"resolved": "http://192.168.110.93:4873/deep-is/-/deep-is-0.1.3.tgz",
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
"optional": true
},
"deepmerge": {
"version": "1.5.2",
"resolved": "http://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz",
"integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M="
"resolved": "http://192.168.110.93:4873/deepmerge/-/deepmerge-1.5.2.tgz",
"integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ=="
},
"define-property": {
"version": "2.0.2",
......@@ -2637,7 +2825,13 @@
"version": "1.0.0",
"resolved": "http://192.168.110.93:4873/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
"dev": true
"optional": true
},
"delegates": {
"version": "1.0.0",
"resolved": "http://192.168.110.93:4873/delegates/-/delegates-1.0.0.tgz",
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
"optional": true
},
"depd": {
"version": "1.1.2",
......@@ -2670,6 +2864,12 @@
"repeating": "^2.0.0"
}
},
"detect-libc": {
"version": "1.0.3",
"resolved": "http://192.168.110.93:4873/detect-libc/-/detect-libc-1.0.3.tgz",
"integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
"optional": true
},
"diffie-hellman": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
......@@ -2728,6 +2928,15 @@
"integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
"dev": true
},
"domexception": {
"version": "1.0.1",
"resolved": "http://192.168.110.93:4873/domexception/-/domexception-1.0.1.tgz",
"integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
"optional": true,
"requires": {
"webidl-conversions": "^4.0.2"
}
},
"domhandler": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz",
......@@ -2757,13 +2966,20 @@
"version": "0.1.2",
"resolved": "http://192.168.110.93:4873/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
"dev": true,
"optional": true,
"requires": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
}
},
"echarts": {
"version": "4.9.0",
"resolved": "http://192.168.110.93:4873/echarts/-/echarts-4.9.0.tgz",
"integrity": "sha1-qbm6oD8Doqcx5jQMVb77V6nhNH0=",
"requires": {
"zrender": "4.3.2"
}
},
"editorconfig": {
"version": "0.13.3",
"resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.13.3.tgz",
......@@ -2807,9 +3023,9 @@
"dev": true
},
"element-ui": {
"version": "2.7.2",
"resolved": "http://registry.npm.taobao.org/element-ui/download/element-ui-2.7.2.tgz",
"integrity": "sha1-i8W+9cPFOiFwQiUWtDJOcAacI9E=",
"version": "2.15.1",
"resolved": "http://192.168.110.93:4873/element-ui/-/element-ui-2.15.1.tgz",
"integrity": "sha1-raAKpuMsAndKLndWPdhGaPgTzf8=",
"requires": {
"async-validator": "~1.8.1",
"babel-helper-vue-jsx-merge-props": "^2.0.0",
......@@ -2903,17 +3119,49 @@
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
},
"escodegen": {
"version": "1.14.3",
"resolved": "http://192.168.110.93:4873/escodegen/-/escodegen-1.14.3.tgz",
"integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
"optional": true,
"requires": {
"esprima": "^4.0.1",
"estraverse": "^4.2.0",
"esutils": "^2.0.2",
"optionator": "^0.8.1",
"source-map": "~0.6.1"
},
"dependencies": {
"esprima": {
"version": "4.0.1",
"resolved": "http://192.168.110.93:4873/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"optional": true
},
"source-map": {
"version": "0.6.1",
"resolved": "http://192.168.110.93:4873/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"optional": true
}
}
},
"esprima": {
"version": "2.7.3",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
"integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
"dev": true
},
"estraverse": {
"version": "4.3.0",
"resolved": "http://192.168.110.93:4873/estraverse/-/estraverse-4.3.0.tgz",
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"optional": true
},
"esutils": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
"integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
"dev": true
"integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
},
"etag": {
"version": "1.8.1",
......@@ -3081,7 +3329,16 @@
"version": "1.3.0",
"resolved": "http://192.168.110.93:4873/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
"dev": true
"optional": true
},
"fabric": {
"version": "4.3.0",
"resolved": "http://192.168.110.93:4873/fabric/-/fabric-4.3.0.tgz",
"integrity": "sha1-xCHKF/2n64AG9YpAHN5ln63+GqY=",
"requires": {
"canvas": "^2.6.1",
"jsdom": "^15.2.1"
}
},
"fast-deep-equal": {
"version": "1.1.0",
......@@ -3097,8 +3354,13 @@
"fast-json-stable-stringify": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
"dev": true
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
},
"fast-levenshtein": {
"version": "2.0.6",
"resolved": "http://192.168.110.93:4873/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
"optional": true
},
"fastparse": {
"version": "1.1.2",
......@@ -3128,6 +3390,11 @@
}
}
},
"file-saver": {
"version": "2.0.5",
"resolved": "http://192.168.110.93:4873/file-saver/-/file-saver-2.0.5.tgz",
"integrity": "sha1-1hz+LOBZ9BTYmendbUEH7iVnDDg="
},
"filename-regex": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
......@@ -3232,14 +3499,12 @@
"version": "0.6.1",
"resolved": "http://192.168.110.93:4873/forever-agent/-/forever-agent-0.6.1.tgz",
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
"dev": true,
"optional": true
},
"form-data": {
"version": "2.3.3",
"resolved": "http://192.168.110.93:4873/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=",
"dev": true,
"optional": true,
"requires": {
"asynckit": "^0.4.0",
......@@ -3287,11 +3552,19 @@
"string-length": "^1.0.1"
}
},
"fs-minipass": {
"version": "1.2.7",
"resolved": "http://192.168.110.93:4873/fs-minipass/-/fs-minipass-1.2.7.tgz",
"integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
"optional": true,
"requires": {
"minipass": "^2.6.0"
}
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"fsevents": {
"version": "1.2.4",
......@@ -3313,7 +3586,8 @@
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"aproba": {
"version": "1.2.0",
......@@ -3728,7 +4002,8 @@
"safe-buffer": {
"version": "5.1.1",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"safer-buffer": {
"version": "2.1.2",
......@@ -3784,6 +4059,7 @@
"version": "3.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
......@@ -3827,12 +4103,14 @@
"wrappy": {
"version": "1.0.2",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"yallist": {
"version": "3.0.2",
"bundled": true,
"dev": true
"dev": true,
"optional": true
}
}
},
......@@ -3842,6 +4120,22 @@
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
},
"gauge": {
"version": "2.7.4",
"resolved": "http://192.168.110.93:4873/gauge/-/gauge-2.7.4.tgz",
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"optional": true,
"requires": {
"aproba": "^1.0.3",
"console-control-strings": "^1.0.0",
"has-unicode": "^2.0.0",
"object-assign": "^4.1.0",
"signal-exit": "^3.0.0",
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1",
"wide-align": "^1.1.0"
}
},
"get-caller-file": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
......@@ -3858,7 +4152,6 @@
"version": "0.1.7",
"resolved": "http://192.168.110.93:4873/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"dev": true,
"optional": true,
"requires": {
"assert-plus": "^1.0.0"
......@@ -3970,14 +4263,12 @@
"version": "2.0.0",
"resolved": "http://192.168.110.93:4873/har-schema/-/har-schema-2.0.0.tgz",
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
"dev": true,
"optional": true
},
"har-validator": {
"version": "5.1.3",
"resolved": "http://192.168.110.93:4873/har-validator/-/har-validator-5.1.3.tgz",
"integrity": "sha1-HvievT5JllV2de7ZiTEQ3DUPoIA=",
"dev": true,
"optional": true,
"requires": {
"ajv": "^6.5.5",
......@@ -3988,7 +4279,6 @@
"version": "6.10.2",
"resolved": "http://192.168.110.93:4873/ajv/-/ajv-6.10.2.tgz",
"integrity": "sha1-086gTWsBeyiUrWkED+yLYj60vVI=",
"dev": true,
"optional": true,
"requires": {
"fast-deep-equal": "^2.0.1",
......@@ -4001,14 +4291,12 @@
"version": "2.0.1",
"resolved": "http://192.168.110.93:4873/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
"integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
"dev": true,
"optional": true
},
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "http://192.168.110.93:4873/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true,
"optional": true
}
}
......@@ -4037,6 +4325,12 @@
"integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
"dev": true
},
"has-unicode": {
"version": "2.0.1",
"resolved": "http://192.168.110.93:4873/has-unicode/-/has-unicode-2.0.1.tgz",
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
"optional": true
},
"has-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
......@@ -4167,6 +4461,15 @@
"integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==",
"dev": true
},
"html-encoding-sniffer": {
"version": "1.0.2",
"resolved": "http://192.168.110.93:4873/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
"integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
"optional": true,
"requires": {
"whatwg-encoding": "^1.0.1"
}
},
"html-entities": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
......@@ -4286,7 +4589,6 @@
"version": "1.2.0",
"resolved": "http://192.168.110.93:4873/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"dev": true,
"optional": true,
"requires": {
"assert-plus": "^1.0.0",
......@@ -4303,8 +4605,7 @@
"iconv-lite": {
"version": "0.4.19",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
"integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==",
"dev": true
"integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
},
"icss-replace-symbols": {
"version": "1.1.0",
......@@ -4381,6 +4682,15 @@
"integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==",
"dev": true
},
"ignore-walk": {
"version": "3.0.3",
"resolved": "http://192.168.110.93:4873/ignore-walk/-/ignore-walk-3.0.3.tgz",
"integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==",
"optional": true,
"requires": {
"minimatch": "^3.0.4"
}
},
"image-size": {
"version": "0.5.5",
"resolved": "http://192.168.110.93:4873/image-size/-/image-size-0.5.5.tgz",
......@@ -4404,7 +4714,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
......@@ -4418,8 +4727,7 @@
"ini": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
"dev": true
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
},
"interpret": {
"version": "1.1.0",
......@@ -4442,6 +4750,12 @@
"integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
"dev": true
},
"ip-regex": {
"version": "2.1.0",
"resolved": "http://192.168.110.93:4873/ip-regex/-/ip-regex-2.1.0.tgz",
"integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
"optional": true
},
"ipaddr.js": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz",
......@@ -4566,7 +4880,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"dev": true,
"requires": {
"number-is-nan": "^1.0.0"
}
......@@ -4654,7 +4967,6 @@
"version": "1.0.0",
"resolved": "http://192.168.110.93:4873/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
"dev": true,
"optional": true
},
"is-utf8": {
......@@ -4696,7 +5008,6 @@
"version": "0.1.2",
"resolved": "http://192.168.110.93:4873/isstream/-/isstream-0.1.2.tgz",
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
"dev": true,
"optional": true
},
"js-base64": {
......@@ -4737,7 +5048,72 @@
"version": "0.1.1",
"resolved": "http://192.168.110.93:4873/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
"dev": true
"optional": true
},
"jsdom": {
"version": "15.2.1",
"resolved": "http://192.168.110.93:4873/jsdom/-/jsdom-15.2.1.tgz",
"integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==",
"optional": true,
"requires": {
"abab": "^2.0.0",
"acorn": "^7.1.0",
"acorn-globals": "^4.3.2",
"array-equal": "^1.0.0",
"cssom": "^0.4.1",
"cssstyle": "^2.0.0",
"data-urls": "^1.1.0",
"domexception": "^1.0.1",
"escodegen": "^1.11.1",
"html-encoding-sniffer": "^1.0.2",
"nwsapi": "^2.2.0",
"parse5": "5.1.0",
"pn": "^1.1.0",
"request": "^2.88.0",
"request-promise-native": "^1.0.7",
"saxes": "^3.1.9",
"symbol-tree": "^3.2.2",
"tough-cookie": "^3.0.1",
"w3c-hr-time": "^1.0.1",
"w3c-xmlserializer": "^1.1.2",
"webidl-conversions": "^4.0.2",
"whatwg-encoding": "^1.0.5",
"whatwg-mimetype": "^2.3.0",
"whatwg-url": "^7.0.0",
"ws": "^7.0.0",
"xml-name-validator": "^3.0.0"
},
"dependencies": {
"acorn": {
"version": "7.4.1",
"resolved": "http://192.168.110.93:4873/acorn/-/acorn-7.4.1.tgz",
"integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
"optional": true
},
"punycode": {
"version": "2.1.1",
"resolved": "http://192.168.110.93:4873/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"optional": true
},
"tough-cookie": {
"version": "3.0.1",
"resolved": "http://192.168.110.93:4873/tough-cookie/-/tough-cookie-3.0.1.tgz",
"integrity": "sha1-nfT1fnOcJpMKAYGEiH9K233Kc7I=",
"optional": true,
"requires": {
"ip-regex": "^2.1.0",
"psl": "^1.1.28",
"punycode": "^2.1.1"
}
},
"ws": {
"version": "7.4.1",
"resolved": "http://192.168.110.93:4873/ws/-/ws-7.4.1.tgz",
"integrity": "sha1-ozO+Amlr0OVM6gQ04h3MiprClLs=",
"optional": true
}
}
},
"jsesc": {
"version": "1.3.0",
......@@ -4755,7 +5131,6 @@
"version": "0.2.3",
"resolved": "http://192.168.110.93:4873/json-schema/-/json-schema-0.2.3.tgz",
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
"dev": true,
"optional": true
},
"json-schema-traverse": {
......@@ -4777,7 +5152,6 @@
"version": "5.0.1",
"resolved": "http://192.168.110.93:4873/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
"dev": true,
"optional": true
},
"json5": {
......@@ -4796,7 +5170,6 @@
"version": "1.4.1",
"resolved": "http://192.168.110.93:4873/jsprim/-/jsprim-1.4.1.tgz",
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
"dev": true,
"optional": true,
"requires": {
"assert-plus": "1.0.0",
......@@ -4912,6 +5285,16 @@
}
}
},
"levn": {
"version": "0.3.0",
"resolved": "http://192.168.110.93:4873/levn/-/levn-0.3.0.tgz",
"integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
"optional": true,
"requires": {
"prelude-ls": "~1.1.2",
"type-check": "~0.3.2"
}
},
"load-json-file": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
......@@ -4961,6 +5344,12 @@
"integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
"dev": true
},
"lodash.sortby": {
"version": "4.7.0",
"resolved": "http://192.168.110.93:4873/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
"integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
"optional": true
},
"lodash.uniq": {
"version": "4.5.0",
"resolved": "http://192.168.110.93:4873/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
......@@ -5203,14 +5592,12 @@
"mime-db": {
"version": "1.33.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
"integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==",
"dev": true
"integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="
},
"mime-types": {
"version": "2.1.18",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
"integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
"dev": true,
"requires": {
"mime-db": "~1.33.0"
}
......@@ -5221,6 +5608,12 @@
"integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
"dev": true
},
"mimic-response": {
"version": "2.1.0",
"resolved": "http://192.168.110.93:4873/mimic-response/-/mimic-response-2.1.0.tgz",
"integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
"optional": true
},
"minimalistic-assert": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
......@@ -5237,7 +5630,6 @@
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
......@@ -5245,8 +5637,40 @@
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"dev": true
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
},
"minipass": {
"version": "2.9.0",
"resolved": "http://192.168.110.93:4873/minipass/-/minipass-2.9.0.tgz",
"integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
"optional": true,
"requires": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
},
"dependencies": {
"safe-buffer": {
"version": "5.2.1",
"resolved": "http://192.168.110.93:4873/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"optional": true
},
"yallist": {
"version": "3.1.1",
"resolved": "http://192.168.110.93:4873/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"optional": true
}
}
},
"minizlib": {
"version": "1.3.3",
"resolved": "http://192.168.110.93:4873/minizlib/-/minizlib-1.3.3.tgz",
"integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
"optional": true,
"requires": {
"minipass": "^2.9.0"
}
},
"mixin-deep": {
"version": "1.3.1",
......@@ -5273,7 +5697,6 @@
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
"requires": {
"minimist": "0.0.8"
}
......@@ -5339,6 +5762,34 @@
"xml-char-classes": "^1.0.0"
}
},
"needle": {
"version": "2.5.2",
"resolved": "http://192.168.110.93:4873/needle/-/needle-2.5.2.tgz",
"integrity": "sha1-zxqPzjgrWigBCLupChSZPADkAQo=",
"optional": true,
"requires": {
"debug": "^3.2.6",
"iconv-lite": "^0.4.4",
"sax": "^1.2.4"
},
"dependencies": {
"debug": {
"version": "3.2.7",
"resolved": "http://192.168.110.93:4873/debug/-/debug-3.2.7.tgz",
"integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
"optional": true,
"requires": {
"ms": "^2.1.1"
}
},
"ms": {
"version": "2.1.3",
"resolved": "http://192.168.110.93:4873/ms/-/ms-2.1.3.tgz",
"integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=",
"optional": true
}
}
},
"negotiator": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
......@@ -5423,6 +5874,36 @@
}
}
},
"node-pre-gyp": {
"version": "0.11.0",
"resolved": "http://192.168.110.93:4873/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz",
"integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==",
"optional": true,
"requires": {
"detect-libc": "^1.0.2",
"mkdirp": "^0.5.1",
"needle": "^2.2.1",
"nopt": "^4.0.1",
"npm-packlist": "^1.1.6",
"npmlog": "^4.0.2",
"rc": "^1.2.7",
"rimraf": "^2.6.1",
"semver": "^5.3.0",
"tar": "^4"
},
"dependencies": {
"nopt": {
"version": "4.0.3",
"resolved": "http://192.168.110.93:4873/nopt/-/nopt-4.0.3.tgz",
"integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
"optional": true,
"requires": {
"abbrev": "1",
"osenv": "^0.1.4"
}
}
}
},
"nopt": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
......@@ -5473,9 +5954,47 @@
},
"normalize-wheel": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
"resolved": "http://192.168.110.93:4873/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
"integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU="
},
"npm-bundled": {
"version": "1.1.1",
"resolved": "http://192.168.110.93:4873/npm-bundled/-/npm-bundled-1.1.1.tgz",
"integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==",
"optional": true,
"requires": {
"npm-normalize-package-bin": "^1.0.1"
}
},
"npm-normalize-package-bin": {
"version": "1.0.1",
"resolved": "http://192.168.110.93:4873/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz",
"integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==",
"optional": true
},
"npm-packlist": {
"version": "1.4.8",
"resolved": "http://192.168.110.93:4873/npm-packlist/-/npm-packlist-1.4.8.tgz",
"integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==",
"optional": true,
"requires": {
"ignore-walk": "^3.0.1",
"npm-bundled": "^1.0.1",
"npm-normalize-package-bin": "^1.0.1"
}
},
"npmlog": {
"version": "4.1.2",
"resolved": "http://192.168.110.93:4873/npmlog/-/npmlog-4.1.2.tgz",
"integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
"optional": true,
"requires": {
"are-we-there-yet": "~1.1.2",
"console-control-strings": "~1.1.0",
"gauge": "~2.7.3",
"set-blocking": "~2.0.0"
}
},
"nth-check": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
......@@ -5494,21 +6013,24 @@
"number-is-nan": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
"dev": true
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
},
"nwsapi": {
"version": "2.2.0",
"resolved": "http://192.168.110.93:4873/nwsapi/-/nwsapi-2.2.0.tgz",
"integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
"optional": true
},
"oauth-sign": {
"version": "0.9.0",
"resolved": "http://192.168.110.93:4873/oauth-sign/-/oauth-sign-0.9.0.tgz",
"integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=",
"dev": true,
"optional": true
},
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"dev": true
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
"object-copy": {
"version": "0.1.0",
......@@ -5589,7 +6111,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
"wrappy": "1"
}
......@@ -5619,6 +6140,20 @@
"pinkie-promise": "^2.0.0"
}
},
"optionator": {
"version": "0.8.3",
"resolved": "http://192.168.110.93:4873/optionator/-/optionator-0.8.3.tgz",
"integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
"optional": true,
"requires": {
"deep-is": "~0.1.3",
"fast-levenshtein": "~2.0.6",
"levn": "~0.3.0",
"prelude-ls": "~1.1.2",
"type-check": "~0.3.2",
"word-wrap": "~1.2.3"
}
},
"ora": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/ora/-/ora-1.4.0.tgz",
......@@ -5677,8 +6212,7 @@
"os-homedir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
"dev": true
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
},
"os-locale": {
"version": "1.4.0",
......@@ -5692,8 +6226,17 @@
"os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
"dev": true
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
},
"osenv": {
"version": "0.1.5",
"resolved": "http://192.168.110.93:4873/osenv/-/osenv-0.1.5.tgz",
"integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
"optional": true,
"requires": {
"os-homedir": "^1.0.0",
"os-tmpdir": "^1.0.0"
}
},
"pako": {
"version": "1.0.6",
......@@ -5766,6 +6309,12 @@
"error-ex": "^1.2.0"
}
},
"parse5": {
"version": "5.1.0",
"resolved": "http://192.168.110.93:4873/parse5/-/parse5-5.1.0.tgz",
"integrity": "sha1-xZNByXI/QUxFKXVWTHwApo1YrNI=",
"optional": true
},
"parseurl": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
......@@ -5802,8 +6351,7 @@
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
"path-parse": {
"version": "1.0.5",
......@@ -5845,7 +6393,6 @@
"version": "2.1.0",
"resolved": "http://192.168.110.93:4873/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
"dev": true,
"optional": true
},
"pify": {
......@@ -5878,6 +6425,12 @@
"find-up": "^1.0.0"
}
},
"pn": {
"version": "1.1.0",
"resolved": "http://192.168.110.93:4873/pn/-/pn-1.1.0.tgz",
"integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
"optional": true
},
"posix-character-classes": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
......@@ -6466,6 +7019,12 @@
"uniqs": "^2.0.0"
}
},
"prelude-ls": {
"version": "1.1.2",
"resolved": "http://192.168.110.93:4873/prelude-ls/-/prelude-ls-1.1.2.tgz",
"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
"optional": true
},
"prepend-http": {
"version": "1.0.4",
"resolved": "http://192.168.110.93:4873/prepend-http/-/prepend-http-1.0.4.tgz",
......@@ -6552,7 +7111,6 @@
"version": "1.3.0",
"resolved": "http://192.168.110.93:4873/psl/-/psl-1.3.0.tgz",
"integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==",
"dev": true,
"optional": true
},
"public-encrypt": {
......@@ -6571,8 +7129,7 @@
"punycode": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
"dev": true
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
},
"q": {
"version": "1.5.1",
......@@ -6693,6 +7250,26 @@
"unpipe": "1.0.0"
}
},
"rc": {
"version": "1.2.8",
"resolved": "http://192.168.110.93:4873/rc/-/rc-1.2.8.tgz",
"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
"optional": true,
"requires": {
"deep-extend": "^0.6.0",
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
},
"dependencies": {
"minimist": {
"version": "1.2.5",
"resolved": "http://192.168.110.93:4873/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"optional": true
}
}
},
"read-pkg": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
......@@ -6948,7 +7525,6 @@
"version": "2.88.0",
"resolved": "http://192.168.110.93:4873/request/-/request-2.88.0.tgz",
"integrity": "sha1-nC/KT301tZLv5Xx/ClXoEFIST+8=",
"dev": true,
"optional": true,
"requires": {
"aws-sign2": "~0.7.0",
......@@ -6977,21 +7553,18 @@
"version": "3.0.2",
"resolved": "http://192.168.110.93:4873/extend/-/extend-3.0.2.tgz",
"integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=",
"dev": true,
"optional": true
},
"mime-db": {
"version": "1.40.0",
"resolved": "http://192.168.110.93:4873/mime-db/-/mime-db-1.40.0.tgz",
"integrity": "sha1-plBX6ZjbCQ9zKmj2wnbTh9QSbDI=",
"dev": true,
"optional": true
},
"mime-types": {
"version": "2.1.24",
"resolved": "http://192.168.110.93:4873/mime-types/-/mime-types-2.1.24.tgz",
"integrity": "sha1-tvjQs+lR77d97eyhlM/20W9nb4E=",
"dev": true,
"optional": true,
"requires": {
"mime-db": "1.40.0"
......@@ -7001,18 +7574,44 @@
"version": "6.5.2",
"resolved": "http://192.168.110.93:4873/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
"dev": true,
"optional": true
},
"safe-buffer": {
"version": "5.2.0",
"resolved": "http://192.168.110.93:4873/safe-buffer/-/safe-buffer-5.2.0.tgz",
"integrity": "sha1-t02uxJsRSPiMZLaNSbHoFcHy9Rk=",
"dev": true,
"optional": true
}
}
},
"request-promise-core": {
"version": "1.1.4",
"resolved": "http://192.168.110.93:4873/request-promise-core/-/request-promise-core-1.1.4.tgz",
"integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==",
"optional": true,
"requires": {
"lodash": "^4.17.19"
},
"dependencies": {
"lodash": {
"version": "4.17.20",
"resolved": "http://192.168.110.93:4873/lodash/-/lodash-4.17.20.tgz",
"integrity": "sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI=",
"optional": true
}
}
},
"request-promise-native": {
"version": "1.0.9",
"resolved": "http://192.168.110.93:4873/request-promise-native/-/request-promise-native-1.0.9.tgz",
"integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==",
"optional": true,
"requires": {
"request-promise-core": "1.1.4",
"stealthy-require": "^1.1.1",
"tough-cookie": "^2.3.3"
}
},
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
......@@ -7039,8 +7638,8 @@
},
"resize-observer-polyfill": {
"version": "1.5.1",
"resolved": "http://registry.npm.taobao.org/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz",
"integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ="
"resolved": "http://192.168.110.93:4873/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
"integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
},
"resolve": {
"version": "1.5.0",
......@@ -7082,6 +7681,31 @@
"align-text": "^0.1.1"
}
},
"rimraf": {
"version": "2.7.1",
"resolved": "http://192.168.110.93:4873/rimraf/-/rimraf-2.7.1.tgz",
"integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
"optional": true,
"requires": {
"glob": "^7.1.3"
},
"dependencies": {
"glob": {
"version": "7.1.6",
"resolved": "http://192.168.110.93:4873/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"optional": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
}
}
},
"ripemd160": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
......@@ -7110,13 +7734,21 @@
"version": "2.1.2",
"resolved": "http://192.168.110.93:4873/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true
"optional": true
},
"sax": {
"version": "1.2.4",
"resolved": "http://192.168.110.93:4873/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
"dev": true
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
},
"saxes": {
"version": "3.1.11",
"resolved": "http://192.168.110.93:4873/saxes/-/saxes-3.1.11.tgz",
"integrity": "sha1-1Z0f0zLskq2YouCy7mRHAjhLHFs=",
"optional": true,
"requires": {
"xmlchars": "^2.1.1"
}
},
"schart.js": {
"version": "1.0.2",
......@@ -7135,8 +7767,7 @@
"semver": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
"integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
"dev": true
"integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
},
"send": {
"version": "0.16.1",
......@@ -7174,8 +7805,7 @@
"set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
"dev": true
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
},
"set-immediate-shim": {
"version": "1.0.1",
......@@ -7248,8 +7878,24 @@
"signal-exit": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
"dev": true
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
},
"simple-concat": {
"version": "1.0.1",
"resolved": "http://192.168.110.93:4873/simple-concat/-/simple-concat-1.0.1.tgz",
"integrity": "sha1-9Gl2CCujXCJj8cirXt/ibEHJVS8=",
"optional": true
},
"simple-get": {
"version": "3.1.0",
"resolved": "http://192.168.110.93:4873/simple-get/-/simple-get-3.1.0.tgz",
"integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==",
"optional": true,
"requires": {
"decompress-response": "^4.2.0",
"once": "^1.3.1",
"simple-concat": "^1.0.0"
}
},
"simplemde": {
"version": "1.11.2",
......@@ -7497,7 +8143,6 @@
"version": "1.16.1",
"resolved": "http://192.168.110.93:4873/sshpk/-/sshpk-1.16.1.tgz",
"integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=",
"dev": true,
"optional": true,
"requires": {
"asn1": "~0.2.3",
......@@ -7544,6 +8189,12 @@
"integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
"dev": true
},
"stealthy-require": {
"version": "1.1.1",
"resolved": "http://192.168.110.93:4873/stealthy-require/-/stealthy-require-1.1.1.tgz",
"integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
"optional": true
},
"stream-browserify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
......@@ -7650,7 +8301,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"dev": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
......@@ -7667,7 +8317,6 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
"requires": {
"ansi-regex": "^2.0.0"
}
......@@ -7681,6 +8330,12 @@
"is-utf8": "^0.2.0"
}
},
"strip-json-comments": {
"version": "2.0.1",
"resolved": "http://192.168.110.93:4873/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
"optional": true
},
"style-loader": {
"version": "0.23.1",
"resolved": "http://192.168.110.93:4873/style-loader/-/style-loader-0.23.1.tgz",
......@@ -7790,16 +8445,51 @@
"whet.extend": "~0.9.9"
}
},
"symbol-tree": {
"version": "3.2.4",
"resolved": "http://192.168.110.93:4873/symbol-tree/-/symbol-tree-3.2.4.tgz",
"integrity": "sha1-QwY30ki6d+B4iDlR+5qg7tfGP6I=",
"optional": true
},
"tapable": {
"version": "0.2.8",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz",
"integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=",
"dev": true
},
"tar": {
"version": "4.4.13",
"resolved": "http://192.168.110.93:4873/tar/-/tar-4.4.13.tgz",
"integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==",
"optional": true,
"requires": {
"chownr": "^1.1.1",
"fs-minipass": "^1.2.5",
"minipass": "^2.8.6",
"minizlib": "^1.2.1",
"mkdirp": "^0.5.0",
"safe-buffer": "^5.1.2",
"yallist": "^3.0.3"
},
"dependencies": {
"safe-buffer": {
"version": "5.2.1",
"resolved": "http://192.168.110.93:4873/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"optional": true
},
"yallist": {
"version": "3.1.1",
"resolved": "http://192.168.110.93:4873/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"optional": true
}
}
},
"throttle-debounce": {
"version": "1.1.0",
"resolved": "http://registry.npm.taobao.org/throttle-debounce/download/throttle-debounce-1.1.0.tgz",
"integrity": "sha1-UYU9o3vmihVctugns1FKPEIuic0="
"resolved": "http://192.168.110.93:4873/throttle-debounce/-/throttle-debounce-1.1.0.tgz",
"integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg=="
},
"time-stamp": {
"version": "2.0.0",
......@@ -7880,13 +8570,29 @@
"version": "2.4.3",
"resolved": "http://192.168.110.93:4873/tough-cookie/-/tough-cookie-2.4.3.tgz",
"integrity": "sha1-U/Nto/R3g7CSWvoG/587FlKA94E=",
"dev": true,
"optional": true,
"requires": {
"psl": "^1.1.24",
"punycode": "^1.4.1"
}
},
"tr46": {
"version": "1.0.1",
"resolved": "http://192.168.110.93:4873/tr46/-/tr46-1.0.1.tgz",
"integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
"optional": true,
"requires": {
"punycode": "^2.1.0"
},
"dependencies": {
"punycode": {
"version": "2.1.1",
"resolved": "http://192.168.110.93:4873/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"optional": true
}
}
},
"trim-right": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
......@@ -7905,11 +8611,52 @@
"integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
"dev": true
},
"tui-code-snippet": {
"version": "1.5.2",
"resolved": "http://192.168.110.93:4873/tui-code-snippet/-/tui-code-snippet-1.5.2.tgz",
"integrity": "sha1-9Ljw8ayZawtbYh93yVB68ZoN4jg="
},
"tui-color-picker": {
"version": "2.2.6",
"resolved": "http://192.168.110.93:4873/tui-color-picker/-/tui-color-picker-2.2.6.tgz",
"integrity": "sha1-urVORzgOVQuzrIrpdAIbPMJRiqk=",
"requires": {
"tui-code-snippet": "^2.2.0"
},
"dependencies": {
"tui-code-snippet": {
"version": "2.3.2",
"resolved": "http://192.168.110.93:4873/tui-code-snippet/-/tui-code-snippet-2.3.2.tgz",
"integrity": "sha1-Oes85G6pIEOzJE8VV5ckhTWIDF0="
}
}
},
"tui-image-editor": {
"version": "3.11.0",
"resolved": "http://192.168.110.93:4873/tui-image-editor/-/tui-image-editor-3.11.0.tgz",
"integrity": "sha1-QyVVbSZhikrHdPR3n2cWuVsWDRU=",
"requires": {
"core-js-pure": "^3.6.4",
"fabric": "4.2.0",
"tui-code-snippet": "^1.5.0",
"tui-color-picker": "^2.2.6"
},
"dependencies": {
"fabric": {
"version": "4.2.0",
"resolved": "http://192.168.110.93:4873/fabric/-/fabric-4.2.0.tgz",
"integrity": "sha1-wW2vVVmp7UV9Ue65OAmVZe8bRLo=",
"requires": {
"canvas": "^2.6.1",
"jsdom": "^15.2.1"
}
}
}
},
"tunnel-agent": {
"version": "0.6.0",
"resolved": "http://192.168.110.93:4873/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "^5.0.1"
......@@ -7919,7 +8666,16 @@
"version": "0.14.5",
"resolved": "http://192.168.110.93:4873/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
"dev": true
"optional": true
},
"type-check": {
"version": "0.3.2",
"resolved": "http://192.168.110.93:4873/type-check/-/type-check-0.3.2.tgz",
"integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
"optional": true,
"requires": {
"prelude-ls": "~1.1.2"
}
},
"type-is": {
"version": "1.6.16",
......@@ -8087,7 +8843,6 @@
"version": "4.2.2",
"resolved": "http://192.168.110.93:4873/uri-js/-/uri-js-4.2.2.tgz",
"integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
"dev": true,
"requires": {
"punycode": "^2.1.0"
},
......@@ -8095,8 +8850,7 @@
"punycode": {
"version": "2.1.1",
"resolved": "http://192.168.110.93:4873/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
}
}
},
......@@ -8200,9 +8954,24 @@
"version": "3.3.2",
"resolved": "http://192.168.110.93:4873/uuid/-/uuid-3.3.2.tgz",
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
"dev": true,
"optional": true
},
"v-viewer": {
"version": "1.5.1",
"resolved": "http://192.168.110.93:4873/v-viewer/-/v-viewer-1.5.1.tgz",
"integrity": "sha512-Q5ICKzmYQD0qTf+hti2Lhgy6UYY2zgFr+YrN9a3yPgr7pOjYrG405Pz4+6Z6FXlhdhGysCWFJUNCI2tsIyvjWQ==",
"requires": {
"throttle-debounce": "^2.0.1",
"viewerjs": "^1.5.0"
},
"dependencies": {
"throttle-debounce": {
"version": "2.3.0",
"resolved": "http://192.168.110.93:4873/throttle-debounce/-/throttle-debounce-2.3.0.tgz",
"integrity": "sha1-/TGGXmZQIHHkEYF+JBRls+nDcuI="
}
}
},
"validate-npm-package-license": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
......@@ -8229,7 +8998,6 @@
"version": "1.10.0",
"resolved": "http://192.168.110.93:4873/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"dev": true,
"optional": true,
"requires": {
"assert-plus": "^1.0.0",
......@@ -8237,6 +9005,11 @@
"extsprintf": "^1.2.0"
}
},
"viewerjs": {
"version": "1.9.0",
"resolved": "http://192.168.110.93:4873/viewerjs/-/viewerjs-1.9.0.tgz",
"integrity": "sha1-bfr1REDDsvdpG4Vma6bSdwjtlZI="
},
"vm-browserify": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
......@@ -8406,6 +9179,26 @@
"resolved": "https://registry.npmjs.org/vuex/-/vuex-3.0.1.tgz",
"integrity": "sha512-wLoqz0B7DSZtgbWL1ShIBBCjv22GV5U+vcBFox658g6V0s4wZV9P4YjCNyoHSyIBpj1f29JBoNQIqD82cR4O3w=="
},
"w3c-hr-time": {
"version": "1.0.2",
"resolved": "http://192.168.110.93:4873/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
"integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
"optional": true,
"requires": {
"browser-process-hrtime": "^1.0.0"
}
},
"w3c-xmlserializer": {
"version": "1.1.2",
"resolved": "http://192.168.110.93:4873/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz",
"integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==",
"optional": true,
"requires": {
"domexception": "^1.0.1",
"webidl-conversions": "^4.0.2",
"xml-name-validator": "^3.0.0"
}
},
"watchpack": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
......@@ -8417,6 +9210,12 @@
"neo-async": "^2.5.0"
}
},
"webidl-conversions": {
"version": "4.0.2",
"resolved": "http://192.168.110.93:4873/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
"integrity": "sha1-qFWYCx8LazWbodXZ+zmulB+qY60=",
"optional": true
},
"webpack": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-2.7.0.tgz",
......@@ -8600,6 +9399,43 @@
}
}
},
"whatwg-encoding": {
"version": "1.0.5",
"resolved": "http://192.168.110.93:4873/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
"integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
"optional": true,
"requires": {
"iconv-lite": "0.4.24"
},
"dependencies": {
"iconv-lite": {
"version": "0.4.24",
"resolved": "http://192.168.110.93:4873/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"optional": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
}
}
},
"whatwg-mimetype": {
"version": "2.3.0",
"resolved": "http://192.168.110.93:4873/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
"integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
"optional": true
},
"whatwg-url": {
"version": "7.1.0",
"resolved": "http://192.168.110.93:4873/whatwg-url/-/whatwg-url-7.1.0.tgz",
"integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
"optional": true,
"requires": {
"lodash.sortby": "^4.7.0",
"tr46": "^1.0.1",
"webidl-conversions": "^4.0.2"
}
},
"whet.extend": {
"version": "0.9.9",
"resolved": "http://192.168.110.93:4873/whet.extend/-/whet.extend-0.9.9.tgz",
......@@ -8612,12 +9448,27 @@
"integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
"dev": true
},
"wide-align": {
"version": "1.1.3",
"resolved": "http://192.168.110.93:4873/wide-align/-/wide-align-1.1.3.tgz",
"integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
"optional": true,
"requires": {
"string-width": "^1.0.2 || 2"
}
},
"window-size": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
"integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
"dev": true
},
"word-wrap": {
"version": "1.2.3",
"resolved": "http://192.168.110.93:4873/word-wrap/-/word-wrap-1.2.3.tgz",
"integrity": "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w=",
"optional": true
},
"wordwrap": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
......@@ -8637,8 +9488,7 @@
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"ws": {
"version": "4.1.0",
......@@ -8680,6 +9530,18 @@
"integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=",
"dev": true
},
"xml-name-validator": {
"version": "3.0.0",
"resolved": "http://192.168.110.93:4873/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
"integrity": "sha1-auc+Bt5NjG5H+fsYH3jWSK1FfGo=",
"optional": true
},
"xmlchars": {
"version": "2.2.0",
"resolved": "http://192.168.110.93:4873/xmlchars/-/xmlchars-2.2.0.tgz",
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
"optional": true
},
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
......@@ -8754,6 +9616,11 @@
"dev": true
}
}
},
"zrender": {
"version": "4.3.2",
"resolved": "http://192.168.110.93:4873/zrender/-/zrender-4.3.2.tgz",
"integrity": "sha1-7HQy+UFcgsc1hLa3uMR+GwFiCcY="
}
}
}
......@@ -10,9 +10,15 @@
"build:dll": "webpack --config build/webpack.dll.conf.js"
},
"dependencies": {
"@toast-ui/vue-image-editor": "^1.3.0",
"axios": "^0.18.0",
"babel-polyfill": "^6.23.0",
"element-ui": "^2.7.2",
"echarts": "^4.9.0",
"element-ui": "^2.15.0",
"fabric": "^4.3.0",
"file-saver": "^2.0.5",
"tui-image-editor": "^3.11.0",
"v-viewer": "^1.5.1",
"vue": "^2.3.2",
"vue-core-image-upload": "2.1.11",
"vue-datasource": "1.0.9",
......
export const baseUrl = 'https://dev-sc.yunqueyi.com';
\ No newline at end of file
......@@ -11,6 +11,7 @@ const menu = {
let headers = {
headers: {
'token': localStorage.getItem('token') || null
// 'token': '9606E40DDB704396AB532B2AE771048E',
// header('Access-Control-Allow-Origin:*')
}
};
......
......@@ -19,6 +19,7 @@ export const getAddress = () => {
let ipAddress = "https://" + window.location.host;
// let ipAddress = "http://localhost:8099";
let env = getTestEnv(ipAddress);
let versionUrl = "";
let preViewUrl = ""
let qiniuImgUrl = "";
let qiniuFileUrl = '';
......@@ -39,8 +40,9 @@ export const getAddress = () => {
let qiniuResourceUrl = "";//qiniu存储域名
//本地
if (ipAddress.indexOf("localhost") > -1 || ipAddress.indexOf("127.0.0.1") > -1 || ipAddress.indexOf("test-kf") > -1) {
if (ipAddress.indexOf("localhost") > -1 || ipAddress.indexOf("10.177.10.118") > -1 || ipAddress.indexOf("test-kf") > -1) {
ipAddress = "http://localhost:7070";
versionUrl = 'https://dev-dev.yunqueyi.com';
preViewUrl = "http://localhost:9090/#/template";
qiniuImgUrl = "https://test1-file.yunqueyi.com";
resource_url = "https://test-file.yunqueyi.com";
......@@ -52,7 +54,7 @@ export const getAddress = () => {
Url = ipAddress + "/ADMIN_CMS_FE/rest/";
//msUrl = "http://10.177.15.117:10201" + "/contents/";
// msUrl = "http://10.177.15.154:10203" + "/contents/";
msUrl = "http://dev-sc.yunqueyi.com" + "/contents/";
msUrl = "https://dev-sc.yunqueyi.com" + "/contents/";
lectureUrl = "https://dev-sc.yunqueyi.com"
liveUrl = "https://dev-sc.yunqueyi.com/campaign/";
kfUrl = "http://test1-kf.yunqueyi.com" + "/api/";
......@@ -61,9 +63,10 @@ export const getAddress = () => {
// qiniuUrl = "http://10.177.15.154:10203/contents/admin/qiniu/token"; //不再使用middle服务获取七牛token
qiniuUrl = "https://dev-sc.yunqueyi.com/contents/admin/qiniu/token";
// qiniuFileUrl = "http://10.177.15.154:10203/contents/admin/qiniu/token1";
qiniuFileUrl = "http://dev-sc.yunqueyi.com/contents/admin/qiniu/token1";
qiniuFileUrl = "https://dev-sc.yunqueyi.com/contents/admin/qiniu/token1";
qiniuResourceUrl = "https://test1-videos.yunqueyi.com";
} else if (isNotEmptyUtils(env)) {//测试test1 test2 uat
versionUrl = 'https://' + env + '-dev.yunqueyi.com';
preViewUrl = "https://" + env + "-phome.yunqueyi.com" + "/template/#/template"
qiniuFileUrl = "https://" + env + "-sc.yunqueyi.com" + "/contents/admin/qiniu/token1";
qiniuImgUrl = "https://test1-file.yunqueyi.com";
......@@ -97,6 +100,7 @@ export const getAddress = () => {
lectureUrl = "https://" + env + "-sc.yunqueyi.com"
}
} else {//生产环境
versionUrl = 'https://dev.yunqueyi.com';
preViewUrl = "https://phome.yunqueyi.com" + "/template/#/template"
qiniuFileUrl = "https://sc.yunqueyi.com" + "/contents/admin/qiniu/token1";
qiniuImgUrl = "https://files.yunqueyi.com";//qiniu存储域名
......@@ -116,6 +120,7 @@ export const getAddress = () => {
qiniuResourceUrl = "https://video.yunqueyi.com";//qiniu存储域名
exam_url = "https://sc.yunqueyi.com/exams";
}
localStorage.setItem("versionUrl",versionUrl);
localStorage.setItem("preViewUrl",preViewUrl);
localStorage.setItem("qiniuFileUrl", qiniuFileUrl);
localStorage.setItem("qiniuImgUrl", qiniuImgUrl);
......
......@@ -32,8 +32,9 @@ export default async(url = '', data = {}, type = 'POST', method = 'fetch',server
// 'Access-Control-Allow-Origin': '*',
'Accept': '*',
'Content-Type': 'application/json',
// 'token': localStorage.getItem('token') || null, //固定传header:
// 'system_code': 'todo' //固定传header:系统编号
'token': localStorage.getItem('token') || null, //固定传header:
// 'system_code': 'todo' //固定传header:系统编号
// 'token': '9606E40DDB704396AB532B2AE771048E',
},
}
......
......@@ -581,7 +581,7 @@ export const htmlMessageBox = (self, title, content, confirmButton, confirmFunct
* */
export const responseCheck = (res, self) => {
closeLoading(self);
console.log(res.data);
// console.log(res.data);
// setTimeout(function () {
let code = res.data ? res.data.code : 0;
if (code === "000000" || code === '200') {
......@@ -589,6 +589,10 @@ export const responseCheck = (res, self) => {
return true;
} else if (ResponseEnum.has(code)) {
messageBox(self, "提示", ResponseEnum.get(code), "是", function () {
// debugger;
if( code == '201550' ){
logout();
}
// logout();
}, "", null);
// setTimeout(function () {
......
<template>
<div class="header">
<div class="logo">敏感数据查看系统</div>
<div class="logo">数据服务</div>
<div class="user-info">
<el-dropdown trigger="click" @command="handleCommand">
<span class="el-dropdown-link">
......@@ -18,7 +18,7 @@
<span class="el-dropdown-link">
{{'系统切换'}}<i class="el-icon-arrow-down el-icon--right"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-menu slot="dropdown" class="nav-dropdown">
<el-dropdown-item v-for="item in systemInfoList" :key="item.id">
<span class="menu-item" @click="forward(item)">{{item.systemName}}</span>
<!--<el-tag type="warning" @click="forward(item)">{{item.system_name}}</el-tag>-->
......@@ -66,6 +66,7 @@
let headers = {
headers: {
'token': localStorage.getItem('token') || null
// 'token': '9606E40DDB704396AB532B2AE771048E',
}
};
// let headData = menuApi.headList(req,self);
......@@ -176,9 +177,14 @@
text-align: center;
}
.nav-dropdown .el-dropdown-menu__item{
padding: 0;
}
.menu-item {
font-size: 14px;
font-weight: 300;
color: #606266;
display: block;
padding: 0 20px;
}
</style>
......@@ -21,6 +21,7 @@
import vHead from './Header.vue';
import vSidebar from './Sidebar.vue';
import Axios from 'axios';
export default {
data: function () {
......@@ -40,7 +41,7 @@
let href = window.location.href;
let offset = href.indexOf("?");
// console.log(window.location.search);
console.log(href);
// console.log(href);
if (offset !== -1) {
let paramStr = href.substring(offset + 1, href.length);
......@@ -57,12 +58,6 @@
ssoLogin(href, paramMap);
}
}
// else if (localStorage.getItem("token")) {
// debugger
// Vue.prototype.$axios = self.$axios.create({
// headers: {'token': localStorage.getItem("token")}
// });
// }
}
},
components: {
......
......@@ -48,6 +48,7 @@
let headers = {
headers: {
'token': localStorage.getItem('token') || null
// 'token': '9606E40DDB704396AB532B2AE771048E',
}
};
self.$axios.post(localStorage.getItem("msUrl") + 'login/menu/list', req, headers).then(function (res) {
......@@ -56,23 +57,16 @@
// console.log("获取菜单成功===========",res);
self.items = res.data.data.picapMenuModels;
// 敏感数据查看系统 测试 Start <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 开发前期写死的,后续改成接口获取
self.items = [{
icon: null,
index: "#",
subs: [
{icon: null, index: "data-in", title: "数据导入", subs: []},
{icon: null, index: "data-view", title: "数据查看", subs: []},
],
title: "敏感数据",
},{
icon: null,
index: "#",
subs: [
{icon: null, index: "code-library", title: "后台编码库", subs: []},
{icon: null, index: "diagnose-manage", title: "诊断管理", subs: []},
],
title: "居民诊断",
}]
// self.items = [{
// icon: null,
// index: "#",
// subs: [
// {icon: null, index: "data-in", title: "数据导入", subs: []},
// {icon: null, index: "data-view", title: "数据查看", subs: []},
// ],
// title: "敏感数据",
// }]
// 敏感数据查看系统 测试 End <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
let data = JSON.parse(JSON.stringify(res.data.data));//通过这个实现深拷贝
......
<template>
<el-dialog :title="title" :visible.sync="showModal" width="700px" @close="close" center>
<el-form ref="form" :model="form" label-width="150px" size="medium " :rules="rules">
<el-form-item label="项目名称" prop="projectMainId">
<el-select v-model="form.projectMainId" placeholder="请选择项目名称">
<el-option v-for="item in pNameList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="审批编号" prop="dingdingNumber">
<el-input
style="width:220px"
:disabled="handleType=='2'"
:maxlength="21"
v-model="form.dingdingNumber"
placeholder="请输入内容"
></el-input>
</el-form-item>
<el-form-item label="申请日期" prop="dingdingDate">
<el-date-picker
v-model="form.dingdingDate"
:disabled="handleType=='2'"
value-format="yyyy-MM-dd"
type="date"
placeholder="选择日期"
></el-date-picker>
</el-form-item>
<el-form-item label="sheet名称" prop="dataSheetName">
<el-input
style="width:220px"
:disabled="handleType=='2'"
v-model="form.dataSheetName"
placeholder="请输入sheet名称"
></el-input>
</el-form-item>
<el-form-item label="数据需求方类型" prop="dataType">
<el-radio-group v-model="form.dataType" :disabled="handleType=='2'" @change="changeinout">
<el-radio :label="1" style="margin-right:50px">内部</el-radio>
<el-radio :label="2">外部</el-radio>
</el-radio-group>
</el-form-item>
<div class="insiders-wrap">
<template v-if="form.dataType == 1">
<el-form-item label="数据需求方姓名" prop="needIds">
<el-select v-model="form.needIds" multiple filterable placeholder="请选择">
<el-option
v-for="item in needIdsList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</template>
<template v-if="form.dataType == 2">
<el-form-item label="数据需求方姓名" prop="name">
<el-input style="width:200px" v-model="form.name" placeholder="请输入内容"></el-input>
</el-form-item>
<el-form-item label="数据需求方手机号" prop="mobilePhone">
<el-input style="width:200px" v-model="form.mobilePhone" placeholder="请输入内容"></el-input>
</el-form-item>
</template>
<el-form-item label="敏感信息查看" prop="sensitiveDataType">
<el-radio-group v-model="form.sensitiveDataType">
<el-radio :label="1" style="margin-right:50px"></el-radio>
<el-radio :label="2"></el-radio>
</el-radio-group>
</el-form-item>
<!-- 新增 导出次数 -->
<el-form-item label="导出次数" prop="exportCount">
<div>
<el-input style="width:200px" v-model="form.exportCount" placeholder="请输入导出次数"></el-input>
</div>
<div>备注:0代表没有导出权限</div>
</el-form-item>
<el-form-item label="数据需求角色" prop="dataRole">
<el-radio-group v-model="form.dataRole" :disabled="disableAdmintype">
<el-radio :label="1">管理员</el-radio>
<el-radio :label="2">普通用户</el-radio>
</el-radio-group>
</el-form-item>
<template v-if="form.dataRole==1">
<el-form-item label="数据分发人员" prop="ids">
<el-select v-model="form.ids" multiple filterable placeholder="请选择">
<el-option v-for="item in idsList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<!-- 新增 分发人员导出次数 -->
<el-form-item label="分发人员导出次数" prop="distributeExportCount">
<div>
<el-input
style="width:200px"
v-model="form.distributeExportCount"
placeholder="请输入分发人员导出次数"
></el-input>
</div>
<div>备注:0代表没有导出权限</div>
</el-form-item>
</template>
</div>
<template v-if="handleType=='1'">
<el-form-item label="文件上传" prop="fileId">
<el-upload
v-model="form.fileId"
drag
:action="returnActionUrl()"
:limit="1"
:headers="uploadHeaders"
:on-success="uploadSuccess"
:before-upload="beforeUpload"
class="upload-demo"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">
<em>点击上传</em>
</div>
</el-upload>
</el-form-item>
</template>
<template v-if="handleType=='2'">
<el-form-item label="文件上传">
<span>{{form.fileName}}</span>
</el-form-item>
</template>
<p class="txt-center">请确保第一列为手机号</p>
<el-form-item label="数据有效期" prop="dataTermValidity">
<el-date-picker
v-model="form.dataTermValidity"
value-format="yyyy-MM-dd"
type="date"
placeholder="选择日期"
></el-date-picker>
</el-form-item>
<el-form-item label="数据访问次数" prop="dataCount">
<div>
<el-input style="width:200px" v-model="form.dataCount" placeholder="请输入内容"></el-input>
</div>
<div>备注:0表示无限制</div>
</el-form-item>
<el-form-item label="敏感信息所在位置" prop="sensitiveDataColumn">
<div>
<el-input style="width:200px" v-model="form.sensitiveDataColumn" placeholder="请输入内容"></el-input>
</div>
<div>备注:多个以英文分号隔开</div>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="showModal=false">取 消</el-button>
<el-button type="primary" @click="submitForm('form')">确 定</el-button>
</span>
</el-dialog>
</template>
<script>
import { baseUrl } from "../../api/hostconfig";
import { openLoading, closeLoading } from "../../common/utils";
export default {
props: {
form: Object,
rules: Object,
handleType: String,
},
data() {
return {
title: "", // 表单title
baseUrl,
pNameList: [],
disableAdmintype: false,
needIdsList: [],
idsList: [],
showModal: true,
uploadHeaders: {
token: window.localStorage.getItem('token')
// token: "587657450F884CAAA62B3B39106B64E7",
},
};
},
created() {
// 获取数据需求方类型为内部时的需求方姓名列表
this.getData("get", `/sensitive/info/employee`, {}, (data) => {
this.needIdsList = data.data;
this.idsList = data.data;
});
// 数据导入时,获取项目名称列表
this.getData("get", `/sensitive/projectMain/getAll`, {}, (data) => {
this.pNameList = data.data;
});
this.title = this.handleType == "1" ? "数据导入" : "数据修改";
},
watch: {
"form.dataType"(val) {
if (val == 2) {
this.form.dataRole = 2;
this.disableAdmintype = true;
} else if (val == 1) {
}
},
"form.dataRole"(val) {
this.form.dataRole = val;
if (val == 1) {
this.disableAdmintype = false;
// 获取数据分发人员
this.getData("get", `/sensitive/info/employee`, {}, (data) => {
this.idsList = data.data;
});
} else {
if (this.form.dataType == 2) {
this.disableAdmintype = true;
}
}
},
},
methods: {
// 切换数据需求方类型为【内部】【外部】
changeinout(value) {
console.log("handle value: ", value);
},
returnActionUrl() {
return localStorage.getItem("lectureUrl") + "/sensitive/import/file";
},
// 上传成功
uploadSuccess(res, file, fileList) {
this.form.fileId = res.data;
this.$refs.form.validateField("fileId");
},
beforeUpload(file) {
var FileExt = file.name.replace(/.+\./, "");
if (["xls", "xlsx"].indexOf(FileExt.toLowerCase()) === -1) {
this.$message({
type: "warning",
message: "请上传后缀名为xls,xlsx的原文件!",
});
return false;
}
},
close() {
this.$emit("close");
},
submitForm(formName) {
console.log("createData.submitForm() : formName = " + formName);
this.$refs[formName].validate((valid) => {
if (valid) {
if (this.handleType == "1") {
this.getData(
"post",
"/sensitive/import/data",
this.form,
(data) => {
setTimeout(() => {
this.$emit("saveSuccess");
this.$emit("close");
}, 300);
}
);
} else {
console.log("createData.submitForm() : this.form = " + this.form);
this.getData("put", "/sensitive/import/data", this.form, (data) => {
setTimeout(() => {
this.$emit("saveSuccess");
this.$emit("close");
}, 300);
});
}
} else {
this.$message.error("请正确填写信息");
return false;
}
});
},
// 封装一下请求通用的方法
getData(type, url, req, callback) {
openLoading(this);
this.$axios[type](localStorage.getItem("lectureUrl") + url, req)
.then((res) => {
closeLoading(this);
let data = res.data;
if (data.code == "000000") {
if (callback) callback(data);
} else {
this.$message.error(data.message);
}
})
.catch((error) => {
closeLoading(this);
this.$message.error("网络出现点问题");
});
},
},
};
</script>
<style scoped>
.txt-center {
/* text-align: center; */
margin-left: 170px;
margin-bottom: 20px;
color: red;
}
</style>
\ No newline at end of file
<template>
<el-dialog title="数据修改" :visible.sync="showModal" width="750px" @close="close" center>
<el-form ref="form" :model="form">
<el-form-item label="审批编号">
<el-input style="width:220px" v-model="form.dingdingNumber" placeholder="请输入内容" required></el-input>
</el-form-item>
<el-form-item label="申请日期">
<el-date-picker v-model="form.dingdingDate" type="date" placeholder="选择日期"></el-date-picker>
</el-form-item>
<el-form-item label="sheet名称">
<el-select v-model="form.dataSheetName" placeholder="请选择">
<el-option
v-for="item in options"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="数据需求方类型">
<el-radio-group v-model="form.dataType" @change="changeinout">
<el-radio :label="1">内部</el-radio>
<el-radio :label="2">外部</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="数据需求方姓名">
<el-input style="width:200px" v-model="form.reviseName" placeholder="请输入内容"></el-input>
</el-form-item>
<el-form-item label="数据需求方手机号">
<el-input style="width:200px" v-model="form.revisePhone" placeholder="请输入内容"></el-input>
</el-form-item>
<el-form-item label="敏感信息查看">
<el-radio v-model="form.warning_radio" label="1">&#12288;&#12288;</el-radio>
<el-radio v-model="form.warning_radio" label="2"></el-radio>
</el-form-item>
<el-form-item label="分发人员">
<el-select v-model="form.revisemsgSend" filterable placeholder="请选择">
<el-option
v-for="item in options"
:key="item.revisemsgSend"
:label="item.label"
:value="item.revisemsgSend"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="数据有效期">
<el-date-picker
v-model="form.reviseUsefulDate"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item label="数据访问次数">
<!-- <span>数据访问次数&#12288;&#12288;</span> -->
<el-input style="width:200px" v-model="form.dataCount" placeholder="请输入内容"></el-input>
</el-form-item>
<el-form-item label="敏感信息所在位置">
<!-- <span>敏感信息所在位置</span> -->
<el-input style="width:200px" v-model="form.reviseSensitivePosition" placeholder="请输入内容"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="showModal=false">取 消</el-button>
<el-button type="primary" @click="submitForm('form')">确 定</el-button>
</span>
</el-dialog>
</template>
<script>
export default{
props: {
form: Object,
rules: Object
},
data(){
return {
options: [
{
value: "选项1",
label: "黄金糕"
},
{
value: "选项2",
label: "双皮奶"
},
{
value: "选项3",
label: "蚵仔煎"
},
{
value: "选项4",
label: "龙须面"
}
],
showModal: true
}
},
methods: {
// 切换数据需求方类型为【内部】【外部】
changeinout(value) {
console.log("handle value: ", value);
},
beforeUpload(file) {
var FileExt = file.name.replace(/.+\./, "");
if (["xls", "xlsx"].indexOf(FileExt.toLowerCase()) === -1) {
this.$message({
type: "warning",
message: "请上传后缀名为xls,xlsx的原文件!"
});
return false;
}
},
close(){
this.$emit('close')
},
submitForm(formName) {
this.$refs[formName].validate(valid => {
if (valid) {
alert("submit!");
} else {
console.log("error submit!!");
return false;
}
});
console.log("submitform触发");
},
}
}
</script>
\ No newline at end of file
import "babel-polyfill";
import Vue from 'vue';
import App from './App';
import router from './router';
......@@ -5,9 +6,10 @@ import store from './vuex/store'
import axios from 'axios';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css'; // 默认主题
import "babel-polyfill";
import {getAddress, loadCommonFilter} from './common/env'
import vueFilter from './common/filter'
import vueFilter from './common/filter';
import vViewer from 'v-viewer';
import 'viewerjs/dist/viewer.css';
//加载环境变量
......@@ -15,6 +17,9 @@ getAddress();
loadCommonFilter();
//加载elementUi
Vue.use(ElementUI);
Vue.use(vViewer, {
button: false
});
// Vue.use(vueXlsxTable, {rABS: false})
if (localStorage.getItem("token")) {
......
......@@ -9,33 +9,61 @@ export default new Router({
* 添加 mode: 'history' 之后将使用 HTML5 history 模式,该模式下没有 # 前缀,而且可以使用 pushState 和 replaceState 来管理记录。
* 关于 HTML5 history 模式的更多内容,可以参考官方文档:https://router.vuejs.org/zh-cn/essentials/history-mode.html
*/
// mode: 'history',
//mode: 'history',
routes: [
{
path: '/',
component: resolve => require(['../components/common/Home.vue'], resolve),
children: [
{
path: '/',
redirect: '/data-in'
},{ // 后台编码库
path: '/code-library',
component: resolve => require(['../views/code-library/code-library.vue'], resolve),
},{ // 常见诊断管理
path: '/diagnose-manage',
component: resolve => require(['../views/diagnose-manage/diagnose-manage.vue'], resolve)
},{ // 后台编码库
redirect: '/data-view',
},{ // 数据导入
path: '/data-in',
component: resolve => require(['../views/sensitive-control/data-in.vue'], resolve),
},{ // 常见诊断管理
}, { // 数据统计
path: '/data-statistic',
component: resolve => require(['../views/sensitive-control/data-statistic.vue'], resolve),
},{ // 数据查看
path: '/data-view',
component: resolve => require(['../views/sensitive-control/data-view.vue'], resolve)
},
{ // 用户路径分析
path: '/user-path',
component: resolve => require(['../views/user-path/funnel.vue'], resolve)
},
{ // 用户路径分析--新增转化漏斗
path: '/add-funnel',
component: resolve => require(['../views/user-path/add-funnel.vue'], resolve)
},
{ // 用户路径分析--查看数据
path: '/path-data',
component: resolve => require(['../views/user-path/funnel-data.vue'], resolve)
},
{ // 页面管理
path: '/strack-list',
component: resolve => require(['../views/strack-data/strack-list.vue'], resolve),
meta: {
keepAlive: true
}
},
{ // 埋点管理
path: '/create-point',
component: resolve => require(['../views/strack-data/create-point.vue'], resolve),
meta: {
keepAlive: true
}
}
]
}
},
{ // 短信中的 数据查看页面
path: '/data-view-message',
component: resolve => require(['../views/sensitive-control/data-view-message.vue'], resolve)
},
]
})
<template>
<div class="code-library-wrap">
<h2 class="top-title">后台编码库</h2>
<!-- 多个搜索框 -->
<el-row style="margin-top: 20px;">
<el-col :span="19">
<el-form :inline="true" ref="codeForm" :model="searchParams" >
<el-form-item label="名称:">
<el-input v-model="searchParams.diseaseName" size="small" class="input"></el-input>
</el-form-item>
<el-form-item label="别名:">
<el-input v-model="searchParams.alias" size="small" class="input"></el-input>
</el-form-item>
<el-form-item label="ICD编码:">
<el-input v-model="searchParams.icdCode" size="small" class="input"></el-input>
</el-form-item>
<el-form-item label="别名是否为空:">
<el-select v-model="searchParams.aliasType" size="small" placeholder="请选择">
<el-option
v-for="item in aliasTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-form>
</el-col>
<el-col :span="5" style="text-align: right;">
<el-button type="primary" @click="handleGoSearch">搜索</el-button>
<el-button type="primary" @click="handleNewAdd">新增</el-button>
</el-col>
</el-row>
<!-- 表格 -->
<el-table
:data="tableData"
border
style="width: 100%">
<el-table-column
align="center"
prop="icdCode"
label="ICD11编码"
width="180">
</el-table-column>
<el-table-column
align="center"
prop="diseaseName"
label="名称"
width="180">
</el-table-column>
<el-table-column
align="center"
prop="alias"
label="别名">
</el-table-column>
<el-table-column
align="center"
prop="modifiedName"
label="操作人">
</el-table-column>
<el-table-column
align="center"
prop="icdTypeValue"
label="类型">
</el-table-column>
<el-table-column
align="center"
prop="modifiedTime"
label="最近更新">
</el-table-column>
<el-table-column
align="center"
prop="address"
label="操作">
<template slot-scope="scope">
<el-button @click="handleEdit(scope.row)" type="text" >编辑</el-button>
<el-button type="text" @click="handleChangeStop(scope.row)">{{scope.row.status == 1 ? '停用' : '启用'}}</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<el-pagination
v-if="tableData && tableData.length > 0"
class="pagination-style"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:total="totalRows"
:current-page="searchParams.page"
:page-sizes="[15, 30, 50, 100]"
:page-size="searchParams.pageSize"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
<!-- 新增 弹窗 -->
<el-dialog
v-if="addSubmitForm"
:close-on-click-modal="false"
:visible.sync="newVisible"
width="700px"
center>
<!-- <span>需要注意的是内容是默认不居中的</span> -->
<el-form :inline="true" :rules="rules" ref="addSubmitForm" :model="addSubmitForm" label-width="100px">
<el-form-item label="名称:" prop="diseaseName">
<el-input v-model="addSubmitForm.diseaseName" size="small" class="input"></el-input>
</el-form-item>
<el-form-item label="ICD编码:" prop="icdCode">
<el-input v-model="addSubmitForm.icdCode" size="small" class="input"></el-input>
</el-form-item>
<el-form-item label="类型:" prop="icdType">
<el-select v-model="addSubmitForm.icdType" placeholder="请选择" size="small" style="width: 200px;" >
<el-option
v-for="item in icdTypeList"
:key="item.no"
:label="item.value"
:value="item.no">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="别名:" prop="alias">
<el-input v-model="addSubmitForm.alias" size="small" class="input"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleSubmit">提 交</el-button>
</span>
</el-dialog>
<!-- 提交确认 弹窗 -->
<el-dialog
class="confirm-add"
:close-on-click-modal="false"
:visible.sync="confirmAddVisible"
width="700px"
center>
<div class="info">
<p class="title">名称:</p>
<p class="value">{{addSubmitForm.diseaseName}}</p>
</div>
<div class="info name-repeat" v-if="isDiseaseNameRepeat">
名称存在重复,请仔细核验!
</div>
<div class="info">
<p class="title">ICD编码:</p>
<p class="value">{{addSubmitForm.icdCode}}</p>
</div>
<div class="info">
<p class="title">类型:</p>
<p class="value">{{returnICDType(addSubmitForm.icdType)}}</p>
</div>
<div class="info">
<p class="title">别名:</p>
<p class="value">{{addSubmitForm.alias}}</p>
</div>
<div class="tips">名称与编码生效后不可修改,请仔细核对</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleBack">上一步</el-button>
<el-button type="primary" @click="handleSubmitConfirm">确 认</el-button>
</span>
</el-dialog>
<!-- edit 弹窗 -->
<el-dialog
v-if="rowData"
class="edit-dialog-wrap"
:close-on-click-modal="false"
:visible.sync="editVisible"
width="700px"
center>
<el-form :inline="true" :model="rowData" label-width="100px">
<el-form-item label="名称:" class="red-star">
<el-input :disabled="true" v-model="rowData.diseaseName" size="small" class="input"></el-input>
</el-form-item>
<el-form-item label="ICD编码:" class="red-star">
<el-input :disabled="true" v-model="rowData.icdCode" size="small" class="input"></el-input>
</el-form-item>
<el-form-item label="类型:" class="red-star">
<el-input :disabled="true" :value="rowData.icdTypeValue" size="small" class="input"></el-input>
</el-form-item>
<el-form-item label="别名:">
<el-input v-model="rowData.alias" size="small" class="input"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleConfirmEdit">确 认</el-button>
</span>
</el-dialog>
<!-- 停用 启用 弹窗 -->
<el-dialog
:visible.sync="showStopOrActiveModal"
width="300px"
center>
<span style="letter-spacing: 1px;">请确认是否切换停用/启用状态?</span>
<span slot="footer" class="dialog-footer">
<el-button @click="showStopOrActiveModal = false">取 消</el-button>
<el-button type="primary" @click="handleFinalConfirmStop">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { openLoading, closeLoading, } from '../../common/utils';
export default {
data() {
return {
icdTypeList: [],
searchParams: {
diseaseName: '',
alias: '',
icdCode: '',
aliasType: 1,
page: 1,
pageSize: 15,
},
aliasTypeOptions: [{
label: '全部',
value: 1,
},{
label: '非空',
value: 2,
}],
totalRows: 0,
currentRowData: null,
showStopOrActiveModal: false, // 启用停用弹窗
tableData: [],
newVisible: false, // 新增 窗口
editVisible: false,
confirmAddVisible: false, // 新增的确认 窗口
rowData: null,
addSubmitForm: {
diseaseName: '',
icdCode: '',
icdType: 1,
alias: '',
},
rules: {
diseaseName: [
{ required: true, message: '请输入名称', trigger: 'blur' },
{ max: 100, message: '名称长度限制100个字符以内', trigger: 'blur' },
],
icdCode: [
{ required: true, message: '请输入ICD编码', trigger: 'blur' },
{ max: 20, message: '编码长度限制20个字符以内', trigger: 'blur' },
],
icdType: [
{ required: true, message: '请选择类型', trigger: 'blur' },
],
alias: [
{ max: 20, message: '别名长度限制20个字符以内', trigger: 'blur' },
]
},
isDiseaseNameRepeat: false,
}
},
created() {
this.getList();
this.getIcdType();
},
methods: {
handleSizeChange(val) {
// 每页多少条 切换
this.searchParams.pageSize = val;
this.getList();
},
handleCurrentChange(val) {
// 当前第几页 切换
this.searchParams.page = val;
this.getList();
},
handleGoSearch() {
this.searchParams.page = 1;
this.getList();
},
getList() {
let params = this.searchParams;
openLoading(this);
this.$axios.get(localStorage.getItem("lectureUrl") + '/medicineDictionary/icdContents/list', { params } )
.then((res) => {
closeLoading(this);
// console.log('list @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ', res.data)
let data = res.data;
if(data.code == "000000") {
if (data.data.icdContentsList && data.data.icdContentsList.length > 0) {
this.tableData = data.data.icdContentsList;
// this.tableData.map((item) => {
// item.isEdit = false;
// });
}else {
this.tableData = [];
}
this.totalRows = data.data.total;
}else {
this.$message.error(data.message);
}
}).catch((error) => {
this.$message.error('网络出现点问题')
})
},
getIcdType() {
// http://dev-sc.yunqueyi.com/basic-data/constants?typeCode=P227
openLoading(this);
this.$axios.get(localStorage.getItem("lectureUrl") + '/basic-data/constants?typeCode=P227', {} )
.then((res) => {
closeLoading(this);
// console.log('类型》》》》》》》》》》》》》》》》》》 ', res.data)
let data = res.data;
if(data.code == "000000") {
if (data.data && data.data.length > 0) {
this.icdTypeList = data.data;
}else {
this.icdTypeList = [];
}
}else {
this.$message.error(data.message);
}
}).catch((error) => {
this.$message.error('网络出现点问题')
})
},
returnICDType(type) {
let list = this.icdTypeList;
if(list && list.length > 0){
for(let i=0; i<list.length; i++){
if( list[i].no == type ){
return list[i].value;
}
}
}else{
return '';
}
},
handleNewAdd() {
this.newVisible = true;
this.$refs['addSubmitForm'] && this.$refs['addSubmitForm'].resetFields();
},
handleSubmit() {
this.$refs['addSubmitForm'].validate((valid) => {
if (valid) { // 验证 pass
// 请求 编码是否重复、名称是否重复接口,
// this.checkRepeat();
openLoading(this);
this.$axios.get(localStorage.getItem("lectureUrl") + `/medicineDictionary/icdContents/check/${this.addSubmitForm.icdCode}/${this.addSubmitForm.diseaseName}`, {} )
.then((res) => {
closeLoading(this);
// console.log('校验是否重复 ', res.data)
let data = res.data;
if(data.code == "216003") { // ICD 编码重复
this.$message({
showClose: true,
message: 'ICD编码与现有编码重复!请修改后再提交~',
type: 'error',
customClass: 'icd-code-repeat'
});
return;
}else if(data.code == "216005"){ // ICD 名称重复
this.isDiseaseNameRepeat = true;
this.confirmAddVisible = true;
}else if(data.code == "000000"){
this.isDiseaseNameRepeat = false;
this.confirmAddVisible = true;
}else{
this.isDiseaseNameRepeat = false;
this.$message.error(data.message);
}
}).catch((error) => {
this.$message.error('网络出现点问题')
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleBack() {
this.confirmAddVisible = false;
},
// 新增 最终确认
handleSubmitConfirm() {
let data = this.addSubmitForm;
let cb = () => {
this.confirmAddVisible = false;
this.newVisible = false;
this.getList();
};
this.addOrEdit(data, cb);
},
handleEdit(row) {
// console.log('row... ', row)
this.editVisible = true;
const { diseaseName, icdCode, icdType, alias, id, icdTypeValue } = row;
let data = {
diseaseName,
icdCode,
icdType,
alias,
id,
icdTypeValue,
};
this.rowData = data;
},
handleConfirmEdit() {
const { diseaseName, icdCode, icdType, alias, id } = this.rowData;
let data = {
diseaseName,
icdCode,
icdType,
alias,
id,
};
let cb = () => {
this.editVisible = false;
this.getList();
}
this.addOrEdit(data, cb);
},
// 新增或编辑
addOrEdit(data, cb){
openLoading(this);
this.$axios.post(localStorage.getItem("lectureUrl") + '/medicineDictionary/icdContents', data )
.then((res) => {
closeLoading(this);
// console.log('新增最终结果:', res);
cb && cb();
}).catch((error) => {
this.$message.error('网络出现点问题')
})
},
handleChangeStop(row) {
this.showStopOrActiveModal = true;
this.currentRowData = row;
},
handleFinalConfirmStop() {
let row = this.currentRowData;
let data = {
id: row.id,
status: row.status == 1 ? 2 : 1,
}
openLoading(this);
this.$axios.post(localStorage.getItem("lectureUrl") + '/medicineDictionary/icdContents/update/status', data )
.then((res) => {
this.showStopOrActiveModal = false;
closeLoading(this);
// console.log('res>>> ', res.data)
if(res.data.code == '000000'){
this.getList(); // 重新拉去列表
}
}).catch((error) => {
this.$message.error('网络出现点问题')
})
},
}
}
</script>
<style lang="less">
.code-library-wrap{
.top-title{
color: #333333;
}
.pagination-style{
margin-top: 30px;
float: right;
}
.input{ width: 200px; }
.confirm-add{
.el-dialog__body{
padding: 25px 100px 30px;
.info{
overflow: hidden;
&.name-repeat{
line-height: 30px;
color: red;
}
p{
float: left;
line-height: 30px;
}
.title{ width: 70px; }
.value{
width: 400px;
// overflow: hidden;
// text-overflow: ellipsis;
// white-space: nowrap;
}
}
.tips{
text-align: center; color: red; margin-top: 30px;
}
}
}
.edit-dialog-wrap{
.red-star .el-form-item__label::before{
content: '*';
color: #F56C6C;
margin-right: 4px;
}
}
}
.icd-code-repeat{
z-index: 9999 !important;
}
</style>
<template>
<div class="diagnose-manage-wrap">
<h2> 常见诊断</h2>
<el-row :gutter="30" style="margin-top: 20px;">
<el-form
:inline="true"
ref="searchParam"
:model="searchParam"
label-width="100px">
<el-col :span="12">
<el-form-item label="别名:">
<el-input
v-model="searchParam.alias"
size="small"
class="input"
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12" style="text-align: right">
<el-button type="primary" size="small" @click="searchHandle">搜索</el-button>
<el-button type="success" size="small" @click="addHandle">新增</el-button>
</el-col>
</el-form>
</el-row>
<el-table
:data="tableData"
border
style="width: 100%">
<el-table-column
prop="icdCode"
label="ICD11编码"
min-width="150"
align="center"
></el-table-column>
<el-table-column
prop="diseaseName"
label="名称"
min-width="150"
align="center"
></el-table-column>
<el-table-column
label="别名"
prop="alias"
min-width="150"
align="center"
></el-table-column>
<el-table-column
prop="seqNo"
label="排序"
min-width="220"
align="center">
<template slot-scope="scope">
<div>
<span style="margin-right:15px;">{{ scope.row.seqNo}}</span>
<el-button icon="el-icon-edit" size="mini" @click.prevent="toEidtSort(scope.row)"></el-button>
</div>
<!-- <div v-if="!scope.row.isEdit">
<span style="margin-right:15px;">{{ scope.row.seqNo}}</span>
<el-button icon="el-icon-edit" size="mini" @click.prevent="toEidtSort(scope.row)"></el-button>
</div>
<div v-else>
<el-input
type="text"
size="small"
v-model="scope.row.sortNoEdit"
minlength="1"
maxlength="3"
@keyup.native="validateNumber(scope.row.sortNoEdit,scope.row)"
style="width: 80px">
</el-input>
<el-button size="mini" style="margin-left:10px;" @click.prevent="cancelHandle(scope.row)">取消</el-button>
<el-button type="primary" size="mini" @click.prevent="saveHandle(scope.row)">保存</el-button>
</div>-->
</template>
</el-table-column>
<el-table-column
label="最近更新"
min-width="150"
align="center">
<template slot-scope="scope">
<span>{{ formatDate(scope.row.modifiedTime)}} {{scope.row.modifiedName}}</span>
</template>
</el-table-column>
<el-table-column
label="操作"
fixed="right"
align="center"
min-width="130">
<template slot-scope="scope">
<el-button type="danger" size="small" @click="deleteLayout(scope.row)">移除</el-button>
</template>
</el-table-column>
</el-table>
<el-row type="flex" justify="end" style="margin-top: 20px;">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="searchParam.page"
:page-sizes="[15, 30, 50, 100]"
:page-size="searchParam.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows">
</el-pagination>
</el-row>
<el-dialog
title="新增"
:visible.sync="dialogVisible"
width="30%"
:close-on-click-modal="false"
:close-on-press-escape="false"
@close="addCancel"
center>
<el-form ref="addForm" :model="addForm" label-width="70px" :rules="rules">
<el-form-item label="别名" prop="alias">
<el-select
v-model="addForm.alias"
filterable
clearable
style="width:80%"
placeholder="请选择ICD11编码别名">
<el-option
v-for="item in aliasList"
:key="item.icdCode"
:label="item.alias"
:value="item.alias"
style="max-width: 600px;">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="排序">
<el-input
v-model="addForm.seqNo"
type="text"
class="input"
minlength="1"
maxlength="3"
@keyup.native="validateNumber(addForm.seqNo,2)"
clearable
style="width:80%"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="addCancel">取 消</el-button>
<el-button type="primary" @click="addConfirm">确 定</el-button>
</span>
</el-dialog>
<el-dialog
title="编辑排序"
:visible.sync="dialogVisibleEdit"
width="450px"
:close-on-click-modal="false"
:close-on-press-escape="false"
@close="editCancel"
center>
<el-form ref="editForm" :model="editForm" label-width="120px" :rules="editRules" label-suffix=":">
<el-form-item label="别名" prop="alias">
<p>{{editForm.alias}}</p>
</el-form-item>
<el-form-item label="当前排序">
<p>{{editForm.seqNo}}</p>
</el-form-item>
<el-form-item label="修改排序">
<el-input
v-model="editForm.seqNoNew"
type="text"
class="input"
minlength="1"
maxlength="3"
@keyup.native="validateNumber(editForm.seqNoNew,1)"
clearable
style="width:80%"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="editCancel">取 消</el-button>
<el-button type="primary" @click="editConfirm">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { openLoading, closeLoading, } from '../../common/utils';
export default {
components: {},
data() {
return {
searchParam: {
alias: '',
page: 1,
pageSize: 15,
},
addForm: {
alias: '',
seqNo: null,
},
tableData: [],
totalRows: 1,
dialogVisible: false,
aliasList: [],
dialogVisibleEdit: false,
editForm: {
seqNoNew: '',
},
rules: {
alias: [{ required: true, message: '请选择别名', trigger: 'change' }],
},
editRules : {},
}
},
created() {
this.getCommonList();
this.getAliasList();
},
methods: {
getCommonList() {
let params = {
...this.searchParam,
};
openLoading(this);
this.$axios.get(localStorage.getItem("lectureUrl") + '/medicineDictionary/icdCommonDiagnosis/list',
{ params }
).then((res) => {
closeLoading(this);
let data = res.data;
if(data.code == "000000") {
if (data.data.icdContentsList && data.data.icdContentsList.length > 0) {
this.tableData = data.data.icdContentsList;
this.tableData.map((item) => {
item.isEdit = false;
});
}else {
this.tableData = [];
}
this.totalRows = data.data.total;
}else {
this.$message.error(data.message);
}
}).catch((error) => {
this.$message.error('网络出现点问题')
})
},
getAliasList() {
openLoading(this);
this.$axios.get(localStorage.getItem("lectureUrl") + '/medicineDictionary/icdContents/alias',
).then((res) => {
closeLoading(this);
let data = res.data;
if(data.code == "000000") {
this.aliasList = data.data;
}else {
this.$message.error(data.message);
}
}).catch((error) => {
this.$message.error('网络出现点问题')
})
},
searchHandle() {
this.searchParam.page = 1;
this.getCommonList();
},
addHandle() {
this.dialogVisible = true;
},
deleteLayout(row) {
let params = {
id: row.id
}
this.$confirm('此操作将移除该常用诊断, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
openLoading(this);
this.$axios.delete(localStorage.getItem("lectureUrl") + '/medicineDictionary/icdCommonDiagnosis/',
{data: params}
).then((res) => {
let data = res.data;
if(data.code == "000000") {
this.$message.success('移除成功')
this.searchParam.page = 1;
this.getCommonList();
}else {
this.$message.error(data.message);
}
}).catch((error) => {
this.$message.error('网络出现点问题')
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消移除'
});
});
},
handleSizeChange(pageSize) {
this.searchParam.pageSize = pageSize;
this.searchParam.page = 1;
this.getCommonList();
},
handleCurrentChange(page) {
this.searchParam.page = page;
this.getCommonList();
},
toEidtSort(row) {
// row.isEdit = true;
this.dialogVisibleEdit = true;
this.editForm = row;
},
cancelHandle(row) {
row.isEdit = false;
row.sortNoEdit = null;
},
saveHandle(row) {
let params = {
seqNo: row.sortNoEdit,
id: row.id,
};
//请求更新排序接口
openLoading(this);
this.$axios.post(localStorage.getItem("lectureUrl") + `/medicineDictionary/icdCommonDiagnosis/update/seqNo`,
params
).then((res) => {
closeLoading(this);
let data = res.data;
if(data.code == "000000") {
row.isEdit = false;
row.sortNoEdit = null;
this.searchParam.page = 1;
this.getCommonList();
}else {
this.$message.error(data.message);
}
}).catch((error) => {
row.isEdit = false;
row.sortNoEdit = null;
this.$message.error('网络出现点问题')
})
//接口请求成功后
// row.seqNo = row.sortNoEdit;
},
addCancel() {
this.dialogVisible = false
this.$refs.addForm.resetFields();
this.addForm.seqNo = null;
},
addConfirm() {
this.$refs['addForm'].validate((valid) => {
if (valid) {
let icdCode;
this.aliasList.map((item) => {
if (item.alias == this.addForm.alias) {
icdCode = item.icdCode;
}
})
let params = {
...this.addForm,
icdCode: icdCode,
};
//请求接口
openLoading(this);
this.$axios.post(localStorage.getItem("lectureUrl") + '/medicineDictionary/icdCommonDiagnosis',
params
).then((res) => {
closeLoading(this);
let data = res.data;
if(data.code == "000000") {
this.$refs.addForm.resetFields();
this.addForm.seqNo = null;
this.dialogVisible = false
this.$message.success('新增成功')
this.searchParam.page = 1;
this.getCommonList();
}else {
this.$message.error(data.message);
}
}).catch((error) => {
this.$message.error('网络出现点问题')
})
} else {
// this.$refs.addForm.resetFields()
return false;
}
});
},
editCancel() {
this.dialogVisibleEdit = false;
},
editConfirm() {
let params = {
seqNo: this.editForm.seqNoNew,
id: this.editForm.id,
};
//请求更新排序接口
openLoading(this);
this.$axios.post(localStorage.getItem("lectureUrl") + `/medicineDictionary/icdCommonDiagnosis/update/seqNo`,
params
).then((res) => {
closeLoading(this);
let data = res.data;
if(data.code == "000000") {
this.dialogVisibleEdit = false;
this.$message.success('修改成功')
this.searchParam.page = 1;
this.getCommonList();
}else {
this.$message.error(data.message);
}
}).catch((error) => {
this.$message.error('网络出现点问题')
})
},
validateNumber(num, pra) {
num = num.replace(/[^\.\d]/g,'');
num = num.replace('.','');
if (num == 0) {
num = null;
}
if (pra === 1) {
this.editForm.seqNoNew = num;
} else if (pra === 2) {
this.addForm.seqNo = num;
} else {
pra.sortNoEdit = num;
}
},
formatDate(now) {
let d = new Date(now);
let year = d.getFullYear();
let month = d.getMonth()+1;
let date = d.getDate();
month = (month < 10) ? `0${month}` : month;
date = (date < 10) ? `0${date}` : date;
return year+"-"+month+"-"+date;
}
}
}
</script>
<style lang="less" scoped>
.diagnose-manage-wrap{
color: #333333;
.el-button--mini, .el-button--mini.is-round{
padding: 5px;
}
}
</style>
<template>
<div class="data-in-wrap">
<h2 class="top-title">数据导入</h2>
<el-form ref="form" :model="queryParams" label-width="100px" :inline="true" :rules="rules">
<el-form-item label="审批编号" prop="dingdingNumber">
<el-input
v-model="queryParams.dingdingNumber"
size="small"
style="width:220px"
class="input"
placeholder="审批编号查询"
clearable
@input="handleIdChange"
@keydown.native="numInputLimit"
maxlength="21"
></el-input>
</el-form-item>
<el-form-item label="申请日期" prop="dingdingDate">
<el-select v-model="queryParams.dingdingDate" placeholder="请选择" @change="handleDatechange" clearable>
<el-option v-for="item in dingdingDateList" :key="item" :label="item" :value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="sheet名称" prop="dataSheetName">
<el-select
v-model="queryParams.dataSheetName"
placeholder="请选择"
@change="handleSheetchange"
clearable
>
<el-option v-for="item in sheetList" :key="item" :label="item" :value="item"></el-option>
</el-select>
</el-form-item>
</el-form>
<div class="block" style="margin-bottom:20px">
<el-button @click="createDataHandle">数据导入</el-button>
<el-button @click="queryDataListByClick">数据查询</el-button>
<el-button @click="addproject">添加项目</el-button>
</div>
<template>
<el-table :data="dataList" style="width: 100%">
<el-table-column label="审批编号" prop="dingdingNumber" width="180"></el-table-column>
<el-table-column label="人员姓名" prop="name" width="120"></el-table-column>
<el-table-column label="申请日期" prop="dingdingDate"></el-table-column>
<el-table-column label="sheet名称" prop="dataSheetName"></el-table-column>
<el-table-column label="附件名称" prop="fileName"></el-table-column>
<el-table-column label="状态" prop="status" :formatter="formatStatus"></el-table-column>
<el-table-column label="通知状态" prop="sendType" :formatter="formatSendType"></el-table-column>
<el-table-column label="操作" fixed="right" width="200">
<template slot-scope="scope">
<el-button @click="dataview(scope.row)" type="text" size="small">查看</el-button>
<template v-if="scope.row.status==1">
<el-button @click="modifyDataHandle(scope.row.id)" type="text" size="small">修改</el-button>
<el-button @click="notifyDingHandle(scope.row)" type="text" size="small">通知</el-button>
<el-button @click="closeDingHandle(scope.row.userId)" type="text" size="small">关闭</el-button>
</template>
</template>
</el-table-column>
</el-table>
<el-pagination
v-if="dataList && dataList.length > 0"
class="pagination-style"
@size-change="handleSizeChange"
@current-change="dataListChange"
:total="total"
:current-page="currentPage"
:page-sizes="[15, 50, 100, 200, 300]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
></el-pagination>
</template>
<!-- 数据导入 page -->
<createData
v-if="centerDialogVisible"
:form="form"
:rules="rules"
:handleType="handleType"
@close="closeCreate"
@saveSuccess="saveSuccess"
/>
<!-- 数据修改 page -->
<!-- <modifyData
v-if="reviseDialogVisible"
:form="form"
:rules="rules"
@close="closeModify"
/>-->
<el-dialog
:title="dialogTitle"
:visible.sync="addProjectVisible"
:close-on-click-modal="false"
style="text-align: center"
>
<el-row style="margin-top: 20px;" type="flex">
<el-col :span="3" style="margin-left: 70px;">
<label style="font-size: 18px;">项目名称</label>
</el-col>
<el-col :span="12" style="margin-left: 20px;">
<el-input v-model="projectName" size="small" />
</el-col>
</el-row>
<div slot="footer" style="text-align: center">
<el-button type="primary" @click="dialogSave">确认</el-button>
<el-button @click="addProjectVisible = false">取消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { openLoading, closeLoading, } from '../../common/utils';
export default {
data() {
return {
import createData from "../../components/page/createData";
// import modifyData from '../../components/page/modifyData';
import { baseUrl } from "../../api/hostconfig";
import { openLoading, closeLoading } from "../../common/utils";
export default {
components: {
createData
// modifyData
},
data() {
var checkNumLength = (rule, value, callback) => {
if (!value) {
return callback(new Error("请输入审批单号"));
} else if (value && (value + "").length != 21) {
callback(new Error("审批单号必须为21位数字值"));
} else {
callback();
}
};
return {
handleType: "1", // 表单操作类型,1.新增 2.修改
currentPage: 1,
pageSize: 15,
total: 50, // 默认分页总数
dataList: [], // 初始化数据列表
centerDialogVisible: false, // 是否显示数据导入(新增)
reviseDialogVisible: false, // 是否显示数据导入(修改)
sheetList: [], // 被搜索出来的sheet列表
dingdingDateList: [], //申请日期列表
// 查询的字段
queryParams: {
dingdingNumber: "", // 审批编号
dingdingDate: "", // 申请日期
dataSheetName: "" // sheet名称
},
form: {
status: 1,
projectMainId: [], //项目名称
dingdingNumber: "", // 审批编号
dingdingDate: "", // 申请日期
dataSheetName: "", //sheet名称
dataType: "", // 数据需求方类型 1.内部 2.外部
needIds: [], // 数据需求方id集合 需求方类型选择为 dataType【内部】
mobilePhone: "", // 数据需求方类型为【外部】需要传递 dataType【外部】
name: "", // 数据需求方类型为【外部】需要传递 dataType【外部】
sensitiveDataType: "", // 敏感信息查看权限 1是,2否
dataRole: "", //数据需求角色 1管理员,2普通用户
ids: [], // 数据分发人员数组
fileId: "", // 文件上传id
dataTermValidity: "", // 数据有效期 - 日期
dataCount: "", // 数据访问次数限制
sensitiveDataColumn: "" // 敏感信息列所在位置
},
rules: {
projectMainId: [
{ required: true, message: "请选择项目名称", trigger: "blur" }
],
dingdingNumber: [
{
required: true,
validator: checkNumLength,
message: "请输入正确格式的审批编号",
trigger: ["blur", "change"]
},
{
pattern: /^[5A-Za-z0-9-\_]+$/,
message: "只能输入英文,数字,下划线,横线"
}
],
dingdingDate: [
{ required: true, message: "请选择日期", trigger: "change" }
],
dataSheetName: [
{ required: true, message: "请输入sheet名称", trigger: "change" }
],
dataType: [
{
required: true,
message: "请至少选择一个数据方类型",
trigger: "change"
}
],
needIds: [
{
required: true,
message: "请输入内部数据需求方姓名",
trigger: "blur"
}
],
mobilePhone: [
{
required: true,
message: "请输入内部数据需求方手机号",
trigger: "blur"
},
{ pattern: /^1[345789]\d{9}$/, message: "输入正确格式的手机号" }
],
name: [
{
required: true,
message: "请输入外部数据需求方姓名",
trigger: "blur"
}
],
sensitiveDataType: [
{ required: true, message: "请确定敏感信息", trigger: "change" }
],
exportCount: [
{ required: true, message: "请确定导出次数", trigger: "blur" },
{ pattern: /^\+?[0-9][0-9]*$/, message: "导出次数只能是正整数" }
],
dataRole: [
{
required: true,
message: "请选择一个数据需求角色",
trigger: "change"
}
],
ids: [
{ required: true, message: "请选择数据分发人员", trigger: "blur" }
],
distributeExportCount: [
{ required: true, message: "请确定导出次数", trigger: "blur" },
{ pattern: /^\+?[0-9][0-9]*$/, message: "导出次数只能是正整数" }
],
fileId: [{ required: true, message: "请上传文件", trigger: "change" }],
dataTermValidity: [
{ required: true, message: "请填写数据有效期", trigger: "blur" }
],
dataCount: [
{ required: true, message: "请填写数据访问次数", trigger: "blur" },
{ pattern: /^\+?[0-9][0-9]*$/, message: "访问次数只能是正整数" }
],
sensitiveDataColumn: [
{ required: true, message: "请填写敏感信息所在位置", trigger: "blur" }
]
},
addProjectVisible: false,
dialogTitle: "添加项目",
projectName: ""
};
},
created() {
// 初始化获取数据列表
this.getDataList(this.currentPage, {});
},
methods: {
// 根据审批编号查询申请日期操作
handleIdChange(value) {
if (value.length == 21) {
this.getData(
"get",
`/sensitive/visit/date?dingdingNumber=${value}`,
{},
data => {
this.dingdingDateList = data.data;
}
);
} else {
this.dingdingDateList = [];
this.sheetList = [];
this.queryParams.dingdingDate = "";
this.queryParams.dataSheetName = "";
}
},
created() {
// 根据审批编号和日期搜索sheet
handleDatechange(val) {
this.sheetList = [];
this.queryParams.dataSheetName = "";
this.getData(
"get",
`/sensitive/visit/sheet?dingdingNumber=${this.queryParams.dingdingNumber}&dingdingDate=${val}`,
{},
data => {
this.sheetList = data.data;
}
);
},
methods: {
// 选中sheet
handleSheetchange(val) {},
queryDataListByClick() {
this.currentPage = 1;
this.queryDataList();
},
// 数据查询
queryDataList() {
this.getDataList(this.currentPage, this.queryParams);
},
// 获取全部分页数据
getDataList(pageNum, queryData) {
this.getData(
"post",
"/sensitive/visit",
{
pageNum: pageNum,
pageSize: this.pageSize,
...queryData
},
data => {
this.dataList = data.data.list;
this.total = data.data.total;
}
);
},
// 根据页码获取数据
handleSizeChange(size) {
this.pageSize = size;
this.getDataList(this.currentPage, this.queryParams);
},
// 根据分页获取数据
dataListChange(num) {
console.log("dataListChange() : num = " + num);
this.currentPage = num;
this.getDataList(num, this.queryParams);
},
// 过滤状态显示
formatStatus(row, column) {
let value;
if (row.status == 1) {
value = "正常";
} else if (row.status == 2) {
value = "关闭";
}
return value;
},
// 过滤同志状态显示
formatSendType(row, column) {
let value;
if (row.sendType == 1) {
value = "已通知";
} else if (row.sendType == 2) {
value = "未通知";
}
return value;
},
// 新增数据-数据导入
createDataHandle() {
this.centerDialogVisible = true;
this.handleType = "1";
this.form = {
status: 1,
projectMainId: [], //项目名称
dingdingNumber: "", // 审批编号
dingdingDate: "", // 申请日期
dataSheetName: "", //sheet名称
dataType: "", // 数据需求方类型 1.内部 2.外部
needIds: [], // 数据需求方id集合 需求方类型选择为 dataType【内部】
mobilePhone: "", // 数据需求方类型为【外部】需要传递 dataType【外部】
name: "", // 数据需求方类型为【外部】需要传递 dataType【外部】
sensitiveDataType: "", // 敏感信息查看权限 1是,2否
dataRole: "", //数据需求角色 1管理员,2普通用户
ids: [], // 数据分发人员数组
fileId: "", // 文件上传id
dataTermValidity: "", // 数据有效期 - 日期
dataCount: "", // 数据访问次数限制
sensitiveDataColumn: "" // 敏感信息列所在位置
};
},
//添加项目
addproject() {
this.addProjectVisible = true;
},
dialogSave() {
this.getData(
"get", `/sensitive/projectMain/add?projectName=${this.projectName}`, {},
data => {
this.$message({
type: "success",
message: "项目添加成功"
});
this.addProjectVisible = false;
}
);
},
// 修改数据
modifyDataHandle(id) {
console.log("modifyDataHandle() : id = " + id)
// 为了方便测试,这里写一个有效的dev环境的id值!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!切记删除
// 为了方便测试,这里写一个有效的dev环境的id值!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!切记删除
// id = 60;
// 为了方便测试,这里写一个有效的dev环境的id值!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!切记删除
// 为了方便测试,这里写一个有效的dev环境的id值!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!切记删除
this.centerDialogVisible = true;
this.handleType = "2";
this.getData("get", `/sensitive/import/data?id=${id}`, {}, data => {
const form = data.data;
if (!form.needIds) form.needIds = [];
if (!form.ids) form.ids = [];
form.id = id;
this.form = form;
});
},
// 列表关闭操作
closeDingHandle(userId) {
this.$confirm("确定关闭?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
center: true,
customClass: "close-msg-box"
}).then(() => {
this.getData(
"put",
`/sensitive/visit/status?userId=${userId}`,
{},
data => {
this.$message({
type: "success",
message: "关闭成功!"
});
this.getDataList(this.currentPage, this.queryParams);
}
);
});
},
// 列表通知操作
notifyDingHandle(obj) {
const {
dataSheetName,
dingdingDate,
dingdingNumber,
mobilePhone,
userId
} = obj;
this.$confirm("确定通知该用户?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
center: true,
customClass: "close-msg-box"
}).then(() => {
this.getData(
"put",
"/sensitive/visit/notice",
{
dataSheetName,
dingdingDate,
dingdingNumber,
mobilePhone,
userId
},
data => {
this.$message({
type: "success",
message: "通知成功!"
});
this.getDataList(this.currentPage, this.queryParams);
}
);
});
},
// 查看个人审批编号页面
dataview(row) {
this.$router.push("/data-view");
this.$router.push({
path: "/data-view",
query: {
dingdingNumber: row.dingdingNumber,
dingdingDate: row.dingdingDate,
sheet: row.dataSheetName
}
});
},
numInputLimit(e) {
let key = e.key;
// 不允许输入'e'和'.'
if (key === "e" || key === ".") {
e.returnValue = false;
return false;
}
return true;
},
resetForm(formName) {
this.$refs[formName].resetFields();
},
closeCreate() {
this.centerDialogVisible = false;
},
closeModify() {
this.reviseDialogVisible = false;
},
// 数据导入成功之后的通知方法
saveSuccess() {
this.getDataList(this.currentPage, this.queryParams);
},
// 封装一下请求通用的方法
getData(type, url, req, callback) {
openLoading(this);
this.$axios[type](localStorage.getItem("lectureUrl") + url, req)
.then(res => {
closeLoading(this);
let data = res.data;
if (data.code == "000000") {
if (callback) callback(data);
} else {
this.$message.error(data.message);
}
})
.catch(error => {
closeLoading(this);
this.$message.error("网络出现点问题");
});
}
}
};
</script>
<style lang="less">
.data-in-wrap{
.top-title{
color: #333333;
}
.data-in-wrap {
.pagination-style {
margin-top: 30px;
float: right;
}
</style>
\ No newline at end of file
}
.close-msg-box {
width: 280px;
}
</style>
<template>
<div class="data-in-wrap">
<el-form ref="form" :model="queryParams" label-width="100px" :inline="true" :rules="rules">
<el-form-item label="项目名称" prop="projectMainId">
<el-select v-model="queryParams.projectMainId" placeholder="请选择项目" clearable>
<el-option v-for="item in projectList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="审批编号" prop="dingdingNumber">
<el-input
v-model="queryParams.dingdingNumber"
size="small"
style="width:220px"
class="input"
placeholder="审批编号查询"
clearable
@input="handleIdChange"
@keydown.native="numInputLimit"
maxlength="21"
></el-input>
</el-form-item>
<el-form-item label="申请日期" prop="dingdingDate">
<el-select
v-model="queryParams.dingdingDate"
placeholder="请选择"
@change="handleDatechange"
clearable
>
<el-option v-for="item in dingdingDateList" :key="item" :label="item" :value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="sheet名称" prop="dataSheetName">
<el-select
v-model="queryParams.dataSheetName"
placeholder="请选择"
@change="handleSheetchange"
clearable
>
<el-option v-for="item in sheetList" :key="item" :label="item" :value="item"></el-option>
</el-select>
</el-form-item>
</el-form>
<div class="block" style="margin-bottom:20px;display: flex;">
<el-button @click="showProjectTag">项目标签设置</el-button>
<el-button @click="showProjectStatus">项目标记状态设置</el-button>
<el-button @click="queryDataListByClick">数据查询</el-button>
<el-button @click="showExportModal">导出</el-button>
<div style="margin-left:20px;margin-top:5px">备注:请使用谷歌浏览器导出</div>
<a :href="'http://www.google.cn/chrome/'" class="href-link">点击下载</a>
</div>
<template>
<el-table :data="dataList" style="width: 100%">
<el-table-column label="项目名称" prop="projectMainName"></el-table-column>
<el-table-column label="钉钉编号" prop="dingdingNumber" width="180"></el-table-column>
<el-table-column label="申请日期" prop="dingdingDate"></el-table-column>
<el-table-column label="文件sheet名" prop="dataSheetName"></el-table-column>
<el-table-column label="总数据量" prop="dataSum"></el-table-column>
<el-table-column label="已处理数据量" prop="processedSum"></el-table-column>
<el-table-column label="操作" fixed="right" width="200">
<template slot-scope="scope">
<el-button @click="dataview(scope.row)" type="text" size="small">查看</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
v-if="dataList && dataList.length > 0"
class="pagination-style"
@size-change="handleSizeChange"
@current-change="dataListChange"
:total="total"
:current-page="currentPage"
:page-sizes="[15, 50, 100, 200, 300]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
></el-pagination>
</template>
<el-dialog :visible.sync="setTagVisible" :close-on-click-modal="false" width="500px">
<p class="dialog-title">项目标签设置</p>
<el-select
v-model="labelProjectMainId"
@change="handleLabelchange"
placeholder="请选择项目"
style="margin-left: 110px"
>
<el-option v-for="item in projectList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
<div>
<div v-for="(u,i) in labelList" style="margin-top: 20px; margin-left: 110px">
<el-select v-model="labelList[i]" placeholder="请选择标签">
<el-option
v-for="item in allLabelList"
:key="item.code"
:label="item.value"
:value="item.code"
></el-option>
</el-select>
<el-button v-if="i==labelList.length-1 && i<19" @click="addTagNew">+</el-button>
<el-button v-if="labelList.length>1" @click="deleteTag(i)">-</el-button>
</div>
</div>
<div slot="footer" style="text-align: center">
<el-button type="primary" @click="setTagSave">确认</el-button>
<el-button @click="setTagVisible = false;clearLabelData();">取消</el-button>
</div>
</el-dialog>
<el-dialog :visible.sync="setStatusVisible" :close-on-click-modal="false" width="500px">
<p class="dialog-title">项目标记状态设置</p>
<el-select
v-model="statusProjectMainId"
placeholder="请选择项目"
@change="handleStatuschange"
style="margin-left: 110px"
>
<el-option v-for="item in projectList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
<div style="margin-top: 20px; margin-left: 110px">
<el-input
v-model="status01.value"
style="width:180px;"
class="input"
placeholder="标记状态"
clearable
maxlength="10"
></el-input>
<el-button v-if="statusCount==1" @click="addStatusNew">+</el-button>
<el-button v-if="statusCount>1" @click="deleteStatus(1)">-</el-button>
</div>
<div v-if="statusCount>1" style="margin-top: 20px; margin-left: 110px">
<el-input
v-model="status02.value"
style="width:180px;"
class="input"
placeholder="标记状态"
clearable
maxlength="10"
></el-input>
<el-button v-if="statusCount==2" @click="addStatusNew">+</el-button>
<el-button @click="deleteStatus(2)">-</el-button>
</div>
<div v-if="statusCount>2" style="margin-top: 20px; margin-left: 110px">
<el-input
v-model="status03.value"
style="width:180px;"
class="input"
placeholder="标记状态"
clearable
maxlength="10"
></el-input>
<el-button v-if="statusCount==3" @click="addStatusNew">+</el-button>
<el-button @click="deleteStatus(3)">-</el-button>
</div>
<div v-if="statusCount>3" style="margin-top: 20px; margin-left: 110px">
<el-input
v-model="status04.value"
style="width:180px;"
class="input"
placeholder="标记状态"
clearable
maxlength="10"
></el-input>
<el-button v-if="statusCount==4" @click="addStatusNew">+</el-button>
<el-button @click="deleteStatus(4)">-</el-button>
</div>
<div v-if="statusCount>4" style="margin-top: 20px; margin-left: 110px">
<el-input
v-model="status05.value"
style="width:180px;"
class="input"
placeholder="标记状态"
clearable
maxlength="10"
></el-input>
<el-button @click="deleteStatus(5)">-</el-button>
</div>
<div slot="footer" style="text-align: center">
<el-button type="primary" @click="setStatusSave">确认</el-button>
<el-button @click="setStatusVisible = false; clearStatusData();">取消</el-button>
</div>
</el-dialog>
<!-- 导出弹窗 -->
<el-dialog title="导出" :visible.sync="exportModalVisible" width="300px" center>
<p>您当前数据总导出次数为:{{checkExportData.dataExportTotal}}次</p>
<p>剩余导出次数为:{{checkExportData.dataExportCount}}次</p>
<span slot="footer" class="dialog-footer">
<el-button @click="exportModalVisible = false">取 消</el-button>
<el-button type="primary" @click="handleExport">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { baseUrl } from "../../api/hostconfig";
import { openLoading, closeLoading } from "../../common/utils";
export default {
components: {},
data() {
var checkNumLength = (rule, value, callback) => {
if (!value) {
return callback(new Error("请输入审批单号"));
} else if (value && (value + "").length != 21) {
callback(new Error("审批单号必须为21位数字值"));
} else {
callback();
}
};
return {
setTagVisible: false,
setStatusVisible: false,
labelProjectMainId: "",
// tag01: "",
// tag02: "",
// tag03: "",
// tag04: "",
// tag05: "",
labelCount: 1,
labelList: [],
allLabelList: [],
statusProjectMainId: "",
status01: {},
status02: {},
status03: {},
status04: {},
status05: {},
statusCount: 1,
statusList: [],
handleType: "1", // 表单操作类型,1.新增 2.修改
currentPage: 1,
pageSize: 15,
total: 50, // 默认分页总数
dataList: [], // 初始化数据列表
centerDialogVisible: false, // 是否显示数据导入(新增)
reviseDialogVisible: false, // 是否显示数据导入(修改)
projectList: [],
sheetList: [], // 被搜索出来的sheet列表
dingdingDateList: [], //申请日期列表
// 查询的字段
queryParams: {
projectMainId: "", //项目id
dingdingNumber: "", // 审批编号
dingdingDate: "", // 申请日期
dataSheetName: "", // sheet名称
},
exportModalVisible: false, // 导出弹窗
//导出数据量
checkExportData: {
dataExportTotal: 0, // 总的
dataExportCount: 0, // 剩余的
},
rules: {
pName: [{ required: true, message: "请选择项目名称", trigger: "blur" }],
labelProjectMainId: [
{ required: true, message: "请选择项目名称", trigger: "blur" },
],
dingdingNumber: [
{
required: false,
validator: checkNumLength,
message: "请输入正确格式的审批编号",
trigger: ["blur", "change"],
},
{
pattern: /^[5A-Za-z0-9-\_]+$/,
message: "只能输入英文,数字,下划线,横线",
},
],
// dingdingDate: [
// { required: true, message: "请选择日期", trigger: "change" },
// ],
// dataSheetName: [
// { required: true, message: "请输入sheet名称", trigger: "change" },
// ],
dataType: [
{
required: true,
message: "请至少选择一个数据方类型",
trigger: "change",
},
],
needIds: [
{
required: true,
message: "请输入内部数据需求方姓名",
trigger: "blur",
},
],
mobilePhone: [
{
required: true,
message: "请输入内部数据需求方手机号",
trigger: "blur",
},
{ pattern: /^1[345789]\d{9}$/, message: "输入正确格式的手机号" },
],
name: [
{
required: true,
message: "请输入外部数据需求方姓名",
trigger: "blur",
},
],
sensitiveDataType: [
{ required: true, message: "请确定敏感信息", trigger: "change" },
],
exportCount: [
{ required: true, message: "请确定导出次数", trigger: "blur" },
{ pattern: /^\+?[0-9][0-9]*$/, message: "导出次数只能是正整数" },
],
dataRole: [
{
required: true,
message: "请选择一个数据需求角色",
trigger: "change",
},
],
ids: [
{ required: true, message: "请选择数据分发人员", trigger: "blur" },
],
distributeExportCount: [
{ required: true, message: "请确定导出次数", trigger: "blur" },
{ pattern: /^\+?[0-9][0-9]*$/, message: "导出次数只能是正整数" },
],
fileId: [{ required: true, message: "请上传文件", trigger: "change" }],
dataTermValidity: [
{ required: true, message: "请填写数据有效期", trigger: "blur" },
],
dataCount: [
{ required: true, message: "请填写数据访问次数", trigger: "blur" },
{ pattern: /^\+?[0-9][0-9]*$/, message: "访问次数只能是正整数" },
],
sensitiveDataColumn: [
{
required: true,
message: "请填写敏感信息所在位置",
trigger: "blur",
},
],
},
};
},
created() {
//获取项目名称列表
console.log("created() : enter");
this.getProjectNameList();
// 初始化获取数据列表
// this.getDataList(this.currentPage, {});
},
methods: {
//获取项目名称列表
getProjectNameList() {
this.getData(
"get",
`/sensitive/dataStatistics/getProject`,
{},
(data) => {
this.projectList = data.data;
}
);
},
//项目标签设置
showProjectTag() {
this.setTagVisible = true;
this.getHistoryLabel();
this.getAllLabel();
},
getAllLabel() {
this.getData(
"post",
"/sensitive/dataStatistics/getAllLabel",
{},
(data) => {
this.allLabelList = data.data;
}
);
},
getHistoryLabel() {
this.getData(
"get",
`/sensitive/dataStatistics/getLabel?projectMainId=${this.labelProjectMainId}`,
{},
(data) => {
this.labelList = data.data;
if (this.labelList.length <= 0) {
this.labelList = [""];
}
}
);
},
handleLabelchange() {
this.clearLabelData();
this.getHistoryLabel();
},
addTagNew() {
this.labelList.push("");
},
deleteTag(index) {
this.labelList.splice(index, 1);
},
setTagSave() {
if (this.labelProjectMainId == null || this.labelProjectMainId == "") {
this.$message.error("请选择项目名称");
return;
}
let checkTagValid = false;
for (let item = 0; item < this.labelList.length; item++) {
if (this.labelList[item] != null && this.labelList[item] != "") {
checkTagValid = true;
break;
}
}
console.log("setTagSave() : checkTagValid = " + checkTagValid);
if (!checkTagValid) {
this.$message.error("标签不可为空");
return;
}
for (let item = 0; item < this.labelList.length; item++) {
console.log("setTagSave() : item = " + item);
if (this.labelList[item] == "") {
this.deleteTag(item);
if (item != 0) {
item--;
}
}
}
let req = {
codes: this.labelList,
projectMainId: this.labelProjectMainId,
};
this.getData(
"post",
`/sensitive/dataStatistics/setLabel`,
req,
(data) => {
this.$message({
type: "success",
message: "项目标签设置成功",
});
this.clearLabelData();
this.setTagVisible = false;
}
);
},
clearLabelData() {
// this.tag01 = "";
// this.tag02 = "";
// this.tag03 = "";
// this.tag04 = "";
// this.tag05 = "";
this.labelList = [];
},
//项目标记状态设置
showProjectStatus() {
this.setStatusVisible = true;
this.getHistoryStatus();
},
addStatusNew() {
this.statusCount++;
},
deleteStatus(index) {
this.recodeStatus(index);
this.statusCount--;
},
recodeStatus(index) {
if (index == 1) {
this.status01 = this.status02;
this.status02 = this.status03;
this.status03 = this.status04;
this.status04 = this.status05;
} else if (index == 2) {
this.status02 = this.status03;
this.status03 = this.status04;
this.status04 = this.status05;
} else if (index == 3) {
this.status03 = this.status04;
this.status04 = this.status05;
} else if (index == 4) {
this.status04 = this.status05;
} else if (index == 5) {
this.status05 = "";
}
},
getHistoryStatus() {
this.getData(
"get",
`/sensitive/dataStatistics/getState?projectMainId=${this.statusProjectMainId}`,
{},
(data) => {
this.statusList = data.data;
if (this.statusList && this.statusList.length > 0) {
this.statusCount = this.statusList.length;
console.log(
"getHistoryStatus() : this.statusCount = " + this.statusCount
);
if (this.statusCount > 0) {
for (let item in this.statusList) {
if (item == 0) {
this.status01 = this.statusList[item];
} else if (item == 1) {
this.status02 = this.statusList[item];
} else if (item == 2) {
this.status03 = this.statusList[item];
} else if (item == 3) {
this.status04 = this.statusList[item];
} else if (item == 4) {
this.status05 = this.statusList[item];
}
}
}
} else {
this.statusCount = 1;
}
}
);
},
handleStatuschange() {
this.clearStatusData();
this.getHistoryStatus();
},
clearStatusData() {
this.status01 = {};
this.status02 = {};
this.status03 = {};
this.status04 = {};
this.status05 = {};
this.statusList = [];
},
setStatusSave() {
if (this.statusProjectMainId == null || this.statusProjectMainId == "") {
this.$message.error("请选择项目名称");
return;
}
this.statusList = [
// { id: 0, value: this.status01 },
// { id: 1, value: this.status02 },
// { id: 2, value: this.status03 },
// { id: 3, value: this.status04 },
// { id: 4, value: this.status05 },
{ id: this.status01.id, value: this.status01.value },
{ id: this.status02.id, value: this.status02.value },
{ id: this.status03.id, value: this.status03.value },
{ id: this.status04.id, value: this.status04.value },
{ id: this.status05.id, value: this.status05.value },
];
let checkStatusValid = false;
for (let item = 0; item < this.statusList.length; item++) {
console.log(
"setStatusSave() : this.statusList[item].value = " +
this.statusList[item].value
);
if (
this.statusList[item].value != null &&
this.statusList[item].value != "" &&
this.statusList[item].value != undefined
) {
checkStatusValid = true;
break;
}
}
console.log("setStatusSave() : checkStatusValid = " + checkStatusValid);
if (!checkStatusValid) {
this.$message.error("标记状态不可为空");
return;
}
let req = {
list: this.statusList,
projectMainId: this.statusProjectMainId,
};
this.getData(
"post",
`/sensitive/dataStatistics/setState`,
req,
(data) => {
this.$message({
type: "success",
message: "项目标记状态设置成功",
});
this.clearStatusData();
this.setStatusVisible = false;
}
);
},
queryDataListByClick() {
this.currentPage = 1;
this.queryDataList();
},
// 数据查询
queryDataList() {
this.getDataList(this.currentPage, this.queryParams);
},
//导出
showExportModal() {
console.log("导出。。。。。");
// 待接口提供后 请求接口获取excel, 再出发下载
// this.checkExport();
this.handleExport();
},
checkExport() {
let data = {
dingdingNum: this.queryParams.dingdingNumber,
dingdingDate: this.queryParams.dingdingDate,
dataSheetName: this.queryParams.dataSheetName,
};
let callback = (res) => {
if (res.code == "000000") {
console.log("导出前校验》》》》 ", res);
this.checkExportData.dataExportTotal = res.data.dataExportTotal;
this.checkExportData.dataExportCount = res.data.dataExportCount;
this.exportModalVisible = true;
} else {
vm.$message.error(res.message);
}
};
this.getData(
"post",
`/sensitive/dataSearch/check/export`,
// this.queryParams,
data,
callback
);
},
handleExport() {
let callback = (res) => {
if (res.code == "000000") {
console.log("正式导出》》》》 ", res);
// 执行下载excel
this.downloadFile(res.data.path, res.data.fileName);
this.exportModalVisible = false;
} else {
this.$message.error(res.message);
}
};
this.getData(
"post",
`/sensitive/dataStatistics/exportDataStatistic`,
this.queryParams,
callback
);
},
downloadFile(base64, fileName) {
let a = document.createElement("a");
let uploadHref = "data:application/xls;base64," + base64;
a.setAttribute("href", uploadHref);
let exportFileName = fileName;
a.setAttribute("download", exportFileName);
a.click();
},
// 根据审批编号查询申请日期操作
handleIdChange(value) {
if (value.length == 21) {
this.getData(
"get",
`/sensitive/visit/date?dingdingNumber=${value}`,
{},
(data) => {
this.dingdingDateList = data.data;
}
);
} else {
this.dingdingDateList = [];
// this.projectList = [];
this.sheetList = [];
this.queryParams.dingdingDate = "";
this.queryParams.dataSheetName = "";
}
},
// 根据审批编号和日期搜索sheet
handleDatechange(val) {
this.sheetList = [];
this.queryParams.dataSheetName = "";
this.getData(
"get",
`/sensitive/visit/sheet?dingdingNumber=${this.queryParams.dingdingNumber}&dingdingDate=${val}`,
{},
(data) => {
this.sheetList = data.data;
}
);
},
// 选中sheet
handleSheetchange(val) {},
// 获取全部分页数据
getDataList(pageNum, queryData) {
this.getData(
"post",
"/sensitive/dataStatistics/queryData",
{
pageNum: pageNum,
pageSize: this.pageSize,
...queryData,
},
(data) => {
this.dataList = data.data.list;
this.total = data.data.total;
}
);
},
// 根据页码获取数据
handleSizeChange(size) {
this.pageSize = size;
this.getDataList(this.currentPage, {});
},
// 根据分页获取数据
dataListChange(num) {
this.currentPage = num;
this.getDataList(num, {});
},
// 查看个人审批编号页面
dataview(row) {
// this.$router.push("/data-view");
this.$router.push({
path: "/data-view",
query: {
dingdingNumber: row.dingdingNumber,
dingdingDate: row.dingdingDate,
sheet: row.dataSheetName,
},
});
},
numInputLimit(e) {
let key = e.key;
// 不允许输入'e'和'.'
if (key === "e" || key === ".") {
e.returnValue = false;
return false;
}
return true;
},
resetForm(formName) {
this.$refs[formName].resetFields();
},
closeCreate() {
this.centerDialogVisible = false;
},
closeModify() {
this.reviseDialogVisible = false;
},
// 数据导入成功之后的通知方法
saveSuccess() {
this.getDataList(this.currentPage, {});
},
// 封装一下请求通用的方法
getData(type, url, req, callback) {
openLoading(this);
this.$axios[type](localStorage.getItem("lectureUrl") + url, req)
.then((res) => {
closeLoading(this);
let data = res.data;
if (data.code == "000000") {
if (callback) callback(data);
} else {
this.$message.error(data.message);
}
})
.catch((error) => {
console.log("getData() : error = " + error);
closeLoading(this);
this.$message.error("网络出现点问题");
});
},
},
};
</script>
<style lang="less">
.data-in-wrap {
.pagination-style {
margin-top: 30px;
float: right;
}
}
.close-msg-box {
width: 280px;
}
.tag-select {
width: 100px;
}
.dialog-title {
margin-bottom: 25px;
font-weight: bold;
text-align: center;
font-size: 18px;
}
.href-link {
color: red;
margin-top:5px;
margin-left:10px;
}
</style>
\ No newline at end of file
<template>
<div class="data-view-message-wrap">
<template v-if="searchTableVisible">
<div class="class-top-row">
<el-row class="button-wrap">
<el-col :span="1" style="margin-left: 20px;width: 70px;margin-top: 4px">
<label style="font-size: 16px;">标记状态</label>
</el-col>
<el-select
v-model="labelStatus"
size="small"
placeholder="请选择"
clearable
style="margin-left: 0px;width:180px"
>
<el-option
v-for="item in dataProjectStates"
:key="item.id"
:label="item.value"
:value="item.id"
></el-option>
</el-select>
<el-link style="margin-left:40px">备注</el-link>
<el-input
v-model="remark"
size="small"
style="width:180px;"
class="input"
placeholder
clearable
></el-input>
</el-row>
<el-row class="button-wrap">
<el-button class="each-button" type="primary" @click="labelVisible=true">添加标签筛选</el-button>
<el-button class="each-button" type="primary" @click="handleSearchByClick">查询</el-button>
<el-button
class="each-button"
type="primary"
@click="showExportModal"
v-if="showExportBtn"
>导出</el-button>
<el-button class="each-button" type="primary" @click="showAddConditionModal(true)">添加筛选条件</el-button>
</el-row>
</div>
<template
v-if="tableDataList && tableDataList.outModels && tableDataList.outModels.length > 0"
>
<el-table
:data="tableDataList.outModels"
:row-style="getRowClass"
:header-row-style="getRowClass"
:header-cell-style="getRowClass"
border
style="width: 100%; flex:1; overflow: scroll;"
>
<template
v-if="tableDataList && tableDataList.columnList"
v-for="item in tableDataList.columnList"
>
<el-table-column
:prop="item.key"
align="center"
:label="item.value"
show-overflow-tooltip
></el-table-column>
</template>
<el-table-column label="备注" prop="remark" align="center" width="120"></el-table-column>
<el-table-column label="标记状态" prop="statusValue" align="center" width="100"></el-table-column>
<el-table-column align="center" label="操作" width="220">
<template slot-scope="scope">
<el-button @click="showRemarkModal(scope.row)" type="text" size="small">备注</el-button>
<el-button
@click="handleTagClick(scope.row)"
type="text"
size="small"
:disabled="scope.row.status == 1"
>{{ scope.row.status == 1 ? '已处理' : '标记处理' }}</el-button>
<el-button @click="handleSetLabelClick(scope.row)" type="text" size="small">标签</el-button>
<el-button @click="dialPhone(scope.row)" type="text" size="small">拨号</el-button>
</template>
<!-- <template slot-scope="scope">
<el-select
v-model="labelStatus"
size="small"
placeholder="请选择"
style="margin-left: 0px;"
@click.native="dealOperationClick(scope.row)"
@change="dealOperationChanged">
<el-option
v-for="item in operationList"
:key="item.id"
:label="item.value"
:value="item.id"
></el-option>
</el-select>
</template>-->
</el-table-column>
</el-table>
<!-- 分页 -->
<el-pagination
class="pagination-style"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:total="tableDataList.total"
:current-page="pageNo"
:page-sizes="[15, 50, 100, 200, 300]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
></el-pagination>
</template>
<div class="no-table-data" v-else>暂无数据</div>
</template>
<!-- 验证弹窗 -->
<el-dialog
title
:close-on-click-modal="false"
class="check-modal-box"
:visible.sync="centerDialogVisible"
width="300px"
center
>
<p
style="word-break: break-all"
>该数据的审批单号为 {{dingdingNum}},短信将发送至 {{mobilePhone}} 的手机上,如果手机已停用,请联系管理员。</p>
<div class="captcha-wrap">
<el-input v-model="captchaCode" size="small" placeholder="请输入图形验证码"></el-input>
<img :src="captchaImg" alt @click="handleImgClick" />
</div>
<div class="sms-wrap">
<el-input v-model="smsCode" size="small" placeholder="请输入短信验证码"></el-input>
<div :class="getSMSClass" @click="getSMSCode">{{SMSTips}}</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="centerDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="handleCheckConfirm">确 定</el-button>
</span>
</el-dialog>
<!-- 添加筛选条件弹窗 -->
<el-dialog
:show-close="false"
@close="showAddConditionModal(false)"
:close-on-click-modal="false"
title="添加筛选条件"
class="condition-dialog-wrap"
:visible="addConditioDialogVisible"
width="300px"
center
>
<el-form ref="form" :model="conditionForm" label-width="80px">
<template
v-if="tableDataList && tableDataList.columnList"
v-for="item in tableDataList.columnList"
>
<el-form-item :label="item.value" style="width:400px;">
<el-input v-model="conditionForm[item.key]" size="small" style="width: 150px;"></el-input>
</el-form-item>
</template>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClearCondition">清 空</el-button>
<el-button type="primary" @click="handleAddConditionConfirm">确 定</el-button>
</span>
</el-dialog>
<!-- 标记处理弹窗 -->
<el-dialog title="标记状态" :visible.sync="tagVisible" width="300px" center>
<el-select
v-model="tagStatus"
size="small"
placeholder="请选择"
clearable
style="margin-left: 20px"
>
<el-option
v-for="item in dataProjectStates"
:key="item.id"
:label="item.value"
:value="item.id"
></el-option>
</el-select>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="dealTagClick">确 定</el-button>
<el-button @click="tagVisible = false">取 消</el-button>
</span>
</el-dialog>
<!-- 添加标签筛选条件弹窗 -->
<el-dialog title="标签筛选条件" :visible.sync="labelVisible" width="300px" center>
<div style="display: flex;margin-top:10px;" v-if="dataProjectLabels" v-for="(item,i) in dataProjectLabels">
<div class="same-line-class" style="margin-right:10px;margin-top:10px;">{{item.labelValue}}</div>
<div class="input-comp">
<el-input v-model="dataProjectContents[i]" size="small" />
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleLabelClick">确 定</el-button>
<el-button @click="labelVisible = false">取 消</el-button>
</span>
</el-dialog>
<!-- 添加设置标签弹窗 -->
<el-dialog title="设置标签" :visible.sync="setLabelVisible" width="300px" center>
<div style="display: flex;margin-top:10px;" v-if="dataProjectLabels" v-for="(item, i) in dataProjectLabels" align="center">
<div class="same-line-class" style="margin-right:10px;margin-top:10px;">{{item.labelValue}}</div>
<div class="input-comp">
<el-input v-model="setLabelList[i]" size="small" />
</div>
</div>
<el-table
v-if="historyLabelList && historyLabelList.menus && historyLabelList.menus.length > 0"
ref="multipleTable"
:data="historyLabelList.datas"
:row-style="getRowClass"
:header-row-style="getRowClass"
:header-cell-style="getRowClass"
border
tooltip-effect="dark"
style="width: 100%;margin-top: 20px"
>
<template
v-if="historyLabelList && historyLabelList.menus"
v-for="item in historyLabelList.menus"
>
<el-table-column :prop="item.key" :label="item.value" :value="item.value" align="center"></el-table-column>
</template>
</el-table>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="dealSetLabelClick">确 定</el-button>
<el-button @click="setLabelVisible = false">取 消</el-button>
</span>
</el-dialog>
<!-- 备注 弹窗 -->
<el-dialog
title="备注"
@close="handleRemarkClose"
:close-on-click-modal="false"
class="remark-modal"
:visible.sync="remarkDialogVisible"
width="300px"
center
>
<el-input type="textarea" :rows="3" placeholder="请输入内容" v-model="newRemark"></el-input>
<el-button type="primary" class="remark-confirm-btn" @click="confirmSendRemark">确 定</el-button>
<ul class="history-list">
<li v-for="item in remarkHistory">
<p class="date">{{ item.createdTime }}</p>
<p class="text">{{ item.remark }}</p>
</li>
</ul>
</el-dialog>
<!-- 拨号弹窗 -->
<el-dialog title="拨号" :visible.sync="dialVisible" width="300px" center>
<a :href="'tel:' + dialPhoneNum">拨打电话给: {{dialPhoneNum}}</a>
<span slot="footer" class="dialog-footer">
<!-- <el-button type="primary" @click="gotoDialPhone">确 定</el-button> -->
<el-button @click="dialVisible = false">取 消</el-button>
</span>
</el-dialog>
<!-- 导出弹窗 -->
<el-dialog title="导出" :visible.sync="exportModalVisible" width="300px" center>
<p>您当前数据总导出次数为:{{checkExportData.dataExportTotal}}次</p>
<p>剩余导出次数为:{{checkExportData.dataExportCount}}次</p>
<span slot="footer" class="dialog-footer">
<el-button @click="exportModalVisible = false">取 消</el-button>
<el-button type="primary" @click="handleExport">确 定</el-button>
</span>
</el-dialog>
<!-- 浏览器检测弹窗 -->
<el-dialog title="当前不是chome浏览器,去下载?" :visible.sync="browserVisible" width="300px">
<span slot="footer" class="dialog-footer">
<el-button @click="down">确定</el-button>
<el-button @click="browserVisible = false">取 消</el-button>
</span>
</el-dialog>
<!-- 提醒去电脑弹窗 -->
<el-dialog title="提示" :visible.sync="phoneModalVisible" width="300px" center>
<p>请用电脑浏览器进行导出操作</p>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="phoneModalVisible = false">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
let vm = null;
import { openLoading, closeLoading } from "../../common/utils";
export default {
computed: {
getSMSClass() {
if (vm.countDownNum == 60) {
return "button";
} else {
return "button gray";
}
},
},
created() {
vm = this;
// url的?后面有参数,则可调接口获取手机号及审批单号;
let params = window.location.href.split("?");
if (params && params.length > 1) {
vm.afterParam = params[1];
// console.log('afterParam: ', vm.afterParam)
vm.getPhoneNum();
vm.getLabelStatus();
} else {
alert("访问的网页地址无效!");
}
// 获取图片验证码
vm.getCaptcha();
},
mounted() {
vm.handleForbid(); // 禁止默认事件
},
data() {
return {
waterMark: "", // 水印图片地址
searchTableVisible: true, // 弹窗下面的 搜索按钮及表格等 是否显示
remarkDialogVisible: false, // 备注弹窗
newRemark: "",
remarkHistory: [], // 历史备注列表
SMSTips: "获取短信验证码",
countDownNum: 60, // 倒计时
timer: null, // 倒计时定时器
afterParam: "",
dingdingNum: "",
mobilePhone: "",
captchaImg: "", // 图片验证码 url
captchaToken: "", // 图片验证码 token
addConditioDialogVisible: false, // 添加筛选条件
conditionForm: {},
tableDataList: {},
centerDialogVisible: true, // 验证弹窗
tableData: [],
captchaCode: "", // 图形验证码
smsCode: "", // 短信验证码
pageNo: 1,
pageSize: 15,
operationList: [
{ id: 0, value: "备注" },
{ id: 1, value: "标记" },
{ id: 2, value: "标签" },
{ id: 3, value: "拨号" },
],
dataProjectStates: [],
dataProjectLabels: [],
dataProjectContents: [],
labelStatus: "",
remark: "",
tagVisible: false, //标记处理弹窗
tagStatus: "",
labelVisible: false, //添加标签筛选弹窗
setLabelVisible: false, //添加设置标签弹窗
setLabelList: [],
uploadLabelList: [],
historyLabelList: {},
dialVisible: false, //拨号弹窗
dialPhoneNum: "",
showExportBtn: false, // 是否显示 导出按钮
exportModalVisible: false, // 导出弹窗
checkExportData: {
dataExportTotal: 0, // 总的
dataExportCount: 0, // 剩余的
},
phoneModalVisible: false,
browserVisible: false,
};
},
methods: {
handleForbid() {
document.oncontextmenu = function () {
return false;
};
document.oncopy = function () {
return false;
};
document.onpaste = function () {
return false;
};
document.onselectstart = function () {
return false;
};
},
handleRemarkClose() {
vm.newRemark = "";
vm.remarkHistory = [];
},
getWaterMark() {
let data = {
parame: vm.afterParam,
};
let callback = (res) => {
if (res.code == "000000") {
// debugger;
if (res.data) {
vm.waterMark = res.data;
vm.setWaterMark(); // 设置水印背景
} else {
vm.$message.error("网络出现点问题");
}
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest("post", `/sensitive/image`, data, callback);
},
setWaterMark() {
let bg = document.getElementsByClassName("data-view-message-wrap")[0];
// bg.style.background = `url(${vm.waterMark}) repeat`;
bg.style.background = "url('" + vm.waterMark + "') repeat";
bg.style.backgroundSize = "300px auto";
},
getRowClass({ row, column, rowIndex, columnIndex }) {
return "background: rgba(255,255,255,0.2)";
},
confirmSendRemark() {
// 添加备注信息
if (vm.newRemark.trim() == "") {
vm.$message.error("请先输入备注信息!");
return;
}
let data = {
dataContentId: vm.currentRow.contentId,
dataUserContentId: vm.currentRow.dataUserContentId,
remark: vm.newRemark.trim(),
};
let callback = (res) => {
if (res.code == "000000") {
vm.remarkDialogVisible = false;
vm.handleSearch();
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest("post", `/sensitive/dataRemark`, data, callback);
},
handleSizeChange(val) {
console.log("size change .......");
vm.pageSize = val;
vm.handleSearch();
},
handleCurrentChange(val) {
console.log("currentPage change .......");
vm.pageNo = val;
vm.handleSearch();
},
// 获取编号和手机号
getPhoneNum() {
// 请求查询接口
let data = {
parame: vm.afterParam,
};
let callback = (res) => {
if (res.code == "000000") {
vm.dingdingNum = res.data.dingdingNum;
vm.mobilePhone = res.data.mobilePhone;
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest(
"post",
`/sensitive/mobileCheck/num/mobile`,
data,
callback
);
},
// 获取图形验证码
getCaptcha() {
let callback = (res) => {
if (res.code === "000000") {
vm.captchaImg = `data:image/png;base64,${res.data.content}`;
vm.captchaToken = res.data.token;
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest("get", `/account/account/captcha`, {}, callback);
},
// 图片验证码点击
handleImgClick() {
vm.getCaptcha();
},
// 获取短信验证码
getSMSCode() {
if (vm.captchaCode == "") {
vm.$message.error("请输入图形验证码");
return;
}
// 倒计时过程中不可点
if (vm.countDownNum != 60) {
// console.log('现在倒计时过程中...不可点击')
return;
}
// 获取短信验证码
let data = {
parame: vm.afterParam,
pictureCode: vm.captchaCode,
captchaToken: vm.captchaToken,
};
let callback = (res) => {
if (res.code == "000000") {
vm.timeCount();
} else {
vm.$message.error(res.message);
vm.getCaptcha();
}
};
vm.sendRequest(
"post",
`/sensitive/mobileCheck/check/picturecode`,
data,
callback
);
},
timeCount() {
clearInterval(vm.timer);
vm.countDownNum -= 1;
vm.SMSTips = `${vm.countDownNum}秒后重试`;
vm.timer = setInterval(function () {
vm.countDownNum -= 1;
vm.SMSTips = `${vm.countDownNum}秒后重试`;
if (vm.countDownNum == 0) {
vm.SMSTips = "获取短信验证码";
clearInterval(vm.timer);
vm.countDownNum = 60;
}
}, 1000);
},
handleCheckConfirm() {
if (vm.captchaCode == "") {
vm.$message.error("请输入图形验证码");
return;
}
if (vm.smsCode == "") {
vm.$message.error("请输入短信验证码");
return;
}
// 调用 /mobileCheck/check/mobilecode 接口
// 校验 短信验证码
let data = {
parame: vm.afterParam,
mobileCode: vm.smsCode,
};
let callback = (res) => {
if (res.code == "000000") {
vm.searchTableVisible = true; // 短信验证码校验成功,显示背后的内容
vm.getTableList();
} else {
vm.$message.error(res.message);
vm.getCaptcha();
vm.captchaCode = "";
}
};
vm.sendRequest(
"post",
`/sensitive/mobileCheck/check/mobilecode`,
data,
callback
);
},
getTableList(isManualClick) {
// debugger;
let data = {
columnMap: {},
labelMap: {},
parame: vm.afterParam,
pageNo: vm.pageNo,
pageSize: vm.pageSize,
projectStateId: vm.labelStatus,
remark: vm.remark,
};
if (isManualClick) {
// 如果添加了筛选条件,则将其合并到 查询接口的传参中
let stringData = JSON.stringify(vm.conditionForm);
if (stringData != "{}") {
let condition = JSON.parse(stringData);
for (let key in condition) {
data.columnMap[key] = condition[key];
}
}
if (vm.dataProjectLabels.length > 0) {
for (let i = 0; i < vm.dataProjectLabels.length; i++) {
console.log(
"getTableList() : key = " +
vm.dataProjectLabels[i].labelCode +
", value = " +
vm.dataProjectContents[i]
);
data.labelMap[vm.dataProjectLabels[i].labelCode] =
vm.dataProjectContents[i];
}
}
}
let callback = (res) => {
if (res.code == "000000") {
vm.centerDialogVisible = false;
vm.captchaCode = "";
vm.smsCode = "";
vm.tableDataList = res.data;
if (
typeof res.data.dataExportCount != "undefined" &&
res.data.dataExportCount > 0
) {
vm.showExportBtn = true;
}
vm.$nextTick(() => {
if (vm.afterParam) {
vm.getWaterMark(); // 获取水印
}
});
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest("post", `/sensitive/dataSearch/searchWeb`, data, callback);
},
showAddConditionModal(status) {
vm.addConditioDialogVisible = status ? true : false;
},
handleClearCondition() {
vm.conditionForm = {};
vm.addConditioDialogVisible = false;
},
handleSearch() {
vm.getTableList(true);
},
handleSearchByClick() {
vm.pageNo = 1;
vm.handleSearch();
},
//下拉操作列表点击
dealOperationClick(row) {
// console.log("dealOperationClick() : row.remark = " + row.remark);
vm.currentRow = row;
},
dealOperationChanged(item) {
console.log("dealOperationChanged() : item = " + item.value);
},
showRemarkModal(row) {
vm.remarkDialogVisible = true;
vm.currentRow = row;
// 获取备注信息
let callback = (res) => {
if (res.code == "000000") {
vm.remarkHistory = res.data.remarks;
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest(
"get",
`/sensitive/dataRemark?dataContentId=${row.contentId}`,
{},
callback
);
},
// 标记处理点击
handleTagClick(row) {
vm.currentRow = row;
this.tagVisible = true;
},
dealTagClick() {
let callback = (res) => {
if (res.code == "000000") {
this.$message({
type: "success",
message: "标记状态设置成功",
});
vm.handleSearch();
} else {
vm.$message.error(res.message);
}
vm.tagVisible = false;
};
vm.sendRequest(
"get",
`/sensitive/dataSearch/changeStatus?dataUserContentId=${vm.currentRow.dataUserContentId}
&dataContentId=${vm.currentRow.contentId}&projectStateId=${vm.tagStatus}`,
{},
callback
);
},
//每一项的标签点击
handleSetLabelClick(row) {
vm.currentRow = row;
vm.setLabelVisible = true;
// 获取历史标签信息
let callback = (res) => {
if (res.code == "000000") {
vm.historyLabelList = res.data;
// console.log(
// "handleSetLabelClick() : vm.historyLabelList = " +
// vm.historyLabelList.menus.length
// );
if (vm.dataProjectLabels == null || vm.dataProjectLabels == "") {
vm.$message.info("未设置过标签");
}
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest(
"get",
`/sensitive/dataSearch/labels?dataContentId=${row.contentId}`,
{},
callback
);
},
dealSetLabelClick() {
let tmpList = [];
if (vm.dataProjectLabels && vm.dataProjectLabels.length > 0) {
for (let i = 0; i < vm.dataProjectLabels.length; i++) {
let obj = {
labelCode: vm.dataProjectLabels[i].labelCode,
labelValue: vm.setLabelList[i],
};
tmpList.push(obj);
}
} else {
vm.setLabelVisible = false;
return;
}
let data = {
contentId: vm.currentRow.contentId,
dataUserContentId: vm.currentRow.dataUserContentId,
list: tmpList,
projectMainId: 0,
};
let callback = (res) => {
if (res.code == "000000") {
// vm.peopleList = res.data;
this.$message({
type: "success",
message: "设置标签成功",
});
} else {
vm.$message.error(res.message);
}
vm.setLabelVisible = false;
};
vm.sendRequest("post", `/sensitive/dataSearch/labels`, data, callback);
},
//拨号
dialPhone(row) {
console.log("tableDataList.columnList() : " + row.column1);
vm.dialPhoneNum = row.column1;
vm.dialVisible = true;
},
handleAddConditionConfirm() {
vm.addConditioDialogVisible = false;
vm.pageNo = 1;
},
showExportModal() {
if (vm.checkChrome()) {
console.log("导出检测,是chome");
vm.browserVisible = false;
} else {
console.log("导出检测,是其它浏览器");
vm.browserVisible = true;
return;
}
let phoneStatus = vm.isCellphone();
if (phoneStatus) {
vm.phoneModalVisible = true;
vm.exportModalVisible = false;
return;
}
// 待接口提供后 请求接口获取excel, 再出发下载
vm.checkExport();
},
// 导出前的check
checkExport() {
let data = {
parame: vm.afterParam,
};
let callback = (res) => {
if (res.code == "000000") {
console.log("导出前校验》》》》 ", res);
vm.checkExportData.dataExportTotal = res.data.dataExportTotal;
vm.checkExportData.dataExportCount = res.data.dataExportCount;
vm.exportModalVisible = true;
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest(
"post",
`/sensitive/dataSearch/check/exportWeb`,
data,
callback
);
},
// 确定导出
handleExport() {
let data = {
parame: vm.afterParam,
};
let callback = (res) => {
if (res.code == "000000") {
console.log("正式导出》》》》 ", res);
// 执行下载excel
vm.downloadFile(res.data.path, res.data.fileName);
vm.exportModalVisible = false;
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest("post", `/sensitive/dataSearch/exportWeb`, data, callback);
},
isCellphone() {
let ua = window.navigator.userAgent.toLowerCase();
let ios = /(iphone|ipad|ipod|ios)/i.test(ua);
let android = /(android)/i.test(ua);
return ios || android;
},
downloadFile(base64, fileName) {
let a = document.createElement("a");
let uploadHref = "data:application/xls;base64," + base64;
a.setAttribute("href", uploadHref);
let exportFileName = fileName;
a.setAttribute("download", exportFileName);
a.click();
},
checkChrome() {
// return (navigator.appVersion.indexOf('Chrome') || navigator.appVersion.indexOf('chrome')) != -1;
return this.getBroswer().broswer == "Chrome";
},
getBroswer() {
let sys = {};
let ua = navigator.userAgent.toLowerCase();
let s;
(s = ua.match(/edge\/([\d.]+)/))
? (sys.edge = s[1])
: (s = ua.match(/rv:([\d.]+)\) like gecko/))
? (sys.ie = s[1])
: (s = ua.match(/msie ([\d.]+)/))
? (sys.ie = s[1])
: (s = ua.match(/firefox\/([\d.]+)/))
? (sys.firefox = s[1])
: (s = ua.match(/chrome\/([\d.]+)/))
? (sys.chrome = s[1])
: (s = ua.match(/opera.([\d.]+)/))
? (sys.opera = s[1])
: (s = ua.match(/version\/([\d.]+).*safari/))
? (sys.safari = s[1])
: 0;
if (sys.edge) return { broswer: "Edge", version: sys.edge };
if (sys.ie) return { broswer: "IE", version: sys.ie };
if (sys.firefox) return { broswer: "Firefox", version: sys.firefox };
if (sys.chrome) return { broswer: "Chrome", version: sys.chrome };
if (sys.opera) return { broswer: "Opera", version: sys.opera };
if (sys.safari) return { broswer: "Safari", version: sys.safari };
return { broswer: "", version: "0" };
},
down() {
window.location.href = "http://www.google.cn/chrome/";
},
sendRequest(type, url, params, callback) {
openLoading(vm);
url = localStorage.getItem("lectureUrl") + url;
vm.$axios[type](url, params)
.then((res) => {
closeLoading(vm);
res = res.data;
callback(res);
})
.catch((error) => {
vm.$message.error("网络出现点问题");
});
},
getLabelStatus() {
let callback = (res) => {
if (res.code == "000000") {
vm.dataProjectStates = res.data.dataProjectStates;
vm.dataProjectLabels = res.data.dataProjectLabels;
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest(
"get",
`/sensitive/visit/statusWeb?patame=${vm.afterParam}`,
{},
callback
);
},
handleLabelClick() {
this.labelVisible = false;
},
},
};
</script>
<style lang="less">
.header {
height: 0 !important;
overflow: hidden;
left: 0 !important;
}
.sidebar {
width: 0;
overflow: hidden;
}
.content {
left: 0 !important;
top: 0 !important;
}
.el-message {
min-width: 310px !important;
width: 310px !important;
max-width: 310px !important;
}
.data-view-message-wrap {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
user-select: none;
.no-table-data {
width: 100%;
height: 400px;
line-height: 400px;
text-align: center;
color: #606266;
font-size: 14px;
}
.class-top-row {
overflow-x: scroll;
.button-wrap {
margin: 20px 0;
width: 600px;
.each-button {
// float: right;
margin: 0px 0px 0 20px;
}
}
}
.el-table {
-webkit-overflow-scrolling: touch;
}
.check-modal-box {
.el-dialog__header {
display: none;
}
.el-dialog__body {
padding: 15px 15px 30px !important;
}
.captcha-wrap {
margin-top: 24px;
overflow: hidden;
.el-input {
width: 150px;
float: left;
}
img {
float: left;
cursor: pointer;
display: block;
border: none;
width: 100px;
height: 32px;
margin-left: 10px;
background: #fff;
}
}
.sms-wrap {
margin-top: 14px;
overflow: hidden;
.el-input {
width: 150px;
float: left;
}
.button {
float: left;
cursor: default;
width: 100px;
height: 32px;
margin-left: 10px;
font-size: 13px;
text-align: center;
line-height: 32px;
color: #409eff;
&.gray {
color: #606266;
}
}
}
}
ul,
li {
list-style: none;
}
.remark-modal {
.el-dialog__body {
overflow: hidden;
padding: 0 10px 30px !important;
.remark-confirm-btn {
float: right;
margin-top: 10px;
}
.history-list {
margin-top: 60px;
li {
margin-bottom: 5px;
line-height: 20px;
.text {
word-break: break-all;
text-indent: 12px;
line-height: 22px;
}
}
}
}
}
.pagination-style {
margin: 20px 0;
float: right;
width: 100%;
text-align: right;
overflow: hidden;
overflow-x: scroll;
-webkit-overflow-scrolling: touch;
.el-pagination__total {
margin-left: 25px;
}
.el-pagination__jump {
padding-right: 25px;
}
}
.tebale_card {
background: rgba(255, 255, 255, 0.2);
}
.el-table,
.el-table__expanded-cell {
background: rgba(255, 255, 255, 0.2);
}
.same-line-class {
// margin-top: 10px;
display: inline-block;
.input-comp {
width: 100px;
}
}
}
</style>
......@@ -2,32 +2,1116 @@
<div class="data-view-wrap">
<h2 class="top-title">数据查看</h2>
<el-form :inline="true" :model="ruleForm" :rules="rules" ref="ruleForm" class="search-ruleForm">
<el-form-item label="钉钉流程审批单号" prop="dingdingNumber">
<el-input
v-model="ruleForm.dingdingNumber"
size="small"
class="input"
clearable
@input="handleDingNumChange"
@clear="handleDingNumClear"
@keydown.native="numInputLimit"
maxlength="21"
></el-input>
</el-form-item>
<el-form-item label="数据申请日期" prop="dingdingDate">
<el-select
v-model="ruleForm.dingdingDate"
size="small"
placeholder="请选择"
clearable
@change="handleApplyDateChange"
@clear="handleApplyDateClear"
>
<el-option v-for="item in applyDateList" :key="item" :label="item" :value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="sheet名" prop="sheet">
<el-select v-model="ruleForm.sheet" size="small" placeholder="请选择" clearable>
<el-option v-for="item in sheetsList" :key="item" :label="item" :value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="标记状态">
<el-select v-model="ruleForm.labelStatus" size="small" placeholder="请选择" clearable>
<el-option
v-for="item in dataProjectStates"
:key="item.id"
:label="item.value"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
v-model="ruleForm.remark"
size="small"
style="width:220px"
class="input"
placeholder
clearable
></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" style="margin-left: 50px;" @click="showAddConditionModal">添加筛选条件</el-button>
<el-button type="primary" @click="labelVisible=true">添加标签筛选</el-button>
<el-button type="primary" @click="handleSend" v-if="showSendBtn">分发</el-button>
<el-button type="primary" @click="checkExport" v-if="showExportBtn">导出</el-button>
<el-button type="primary" @click="exportNormalModalVisible=true" v-if="showNormalExportBtn">常规导出</el-button>
<el-button type="primary" @click="ruleForm.pageNo=1;submitForm('ruleForm')">查询</el-button>
</el-form-item>
</el-form>
<template v-if="isSearchSend">
<el-table
v-if="tableDataList && tableDataList.outModels && tableDataList.outModels.length > 0"
ref="multipleTable"
:data="tableDataList.outModels"
:row-style="getRowClass"
:header-row-style="getRowClass"
:header-cell-style="getRowClass"
border
tooltip-effect="dark"
style="width: 100%"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" align="center" width="55"></el-table-column>
<template
v-if="tableDataList && tableDataList.columnList"
v-for="item in tableDataList.columnList"
>
<el-table-column
:prop="item.key"
align="center"
:label="item.value"
show-overflow-tooltip
></el-table-column>
</template>
<el-table-column
v-if="tableDataList && tableDataList.columnList"
prop="userName"
align="center"
label="数据查看人员"
show-overflow-tooltip
></el-table-column>
<el-table-column label="备注" prop="remark" align="center"></el-table-column>
<el-table-column label="标记状态" prop="statusValue" align="center"></el-table-column>
<el-table-column fixed="right" align="center" label="操作" width="200">
<template slot-scope="scope">
<el-button @click="handleRemarkClick(scope.row)" type="text" size="small">备注</el-button>
<el-button
@click="handleTagClick(scope.row)"
type="text"
size="small"
:disabled="scope.row.status == 1"
>{{ scope.row.status == 1 ? '已处理' : '标记处理' }}</el-button>
<el-button @click="handleSetLabelClick(scope.row)" type="text" size="small">标签</el-button>
</template>
</el-table-column>
</el-table>
<div class="no-table-data" v-else>暂无数据</div>
<!-- 分页 -->
<el-pagination
v-if="tableDataList && tableDataList.outModels && tableDataList.outModels.length > 0"
class="pagination-style"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:total="tableDataList.total"
:current-page="ruleForm.pageNo"
:page-sizes="[15, 30, 50, 100]"
:page-size="ruleForm.pageSize"
layout="total, sizes, prev, pager, next, jumper"
></el-pagination>
</template>
<!-- 添加筛选条件 弹窗 -->
<el-dialog
title="添加筛选条件"
class="condition-dialog-wrap"
:visible.sync="addConditioDialogVisible"
:show-close="false"
width="500px"
center
>
<el-form ref="form" :model="conditionForm" label-width="100px">
<template
v-if="tableDataList && tableDataList.columnList"
v-for="item in tableDataList.columnList"
>
<el-form-item :label="item.value" style="width:400px;">
<el-input v-model="conditionForm[item.key]" size="small"></el-input>
</el-form-item>
</template>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClearCondition">清 空</el-button>
<el-button type="primary" @click="handleAddConditionConfirm">确 定</el-button>
</span>
</el-dialog>
<!-- 分发 弹窗 -->
<el-dialog
title="分发"
:close-on-click-modal="false"
class="send-modal-box"
:visible.sync="sendDialogVisible"
width="500px"
center
>
<div class="name-list">
<p class="name">{{selectedNameList}}</p>
<p class="after-text">{{ "共" + multipleSelection.length + '人' }}</p>
</div>
<div class="people-choose">
<p class="title">人员选择</p>
<el-select
v-model="dataUserDiss"
multiple
collapse-tags
placeholder="请选择"
class="people-select-comp"
>
<el-option v-for="item in peopleList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="sendDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="handleConfirmSend">确 定</el-button>
</span>
</el-dialog>
<!-- 备注 弹窗 -->
<el-dialog
title="备注"
@close="handleRemarkClose"
:close-on-click-modal="false"
class="remark-modal"
:visible.sync="remarkDialogVisible"
width="500px"
center
>
<el-input type="textarea" :rows="3" placeholder="请输入内容" v-model="newRemark"></el-input>
<el-button type="primary" class="remark-confirm-btn" @click="confirmSendRemark">确 定</el-button>
<ul class="history-list">
<li v-for="item in remarkHistory">
<p class="date">{{ item.createdTime }}</p>
<p class="text">{{ item.name + "-" + item.remark }}</p>
</li>
</ul>
</el-dialog>
<!-- 导出弹窗 -->
<el-dialog title="导出" :visible.sync="exportModalVisible" width="300px" center>
<p>您当前数据总导出次数为:{{checkExportData.dataExportTotal}}次</p>
<p>剩余导出次数为:{{checkExportData.dataExportCount}}次</p>
<p style="margin-top: 10px;margin-bottom: 5px">备注:请使用谷歌浏览器导出</p>
<a :href ="'http://www.google.cn/chrome/'" class="href-link">点击下载</a>
<span slot="footer" class="dialog-footer">
<el-button @click="exportModalVisible = false">取 消</el-button>
<el-button type="primary" @click="handleExport">确 定</el-button>
</span>
</el-dialog>
<!-- 常规导出弹窗 -->
<el-dialog title="导出" :visible.sync="exportNormalModalVisible" width="300px" center>
<p>只能导出已修改过标记状态的数据,</p>
<p>其它数据不可导出</p>
<p style="margin-top: 10px;margin-bottom: 5px">备注:请使用谷歌浏览器导出</p>
<a :href ="'http://www.google.cn/chrome/'" class="href-link">点击下载</a>
<span slot="footer" class="dialog-footer">
<el-button @click="exportNormalModalVisible = false">取 消</el-button>
<el-button type="primary" @click="handleNormalExport">确 定</el-button>
</span>
</el-dialog>
<!-- 浏览器检测弹窗 -->
<el-dialog
title="当前不是chome浏览器,去下载?"
:visible.sync="browserVisible"
width="300px"
>
<span slot="footer" class="dialog-footer">
<el-button @click="down">确定</el-button>
<el-button @click="browserVisible = false">取 消</el-button>
</span>
</el-dialog>
<!-- 标记处理弹窗 -->
<el-dialog title="标记状态" :visible.sync="tagVisible" width="300px" center>
<el-select
v-model="tagStatus"
size="small"
placeholder="请选择"
clearable
style="margin-left: 20px"
>
<el-option
v-for="item in dataProjectStates"
:key="item.id"
:label="item.value"
:value="item.id"
></el-option>
</el-select>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="dealTagClick">确 定</el-button>
<el-button @click="tagVisible = false">取 消</el-button>
</span>
</el-dialog>
<!-- 添加标签筛选条件弹窗 -->
<el-dialog title="标签筛选条件" :visible.sync="labelVisible" width="400px" center>
<div v-if="dataProjectLabels" v-for="(item,i) in dataProjectLabels" align="center">
<div class="same-line-class" style="margin-right:20px;">{{item.labelValue}}</div>
<div class="same-line-class">
<el-input v-model="dataProjectContents[i]" size="small" />
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleLabelClick">确 定</el-button>
<el-button @click="labelVisible = false">取 消</el-button>
</span>
</el-dialog>
<!-- 添加设置标签弹窗 -->
<el-dialog title="设置标签" :visible.sync="setLabelVisible" min-width="500px" center>
<div v-if="dataProjectLabels" v-for="(item, i) in dataProjectLabels" align="center">
<div class="same-line-class" style="margin-right:20px;">{{item.labelValue}}</div>
<div class="same-line-class">
<el-input v-model="setLabelList[i]" size="small" />
</div>
</div>
<el-table
v-if="historyLabelList && historyLabelList.menus && historyLabelList.menus.length > 0"
ref="multipleTable"
:data="historyLabelList.datas"
:row-style="getRowClass"
:header-row-style="getRowClass"
:header-cell-style="getRowClass"
border
tooltip-effect="dark"
style="width: 100%;margin-top: 20px"
>
<template
v-if="historyLabelList && historyLabelList.menus"
v-for="item in historyLabelList.menus"
>
<el-table-column :prop="item.key" :label="item.value" :value="item.value" align="center"></el-table-column>
</template>
</el-table>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="dealSetLabelClick">确 定</el-button>
<el-button @click="setLabelVisible = false">取 消</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { openLoading, closeLoading, } from '../../common/utils';
export default {
data() {
return {
let vm = null;
import { openLoading, closeLoading } from "../../common/utils";
export default {
data() {
var checkNumLength = (rule, value, callback) => {
if (!value) {
return callback(new Error("请输入审批单号"));
} else if (value && (value + "").length != 21) {
callback(new Error("审批单号必须为21位数字值"));
} else {
callback();
}
};
return {
selectedNameList: "",
waterMark: "", // 水印图片地址
isSearchSend: false, // 是否有效查询过
showSendBtn: false, // 是否显示 分发按钮
showExportBtn: false, // 是否显示 导出按钮
showNormalExportBtn: false, // 是否显示 常规导出按钮
remarkHistory: [], // 历史备注列表
ruleForm: {
columnMap: {},
dingdingNumber: "",
dingdingDate: "",
sheet: "",
labelStatus: "",
labelMap: {},
remark: "",
pageNo: 1,
pageSize: 15,
},
rules: {
dingdingNumber: [
{ required: true, message: "请输入审批单号", trigger: "blur" },
{ validator: checkNumLength, trigger: ["blur", "change"] },
],
dingdingDate: [
{ required: true, message: "请选择数据申请日期", trigger: "change" },
],
sheet: [
{ required: true, message: "请选择sheet名", trigger: "change" },
],
},
tableDataList: {},
addConditioDialogVisible: false, // 添加筛选条件
conditionForm: {},
applyDateList: [],
sheetsList: [],
dataProjectStates: [],
dataProjectLabels: [],
dataProjectContents: [],
sendDialogVisible: false, //分发弹窗
dataUserDiss: [],
peopleList: [],
remarkDialogVisible: false, //备注弹窗
newRemark: "",
multipleSelection: [],
exportModalVisible: false, // 导出弹窗
checkExportData: {
dataExportTotal: 0, // 总的
dataExportCount: 0, // 剩余的
},
exportNormalModalVisible: false, // 常规导出弹窗
tagVisible: false, //标记处理弹窗
tagStatus: "",
labelVisible: false, //添加标签筛选弹窗
setLabelVisible: false, //添加设置标签弹窗
setLabelList: [],
uploadLabelList: [],
historyLabelList: {},
browserVisible: false,
};
},
created() {
vm = this;
if (vm.$route.query.dingdingNumber) {
// data-in 页面点击查看进来时,页面地址不变
// console.log('do nothing')
} else {
vm.$router.replace("/data-view");
}
},
mounted() {
vm.getUrlQuery();
vm.getWaterMark(); // 获取水印
vm.handleForbid(); // 禁止默认事件
},
methods: {
handleForbid() {
document.oncontextmenu = function () {
return false;
};
document.oncopy = function () {
return false;
};
// document.onpaste = function(){
// return false;
// }
document.onselectstart = function () {
return false;
};
},
getLabelStatus() {
console.log("vm.ruleForm.dingdingNumber = " + vm.ruleForm.dingdingNumber);
let callback = (res) => {
if (res.code == "000000") {
vm.dataProjectStates = res.data.dataProjectStates;
vm.dataProjectLabels = res.data.dataProjectLabels;
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest(
"get",
`/sensitive/visit/status?dingdingNumber=${vm.ruleForm.dingdingNumber}&dingdingDate=${vm.ruleForm.dingdingDate}&dingdingSheet=${encodeURI(vm.ruleForm.sheet)}`,//${vm.ruleForm.sheet}
{},
callback
);
},
getUrlQuery() {
let query = vm.$route.query;
if (query && query.dingdingNumber) {
vm.ruleForm.dingdingNumber = query.dingdingNumber || "";
vm.ruleForm.dingdingDate = query.dingdingDate || "";
vm.ruleForm.sheet = query.sheet || "";
vm.submitForm("ruleForm");
}
},
created() {
sendRequest(type, url, params, callback) {
openLoading(vm);
url = localStorage.getItem("lectureUrl") + url;
vm.$axios[type](url, params)
.then((res) => {
closeLoading(vm);
res = res.data;
callback(res);
})
.catch((error) => {
vm.$message.error("网络出现点问题");
});
},
getRowClass({ row, column, rowIndex, columnIndex }) {
return "background: rgba(255,255,255,0.2)";
},
getWaterMark() {
let callback = (res) => {
if (res.code == "000000") {
if (res.data) {
vm.waterMark = res.data;
vm.setWaterMark(); // 设置水印背景
} else {
vm.$message.error("网络出现点问题");
}
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest( 'post', `/sensitive/image`, {}, callback );
},
setWaterMark() {
let bg = document.getElementById("bodyContent");
// bg.style.background = `url(${vm.waterMark}) repeat`;
bg.style.background = "url('" + vm.waterMark + "') repeat";
bg.style.backgroundSize = "300px auto";
},
handleClearCondition() {
// debugger;
vm.conditionForm = {};
vm.addConditioDialogVisible = false;
},
handleDingNumChange(val) {
vm.ruleForm.dingdingDate = "";
vm.ruleForm.sheet = "";
vm.applyDateList = [];
vm.sheetsList = [];
if (val && val.length == 21) {
vm.getApplyDateList();
} else if (val && val.length > 21) {
val = val.slice(0, 21);
vm.ruleForm.dingdingNumber = val;
}
},
numInputLimit(e) {
let key = e.key;
// 不允许输入'e'和'.'
if (key === "e" || key === ".") {
e.returnValue = false;
return false;
}
return true;
},
getApplyDateList() {
//获取 数据申请日期
let callback = (res) => {
if (res.code == "000000") {
if (res.data && res.data.length > 0) {
vm.applyDateList = res.data;
} else {
vm.applyDateList = [];
}
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest(
"get",
`/sensitive/visit/date?dingdingNumber=${vm.ruleForm.dingdingNumber}`,
{},
callback
);
},
handleApplyDateChange(val) {
vm.ruleForm.sheet = "";
vm.sheetsList = [];
if (val) {
vm.getSheets();
}
},
handleDingNumClear() {
vm.ruleForm.dingdingDate = "";
vm.applyDateList = [];
vm.handleApplyDateClear();
},
handleApplyDateClear() {
vm.ruleForm.sheet = "";
vm.sheetsList = [];
},
getSheets() {
// 获取 Sheets名
let callback = (res) => {
if (res.code == "000000") {
if (res.data && res.data.length > 0) {
vm.sheetsList = res.data;
} else {
vm.sheetsList = [];
}
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest(
"get",
`/sensitive/visit/sheet?dingdingNumber=${vm.ruleForm.dingdingNumber}&dingdingDate=${vm.ruleForm.dingdingDate}`,
{},
callback
);
},
confirmSendRemark() {
// 添加备注信息
if (vm.newRemark.trim() == "") {
vm.$message.error("请先输入备注信息!");
return;
}
// vm.currentRow
let data = {
dataContentId: vm.currentRow.contentId,
dataUserContentId: vm.currentRow.dataUserContentId,
remark: vm.newRemark.trim(),
};
let callback = (res) => {
if (res.code == "000000") {
vm.remarkDialogVisible = false;
vm.submitForm("ruleForm");
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest("post", `/sensitive/dataRemark`, data, callback);
},
showAddConditionModal() {
vm.addConditioDialogVisible = true;
},
methods: {
handleSend() {
if (vm.multipleSelection && vm.multipleSelection.length == 0) {
vm.$message.error("请先勾选表格!");
return;
}
vm.dataUserDiss = [];
vm.sendDialogVisible = true;
vm.getUserList();
},
showExportModal() {
if (vm.checkChrome()) {
console.log("导出检测,是chome");
vm.browserVisible = false;
} else {
console.log("导出检测,是其它浏览器");
vm.browserVisible = true;
return;
}
// 待接口提供后 请求接口获取excel, 再出发下载
vm.checkExport();
},
}
checkExport() {
vm.exportModalVisible = true;
// /dataSearch/searchUserDis
// 查询分发人员列表
let data = {
dingdingNum: vm.ruleForm.dingdingNumber,
dingdingDate: vm.ruleForm.dingdingDate,
dataSheetName: vm.ruleForm.sheet,
};
let callback = (res) => {
if (res.code == "000000") {
console.log("导出前校验》》》》 ", res);
vm.checkExportData.dataExportTotal = res.data.dataExportTotal;
vm.checkExportData.dataExportCount = res.data.dataExportCount;
// vm.exportModalVisible = true;
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest(
"post",
`/sensitive/dataSearch/check/export`,
data,
callback
);
},
handleExport() {
let data = {
dingdingNum: vm.ruleForm.dingdingNumber,
dingdingDate: vm.ruleForm.dingdingDate,
dataSheetName: vm.ruleForm.sheet,
};
let callback = (res) => {
if (res.code == "000000") {
console.log("正式导出》》》》 ", res);
// 执行下载excel
vm.downloadFile(res.data.path, res.data.fileName);
vm.exportModalVisible = false;
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest("post", `/sensitive/dataSearch/export`, data, callback);
},
downloadFile(base64, fileName) {
let a = document.createElement("a");
let uploadHref = "data:application/xls;base64," + base64;
a.setAttribute("href", uploadHref);
let exportFileName = fileName;
a.setAttribute("download", exportFileName);
a.click();
},
handleNormalExport() {
let data = {
dingdingNum: vm.ruleForm.dingdingNumber,
dingdingDate: vm.ruleForm.dingdingDate,
dataSheetName: vm.ruleForm.sheet,
};
let callback = (res) => {
if (res.code == "000000") {
console.log("常规导出》》》》 ", res);
// 执行下载excel
vm.downloadFile(res.data.path, res.data.fileName);
vm.exportNormalModalVisible = false;
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest("post", `/sensitive/dataSearch/export/common`, data, callback);
},
checkChrome() {
// return (navigator.appVersion.indexOf('Chrome') || navigator.appVersion.indexOf('chrome')) != -1;
return this.getBroswer().broswer=='Chrome'
},
getBroswer() {
let sys = {};
let ua = navigator.userAgent.toLowerCase();
let s;
(s = ua.match(/edge\/([\d.]+)/)) ? sys.edge = s[1] :
(s = ua.match(/rv:([\d.]+)\) like gecko/)) ? sys.ie = s[1] :
(s = ua.match(/msie ([\d.]+)/)) ? sys.ie = s[1] :
(s = ua.match(/firefox\/([\d.]+)/)) ? sys.firefox = s[1] :
(s = ua.match(/chrome\/([\d.]+)/)) ? sys.chrome = s[1] :
(s = ua.match(/opera.([\d.]+)/)) ? sys.opera = s[1] :
(s = ua.match(/version\/([\d.]+).*safari/)) ? sys.safari = s[1] : 0;
if (sys.edge) return { broswer : "Edge", version : sys.edge };
if (sys.ie) return { broswer : "IE", version : sys.ie };
if (sys.firefox) return { broswer : "Firefox", version : sys.firefox };
if (sys.chrome) return { broswer : "Chrome", version : sys.chrome };
if (sys.opera) return { broswer : "Opera", version : sys.opera };
if (sys.safari) return { broswer : "Safari", version : sys.safari };
return { broswer : "", version : "0" };
},
down() {
window.location.href = 'http://www.google.cn/chrome/';
},
getUserList() {
// /dataSearch/searchUserDis
// 查询分发人员列表
let data = {
dingdingNum: vm.ruleForm.dingdingNumber,
dingdingDate: vm.ruleForm.dingdingDate,
dataSheetName: vm.ruleForm.sheet,
};
let callback = (res) => {
if (res.code == "000000") {
vm.peopleList = res.data;
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest(
"post",
`/sensitive/dataSearch/searchUserDis`,
data,
callback
);
},
submitForm(formName) {
vm.$refs[formName].validate((valid) => {
if (valid) {
let data = {
columnMap: {},
labelMap: {},
dingdingNum: vm.ruleForm.dingdingNumber,
dingdingDate: vm.ruleForm.dingdingDate,
dataSheetName: vm.ruleForm.sheet,
projectStateId: vm.ruleForm.labelStatus,
remark: vm.ruleForm.remark,
pageNo: vm.ruleForm.pageNo,
pageSize: vm.ruleForm.pageSize,
};
// 如果添加了筛选条件,则将其合并到 查询接口的传参中
let stringData = JSON.stringify(vm.conditionForm);
if (stringData != "{}") {
let condition = JSON.parse(stringData);
console.log("submitForm() : condition = " + condition);
for (let key in condition) {
console.log("submitForm() : key = " + key);
data.columnMap[key] = condition[key];
}
}
if (vm.dataProjectLabels.length > 0) {
for (let i = 0; i < vm.dataProjectLabels.length; i++) {
console.log(
"dataProjectLabels() : key = " +
vm.dataProjectLabels[i].labelCode +
", value = " +
vm.dataProjectContents[i]
);
data.labelMap[vm.dataProjectLabels[i].labelCode] =
vm.dataProjectContents[i];
}
}
let callback = (res) => {
if (res.code == "000000") {
vm.isSearchSend = true;
vm.tableDataList = res.data;
if (
typeof res.data.dataRole != "undefined" &&
res.data.dataRole == 1
) {
vm.showSendBtn = true;
}
if (
typeof res.data.dataExportCount != "undefined" &&
res.data.dataExportCount > 0
) {
vm.showExportBtn = true;
}
if (res.data.distributeRole == 2) {
vm.showNormalExportBtn = true;
}
vm.getLabelStatus();
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest(
"post",
`/sensitive/dataSearch/search`,
data,
callback
);
} else {
console.log("error submit!!");
return false;
}
});
},
handleSizeChange(val) {
console.log("size change .......");
vm.ruleForm.pageSize = val;
vm.submitForm("ruleForm");
},
handleCurrentChange(val) {
console.log("currentPage change .......");
vm.ruleForm.pageNo = val;
vm.submitForm("ruleForm");
},
handleSelectionChange(val) {
vm.multipleSelection = val;
// debugger;
let firstColumn = vm.tableDataList.columnList[0].key || "column1";
let str = "";
let tempNameList = [];
vm.multipleSelection.map(function (value, index, arr) {
tempNameList.push(value[firstColumn]);
});
str = tempNameList.join(",");
vm.selectedNameList = str;
},
handleRemarkClick(row) {
vm.remarkDialogVisible = true;
vm.currentRow = row;
// 获取备注信息
let callback = (res) => {
if (res.code == "000000") {
vm.remarkHistory = res.data.remarks;
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest(
"get",
`/sensitive/dataRemark?dataContentId=${row.contentId}`,
{},
callback
);
},
handleSetLabelClick(row) {
vm.currentRow = row;
vm.setLabelVisible = true;
// 获取历史标签信息
let callback = (res) => {
if (res.code == "000000") {
vm.historyLabelList = res.data;
// console.log(
// "handleSetLabelClick() : vm.historyLabelList = " +
// vm.historyLabelList.menus.length
// );
if (vm.dataProjectLabels == null || vm.dataProjectLabels == "") {
vm.$message.info("未设置过标签")
}
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest(
"get",
`/sensitive/dataSearch/labels?dataContentId=${row.contentId}`,
{},
callback
);
},
dealSetLabelClick() {
let tmpList = [];
if (vm.dataProjectLabels && vm.dataProjectLabels.length > 0) {
for (let i = 0; i < vm.dataProjectLabels.length; i++) {
let obj = {
labelCode: vm.dataProjectLabels[i].labelCode,
labelValue: vm.setLabelList[i]
};
tmpList.push(obj);
}
} else {
vm.setLabelVisible = false;
return;
}
let data = {
contentId: vm.currentRow.contentId,
dataUserContentId: vm.currentRow.dataUserContentId,
list: tmpList,
projectMainId: 0,
};
let callback = (res) => {
if (res.code == "000000") {
// vm.peopleList = res.data;
this.$message({
type: "success",
message: "设置标签成功",
});
} else {
vm.$message.error(res.message);
}
vm.setLabelVisible = false;
};
vm.sendRequest("post", `/sensitive/dataSearch/labels`, data, callback);
},
handleTagClick(row) {
vm.currentRow = row;
this.tagVisible = true;
},
dealTagClick() {
let callback = (res) => {
if (res.code == "000000") {
this.$message({
type: "success",
message: "标记状态设置成功",
});
vm.submitForm("ruleForm");
} else {
vm.$message.error(res.message);
}
vm.tagVisible = false;
};
vm.sendRequest(
"get",
`/sensitive/dataSearch/changeStatus?dataUserContentId=${vm.currentRow.dataUserContentId}
&dataContentId=${vm.currentRow.contentId}&projectStateId=${vm.tagStatus}`,
{},
callback
);
},
handleLabelClick() {
this.labelVisible = false;
},
handleRemarkClose() {
vm.newRemark = "";
vm.remarkHistory = [];
},
handleConfirmSend() {
if (vm.dataUserDiss && vm.dataUserDiss.length == 0) {
vm.$message.error("请先勾选人员!");
return;
}
let selectListIds = [];
vm.multipleSelection.map(function (value, index, arr) {
selectListIds.push(value.contentId);
});
let data = {
dataUserDiss: vm.dataUserDiss,
dataCountIds: selectListIds,
dataInfoId: vm.tableDataList.dataInfoId,
};
let callback = (res) => {
if (res.code == "000000") {
vm.sendDialogVisible = false;
} else {
vm.$message.error(res.message);
}
};
vm.sendRequest("post", `/sensitive/dataSearch/postUser`, data, callback);
},
handleAddConditionConfirm() {
vm.addConditioDialogVisible = false;
vm.ruleForm.pageNo = 1;
},
},
};
</script>
<style lang="less">
.data-view-wrap{
.top-title{
color: #333333;
.data-view-wrap {
// 处理input type = number的上下箭头
input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
-webkit-appearance: none;
}
input[type="number"] {
-moz-appearance: textfield;
}
user-select: none;
ul,
li {
list-style: none;
}
.top-title {
color: #333333;
}
.search-ruleForm {
margin-top: 20px;
.input {
width: 215px;
}
.add-icon {
font-size: 40px;
font-weight: 700;
color: #606266;
vertical-align: middle;
margin-left: 10px;
&:hover {
cursor: pointer;
}
}
}
.condition-dialog-wrap {
.el-form-item__label {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.remark-modal {
.el-dialog__body {
overflow: hidden;
.remark-confirm-btn {
float: right;
margin-top: 10px;
}
.history-list {
margin-top: 60px;
li {
margin-bottom: 5px;
line-height: 20px;
.text {
line-height: 22px;
text-indent: 12px;
word-break: break-all;
}
}
}
}
}
.send-modal-box {
.people-choose {
margin-top: 30px;
.title {
display: inline-block;
}
.people-select-comp {
margin-left: 20px;
}
}
.name-list {
width: 450px;
height: 24px;
line-height: 24px;
.name {
max-width: 385px;
float: left;
display: block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.after-text {
float: left;
display: block;
width: 55px;
margin-left: 5px;
}
}
}
.no-table-data {
width: 100%;
height: 400px;
line-height: 400px;
text-align: center;
color: #606266;
font-size: 14px;
}
.pagination-style {
margin-top: 30px;
float: right;
}
.tebale_card {
background: rgba(255, 255, 255, 0.2);
}
.el-table,
.el-table__expanded-cell {
background: rgba(255, 255, 255, 0.2);
}
.el-table {
.el-table__fixed-right {
background: #fff;
}
}
.same-line-class {
margin-top: 20px;
display: inline-block;
}
.href-link {
color: red;
}
}
</style>
\ No newline at end of file
<template>
<div class="strack-detail-container">
<div class="title">埋点列表</div>
<el-form ref="form" :model="searchParam" label-suffix=":" label-width="120px" label-position="right" style="width:100%;">
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-col :span="15">
<el-form-item label="">
<el-input
v-model="searchParam.action"
clearable
placeholder="请输入要查找的埋点编码或名称"
style="width:400px;margin-left: -74px;"
@change="search(1)"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-col :span="8">
<el-form-item label="所属页面">
<el-select v-model="searchParam.pageId" @change="search(1)" clearable placeholder="请选择所属页面" style="width:200px">
<el-option
v-for="(eItem,eIndex) in pageSelect"
:key="eIndex"
:label="eItem.name"
:value="eItem.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="发布版本">
<el-select v-model="searchParam.releaseVersion" @change="search(1)" clearable placeholder="请选择发布版本" style="width:200px">
<el-option
v-for="(eItem,eIndex) in versionSelect"
:key="eIndex"
:label="eItem"
:value="eItem">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="事件类型">
<el-select v-model="searchParam.actionType" @change="search(1)" clearable placeholder="请选择事件类型" style="width:200px">
<el-option
v-for="(eItem,eIndex) in actionSelect"
:key="eIndex"
:label="eItem.value"
:value="eItem.no">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="当前处理人">
<el-select v-model="searchParam.handlerId" @change="search(1)" clearable placeholder="请选择当前处理人" style="width:200px">
<el-option
v-for="(eItem,eIndex) in memberSelect"
:key="eIndex"
:label="eItem.name"
:value="eItem.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<div class="time-container">
<el-form-item label="发布时间">
<el-date-picker
type="date"
placeholder="开始时间"
v-model="startTime"
style="width: 150px;"
value-format="yyyy-MM-dd 00:00:00"
@change="search(1)">
</el-date-picker>
<span>-</span>
<el-date-picker
type="date"
placeholder="结束时间"
v-model="endTime"
style="width: 150px;"
value-format="yyyy-MM-dd 23:59:59"
@change="search(1)">
</el-date-picker>
</el-form-item>
</div>
<el-form-item label="状态">
<el-select v-model="searchParam.status" @change="search(1)" clearable placeholder="请选择状态" style="width:200px">
<el-option
v-for="(eItem,eIndex) in statusSelect"
:key="eIndex"
:label="eItem.name"
:value="eItem.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<!-- 表格 -->
<el-table
class="search-table"
:data="tableData"
style="width: 100%"
:empty-text="tableText">
<el-table-column prop="actionCode" label="事件编码" min-width="100" align="left"></el-table-column>
<el-table-column prop="actionName" label="事件名" min-width="120" align="left"></el-table-column>
<el-table-column prop="pageName" label="所属页面" min-width="100" align="left">
<template slot-scope="scope">
<span>{{scope.row.pageName}}-{{scope.row.pageTypeValue}}</span>
</template>
</el-table-column>
<el-table-column prop="actionTypeValue" label="事件类型" min-width="100" align="left"></el-table-column>
<el-table-column prop="releaseVersion" label="发布版本" min-width="100" align="left"></el-table-column>
<el-table-column prop="releaseTime" label="发布时间" min-width="100" align="left"></el-table-column>
<el-table-column prop="img" label="图例" min-width="100" align="left">
<template slot-scope="scope">
<span v-viewer>
<img :src="scope.row.actionPath" style="width: 80px;"/>
</span>
</template>
</el-table-column>
<el-table-column prop="handlerName" label="当前处理人" min-width="100" align="left"></el-table-column>
<el-table-column prop="statusValue" label="状态" min-width="80" align="left"></el-table-column>
<el-table-column label="操作" fixed="right" align="center" min-width="200">
<template slot-scope="scope">
<el-button :disabled="scope.row.assignBtnStatus == 2" type="primary" size="small" @click="assignDialog(scope.row)">指派</el-button>
<el-button :disabled="scope.row.editBtnStatus == 2" type="primary" size="small" @click="editColumn(scope.row)">编辑</el-button>
<el-button :disabled="scope.row.offLineBtnStatus == 2" type="primary" size="small" @click="downPage(scope.row)">下线</el-button>
<el-button type="primary" size="small" @click="detail(scope.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="searchParam.pageNo"
:page-sizes="[15, 30, 50, 100, 200, 500, 700, 1000, 1500, 2000]"
:page-size="searchParam.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows">
</el-pagination>
</div>
<!-- 指派 -->
<el-dialog
title="指派"
:visible.sync="assignVisible"
width="40%">
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-form ref="assignForm"
:model="assignForm"
:rules="assignRule"
label-width="150px"
label-suffix=":"
label-position="right"
size="mini"
style="width: 100%;">
<el-col :span="24">
<el-form-item label="任务状态" prop="status">
<el-select v-model="assignForm.status" placeholder="请选择任务状态" style="width:200px">
<el-option
v-for="(eItem,eIndex) in assignstatusSelect"
:key="eIndex"
:label="eItem.name"
:value="eItem.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="指派人" prop="handlerIds">
<el-select v-model="assignForm.handlerIds" multiple filterable placeholder="请选择指派人" style="width:200px">
<el-option
v-for="(eItem,eIndex) in assignSelect"
:key="eIndex"
:label="eItem.name"
:value="eItem.id + '&' + eItem.name">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-form>
</el-row>
<span slot="footer" class="dialog-footer">
<el-button @click="assignVisible = false">取 消</el-button>
<el-button type="primary" @click="confirmAssign">确 定</el-button>
</span>
</el-dialog>
<!-- 编辑埋点 -->
<el-dialog
title="编辑埋点"
:visible.sync="dialogVisible"
width="40%">
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-form ref="menuForm"
:model="form"
label-width="150px"
label-suffix=":"
label-position="right"
:rules="rules"
size="mini"
style="width: 100%;">
<el-col :span="24">
<el-form-item label="页面名">
<span>{{form.pageName}}</span>
</el-form-item>
<el-form-item label="页面编码">
<span>{{form.pageCode}}</span>
</el-form-item>
<el-form-item label="事件名" prop="actionName">
<el-input v-model="form.actionName" placeholder="请输入事件名" style="width:200px"></el-input>
</el-form-item>
<el-form-item label="事件类型" prop="actionType">
<el-input v-model="form.actionType" disabled style="width:200px"></el-input>
<!-- <el-select v-model="form.actionType" clearable placeholder="请选择实现方式" style="width:200px">
<el-option
v-for="(eItem,eIndex) in actionSelect"
:key="eIndex"
:label="eItem.value"
:value="eItem.no">
</el-option>
</el-select> -->
</el-form-item>
<el-form-item v-if="form.pageType == 2" label="发布版本" prop="releaseVersion">
<el-select v-model="form.releaseVersion" clearable placeholder="请选择模块大类" style="width:200px">
<el-option
v-for="(eItem,eIndex) in versionSelect"
:key="eIndex"
:label="eItem"
:value="eItem">
</el-option>
</el-select>
</el-form-item>
<el-form-item v-if="form.pageType != 2" label="发布时间" prop="releaseTime">
<el-date-picker
type="date"
placeholder="结束时间"
v-model="form.releaseTime"
style="width: 200px;">
</el-date-picker>
</el-form-item>
<el-form-item label="上传图例" prop="actionPath">
<el-upload
v-model="form.actionPath"
class="avatar-uploader"
action="#"
:show-file-list="false"
:before-upload="beforeAvatarUpload">
<img v-if="!form.actionPath" class="bg-img" src="../../../static/img/default.png">
<img v-if="form.actionPath" class="bg-img" :src="form.actionPath">
</el-upload>
</el-form-item>
<div v-for="(item, index) in form.actionTagResqs" :key="index" style="width: 400px;">
<el-form-item :label="'额外投递' + parseInt(index + 1)">
<el-select
v-model="item.tagCode"
clearable
filterable
placeholder="请选择额外投递"
@change="changeTag($event, index)"
style="width:200px; margin-bottom: 10px;">
<el-option
v-for="(eItem,eIndex) in tagSelect"
:key="eIndex"
:label="eItem.tagName"
:value="eItem.tagCode">
</el-option>
</el-select>
<i class="el-icon-circle-plus-outline" @click="addTag(index)"></i>
<i v-if="index > 0" class="el-icon-remove-outline" @click="deleteTag(index)"></i>
</el-form-item>
</div>
</el-col>
</el-form>
</el-row>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="editPointConfirm">确 定</el-button>
</span>
</el-dialog>
<!-- 下线页面 -->
<el-dialog
title="下线埋点"
:visible.sync="downPageVisible"
width="40%">
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-form ref="downForm"
:model="downForm"
label-width="150px"
label-suffix=":"
label-position="right"
:rules="downRules"
size="mini"
style="width: 100%;">
<el-col :span="24">
<el-form-item label="事件名">
<div>{{downForm.actionName}}</div>
</el-form-item>
<el-form-item label="事件编码">
<span>{{downForm.actionCode}}</span>
</el-form-item>
<el-form-item label="实现方式">
<span>{{downForm.pageTypeValue}}</span>
</el-form-item>
<el-form-item v-if="downForm.pageType == 2" label="下线版本" prop="offVersion">
<el-select v-model="downForm.offVersion" clearable placeholder="请选择下线版本" style="width:200px">
<el-option
v-for="(eItem,eIndex) in versionSelect"
:key="eIndex"
:label="eItem"
:value="eItem">
</el-option>
</el-select>
</el-form-item>
<el-form-item v-if="downForm.pageType != 2" label="下线时间" prop="offTime">
<el-date-picker
type="date"
placeholder="请选择下线时间"
v-model="downForm.offTime"
style="width: 200px;"
value-format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
</el-col>
</el-form>
</el-row>
<span slot="footer" class="dialog-footer">
<el-button @click="downPageVisible = false">取 消</el-button>
<el-button type="primary" @click="updateConfim">确 定</el-button>
</span>
</el-dialog>
<!-- 查看详情 -->
<el-dialog
title="查看埋点详情"
:visible.sync="detailVisible"
width="40%">
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-form ref="detailForm"
:model="detailForm"
label-width="150px"
label-suffix=":"
label-position="right"
:rules="rules"
size="mini"
style="width: 100%;">
<el-col :span="24">
<el-form-item label="事件名">
<span>{{detailForm.actionName}}</span>
</el-form-item>
<el-form-item label="事件编码">
<span>{{detailForm.actionCode}}</span>
</el-form-item>
<el-form-item label="所属页面">
<span>{{detailForm.pageName}}</span>
</el-form-item>
<el-form-item label="事件类型">
<span>{{detailForm.actionTypeValue}}</span>
</el-form-item>
<el-form-item label="额外投递">
<span>{{detailForm.componentTag}}</span>
</el-form-item>
<el-form-item label="投递示例">
<span>{{detailForm.componentTagAll}}</span>
</el-form-item>
<div v-for="(item, index) in detailForm.actionTagResqs" :key="index" style="width: 400px;">
<el-form-item :label="'额外投递' + parseInt(index + 1)">
<div>投递名称:{{item.tagName}}</div>
<div>投递编码:{{item.tagCode}}</div>
<div>内容定义:{{item.tagDesc}}</div>
</el-form-item>
</div>
</el-col>
</el-form>
</el-row>
</el-dialog>
<!-- 新增投递对象 -->
<el-dialog
title="新建投递对象"
:visible.sync="tagVisible"
width="40%">
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-form ref="tagForm"
rules="tagRules"
:model="tagForm"
label-width="150px"
label-suffix=":"
label-position="right"
size="mini"
style="width: 100%;">
<el-col :span="24">
<el-form-item label="投递对象名" prop="tagName">
<el-input v-model="tagForm.tagName" maxlength="15" placeholder="请输入投递对象名称" style="width: 200px;"></el-input>
</el-form-item>
<el-form-item label="投递方法定义" prop="tagDesc">
<el-input type="textarea" maxlength="500" v-model="tagForm.tagDesc" style="width: 200px;"></el-input>
</el-form-item>
</el-col>
</el-form>
</el-row>
<span slot="footer" class="dialog-footer">
<el-button @click="tagVisible = false">取 消</el-button>
<el-button type="primary" @click="confirmAddTag">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { isEmptyUtils, openLoading, closeLoading } from '../../common/utils';
function isNormalWorld(rule, value,callback) {
var regEn = /[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/im,
regCn = /[·!#¥(——):;“”‘、,|《。》?、【】[\]]/im;
if(regEn.test(value) || regCn.test(value)) {
return callback("名称不能包含特殊字符")
}
callback();
}
export default {
data() {
return {
tagVisible: false,
startTime: '',
endTime: '',
tableText: '',
searchParam: {
action: '',
actionType: '',
pageId: '',
handlerId: '',
implementMethodId: '',
releaseTimeStart: 0,
releaseTimeEnd: 0,
releaseVersion: '',
status: '',
pageNo: 1,
pageSize: 15
},
tagForm: {
tagName: '',
tagCode: '',
tagDesc: ''
},
totalRows: 0,
dialogVisible: false,
downPageVisible: false,
assignVisible: false,
tableData: [],
form: { // 编辑
actionType: '',
actionName: '',
actionPaty: '',
actionTagResqs: [{tagName: '', tagCode: '', tagDesc: ''}],
releaseTime: '',
releaseVersion: ''
},
assignForm: { // 任务指派
handlerIds: [],
id: '',
status: ''
},
downForm: { // 下线
pageName: '',
pageCode: '',
implementMethod: '',
implementMethodId: '',
id: '',
offTime: '',
offVersion: ''
},
statusSelect: [],
versionSelect: [],
memberSelect: [],
pageSelect: [],
actionSelect: [],
assignstatusSelect: [],
assignSelect: [],
tagSelect: [],
rules: {
actionName: [
{ required: true, message: '请输入事件名', trigger: 'blur' },
{ validator: isNormalWorld ,trigger: true}
],
actionType: [
{ required: true, message: '请选择事件类型', trigger: 'blur' }
],
releaseTime: [
{ required: true, message: '请选择发布时间', trigger: 'change' }
],
releaseVersion: [
{ required: true, message: '请选择发布版本', trigger: 'change' }
],
actionPath: [
{ required: true, message: '请上传位置图片', trigger: 'change' }
],
},
tagRules: {
tagName: [
{ required: true, message: '请输入投递名称', trigger: 'change' }
],
tagDesc: [
{ required: true, message: '请输入投递方法定义', trigger: 'change' }
]
},
downRules: {
offVersion: [
{ required: true, message: '请选择下线版本', trigger: 'change' }
],
offTime: [
{ required: true, message: '请选择下线时间', trigger: 'change' }
]
},
assignRule: {
status: [
{ required: true, message: '请选择任务状态', trigger: 'change' }
],
handlerIds: [
{ required: true, message: '请选择指派人', trigger: 'change' }
],
},
imageUrl: '',
detailVisible: false,
detailForm: {}
}
},
beforeRouteEnter(to, from, next) {
next(vm => {
if (to.query.id) {
vm.searchParam.pageId = parseInt(vm.$route.query.id) || '';
vm.searchParam.action = '';
vm.searchParam.actionType = '';
vm.searchParam.handlerId = '';
vm.searchParam.implementMethodId = '';
vm.searchParam.releaseTimeStart = 0;
vm.searchParam.releaseTimeEnd = 0;
vm.searchParam.releaseVersion = '';
vm.searchParam.status = '';
vm.search();
}
})
},
created() {
this.searchParam.pageId = parseInt(this.$route.query.id) || '';
},
mounted() {
this.getPageList();
this.getVersionList();
this.getStatusList();
this.getCurrentData();
this.getActionList();
this.search();
},
methods: {
// 封装一下请求通用的方法
getData(type, url, req, callback) {
openLoading(this);
this.$axios[type](localStorage.getItem("lectureUrl") + url, req)
.then(res => {
closeLoading(this);
let data = res.data;
if (data.code == "000000") {
if (callback) callback(data);
} else {
this.$message.error(data.message);
}
})
},
// 获取投递列表
getTagList() {
this.getData(
"get", `/basic-data/bi/actionTag/list`, {},
res => {
this.tagSelect = res.data;
this.tagSelect.unshift({
tagName: '新建额外投递对象+',
tagCode: '000000'
})
}
);
},
changeTag(val, index) {
if(val == '000000') {
this.tagVisible = true;
this.tagForm.tagName = '';
this.tagForm.tagDesc = '';
if(this.$refs.tagForm) {
this.$refs.tagForm.resetFields();
}
this.form.actionTagResqs[index].tagCode = '';
}else {
this.form.actionTagResqs[index].tagCode = val;
}
},
confirmAddTag() {
this.$refs.tagForm.validate((valid) => {
if(valid) {
this.getData(
"post", `/basic-data/bi/actionTag/insert`, this.tagForm,
res => {
this.tagVisible = false;
this.getTagList();
}
);
}
})
},
// 获取页面列表
getPageList() {
this.getData(
"get", `/basic-data/bi/constants/pageList`, {},
res => {
this.pageSelect = res.data;
}
);
},
// 获取版本号
getVersionList() {
this.getData(
"get", `/basic-data/bi/constants/releaseVersionList`, {},
res => {
this.versionSelect = res.data;
}
);
},
// 获取状态
getStatusList() {
this.getData(
"get", `/basic-data/bi/constants/statusList`, {},
res => {
this.statusSelect = res.data;
}
);
},
// 获取当前处理人
getCurrentData() {
this.getData(
"get", `/basic-data/bi/constants/userList/action`, {},
res => {
this.memberSelect = res.data;
}
);
},
// 获取事件类型下拉数据
getActionList() {
this.getData(
"get", `/basic-data/constants/app/P251`, {},
res => {
this.actionSelect = res.data;
}
);
},
search(param) {
if(param) this.searchParam.pageNo = 1;
this.searchParam.releaseTimeStart = new Date(this.startTime).getTime();
this.searchParam.releaseTimeEnd = new Date(this.endTime).getTime();
let req = this.searchParam;
this.getData(
"post", `/basic-data/bi/pageAction/list`, req,
res => {
this.tableData = res.data.contentList;
this.totalRows = res.data.total;
if(this.tableData.length == 0) {
this.tableText = param ? "暂无数据" : '暂无匹配的结果';
}
}
);
},
// 详情
getActionDetail(id) {
this.getData(
"get", `/basic-data/bi/pageAction/info?pageActionId=${id}`, {},
res => {
this.detailForm = res.data;
this.form = res.data;
if(this.form.actionTagResqs.length < 1) {
this.form.actionTagResqs = [{tagName: '', tagCode: '', tagDesc: ''}];
}
}
);
},
// 编辑
editColumn(row) {
this.dialogVisible = true;
this.form.pageType = row.pageType;
this.getActionDetail(row.id);
this.getTagList();
},
// 保存编辑
editPointConfirm() {
this.$refs.menuForm.validate((valid) => {
if(valid) {
let req = {};
req = JSON.parse(JSON.stringify(this.form));
req.releaseTime = new Date(req.releaseTime).getTime();
for(let i = 0;i < this.tagSelect.length;i++) {
req.actionTagResqs.forEach((item, index) => {
if(this.tagSelect[i].tagCode == item.tagCode) {
item.tagName = this.tagSelect[i].tagName;
}
})
}
this.getData(
"post", `/basic-data/bi/pageAction/update`, req,
res => {
this.$message.success("编辑成功");
this.dialogVisible = false;
this.search();
}
);
}
})
},
addTag(index) {
this.form.actionTagResqs.push({tagName: '', tagCode: '', tagDesc: ''});
},
deleteTag(index) {
this.form.actionTagResqs.splice(index, 1);
},
// 下线页面
downPage(row) {
if(this.$refs.downForm) {
this.$refs.downForm.resetFields();
}
this.downForm.offTime = '';
this.downForm.offVersion = '';
this.downForm = Object.assign({ id: row.id }, row);
this.downPageVisible = true;
},
// 保存下线页面
updateConfim() {
this.$refs.downForm.validate((valid) => {
if(valid) {
let req = {
offTime: this.downForm.offTime,
offVersion: this.downForm.offVersion,
id: this.downForm.id,
pageType: this.downForm.pageType
};
if(req.offTime) req.offTime = new Date(req.offTime).getTime();
this.getData(
"post", `/basic-data/bi/pageAction/offLine`, req,
res => {
this.$message.success("下线成功");
this.downPageVisible = false;
this.search();
}
);
}
})
},
// 指派
assignDialog(row) {
if(this.$refs.assignForm) {
this.$refs.assignForm.resetFields();
}
this.assignVisible = true;
this.assignForm.id = row.id;
this.assignForm.handlerIds = [];
this.assignForm.status = '';
this.getData(
"get", `/basic-data/bi/constants/assign/detail?status=${row.status}`, {},
res => {
this.assignstatusSelect = res.data.statusList;
this.assignSelect = res.data.handlerList;
}
);
},
// 确定指派
confirmAssign() {
this.$refs.assignForm.validate((valid) => {
if(valid) {
this.assignForm.handlerIds.forEach((item, index) => {
this.assignForm.handlerIds[index] = {
id: item.split("&")[0],
name: item.split("&")[1]
}
})
this.getData(
"post", `/basic-data/bi/pageAction/assign`, this.assignForm,
res => {
this.$message.success("指派成功");
this.assignVisible = false;
this.search();
}
);
}
})
},
// 查看详情
detail(row) {
this.detailVisible = true;
this.getActionDetail(row.id);
},
// 上传页面图片
beforeAvatarUpload(file) {
let _this = this;
if (isEmptyUtils(file)) {
return;
}
const isLt2M = file.size / 1024 / 1024 < 10;
if (!isLt2M) {
this.$message.error('上传图片大小不能超过 10MB!');
return;
}
_this.$message.info('开始上传');
doUpload(_this, file, getFilePath(file,null), 'preview4', 'progress1', 1).then(function (path) {
_this.form.actionPath = path.fullPath;
_this.$message.success('上传成功');
});
return false;
},
handleSizeChange(value) {
this.searchParam.pageSize = value;
this.search();
},
handleCurrentChange(value) {
this.searchParam.pageNo = value;
this.search();
}
}
}
</script>
<style lang="less" scoped>
.strack-detail-container {
.title {
margin-bottom: 30px;
}
.bg-img {
width: 120px;
}
}
</style>
\ No newline at end of file
<template>
<div class="strack-detail-container">
<div class="title">页面列表</div>
<el-form ref="form" :model="searchParam" label-suffix=":" label-width="120px" label-position="right" style="width:100%;">
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-col :span="15">
<el-form-item label="">
<el-input v-model="searchParam.menuCode" clearable placeholder="请输入要查找的埋点编码或名称" style="width:400px;margin-left: -74px;"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-col :span="8">
<el-form-item label="所属页面">
<el-select v-model="searchParam.version" clearable placeholder="请选择所属页面" style="width:200px">
<el-option
v-for="(eItem,eIndex) in versionSelect"
:key="eIndex"
:label="eItem"
:value="eItem">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="发布版本">
<el-select v-model="searchParam.version" clearable placeholder="请选择发布版本" style="width:200px">
<el-option
v-for="(eItem,eIndex) in versionSelect"
:key="eIndex"
:label="eItem"
:value="eItem">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="事件类型">
<el-select v-model="searchParam.smallModule" clearable placeholder="请选择事件类型" style="width:200px">
<el-option
v-for="(eItem,eIndex) in smallModuleSelect"
:key="eIndex"
:label="eItem"
:value="eItem">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="当前处理人">
<el-select v-model="searchParam.member" clearable placeholder="请选择当前处理人" style="width:200px">
<el-option
v-for="(eItem,eIndex) in memberSelect"
:key="eIndex"
:label="eItem"
:value="eItem">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="发布时间">
<el-select v-model="searchParam.style" clearable placeholder="请选择发布时间" style="width:200px">
<el-option
v-for="(item,index) in styleSelect"
:key="index"
:label="item"
:value="item">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="状态">
<el-select v-model="searchParam.status" clearable placeholder="请选择状态" style="width:200px">
<el-option
v-for="(eItem,eIndex) in statusSelect"
:key="eIndex"
:label="eItem"
:value="eItem">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<!-- 表格 -->
<el-table
class="search-table"
:data="tableData"
style="width: 100%"
:empty-text="tableText"
@row-click="tableRowClick">
<el-table-column prop="menuCode" label="事件编码" min-width="100" align="left"></el-table-column>
<el-table-column prop="menuName" label="事件名" min-width="140" align="left"></el-table-column>
<el-table-column prop="stepEndName" label="所属页面" min-width="100" align="left"></el-table-column>
<el-table-column prop="menuCode" label="事件类型" min-width="140" align="left"></el-table-column>
<el-table-column prop="menuName" label="发布版本" min-width="120" align="left"></el-table-column>
<el-table-column prop="menuName" label="发布时间" min-width="140" align="left"></el-table-column>
<el-table-column prop="img" label="图例" min-width="150" align="left">
<template slot-scope="scope">
<img :src="scope.row.img" />
</template>
</el-table-column>
<el-table-column prop="menuName" label="当前处理人" min-width="100" align="left"></el-table-column>
<el-table-column prop="menuName" label="状态" min-width="80" align="left"></el-table-column>
<el-table-column label="操作" fixed="right" align="center" min-width="200">
<template slot-scope="scope">
<el-button type="primary" size="small" @click="visitData(scope.row)">指派</el-button>
<el-button type="primary" size="small" @click="editColumn(scope.row)">编辑</el-button>
<el-button type="primary" size="small" @click="downPage(scope.row)">下线</el-button>
<el-button type="primary" size="small" @click="createPoing(scope.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="searchParam.pageNo"
:page-sizes="[15, 30, 50, 100, 200, 500, 700, 1000, 1500, 2000]"
:page-size="searchParam.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows">
</el-pagination>
</div>
<!-- 流转 -->
<el-dialog
title="指派"
:visible.sync="dialogVisible"
width="30%">
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-form ref="changeForm"
:model="form"
label-width="150px"
label-suffix=":"
label-position="right"
size="mini">
<el-col :span="20">
<el-form-item label="状态流转" prop="changeStatus">
<el-select v-model="form.changeStatus" placeholder="请选择状态流转" style="width:200px">
<el-option
v-for="(eItem,eIndex) in statusSelect"
:key="eIndex"
:label="eItem"
:value="eItem">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="人员流转" prop="member">
<el-select v-model="form.member" placeholder="请选择人员流转" style="width:200px">
<el-option
v-for="(eItem,eIndex) in memberSelect"
:key="eIndex"
:label="eItem"
:value="eItem">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-form>
</el-row>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="confirmChange">确 定</el-button>
</span>
</el-dialog>
<el-dialog
title="新建(编辑)menu"
:visible.sync="dialogVisible"
width="30%">
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-form ref="menuForm"
:model="form"
label-width="150px"
label-suffix=":"
label-position="right"
:rules="rules"
size="mini">
<el-col :span="20">
<el-form-item label="页面名">
<span>首页</span>
</el-form-item>
<el-form-item label="页面编码">
<span>00010001</span>
</el-form-item>
<el-form-item label="事件名">
<el-input v-model="form.menuName" placeholder="请输入事件名" style="width:200px"></el-input>
</el-form-item>
<el-form-item label="事件类型" prop="style">
<el-select v-model="form.style" clearable placeholder="请选择实现方式" style="width:200px">
<el-option
v-for="(eItem,eIndex) in styleSelect"
:key="eIndex"
:label="eItem"
:value="eItem">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="发布版本" prop="bigModule">
<el-select v-model="form.bigModule" clearable placeholder="请选择模块大类" style="width:200px">
<el-option
v-for="(eItem,eIndex) in bigModuleSelect"
:key="eIndex"
:label="eItem"
:value="eItem">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="上传图例" prop="location">
<el-upload
v-model="form.location"
class="avatar-uploader"
action="#"
:show-file-list="false"
:before-upload="beforeAvatarUpload">
<img v-if="!imageUrl" class="bg-img" src="../../../static/img/default.png">
<img v-if="imageUrl" class="bg-img" :src="imageUrl">
</el-upload>
</el-form-item>
<el-form-item label="额外投递1" prop="bigModule">
<el-select v-model="form.bigModule" clearable placeholder="请选择额外投递1" style="width:200px">
<el-option
v-for="(eItem,eIndex) in bigModuleSelect"
:key="eIndex"
:label="eItem"
:value="eItem">
</el-option>
<i class="el-icon-remove-outline"></i>
<i class="el-icon-circle-plus-outline"></i>
</el-select>
</el-form-item>
</el-col>
</el-form>
</el-row>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="saveCreateAndEditMenu">确 定</el-button>
</span>
</el-dialog>
<!-- 下线页面 -->
<el-dialog
title="下线页面"
:visible.sync="downPageVisible"
width="30%">
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-form ref="downForm"
:model="form"
label-width="150px"
label-suffix=":"
label-position="right"
:rules="downRules"
size="mini">
<el-col :span="20">
<el-form-item label="页面名">
<span>首页</span>
</el-form-item>
<el-form-item label="页面编码">
<span>00010001</span>
</el-form-item>
<el-form-item label="实现方式">
<span>首页</span>
</el-form-item>
<el-form-item label="归属模块">
<span>00010001</span>
</el-form-item>
<el-form-item label="下线版本" prop="bigModule">
<el-select v-model="form.bigModule" clearable placeholder="请选择下线版本" style="width:200px">
<el-option
v-for="(eItem,eIndex) in bigModuleSelect"
:key="eIndex"
:label="eItem"
:value="eItem">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="下线时间" prop="bigModule">
<el-select v-model="form.bigModule" clearable placeholder="请选择下线时间" style="width:200px">
<el-option
v-for="(eItem,eIndex) in bigModuleSelect"
:key="eIndex"
:label="eItem"
:value="eItem">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-form>
</el-row>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="saveCreateAndEditMenu">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
dialogVisible: false,
tableData: [{}],
form: {
changeStatus: '',
member: ''
},
statusSelect: [],
memberSelect: []
}
},
mounted() {
this.search();
},
methods: {
search() {
},
// 流转
exchange() {
this.dialogVisible = true;
},
// 确认流转
confirmChange() {
this.dialogVisible = false;
this.search();
},
// 编辑
editColumn(row) {
this.$router.push({path: 'create-point', query: {}})
}
}
}
</script>
<style lang="less" scoped>
.strack-detail-container {
.title {
margin-bottom: 30px;
}
}
</style>
\ No newline at end of file
<template>
<div class="strack-list-contrainer">
<div class="title">页面列表</div>
<el-form ref="form" :model="searchParam" label-suffix=":" label-width="120px" label-position="right" style="width:100%;">
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-col :span="15">
<el-form-item label="">
<el-input
v-model="searchParam.searchContent"
clearable
placeholder="请输入要查找的页面或事件编码或名称"
style="width:400px;margin-left: -74px;"
@change="searchList(1)"></el-input>
</el-form-item>
</el-col>
<el-col :span="9" style="padding:0;text-align:right;padding-right:15px;">
<el-button type="primary" size="small" @click="createAndEditPage('create')">新建页面</el-button>
</el-col>
</el-row>
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-col :span="8">
<div class="time-container">
<el-form-item label="发布时间">
<el-date-picker
type="date"
placeholder="开始时间"
v-model="startTime"
style="width: 150px;"
value-format="yyyy-MM-dd 00:00:00"
@change="searchList(1)">
</el-date-picker>
<span>-</span>
<el-date-picker
type="date"
placeholder="结束时间"
v-model="endTime"
style="width: 150px;"
value-format="yyyy-MM-dd 23:59:59"
@change="searchList(1)">
</el-date-picker>
</el-form-item>
</div>
<el-form-item label="发布版本">
<el-select v-model="searchParam.releaseVersion" clearable @change="searchList(1)" placeholder="请选择发布版本" style="width:290px">
<el-option
v-for="(eItem,eIndex) in versionSelect"
:key="eIndex"
:label="eItem"
:value="eItem">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="所属模块">
<el-cascader
v-model="searchParam.moduleIdArr"
:options="moduleSelect"
:props="{ checkStrictly: true }"
clearable
@change="searchList(1, 'module')"
placeholder="请选择所属模块"
style="width:200px"></el-cascader>
</el-form-item>
<el-form-item label="当前处理人">
<el-select v-model="searchParam.handlerId" clearable @change="searchList(1)" placeholder="请选择当前处理人" style="width:200px">
<el-option
v-for="(eItem,eIndex) in memberSelect"
:key="eIndex"
:label="eItem.name"
:value="eItem.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="实现方式">
<el-select v-model="searchParam.implementMethodId" clearable @change="searchList(1)" placeholder="请选择实现方式" style="width:200px">
<el-option
v-for="(item,index) in styleSelect"
:key="index"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="状态">
<el-select v-model="searchParam.status" clearable @change="searchList(1)" placeholder="请选择状态" style="width:200px">
<el-option
v-for="(eItem,eIndex) in statusSelect"
:key="eIndex"
:label="eItem.name"
:value="eItem.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<!-- 表格 -->
<el-table
class="search-table"
:data="tableData"
style="width: 100%"
:empty-text="tableText">
<el-table-column prop="pageCode" label="页面编码" min-width="100" align="left">
<template slot-scope="scope">
<div @click="tableRowClick(scope.row)">{{scope.row.pageCode}}</div>
</template>
</el-table-column>
<el-table-column prop="pageName" label="页面名" min-width="120" align="left">
<template slot-scope="scope">
<div @click="tableRowClick(scope.row)">{{scope.row.pageName}}</div>
</template>
</el-table-column>
<el-table-column prop="implementMethod" label="实现方式" min-width="80" align="left">
<template slot-scope="scope">
<div @click="tableRowClick(scope.row)">{{scope.row.implementMethod}}</div>
</template>
</el-table-column>
<el-table-column prop="moduleName2" label="归属模块" min-width="100" align="left">
<template slot-scope="scope">
<div @click="tableRowClick(scope.row)">{{scope.row.moduleName2}}</div>
</template>
</el-table-column>
<el-table-column prop="releaseTime" label="发布时间" min-width="100" align="left">
<template slot-scope="scope">
<div @click="tableRowClick(scope.row)">{{scope.row.releaseTime}}</div>
</template>
</el-table-column>
<el-table-column prop="releaseVersion" label="发布版本" min-width="80" align="left">
<template slot-scope="scope">
<div @click="tableRowClick(scope.row)">{{scope.row.releaseVersion}}</div>
</template>
</el-table-column>
<el-table-column label="图例" min-width="120" align="left">
<template slot-scope="scope">
<span v-viewer>
<img :src="scope.row.imageUrl" style="width: 80px;"/>
</span>
</template>
</el-table-column>
<el-table-column prop="handlerNames" label="处理人" min-width="100" align="left">
<template slot-scope="scope">
<div @click="tableRowClick(scope.row)">{{scope.row.handlerNames}}</div>
</template>
</el-table-column>
<el-table-column prop="statusDesc" label="状态" min-width="80" align="left">
<template slot-scope="scope">
<div @click="tableRowClick(scope.row)">{{scope.row.statusDesc}}</div>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" align="center" min-width="200">
<template slot-scope="scope">
<el-button :disabled="scope.row.editBtnStatus == 2" type="primary" size="small" @click.stop="createAndEditPage(scope.row)">编辑</el-button>
<el-button :disabled="scope.row.offLineBtnStatus == 2" type="primary" size="small" @click.stop="downPage(scope.row)">下线</el-button>
<el-button :disabled="scope.row.createActionBtnStatus == 2" type="primary" size="small" @click.stop="createPoing(scope.row)">新建埋点</el-button>
<el-button :disabled="scope.row.assignBtnStatus == 2" type="primary" size="small" @click.stop="assignDialog(scope.row)">指派</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="searchParam.pageNo"
:page-sizes="[15, 30, 50, 100, 200, 500, 700, 1000, 1500, 2000]"
:page-size="searchParam.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows">
</el-pagination>
</div>
<!-- 新建页面 -->
<el-dialog
:title="pageTitle"
:visible.sync="creatPageVisible"
width="40%">
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-form ref="creatPageForm"
:model="pageForm"
label-width="150px"
label-suffix=":"
label-position="right"
:rules="pageRules"
size="mini"
style="width: 100%;">
<el-col :span="24">
<el-form-item label="页面名" prop="name">
<el-input v-model="pageForm.name" placeholder="请输入页面名" maxlength="15" style="width:200px"></el-input>
</el-form-item>
<el-form-item label="归属模块" required>
<el-cascader
v-model="pageForm.moduleIdArr"
:options="moduleSelect"
clearable
placeholder="请选择归属模块"
style="width:200px"></el-cascader>
</el-form-item>
<el-form-item label="实现方式" prop="implementMethodId">
<el-select v-model="pageForm.implementMethodId" clearable @change="changePageType" placeholder="请选择实现方式" style="width:200px">
<el-option
v-for="(eItem,eIndex) in styleSelect"
:key="eIndex"
:label="eItem.name"
:value="eItem.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="上传图例" prop="imageUrl">
<el-upload
v-model="pageForm.imageUrl"
accept="image/jpeg,image/jpg,image/png"
class="avatar-uploader"
action="#"
:show-file-list="false"
:before-upload="beforeAvatarUpload">
<img v-if="!pageForm.imageUrl" class="bg-img" src="../../../static/img/default.png">
<img v-if="pageForm.imageUrl" class="bg-img" :src="pageForm.imageUrl">
</el-upload>
</el-form-item>
<el-form-item v-if="pageForm.implementMethodId != 2" label="发布时间" prop="releaseTime">
<el-date-picker
type="date"
placeholder="请选择发布时间"
v-model="pageForm.releaseTime"
style="width: 200px;"
>
</el-date-picker>
</el-form-item>
<el-form-item v-if="pageForm.implementMethodId == 2" label="发布版本" prop="releaseVersion">
<el-select v-model="pageForm.releaseVersion" clearable placeholder="请选择发布版本" style="width:200px">
<el-option
v-for="(eItem,eIndex) in versionSelect"
:key="eIndex"
:label="eItem"
:value="eItem">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-form>
</el-row>
<span slot="footer" class="dialog-footer">
<el-button @click="creatPageVisible = false">取 消</el-button>
<el-button type="primary" @click="saveCreatePageMenu">确 定</el-button>
</span>
</el-dialog>
<!-- 新建埋点 -->
<el-dialog
title="新建埋点"
:visible.sync="dialogVisible"
width="40%">
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-form ref="menuForm"
:model="form"
label-width="150px"
label-suffix=":"
label-position="right"
:rules="rules"
size="mini"
style="width: 100%;">
<el-col :span="24">
<el-form-item label="页面名">
<span>{{form.pageName}}</span>
</el-form-item>
<el-form-item label="页面编码">
<span>{{form.pageCode}}</span>
</el-form-item>
<el-form-item label="事件名" prop="actionName">
<el-input v-model="form.actionName" maxlength="15" placeholder="请输入事件名" style="width:200px"></el-input>
</el-form-item>
<el-form-item label="事件类型" prop="actionType">
<el-select v-model="form.actionType" clearable placeholder="请选择事件类型" style="width:200px">
<el-option
v-for="(eItem,eIndex) in actionSelect"
:key="eIndex"
:label="eItem.value"
:value="eItem.no">
</el-option>
</el-select>
</el-form-item>
<el-form-item v-if="form.implementMethodId == 2" label="发布版本" prop="releaseVersion">
<el-select v-model="form.releaseVersion" clearable placeholder="请选择发布版本" style="width:200px">
<el-option
v-for="(eItem,eIndex) in versionSelect"
:key="eIndex"
:label="eItem"
:value="eItem">
</el-option>
</el-select>
</el-form-item>
<el-form-item v-if="form.implementMethodId != 2" label="发布时间" prop="releaseTime">
<el-date-picker
type="date"
placeholder="请选择发布时间"
v-model="form.releaseTime"
style="width: 200px;"
value-format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
<el-form-item label="上传图例" prop="actionPath">
<el-upload
v-model="form.actionPath"
class="avatar-uploader"
action="#"
accept="image/jpeg,image/jpg,image/png"
:show-file-list="false"
:before-upload="uploadActionPath">
<img v-if="!form.actionPath" class="bg-img" src="../../../static/img/default.png">
<img v-if="form.actionPath" class="bg-img" :src="form.actionPath">
</el-upload>
</el-form-item>
<div v-for="(item, index) in form.actionTagResqs" :key="index" style="width: 400px;">
<el-form-item :label="'额外投递' + parseInt(index + 1)">
<el-select
v-model="item.tagCode"
clearable
filterable
placeholder="请选择额外投递"
@change="changeTag($event, index)"
style="width:200px; margin-bottom: 10px;">
<el-option
v-for="(eItem,eIndex) in tagSelect"
:key="eIndex"
:label="eItem.tagName"
:value="eItem.tagCode">
</el-option>
</el-select>
<i class="el-icon-circle-plus-outline" @click="addTag(index)"></i>
<i v-if="index > 0" class="el-icon-remove-outline" @click="deleteTag(index)"></i>
</el-form-item>
</div>
</el-col>
</el-form>
</el-row>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="saveCreateAndEditMenu">确 定</el-button>
</span>
</el-dialog>
<!-- 下线页面 -->
<el-dialog
title="下线页面"
:visible.sync="downPageVisible"
width="40%">
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-form ref="downForm"
:model="downForm"
label-width="150px"
label-suffix=":"
label-position="right"
:rules="downRules"
size="mini"
style="width: 100%;">
<el-col :span="24">
<el-form-item label="页面名">
<span>{{downForm.pageName}}</span>
</el-form-item>
<el-form-item label="页面编码">
<span>{{downForm.pageCode}}</span>
</el-form-item>
<el-form-item label="实现方式">
<span>{{downForm.implementMethod}}</span>
</el-form-item>
<el-form-item label="归属模块">
<span>{{downForm.moduleName2}}</span>
</el-form-item>
<el-form-item v-if="downForm.implementMethodId == 2" label="下线版本" prop="offVersion">
<el-select v-model="downForm.offVersion" clearable placeholder="请选择下线版本" style="width:240px">
<el-option
v-for="(eItem,eIndex) in versionSelect"
:key="eIndex"
:label="eItem"
:value="eItem">
</el-option>
</el-select>
</el-form-item>
<el-form-item v-if="downForm.implementMethodId != 2" label="下线时间" prop="offTime">
<el-date-picker
type="date"
placeholder="请选择下线时间"
v-model="downForm.offTime"
style="width: 240px;">
</el-date-picker>
</el-form-item>
</el-col>
</el-form>
</el-row>
<span slot="footer" class="dialog-footer">
<el-button @click="downPageVisible = false">取 消</el-button>
<el-button type="primary" @click="updateConfim">确 定</el-button>
</span>
</el-dialog>
<!-- 指派 -->
<el-dialog
title="指派"
:visible.sync="assignVisible"
width="40%">
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-form ref="assignForm"
:model="assignForm"
:rules="assignRule"
label-width="150px"
label-suffix=":"
label-position="right"
size="mini"
style="width: 100%;">
<el-col :span="24">
<el-form-item label="任务状态" prop="status">
<el-select v-model="assignForm.status" placeholder="请选择任务状态" style="width:200px">
<el-option
v-for="(eItem,eIndex) in assignstatusSelect"
:key="eIndex"
:label="eItem.name"
:value="eItem.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="指派人" prop="handlerIds">
<el-select v-model="assignForm.handlerIds" multiple filterable placeholder="请选择指派人" style="width:200px">
<el-option
v-for="(eItem,eIndex) in assignSelect"
:key="eIndex"
:label="eItem.name"
:value="eItem.id + '&' + eItem.name">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-form>
</el-row>
<span slot="footer" class="dialog-footer">
<el-button @click="assignVisible = false">取 消</el-button>
<el-button type="primary" @click="confirmAssign">确 定</el-button>
</span>
</el-dialog>
<!-- 新增投递对象 -->
<el-dialog
title="新建投递对象"
:visible.sync="tagVisible"
width="40%">
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-form ref="tagForm"
:rules="tagRules"
:model="tagForm"
label-width="150px"
label-suffix=":"
label-position="right"
size="mini"
style="width: 100%;">
<el-col :span="24">
<el-form-item label="投递对象名" prop="tagName">
<el-input v-model="tagForm.tagName" maxlength="15" placeholder="请输入投递对象名称" style="width: 200px;"></el-input>
</el-form-item>
<el-form-item label="投递方法定义" prop="tagDesc">
<el-input type="textarea" maxlength="500" v-model="tagForm.tagDesc" style="width: 200px;"></el-input>
</el-form-item>
</el-col>
</el-form>
</el-row>
<span slot="footer" class="dialog-footer">
<el-button @click="tagVisible = false">取 消</el-button>
<el-button type="primary" @click="confirmAddTag">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { doUpload, getFilePath } from "../../common/qiniuUtil";
import { isEmptyUtils, openLoading, closeLoading } from '../../common/utils';
function isNormalWorld(rule, value,callback) {
var regEn = /[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/im,
regCn = /[·!#¥(——):;“”‘、,|《。》?、【】[\]]/im;
if(regEn.test(value) || regCn.test(value)) {
return callback("名称不能包含特殊字符")
}
callback();
}
export default {
data() {
return {
startTime: '',
endTime: '',
rowId: 0,
pageTitle: '新建页面',
labelPosition: 'right',
dialogVisible: false,
creatPageVisible: false,
downPageVisible: false,
assignVisible: false,
tagVisible: false,
searchParam: {
searchContent: '',
handlerId: '',
moduleId2: '',
moduleIdArr: [],
implementMethodId: '',
releaseTimeStart: 0,
releaseTimeEnd: 0,
releaseVersion: '',
status: '',
pageNo: 1,
pageSize: 15
},
moduleSelect: [],
styleSelect: [],
memberSelect: [],
statusSelect: [],
versionSelect: [],
assignSelect: [],
assignstatusSelect: [],
actionSelect: [],
tagSelect: [],
tableData: [],
totalRows: 0,
tableText: '无匹配结果',
form: { // 新建埋点页面
actionName: '',
actionType: 1,
releaseVersion: '',
releaseTime: '',
actionPath: '',
pageType: '',
pageId: '',
pageCode: '',
pageName: '',
actionTagResqs: [{tagName: ''}, {tagCode: ''}, {tagDesc: ''}]
},
pageForm: { // 新建(编辑)页面
imageUrl: '',
implementMethodId: '',
moduleId: '',
name: '',
releaseTime: '',
releaseVersion: ''
},
assignForm: { // 任务指派
handlerIds: [],
id: '',
status: ''
},
downForm: { // 下线
pageName: '',
pageCode: '',
implementMethod: '',
implementMethodId: '',
moduleName2: '',
id: '',
offTime: '',
offVersion: ''
},
tagForm: {
tagName: '',
tagCode: '',
tagDesc: ''
},
rules: {
actionName: [
{ required: true, message: '请输入事件名', trigger: 'blur' },
{ validator: isNormalWorld ,trigger: true}
],
actionType: [
{ required: true, message: '请选择事件类型', trigger: 'blur' }
],
releaseTime: [
{ required: true, message: '请选择发布时间', trigger: 'change' }
],
releaseVersion: [
{ required: true, message: '请选择发布版本', trigger: 'change' }
],
actionPath: [
{ required: true, message: '请上传位置图片', trigger: 'change' }
]
},
pageRules: {
name: [
{ required: true, message: '请输入页面名称', trigger: 'blur' },
{ validator: isNormalWorld ,trigger: true}
],
moduleIdArr: [
{ required: true, message: '请选择模块归类', trigger: 'change' }
],
implementMethodId: [
{ required: true, message: '请选择实现方式', trigger: 'change' }
],
imageUrl: [
{ required: true, message: '请上传图片', trigger: 'change' }
],
releaseTime: [
{ required: true, message: '请选择发布时间', trigger: 'change' }
],
releaseVersion: [
{ required: true, message: '请选择发布版本', trigger: 'change' }
]
},
downRules: {
offVersion: [
{ required: true, message: '请选择下线版本', trigger: 'change' }
],
offTime: [
{ required: true, message: '请选择下线时间', trigger: 'change' }
]
},
assignRule: {
status: [
{ required: true, message: '请选择任务状态', trigger: 'change' }
],
handlerIds: [
{ required: true, message: '请选择指派人', trigger: 'change' }
],
},
tagRules: {
tagName: [
{ required: true, message: '请输入投递名称', trigger: 'change' }
],
tagDesc: [
{ required: true, message: '请输入投递方法定义', trigger: 'change' }
]
}
}
},
mounted() {
this.getVersionList();
this.getStatusList();
this.getCurrentData();
this.getStyleList();
this.getModuleList();
this.searchList();
},
methods: {
// 封装一下请求通用的方法
getData(type, url, req, callback) {
openLoading(this);
this.$axios[type](localStorage.getItem("lectureUrl") + url, req)
.then(res => {
closeLoading(this);
let data = res.data;
if (data.code == "000000") {
if (callback) callback(data);
} else {
this.$message.error(data.message);
}
})
},
addTag(index) {
this.form.actionTagResqs.push({tagName: '', tagCode: '', tagDesc: ''});
},
deleteTag(index) {
this.form.actionTagResqs.splice(index, 1);
},
// 获取投递列表
getTagList() {
this.getData(
"get", `/basic-data/bi/actionTag/list`, {},
res => {
this.tagSelect = res.data;
this.tagSelect.unshift({
tagName: '新建额外投递对象+',
tagCode: '000000'
})
}
);
},
changeTag(val, index) {
if(val == '000000') {
this.tagVisible = true;
this.tagForm.tagName = '';
this.tagForm.tagDesc = '';
if(this.$refs.tagForm) {
this.$refs.tagForm.resetFields();
}
this.form.actionTagResqs[index].tagCode = '';
}else {
this.form.actionTagResqs[index].tagCode = val;
}
},
confirmAddTag() {
this.$refs.tagForm.validate((valid) => {
if(valid) {
this.getData(
"post", `/basic-data/bi/actionTag/insert`, this.tagForm,
res => {
this.tagVisible = false;
this.getTagList();
}
);
}
})
},
// 获取版本号
getVersionList() {
this.getData(
"get", `/basic-data/bi/constants/releaseVersionList`, {},
res => {
this.versionSelect = res.data;
}
);
},
// 获取状态
getStatusList() {
this.getData(
"get", `/basic-data/bi/constants/statusList`, {},
res => {
this.statusSelect = res.data;
}
);
},
// 获取当前处理人
getCurrentData() {
this.getData(
"get", `/basic-data/bi/constants/userList/page`, {},
res => {
this.memberSelect = res.data;
}
);
},
// 获取实现方式
getStyleList() {
this.getData(
"get", `/basic-data/bi/constants/implementMethodList`, {},
res => {
this.styleSelect = res.data;
}
);
},
// 获取归属模块
getModuleList() {
this.getData(
"get", `/basic-data/bi/constants/moduleList`, {},
res => {
this.moduleSelect = res.data;
}
);
},
// 获取页面指派下拉数据
getAssignList() {
this.getData(
"get", `/basic-data/bi/constants/userList/all`, {},
res => {
this.assignSelect = res.data;
}
);
},
// 获取事件类型下拉数据
getActionList() {
this.getData(
"get", `/basic-data/constants/app/P251`, {},
res => {
this.actionSelect = res.data;
}
);
},
// 点击表格某一行
tableRowClick(row) {
this.$router.push({path: 'create-point', query: {id: row.pageId}})
},
// 搜索
searchList(param, param2) {
if(param) this.searchParam.pageNo = 1;
if(param2 == 'module') {
this.searchParam.moduleId2 = this.searchParam.moduleIdArr[this.searchParam.moduleIdArr.length-1];
}
this.searchParam.releaseTimeStart = new Date(this.startTime).getTime();
this.searchParam.releaseTimeEnd = new Date(this.endTime).getTime();
let req = this.searchParam;
this.getData(
"post", `/basic-data/bi/page/search`, req,
res => {
this.tableData = res.data.contentList;
this.totalRows = res.data.total;
if(this.tableData.length == 0) {
this.tableText = param ? "暂无数据" : '暂无匹配的结果';
}
}
);
},
changePageType(val) {
if(val == 2) {
this.pageForm.releaseTime = '';
}else {
this.pageForm.releaseVersion = '';
}
},
// 新建(编辑)页面
createAndEditPage(row) {
if(row == 'create') {
if(this.$refs.creatPageForm) {
this.$refs.creatPageForm.resetFields();
}
this.pageTitle = "新建页面";
this.pageForm.name = '';
this.pageForm.implementMethodId = '';
this.pageForm.imageUrl = '';
this.pageForm.releaseTime = '';
this.pageForm.releaseVersion = '';
this.pageForm.moduleIdArr = '';
}else {
this.pageTitle = "编辑页面";
this.rowId = row.pageId;
this.pageForm.name = row.pageName;
this.pageForm.implementMethodId = row.implementMethodId;
this.pageForm.imageUrl = row.imageUrl;
this.pageForm.moduleIdArr = row.moduleIdArr;
if(this.pageForm.implementMethodId == 2) { // native
this.pageForm.releaseVersion = row.releaseVersion;
}else {
this.pageForm.releaseTime = row.releaseTime;
}
}
this.creatPageVisible = true;
},
// 保存新建编辑页面
saveCreatePageMenu() {
this.pageForm.moduleId = this.pageForm.moduleIdArr[this.pageForm.moduleIdArr.length - 1];
let url, req, text;
this.$refs.creatPageForm.validate((valid) => {
if(valid) {
if(this.pageTitle == '新建页面') {
url = "/basic-data/bi/page/create";
text = "新建页面成功!"
}else {
url = "/basic-data/bi/page/save";
this.pageForm.pageId = this.rowId;
text = "编辑页面成功!"
}
if(this.pageForm.moduleIdArr.length == 0) {
this.$message.error("请选择归属模块");
return;
}
req = JSON.parse(JSON.stringify(this.pageForm));
req.releaseTime = new Date(req.releaseTime).getTime();
this.getData(
"post", url, req,
res => {
this.$message.success(text);
this.creatPageVisible = false;
this.searchList();
}
);
}
})
},
// 下线页面
downPage(row) {
if(this.$refs.downForm) {
this.$refs.downForm.resetFields();
}
this.downForm.offTime = '';
this.downForm.offVersion = '';
this.downForm = Object.assign({ id: row.pageId }, row);
this.downPageVisible = true;
},
// 保存下线页面
updateConfim() {
this.$refs.downForm.validate((valid) => {
if(valid) {
let req = {
offTime: this.downForm.offTime,
offVersion: this.downForm.offVersion,
id: this.downForm.id,
pageType: this.downForm.pageType
};
if(req.offTime) req.offTime = new Date(req.offTime).getTime();
this.getData(
"post", `/basic-data/bi/page/offLine`, req,
res => {
this.$message.success("下线成功");
this.downPageVisible = false;
this.searchList();
}
);
}
})
},
// 新建埋点
createPoing(row) {
this.getActionList();
this.getTagList();
this.dialogVisible = true;
if(this.$refs.menuForm) {
this.$refs.menuForm.resetFields();
}
this.form.pageId = row.pageId;
this.form.pageName = row.pageName;
this.form.pageCode = row.pageCode;
this.form.pageType = row.implementMethodId;
this.form.implementMethodId = row.implementMethodId;
this.form.actionTagResqs = [{tagName: '', tagCode: '', tagDesc: ''}];
},
// 保存新建埋点
saveCreateAndEditMenu() {
this.$refs.menuForm.validate((valid) => {
if (valid) {
let req = Object.assign({}, this.form);
for(let i = 0;i < this.tagSelect.length;i++) {
req.actionTagResqs.forEach((item, index) => {
if(this.tagSelect[i].tagCode == item.tagCode) {
item.tagName = this.tagSelect[i].tagName;
}
})
}
this.getData(
"post", `/basic-data/bi/pageAction/insert`, req,
res => {
this.$message.success("新建埋点成功");
this.dialogVisible = false;
this.searchList();
}
);
}
});
},
// 指派
assignDialog(row) {
if(this.$refs.assignForm) {
this.$refs.assignForm.resetFields();
}
this.assignVisible = true;
this.assignForm.id = row.pageId;
this.assignForm.handlerIds = [];
this.assignForm.status = '';
this.getData(
"get", `/basic-data/bi/constants/assign/detail?status=${row.status}`, {},
res => {
this.assignstatusSelect = res.data.statusList;
this.assignSelect = res.data.handlerList;
}
);
},
// 确定指派
confirmAssign() {
this.$refs.assignForm.validate((valid) => {
if(valid) {
this.assignForm.handlerIds.forEach((item, index) => {
this.assignForm.handlerIds[index] = {
id: item.split("&")[0],
name: item.split("&")[1]
}
})
this.getData(
"post", `/basic-data/bi/page/assign`, this.assignForm,
res => {
this.$message.success("指派成功");
this.assignVisible = false;
this.searchList();
}
);
}
})
},
// 上传页面图片
beforeAvatarUpload(file) {
let _this = this;
if (isEmptyUtils(file)) {
return;
}
const isLt2M = file.size / 1024 / 1024 < 10;
if (!isLt2M) {
this.$message.error('上传图片大小不能超过 10MB!');
return;
}
_this.$message.info('开始上传');
doUpload(_this, file, getFilePath(file,null), 'preview4', 'progress1', 1).then(function (path) {
_this.pageForm.imageUrl = path.fullPath;
_this.$message.success('上传成功');
});
return false;
},
// 上传埋点图片
uploadActionPath(file) {
let _this = this;
if (isEmptyUtils(file)) {
return;
}
const isLt2M = file.size / 1024 / 1024 < 10;
if (!isLt2M) {
this.$message.error('上传图片大小不能超过 10MB!');
return;
}
_this.$message.info('开始上传');
doUpload(_this, file, getFilePath(file,null), 'preview4', 'progress1', 1).then(function (path) {
_this.form.actionPath = path.fullPath;
_this.$message.success('上传成功');
});
return false;
},
handleSizeChange(value) {
this.searchParam.pageSize = value;
this.searchList();
},
handleCurrentChange(value) {
this.searchParam.pageNo = value;
this.searchList();
}
}
}
</script>
<style lang="less">
.strack-list-contrainer {
.title {
margin-bottom: 30px;
}
.time-container .el-form-item{
display: inline-block;
}
.bg-img {
width: 120px;
}
// .tui-image-editor-container {
// width: 900px;
// height: 900px;
// .tui-image-editor-submenu {
// width: 300px;
// height: 130px;
// white-space: normal !important;
// }
// .tui-image-editor-controls-buttons > div, .tui-image-editor-controls-logo{
// display: none !important;
// }
// .tui-image-editor-button ul li input {
// width: 18px;
// height: 18px;
// }
// }
}
</style>
\ No newline at end of file
<template>
<div class="add-funnel-container">
<el-breadcrumb separator="/" class="add-title">
<el-breadcrumb-item :to="{ path: '/user-path' }">漏斗分析</el-breadcrumb-item>
<el-breadcrumb-item>新增转化漏斗</el-breadcrumb-item>
</el-breadcrumb>
<div class="add-content">
<div class="con">
<el-row :gutter="30" class="row save" type="flex" style="margin-bottom:0;">
<el-form ref="form" :model="searchParam" label-suffix=":" style="width:100%;">
<el-col :span="21">
<el-form-item label="漏斗名称">
<el-input
:class="{'red-b': disabledSave}"
v-model="searchParam.name"
maxlength="30"
placeholder="请输入漏斗名称"
style="width:430px;"
@blur="validValue"></el-input>
<span v-show="disabledSave" style="color: red; font-size: 12px;">{{nameTip}}</span>
</el-form-item>
</el-col>
<el-col :span="3" style="padding:0;text-align:right;padding-right:15px;">
<el-button type="primary" size="small" @click="saveAddAndEdit">保存</el-button>
</el-col>
</el-form>
</el-row>
<div class="add-step">
<p>请以用户逐步触发的事件为依据,构造漏斗、系统会自动计算整个过程的转化率。如果事件之间不连续,转化率为0!</p>
</div>
<div class="step-content" v-for="(item,index) in searchParam.actionModelList" :key="index">
<span class="st">步骤{{index + 1}}</span>
<el-form
ref="form"
class="step-form"
:model="item"
label-suffix=":"
style="width:100%;">
<el-col :span="11">
<el-form-item label="步骤名称">
<el-input
:class="{'red-b': item.nameCheck && item.actionName}"
v-model="item.actionName"
@input="nameChange(item, index)"
maxlength="30"
placeholder="请输入步骤名称"
style="width:70%"></el-input>
<p v-show="item.nameCheck && !item.actionName" style="color: red; font-size: 12px;">名称重复,请重新输入</p>
</el-form-item>
</el-col>
<el-col :span="11">
<el-form-item label="触发事件">
<el-input
v-show="!showEvent"
:class="{'red-b': item.unchecked}"
@focus="getEventData"
v-model="item.eventName"
style="width:75%;"
:title="item.eventName"
placeholder="请选择用户触发事件"></el-input>
<el-select
v-show="showEvent"
v-model="item.eventId"
filterable
placeholder="请选择用户触发事件"
:class="{'red-b': item.unchecked}"
@blur="selectValid(item, index)"
@change="eventChange(item, index)"
style="width:75%;"
>
<el-option
v-for="(eItem,eIndex) in eventSelect"
:key="eIndex"
:label="eItem.eventName"
:value="eItem.eventId"
>
</el-option>
</el-select>
<p v-show="item.unchecked" style="color: red; font-size: 12px;">请选择一个触发事件</p>
<p v-show="item.repChecked" style="color: red; font-size: 12px;">触发事件重复,请重新选择</p>
</el-form-item>
</el-col>
</el-form>
<i v-if="index == 0" class="el-icon-remove-outline disable-step"></i>
<i v-if="index > 0" class="el-icon-remove-outline delete-step" @click="deleteSteps(index)"></i>
<i class="el-icon-circle-plus-outline add-step" @click="addSteps"></i>
</div>
</div>
</div>
</div>
</template>
<script>
import { openLoading, closeLoading } from "../../common/utils";
export default {
data() {
return {
showEvent: false, // 编辑回显时不显示触发事件下拉数据
disabledSave: false,
funnelId: '',
searchParam: {
name: '',
actionModelList: [
{
actionName: '',
eventId: ''
}]
},
eventSelect: [],
tipText: '名称重复,请重新输入',
nameTip: '请输入漏斗名称',
repIndex: 0,
flag: false
}
},
created() {
this.funnelId = this.$route.query.id;
},
mounted() {
if(this.funnelId) { // 编辑
this.getFunnelDetail();
}else { // 新增
this.getEventList();
}
},
methods: {
// 封装一下请求通用的方法
getData(type, url, req, callback) {
openLoading(this);
this.$axios[type](localStorage.getItem("lectureUrl") + url, req)
.then(res => {
closeLoading(this);
let data = res.data;
if (data.code == "000000") {
if (callback) callback(data);
}else if(data.code == '227002' || data.code == '227003'){
this.disabledSave = true;
this.nameTip = '名称重复,请重新输入';
}
})
},
// 获取触发事件列表
getEventList(item) {
this.getData(
"get", `/session/funnel/eventList`, {},
res => {
this.eventSelect = res.data;
}
);
},
getEventData() {
this.showEvent = true;
this.getEventList();
},
// 编辑获取漏斗详情
getFunnelDetail() {
this.getData(
"get", `/session/funnel/detail/${this.funnelId}`, {},
res => {
if(res.code == '000000') {
this.searchParam = res.data;
}
}
);
},
// 漏斗名称是否有值判断
validValue() {
if(this.searchParam.name) {
this.disabledSave = false;
}
},
// 步骤名称不重复
nameChange(item, index) {
this.$set(this.searchParam.actionModelList[index], 'nameCheck', false);
if(!item.actionName) return;
for(let i = 0; i < this.searchParam.actionModelList.length; i++) {
if(i == index) continue;
if(item.actionName == this.searchParam.actionModelList[i].actionName) {
setTimeout(() => {
this.searchParam.actionModelList[index].actionName = '';
this.$set(this.searchParam.actionModelList[index], 'nameCheck', true);
},500)
}
}
},
// 触发事件选择时重复判断
eventChange(item, index) {
this.$set(this.searchParam.actionModelList[index], 'repChecked', false);
for(let i = 0; i < this.searchParam.actionModelList.length; i++) {
if(index != i) {
if(item.eventId == this.searchParam.actionModelList[i].eventId) {
this.$set(this.searchParam.actionModelList[index], 'repChecked', true);
this.searchParam.actionModelList[index].eventId = '';
}
}
}
},
// 触发事件是否为空样式
selectValid(item, index) {
this.$set(this.searchParam.actionModelList[index], 'unchecked', false);
// if(!item.eventId) return;
// for(let i = 0; i < this.searchParam.actionModelList.length; i++) {
// this.$set(this.searchParam.actionModelList[i], 'repChecked', false);
// if(index != i) {
// if(item.eventId == this.searchParam.actionModelList[i].eventId) {
// this.searchParam.actionModelList[index].eventId = '';
// this.$set(this.searchParam.actionModelList[index], 'repChecked', true);
// }
// }
// }
},
// 保存
saveAddAndEdit() {
if(!this.searchParam.name) {
this.disabledSave = true;
this.nameTip = '请输入漏斗名称';
return;
}
for(let i = 0; i < this.searchParam.actionModelList.length; i++) {
if(!this.searchParam.actionModelList[i].eventId) {
this.$set(this.searchParam.actionModelList[i], 'unchecked', true); // 事件名称为空
this.$set(this.searchParam.actionModelList[i], 'repChecked', false); //事件重复
return;
}
if((this.searchParam.actionModelList[i].nameCheck && this.searchParam.actionModelList[i].actionName) || this.searchParam.actionModelList[i].unchecked || this.searchParam.actionModelList[i].repChecked) { // 有步骤名称重复
return;
}
this.eventSelect.forEach(item => {
if(this.searchParam.actionModelList[i].eventId == item.eventId) {
this.$set(this.searchParam.actionModelList[i], 'eventName', item.eventName);
}
});
}
let req = this.searchParam;
for(let i = 0; i < req.actionModelList.length; i++) {
if(!req.actionModelList[i].actionName) {
req.actionModelList[i].actionName = req.actionModelList[i].eventName;
req.actionModelList[i].nameCheck = false;
}
}
this.getData(
"post", `/session/funnel/save`, req,
res => {
if(res.code == '000000') {
this.$message.success('转化漏斗保存成功');
this.$router.push({ path: 'path-data', query: {id: res.data.id, name: res.data.name} });
}
}
);
},
// 删除步骤
deleteSteps(i) {
this.$message.success('删除成功');
this.searchParam.actionModelList.splice(i,1);
},
// 增加步骤
addSteps() {
this.searchParam.actionModelList.push({
actionName: '',
eventId: ''
});
}
}
}
</script>
<style lang="less" scoped>
.add-funnel-container {
margin: -20px -40px;
.red-b {
border: 1px solid red;
}
.add-title {
height: 60px;
line-height: 60px;
padding-left: 40px;
}
.add-content {
background: #F2F2F4;
padding: 20px 0 20px 20px;
min-height: 83vh;
.con {
padding-bottom: 30px;
background: #fff;
min-height: 80vh;
.save {
padding: 20px 20px 0;
margin: 0 !important;
border-bottom: 1px solid #EDEDEE;
}
.add-step {
padding: 30px 40px 0;
font-size: 14px;
color: #4D4C4F;
}
.step-content {
overflow: hidden;
margin: 30px 40px 0px;
border: 1px solid #EDEDEE;
span.st {
float: left;
font-size: 14px;
color: #58ADE8;
padding: 5px;
margin: 20px 20px 0 20px;
border: 1px solid #58ADE8;
border-radius: 3px;
}
.step-form {
width: 80% !important;
padding: 15px 0 0 30px;
}
i {
padding: 10px 20px;
font-size: 20px;
}
.disable-step {
color: #D2D2D3;
}
.delete-step {
color: #58ADE8;
}
.add-step {
color: #58ADE8;
}
}
}
}
}
</style>
\ No newline at end of file
<template>
<div class="data-container">
<el-breadcrumb separator="/" class="data-title">
<el-breadcrumb-item :to="{ path: '/user-path' }">漏斗分析</el-breadcrumb-item>
<el-breadcrumb-item>{{name}}详情</el-breadcrumb-item>
</el-breadcrumb>
<div class="data-content">
<div class="con">
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-form ref="form" :model="searchParam" label-suffix=":" style="width:100%;">
<el-col :span="12">
<el-form-item label="时间" required>
<el-date-picker
type="date"
placeholder="开始时间"
v-model="searchParam.startDate"
style="width: 200px;"
:picker-options="endDateOpt"
value-format="yyyy-MM-dd"
>
</el-date-picker>
<span>-</span>
<el-date-picker
type="date"
placeholder="结束时间"
v-model="searchParam.endDate"
style="width: 200px;"
:picker-options="endDateOpt1"
value-format="yyyy-MM-dd"
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="版本">
<el-select v-model="searchParam.version" placeholder="请选择版本" style="width:200px">
<el-option
v-for="(eItem,eIndex) in versionSelect"
:key="eIndex"
:label="eItem"
:value="eItem">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="4" style="padding:0;text-align:right;padding-right:15px;">
<el-button type="default" size="small" @click="reset">重置</el-button>
<el-button type="primary" size="small" @click="getAnalysisData(searchParam)">筛选</el-button>
</el-col>
</el-form>
</el-row>
<div class="data-num">
<div class="num-text first-num">
<span>总人数</span>
<p>{{funnelData.userCountTotal}}<span></span></p>
</div>
<div class="num-text">
<span>总转化率</span>
<p>{{funnelData.inversionRateTotal}}</p>
</div>
<div class="num-text">
<span>达成目标人数</span>
<p>{{funnelData.userCountLast}}<span></span></p>
</div>
<div class="num-text num">
<span>转化率最低步骤</span>
<p>{{funnelData.funnelNameLast}}</p>
</div>
</div>
<div class="data-analysis">
<div class="map-title">转化漏斗详情</div>
<div ref="chart" class="echart"></div>
<el-table
class="data-table"
:data="funnelData.funnelReportModels"
style="width: 100%">
<el-table-column prop="funnel" label="步骤" min-width="140" align="center"></el-table-column>
<el-table-column prop="funnelName" label="步骤名称" min-width="140" align="center"></el-table-column>
<el-table-column prop="userCount" label="用户数" min-width="150" align="center"></el-table-column>
<el-table-column prop="inversionRate" label="较上一步转化率" min-width="150" align="center"></el-table-column>
<el-table-column prop="inversionRateTotal" label="总转化率" min-width="150" align="center"></el-table-column>
</el-table>
</div>
</div>
</div>
</div>
</template>
<script>
let url = 'image://data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAARCAMAAACLgl7OAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAaVBMVEUAAADBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcEAAAD45xibAAAAInRSTlMAmT6WJYwSfBMGZAFHmEgtkBeCCW0KAlI1k5QeiA10A1tc7ah1owAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAB7SURBVCjPtZDZDoAgDAQXvA+8bwX1/3/SGKIBEd+cx07TdgtIiAF0/mygDvnAoYDr2b3nnjP8wOaDUG6J4ncfR9cdScpMzbJECZEXT1/kesyy0n1VPv6AulF908Kg6+9DWN/hjWGUfhpgYV5Ov8ywwgUhguODddtXvXIAjuUEs/70/t4AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTktMTItMTZUMTU6MzM6MDkrMDg6MDCzL2BEAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE5LTEyLTE2VDE1OjMzOjA5KzA4OjAwwnLY+AAAAABJRU5ErkJggg==';
import { openLoading, closeLoading } from "../../common/utils";
export default {
data() {
return {
funnelId: '',
name: '',
searchParam: {
endDate: '',
startDate: '',
version: ''
},
versionSelect: [], // 版本下拉数据
funnelData: {},
endDateOpt: {
disabledData: (time) => {
if ( this.searchParam.endDate != "" && this.searchParam.endDate != null) {
return (
time.getTime() > new Date(this.searchParam.endDate).getTime()
);
}
}
},
endDateOpt1: {
disabledDate: time => {
return (
time.getTime() < (new Date(this.searchParam.startDate).getTime() - 3600 * 1000 * 24 * 1) || time.getTime() > (new Date(this.searchParam.startDate).getTime() + 3600 * 1000 * 24 * 29)
);
}
},
beginTime: '',
endTime: ''
}
},
created() {
this.funnelId = this.$route.query.id;
this.name = this.$route.query.name;
},
mounted() {
//this.searchParam.endDate = new Date().format("yyyy-MM-dd");
let date1 = new Date();
let date2 = new Date(date1);
let date3 = new Date(date1);
date2.setDate(date1.getDate() - 7);
date3.setDate(date1.getDate() - 1);
let dt = date2.getDate() > 10 ? date2.getDate() : '0' + date2.getDate();
let dt1 = date3.getDate() > 10 ? date3.getDate() : '0' + date3.getDate();
this.searchParam.startDate = date2.getFullYear() + "-" + (date2.getMonth() + 1) + "-" + dt;
this.searchParam.endDate = date3.getFullYear() + "-" + (date3.getMonth() + 1) + "-" + dt1;
this.beginTime = date2.getFullYear() + "-" + (date2.getMonth() + 1) + "-" + dt;
this.endTime = date3.getFullYear() + "-" + (date3.getMonth() + 1) + "-" + dt1;
this.getVersionData();
},
methods: {
// 封装一下请求通用的方法
getData(type, url, req, callback) {
openLoading(this);
this.$axios[type](localStorage.getItem("lectureUrl") + url, req)
.then(res => {
closeLoading(this);
let data = res.data;
if (data.code == "000000") {
if (callback) callback(data);
} else {
this.$message.error(data.message);
}
})
},
// 获取版本号数据
getVersionData() {
this.getData(
"get", `/session/funnel/version/list`, {},
res => {
if(res.code == '000000') {
this.versionSelect = res.data;
this.searchParam.version = this.versionSelect[0];
this.getAnalysisData(this.searchParam);
}
}
);
},
// 获取漏斗分析数据
getAnalysisData(req) {
if(!req.startDate || !req.endDate) {
this.$message.info('请选择时间');
return;
}
this.getData(
"get", `/session/funnel/report?endDate=${req.endDate}&funnelId=${this.funnelId}&startDate=${req.startDate}&version=${req.version}`, {},
res => {
if(res.code == '000000') {
this.funnelData = res.data;
this.initCharts();
//this.initEchart();
}
}
);
},
// 初始化图标--漏斗图
initCharts() {
let lineargroup = this.funnelData.funnelReportModels;
let len = lineargroup.length;
let colorObj = {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0,
color: '#1cd389' // 0% 处的颜色
}, {
offset: 1,
color: '#668eff' // 100% 处的颜色
}],
global: false // 缺省为 false
};
let myChart = {}, data1 = [], dataArr = [], valueArr = [], lineArr = [], linksArr = [], arrowTop = 0, arrowH = 0, lineTop = 0, lineLeft = 0, lineHeight = 0, blackH;
if(len == 2) {
blackH = 300;
arrowTop = 105;
arrowH = 130;
lineTop = 50;
lineLeft = '4%';
lineHeight = 306;
}else if(len == 3) {
blackH = 300;
arrowTop = 115;
arrowH = 130;
lineTop = 30;
lineLeft = '30%';
lineHeight = 306;
}else if(len == 4) {
blackH = 300;
arrowTop = 88;
arrowH = 210;
lineTop = 30;
lineLeft = '45%';
lineHeight = 306;
}else if(len == 5) {
blackH = 300;
arrowTop = 70;
arrowH = 260;
lineTop = 20;
lineLeft = '42%';
lineHeight = 346;
}else if(len == 6) {
blackH = 300;
arrowTop = 60;
arrowH = 300;
lineTop = 20;
lineLeft = '40%';
lineHeight = 366;
}else if(len == 7) {
blackH = 360;
arrowTop = 60;
arrowH = 390;
lineTop = 20;
lineLeft = '35%';
lineHeight = 456;
}else {
blackH = 340;
arrowTop = 50;
arrowH = 400;
lineTop = 10;
lineLeft = '35%';
lineHeight = 466;
}
for (let i = 0; i < lineargroup.length; i++) {
let obj1 = {
value: 200 - i * 40,
num: lineargroup[i].userCount,
name: lineargroup[i].funnelName
};
data1.push(obj1);
if(i != (lineargroup.length - 1)) {
dataArr.push('转化率');
valueArr.push({value: '100'}); // 步骤箭头
linksArr.push({ // 转化率线
source: lineargroup[i].funnelName,
target: lineargroup[i + 1].funnelName,
value: lineargroup[i + 1].inversionRate,
lineStyle: {
normal: {
curveness: parseInt(len - i) + 4,
color: colorObj
}
}
})
}
lineArr.push({
name: lineargroup[i].funnelName,
x: 400,
y: 0 + i*15
});
}
let option = {
backgroundColor: '#ffffff',
grid: {
top: arrowTop, // 箭头距离顶部高度 3-115 4-
left: "-44%",
right: 20,
height: arrowH, // 箭头之间的距离 3-145 4-
bottom: '0'
},
xAxis: {
show: false
},
yAxis: [{
show: false,
boundaryGap: false,
type: "category",
data: dataArr
}],
series: [{ // 内容块
top: 0,
type: 'funnel',
height: blackH + len * 20, // 块高度
gap: 40, // 块间距
minSize: 300, // 块两边斜度
left: '5%', // 块左边距离
width: '45%', // 块宽度
label: {
show: true,
position: 'inside',
fontSize: '14',
formatter: function(d) {
var newParamsName = "";
var paramsNameNumber = d.name.length;
var provideNumber = 30; //一行显示几个字
var rowNumber = Math.ceil(paramsNameNumber / provideNumber);
if (paramsNameNumber > provideNumber) {
for (var p = 0; p < rowNumber; p++) {
var tempStr = "";
var start = p * provideNumber;
var end = start + provideNumber;
if (p == rowNumber - 1) {
tempStr = d.name.substring(start, paramsNameNumber);
} else {
tempStr = d.name.substring(start, end) + "\n";
}
newParamsName += tempStr;
}
} else {
newParamsName = d.name;
}
return newParamsName + '{aa|}\n' + d.data.num
},
rich: {
aa: {
padding: [8, 0, 6, 0]
}
}
},
data: data1
},
{
type: 'pictorialBar', // 步骤箭头
name: '',
symbolSize: ['32', '17'],
symbolPosition: 'center',
symbol: url,
animation: true,
symbolClip: true,
z: 10,
data: valueArr
},
{ // 转化率线
z: 1,
top: lineTop,
left: lineLeft,
height: lineHeight,
type: 'graph',
layout: 'none',
symbolSize: 0,
roam: false,
edgeSymbol: ['circle', 'arrow'],
lineStyle: {
normal: {
width: 4,
}
},
edgeLabel: { // 转化率数字
normal: {
show: true,
rotate: 90,
position: 'middle',
borderRadius: 4,
color: '#333',
verticalAlign: 'middle',
fontSize: 14,
legendHoverLink: true,
padding: [30, 20, 5, 10],
formatter: function(d) {
if (d.value) {
var ins = '{img1|} ' + '{words|' + d.value + '}';
return ins;
}
},
rich: {
img1: {
width: 18,
height: 16
},
words: {
color: '#333',
position: 'right',
fontSize: 14,
lineHeight: 20,
padding: [0, 0, 5, 0],
}
}
}
},
data: lineArr,
links: linksArr
}
]
};
myChart = this.$echarts.init(this.$refs.chart);
myChart.setOption(option);
},
// 初始化图--柱状图
initEchart() {
let dataX = [], dataY = [];
let lineargroup = this.funnelData.funnelReportModels;
for(let i = 0; i < lineargroup.length; i++) {
dataX.push(lineargroup[i].funnelName);
dataY.push(lineargroup[i].inversionRate);
}
let option = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
crossStyle: {
color: '#999'
}
}
},
xAxis: [
{
type: 'category',
data: dataX,
axisPointer: {
type: 'shadow'
}
}
],
yAxis: [
{
type: 'value',
name: '',
min: 0,
max: 100,
interval: 25,
axisLabel: {
formatter: '{value} %'
}
}
],
series: [
{
type: 'bar',
barWidth: 30,
data: [80,60,20], // dataY
itemStyle: {
normal: {
label: {
show: true, //开启显示
position: 'top', //在上方显示
textStyle: { //数值样式
color: 'black',
fontSize: 16
}
},
color: function(params) {
return '#58ADE8'
}
}
}
},
{
name:'折线',
type:'line',
itemStyle : { /*设置折线颜色*/
normal : {
color:'#58ADE8'
}
},
data: [80,60,20] // dataY
}
]
};
let myChart = this.$echarts.init(this.$refs.chart);
myChart.setOption(option);
},
reset() {
this.searchParam = {
endDate: this.endTime,
startDate: this.beginTime,
version: this.versionSelect[0]
};
this.getAnalysisData(this.searchParam);
}
}
}
</script>
<style lang="less" scoped>
.data-container {
margin: -20px -40px;
.data-title {
height: 60px;
line-height: 60px;
padding-left: 40px;
}
.data-content {
background: #F2F2F4;
padding: 20px 0 20px 20px;
.con {
background: #fff;
padding-bottom: 50px;
.search {
padding: 20px 20px 0;
margin: 0 !important;
border-bottom: 1px solid #EDEDEE;
}
.data-num {
display: flex;
padding: 20px 20px 0 30px;
.num-text {
width: 15%;
border-right: 1px solid #EDEDEE;
text-align: center;
span {
font-size: 12px;
color: #b2b2b3;
}
p {
padding-top: 8px;
}
}
.first-num {
width: 10%;
text-align: left;
}
.num {
width: 20%;
border: none;
}
}
.data-analysis {
// overflow: hidden;
margin: 20px 20px 0 30px;
padding: 0px 20px 30px;
border: 1px solid #EDEDEE;
box-shadow: 5px 0px 30px #EDEDEE;
.map-title {
height: 60px;
line-height: 60px;
border-bottom: 1px solid #EDEDEE;
}
.echart {
padding-top: 20px;
width: 100%;
min-height: 550px;
}
.data-table {
margin-top: 20px;
}
}
}
}
}
</style>
\ No newline at end of file
<template>
<div class="funnel-container">
<div class="funnel-title">漏斗分析</div>
<div class="funnel-content">
<div class="con">
<el-row :gutter="30" class="row search" type="flex" style="margin-bottom:0;">
<el-form ref="form" :model="searchParam" label-suffix=":" style="width:100%;">
<el-col :span="21">
<el-form-item label="漏斗名称">
<el-input v-model="searchParam.searchName" maxlength="20" placeholder="请输入漏斗名称" style="width:288px;"></el-input>
</el-form-item>
</el-col>
<el-col :span="3" style="padding:0;text-align:right;padding-right:15px;">
<el-button type="primary" size="small" @click="search(1)">搜索</el-button>
</el-col>
</el-form>
</el-row>
<div class="search-table-con">
<el-row :gutter="10" class="row create-button" style="margin-right:0;">
<el-button type="primary" size="small" @click="addData">+新增转化漏斗</el-button>
</el-row>
<!-- 表格 -->
<el-table
class="search-table"
:data="tableData"
style="width: 100%"
:empty-text="tableText">
<el-table-column prop="name" label="漏斗名称" min-width="140" align="center"></el-table-column>
<el-table-column prop="stepStartName" label="起始步骤" min-width="140" align="center"></el-table-column>
<el-table-column prop="stepEndName" label="转化目标" min-width="150" align="center"></el-table-column>
<el-table-column label="操作" fixed="right" align="center" min-width="200">
<template slot-scope="scope">
<el-button type="primary" size="small" @click="visitData(scope.row)">查看数据</el-button>
<el-button type="primary" size="small" @click="editColumn(scope.row)">编辑</el-button>
<el-button type="danger" size="small" @click="deleteConfirm(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="searchParam.pageNo"
:page-sizes="[15, 30, 50, 100, 200, 500, 700, 1000, 1500, 2000]"
:page-size="searchParam.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows">
</el-pagination>
</div>
<!-- 删除确认框 -->
<el-dialog
class="delete-dialog"
:visible.sync="dialogVisible"
width="30%">
<span><i class="el-icon-circle-close" style="color: red"></i>确认要删除这条转化漏斗吗?</span>
<span class="tip">删除该转化漏斗数据将不会保留</span>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="confirm">确 定</el-button>
</span>
</el-dialog>
</div>
</div>
</div>
</div>
</template>
<script>
import { openLoading, closeLoading } from "../../common/utils";
export default {
data() {
return {
tableText: '暂未创建漏斗',
searchParam: {
searchName: '',
pageNo: 1,
pageSize: 15
},
totalRows: 0,
tableData: [],
dialogVisible: false,
deleteId: ''
}
},
mounted() {
this.search();
},
methods: {
// 封装一下请求通用的方法
getData(type, url, req, callback) {
openLoading(this);
this.$axios[type](localStorage.getItem("lectureUrl") + url, req)
.then(res => {
closeLoading(this);
let data = res.data;
if (data.code == "000000") {
if (callback) callback(data);
} else {
this.$message.error(data.message);
}
})
},
search(param) {
if(param) this.searchParam.pageNo = 1;
let req = this.searchParam;
this.getData(
"get", `/session/funnel/list?searchName=${this.searchParam.searchName}&pageNo=${this.searchParam.pageNo}&pageSize=${this.searchParam.pageSize}`, {},
res => {
this.tableData = res.data.data;
this.totalRows = res.data.totalRows;
if(this.tableData.length == 0) {
this.tableText = param ? "暂无数据" : '暂未创建漏斗';
}
}
);
},
// 新增漏斗
addData() {
this.$router.push({ path: 'add-funnel' });
},
// 查看数据
visitData(row) {
this.$router.push({ path: 'path-data', query: {id: row.id, name: row.name} });
},
// 编辑
editColumn(row) {
this.$router.push({ path: 'add-funnel',query: {id: row.id}});
},
// 删除确认框
deleteConfirm(row) {
this.dialogVisible = true;
this.deleteId = row.id;
},
confirm() {
this.getData(
"delete", `/session/funnel/remove/${this.deleteId}`, {},
res => {
if(res.code == '000000') {
this.dialogVisible = false;
this.$message.success('删除成功');
this.search();
}
}
);
},
handleSizeChange(value) {
this.searchParam.pageSize = value;
this.search();
},
handleCurrentChange(value) {
this.searchParam.pageNo = value;
this.search();
}
}
}
</script>
<style lang="less" scoped>
.funnel-container {
margin: -20px -40px;
.funnel-title {
height: 60px;
line-height: 60px;
padding-left: 40px;
}
.funnel-content {
background: #F2F2F4;
padding: 20px 0 20px 20px;
min-height: 83vh;
.con {
padding-bottom: 30px;
background: #fff;
min-height: 80vh;
.search {
padding: 20px 20px 0;
margin: 0 !important;
border-bottom: 1px solid #EDEDEE;
}
.search-table-con {
padding: 0 40px;
.create-button {
margin-top: 20px;
}
}
.delete-dialog {
span{
display: block;
font-size: 16px;
font-weight: 700;
margin-left: 40px;
i {
display: inline-block;
font-size: 20px;
color: red;
margin-right: 10px;
}
}
span.tip {
font-size: 14px;
font-weight: 400;
color: #aaa;
margin: 15px 0 0 70px;
}
}
}
}
}
</style>
\ No newline at end of file
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册