提交 505f381d 编写于 作者: hujun's avatar hujun

Merge branch 'release' into 'dev-followup-0902'

Release



See merge request !85
...@@ -57,8 +57,9 @@ module.exports = { ...@@ -57,8 +57,9 @@ module.exports = {
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url', loader: 'url',
query: { query: {
limit: 10000, limit: 5000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]') name: utils.assetsPath('fonts/[name].[hash:7].[ext]'),
publicPath: '../../'
} }
}] }]
}, },
...@@ -72,4 +73,4 @@ module.exports = { ...@@ -72,4 +73,4 @@ module.exports = {
}) })
] ]
} }
} }
\ No newline at end of file
...@@ -17,6 +17,7 @@ var webpackConfig = merge(baseWebpackConfig, { ...@@ -17,6 +17,7 @@ var webpackConfig = merge(baseWebpackConfig, {
}) })
}, },
//devtool: config.build.productionSourceMap ? '#source-map' : false, //devtool: config.build.productionSourceMap ? '#source-map' : false,
devtool: process.env.BUILD_ENV == 'dev' ? 'source-map' : false,
output: { output: {
path: config.build.assetsRoot, path: config.build.assetsRoot,
filename: utils.assetsPath('js/[name].js?chunkhash=[chunkhash]'), filename: utils.assetsPath('js/[name].js?chunkhash=[chunkhash]'),
...@@ -100,4 +101,4 @@ if (config.build.productionGzip) { ...@@ -100,4 +101,4 @@ if (config.build.productionGzip) {
) )
} }
module.exports = webpackConfig module.exports = webpackConfig
\ No newline at end of file
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
<router-view></router-view> <router-view></router-view>
</div> </div>
<script src="https://unpkg.com/qiniu-js@2.2.0/dist/qiniu.min.js"></script> <script src="https://unpkg.com/qiniu-js@2.2.0/dist/qiniu.min.js"></script>
<script src="https://cdn.bootcss.com/downloadjs/1.4.8/download.min.js"></script>
<script src="https://pv.sohu.com/cityjson?ie=utf-8"></script> <script src="https://pv.sohu.com/cityjson?ie=utf-8"></script>
</body> </body>
</html> </html>
...@@ -35,8 +35,7 @@ ...@@ -35,8 +35,7 @@
"abbrev": { "abbrev": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
"dev": true
}, },
"accepts": { "accepts": {
"version": "1.3.5", "version": "1.3.5",
...@@ -85,8 +84,7 @@ ...@@ -85,8 +84,7 @@
"amdefine": { "amdefine": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
"dev": true
}, },
"ansi-html": { "ansi-html": {
"version": "0.0.7", "version": "0.0.7",
...@@ -102,8 +100,7 @@ ...@@ -102,8 +100,7 @@
"ansi-styles": { "ansi-styles": {
"version": "2.2.1", "version": "2.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
"integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
"dev": true
}, },
"anymatch": { "anymatch": {
"version": "1.3.2", "version": "1.3.2",
...@@ -118,14 +115,12 @@ ...@@ -118,14 +115,12 @@
"aproba": { "aproba": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
"dev": true
}, },
"are-we-there-yet": { "are-we-there-yet": {
"version": "1.1.5", "version": "1.1.5",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
"integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
"dev": true,
"requires": { "requires": {
"delegates": "^1.0.0", "delegates": "^1.0.0",
"readable-stream": "^2.0.6" "readable-stream": "^2.0.6"
...@@ -134,14 +129,12 @@ ...@@ -134,14 +129,12 @@
"isarray": { "isarray": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
"dev": true
}, },
"readable-stream": { "readable-stream": {
"version": "2.3.6", "version": "2.3.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": { "requires": {
"core-util-is": "~1.0.0", "core-util-is": "~1.0.0",
"inherits": "~2.0.3", "inherits": "~2.0.3",
...@@ -156,7 +149,6 @@ ...@@ -156,7 +149,6 @@
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": { "requires": {
"safe-buffer": "~5.1.0" "safe-buffer": "~5.1.0"
} }
...@@ -196,8 +188,7 @@ ...@@ -196,8 +188,7 @@
"array-find-index": { "array-find-index": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
"integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E="
"dev": true
}, },
"array-flatten": { "array-flatten": {
"version": "1.1.1", "version": "1.1.1",
...@@ -222,7 +213,6 @@ ...@@ -222,7 +213,6 @@
"version": "0.2.4", "version": "0.2.4",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
"integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
"dev": true,
"requires": { "requires": {
"safer-buffer": "~2.1.0" "safer-buffer": "~2.1.0"
} }
...@@ -281,13 +271,12 @@ ...@@ -281,13 +271,12 @@
"async-foreach": { "async-foreach": {
"version": "0.1.3", "version": "0.1.3",
"resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
"integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI="
"dev": true
}, },
"async-validator": { "async-validator": {
"version": "1.8.5", "version": "1.8.5",
"resolved": "http://registry.npm.taobao.org/async-validator/download/async-validator-1.8.5.tgz", "resolved": "http://192.168.110.93:4873/async-validator/-/async-validator-1.8.5.tgz",
"integrity": "sha1-3D4I7B/Q3dtn5ghC8CwM0c7G1/A=", "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==",
"requires": { "requires": {
"babel-runtime": "6.x" "babel-runtime": "6.x"
} }
...@@ -295,8 +284,7 @@ ...@@ -295,8 +284,7 @@
"asynckit": { "asynckit": {
"version": "0.4.0", "version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
"dev": true
}, },
"atob": { "atob": {
"version": "2.1.2", "version": "2.1.2",
...@@ -340,8 +328,7 @@ ...@@ -340,8 +328,7 @@
"aws4": { "aws4": {
"version": "1.8.0", "version": "1.8.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
"integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
"dev": true
}, },
"axios": { "axios": {
"version": "0.16.2", "version": "0.16.2",
...@@ -569,8 +556,8 @@ ...@@ -569,8 +556,8 @@
}, },
"babel-helper-vue-jsx-merge-props": { "babel-helper-vue-jsx-merge-props": {
"version": "2.0.3", "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", "resolved": "http://192.168.110.93:4873/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
"integrity": "sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY=" "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg=="
}, },
"babel-helpers": { "babel-helpers": {
"version": "6.24.1", "version": "6.24.1",
...@@ -1133,8 +1120,7 @@ ...@@ -1133,8 +1120,7 @@
"balanced-match": { "balanced-match": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
"dev": true
}, },
"base": { "base": {
"version": "0.11.2", "version": "0.11.2",
...@@ -1219,7 +1205,6 @@ ...@@ -1219,7 +1205,6 @@
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
"dev": true,
"requires": { "requires": {
"tweetnacl": "^0.14.3" "tweetnacl": "^0.14.3"
} }
...@@ -1248,7 +1233,6 @@ ...@@ -1248,7 +1233,6 @@
"version": "0.0.9", "version": "0.0.9",
"resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
"integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
"dev": true,
"requires": { "requires": {
"inherits": "~2.0.0" "inherits": "~2.0.0"
} }
...@@ -1307,7 +1291,6 @@ ...@@ -1307,7 +1291,6 @@
"version": "1.1.11", "version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": { "requires": {
"balanced-match": "^1.0.0", "balanced-match": "^1.0.0",
"concat-map": "0.0.1" "concat-map": "0.0.1"
...@@ -1374,8 +1357,7 @@ ...@@ -1374,8 +1357,7 @@
"builtin-modules": { "builtin-modules": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
"integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8="
"dev": true
}, },
"builtin-status-codes": { "builtin-status-codes": {
"version": "3.0.0", "version": "3.0.0",
...@@ -1433,7 +1415,6 @@ ...@@ -1433,7 +1415,6 @@
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
"integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
"dev": true,
"requires": { "requires": {
"camelcase": "^2.0.0", "camelcase": "^2.0.0",
"map-obj": "^1.0.0" "map-obj": "^1.0.0"
...@@ -1442,11 +1423,18 @@ ...@@ -1442,11 +1423,18 @@
"camelcase": { "camelcase": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
"integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
"dev": true
} }
} }
}, },
"can-promise": {
"version": "0.0.1",
"resolved": "http://192.168.110.93:4873/can-promise/-/can-promise-0.0.1.tgz",
"integrity": "sha1-enWXrYAfsUyLIjQd/sMUtr1q2NM=",
"requires": {
"window-or-global": "^1.0.1"
}
},
"caniuse-api": { "caniuse-api": {
"version": "1.6.1", "version": "1.6.1",
"resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
...@@ -1468,8 +1456,7 @@ ...@@ -1468,8 +1456,7 @@
"caseless": { "caseless": {
"version": "0.12.0", "version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
"dev": true
}, },
"center-align": { "center-align": {
"version": "0.1.3", "version": "0.1.3",
...@@ -1485,7 +1472,6 @@ ...@@ -1485,7 +1472,6 @@
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true,
"requires": { "requires": {
"ansi-styles": "^2.2.1", "ansi-styles": "^2.2.1",
"escape-string-regexp": "^1.0.2", "escape-string-regexp": "^1.0.2",
...@@ -1497,14 +1483,12 @@ ...@@ -1497,14 +1483,12 @@
"ansi-regex": { "ansi-regex": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
"dev": true
}, },
"strip-ansi": { "strip-ansi": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
"requires": { "requires": {
"ansi-regex": "^2.0.0" "ansi-regex": "^2.0.0"
} }
...@@ -1512,8 +1496,7 @@ ...@@ -1512,8 +1496,7 @@
"supports-color": { "supports-color": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
"integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
"dev": true
} }
} }
}, },
...@@ -1640,8 +1623,7 @@ ...@@ -1640,8 +1623,7 @@
"co": { "co": {
"version": "4.6.0", "version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
"integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
"dev": true
}, },
"coa": { "coa": {
"version": "1.0.4", "version": "1.0.4",
...@@ -1723,7 +1705,6 @@ ...@@ -1723,7 +1705,6 @@
"version": "1.0.7", "version": "1.0.7",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
"integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
"dev": true,
"requires": { "requires": {
"delayed-stream": "~1.0.0" "delayed-stream": "~1.0.0"
} }
...@@ -1784,8 +1765,7 @@ ...@@ -1784,8 +1765,7 @@
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
"dev": true
}, },
"config-chain": { "config-chain": {
"version": "1.1.12", "version": "1.1.12",
...@@ -1815,8 +1795,7 @@ ...@@ -1815,8 +1795,7 @@
"console-control-strings": { "console-control-strings": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
"dev": true
}, },
"consolidate": { "consolidate": {
"version": "0.14.5", "version": "0.14.5",
...@@ -1880,8 +1859,7 @@ ...@@ -1880,8 +1859,7 @@
"core-util-is": { "core-util-is": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
"dev": true
}, },
"cross-env": { "cross-env": {
"version": "5.2.0", "version": "5.2.0",
...@@ -2068,7 +2046,6 @@ ...@@ -2068,7 +2046,6 @@
"version": "0.4.1", "version": "0.4.1",
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
"integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
"dev": true,
"requires": { "requires": {
"array-find-index": "^1.0.1" "array-find-index": "^1.0.1"
} }
...@@ -2077,7 +2054,6 @@ ...@@ -2077,7 +2054,6 @@
"version": "1.14.1", "version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"dev": true,
"requires": { "requires": {
"assert-plus": "^1.0.0" "assert-plus": "^1.0.0"
}, },
...@@ -2085,8 +2061,7 @@ ...@@ -2085,8 +2061,7 @@
"assert-plus": { "assert-plus": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
"dev": true
} }
} }
}, },
...@@ -2123,8 +2098,8 @@ ...@@ -2123,8 +2098,8 @@
}, },
"deepmerge": { "deepmerge": {
"version": "1.5.2", "version": "1.5.2",
"resolved": "http://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz", "resolved": "http://192.168.110.93:4873/deepmerge/-/deepmerge-1.5.2.tgz",
"integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=" "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ=="
}, },
"define-property": { "define-property": {
"version": "2.0.2", "version": "2.0.2",
...@@ -2188,14 +2163,12 @@ ...@@ -2188,14 +2163,12 @@
"delayed-stream": { "delayed-stream": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
"dev": true
}, },
"delegates": { "delegates": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
"dev": true
}, },
"depd": { "depd": {
"version": "1.1.2", "version": "1.1.2",
...@@ -2218,6 +2191,11 @@ ...@@ -2218,6 +2191,11 @@
"repeating": "^2.0.0" "repeating": "^2.0.0"
} }
}, },
"dijkstrajs": {
"version": "1.0.1",
"resolved": "http://192.168.110.93:4873/dijkstrajs/-/dijkstrajs-1.0.1.tgz",
"integrity": "sha1-082BIh4+pAdCz83lVtTpnpjdxxs="
},
"dom-converter": { "dom-converter": {
"version": "0.2.0", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
...@@ -2280,7 +2258,6 @@ ...@@ -2280,7 +2258,6 @@
"version": "0.1.2", "version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
"dev": true,
"requires": { "requires": {
"jsbn": "~0.1.0", "jsbn": "~0.1.0",
"safer-buffer": "^2.1.0" "safer-buffer": "^2.1.0"
...@@ -2329,9 +2306,9 @@ ...@@ -2329,9 +2306,9 @@
"dev": true "dev": true
}, },
"element-ui": { "element-ui": {
"version": "2.6.1", "version": "2.10.0",
"resolved": "http://registry.npm.taobao.org/element-ui/download/element-ui-2.6.1.tgz", "resolved": "http://192.168.110.93:4873/element-ui/-/element-ui-2.10.0.tgz",
"integrity": "sha1-htt5/13psbzDGHtls3crDFQHRxg=", "integrity": "sha1-5hKfa21v/g260SWkqNF9RHpfY5w=",
"requires": { "requires": {
"async-validator": "~1.8.1", "async-validator": "~1.8.1",
"babel-helper-vue-jsx-merge-props": "^2.0.0", "babel-helper-vue-jsx-merge-props": "^2.0.0",
...@@ -2353,6 +2330,14 @@ ...@@ -2353,6 +2330,14 @@
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
"dev": true "dev": true
}, },
"end-of-stream": {
"version": "1.4.1",
"resolved": "http://192.168.110.93:4873/end-of-stream/-/end-of-stream-1.4.1.tgz",
"integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
"requires": {
"once": "^1.4.0"
}
},
"enhanced-resolve": { "enhanced-resolve": {
"version": "0.9.1", "version": "0.9.1",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz",
...@@ -2391,7 +2376,6 @@ ...@@ -2391,7 +2376,6 @@
"version": "1.3.2", "version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"dev": true,
"requires": { "requires": {
"is-arrayish": "^0.2.1" "is-arrayish": "^0.2.1"
} }
...@@ -2405,8 +2389,7 @@ ...@@ -2405,8 +2389,7 @@
"escape-string-regexp": { "escape-string-regexp": {
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
"dev": true
}, },
"esprima": { "esprima": {
"version": "2.7.3", "version": "2.7.3",
...@@ -2543,8 +2526,7 @@ ...@@ -2543,8 +2526,7 @@
"extend": { "extend": {
"version": "3.0.2", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
"dev": true
}, },
"extend-shallow": { "extend-shallow": {
"version": "3.0.2", "version": "3.0.2",
...@@ -2586,7 +2568,7 @@ ...@@ -2586,7 +2568,7 @@
}, },
"extract-text-webpack-plugin": { "extract-text-webpack-plugin": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-1.0.1.tgz", "resolved": "http://192.168.110.93:4873/extract-text-webpack-plugin/-/extract-text-webpack-plugin-1.0.1.tgz",
"integrity": "sha1-yVvzy6rEnclvHcbgclSfu2VMzSw=", "integrity": "sha1-yVvzy6rEnclvHcbgclSfu2VMzSw=",
"dev": true, "dev": true,
"requires": { "requires": {
...@@ -2598,20 +2580,17 @@ ...@@ -2598,20 +2580,17 @@
"extsprintf": { "extsprintf": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
"dev": true
}, },
"fast-deep-equal": { "fast-deep-equal": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
"integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
"dev": true
}, },
"fast-json-stable-stringify": { "fast-json-stable-stringify": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
"dev": true
}, },
"fastclick": { "fastclick": {
"version": "1.0.6", "version": "1.0.6",
...@@ -2738,8 +2717,7 @@ ...@@ -2738,8 +2717,7 @@
"forever-agent": { "forever-agent": {
"version": "0.6.1", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
"dev": true
}, },
"form-data": { "form-data": {
"version": "2.1.4", "version": "2.1.4",
...@@ -2777,8 +2755,7 @@ ...@@ -2777,8 +2755,7 @@
"fs.realpath": { "fs.realpath": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
"dev": true
}, },
"fsevents": { "fsevents": {
"version": "1.2.4", "version": "1.2.4",
...@@ -3313,7 +3290,6 @@ ...@@ -3313,7 +3290,6 @@
"version": "1.0.11", "version": "1.0.11",
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
"integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
"dev": true,
"requires": { "requires": {
"graceful-fs": "^4.1.2", "graceful-fs": "^4.1.2",
"inherits": "~2.0.0", "inherits": "~2.0.0",
...@@ -3331,7 +3307,6 @@ ...@@ -3331,7 +3307,6 @@
"version": "2.7.4", "version": "2.7.4",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"dev": true,
"requires": { "requires": {
"aproba": "^1.0.3", "aproba": "^1.0.3",
"console-control-strings": "^1.0.0", "console-control-strings": "^1.0.0",
...@@ -3346,14 +3321,12 @@ ...@@ -3346,14 +3321,12 @@
"ansi-regex": { "ansi-regex": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
"dev": true
}, },
"is-fullwidth-code-point": { "is-fullwidth-code-point": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"dev": true,
"requires": { "requires": {
"number-is-nan": "^1.0.0" "number-is-nan": "^1.0.0"
} }
...@@ -3362,7 +3335,6 @@ ...@@ -3362,7 +3335,6 @@
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"dev": true,
"requires": { "requires": {
"code-point-at": "^1.0.0", "code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0", "is-fullwidth-code-point": "^1.0.0",
...@@ -3373,7 +3345,6 @@ ...@@ -3373,7 +3345,6 @@
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
"requires": { "requires": {
"ansi-regex": "^2.0.0" "ansi-regex": "^2.0.0"
} }
...@@ -3384,7 +3355,6 @@ ...@@ -3384,7 +3355,6 @@
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
"integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
"dev": true,
"requires": { "requires": {
"globule": "^1.0.0" "globule": "^1.0.0"
} }
...@@ -3397,8 +3367,7 @@ ...@@ -3397,8 +3367,7 @@
"get-stdin": { "get-stdin": {
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
"integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4="
"dev": true
}, },
"get-stream": { "get-stream": {
"version": "3.0.0", "version": "3.0.0",
...@@ -3415,7 +3384,6 @@ ...@@ -3415,7 +3384,6 @@
"version": "0.1.7", "version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"dev": true,
"requires": { "requires": {
"assert-plus": "^1.0.0" "assert-plus": "^1.0.0"
}, },
...@@ -3423,8 +3391,7 @@ ...@@ -3423,8 +3391,7 @@
"assert-plus": { "assert-plus": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
"dev": true
} }
} }
}, },
...@@ -3432,7 +3399,6 @@ ...@@ -3432,7 +3399,6 @@
"version": "7.1.3", "version": "7.1.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
"integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
"dev": true,
"requires": { "requires": {
"fs.realpath": "^1.0.0", "fs.realpath": "^1.0.0",
"inflight": "^1.0.4", "inflight": "^1.0.4",
...@@ -3505,7 +3471,6 @@ ...@@ -3505,7 +3471,6 @@
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
"integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==",
"dev": true,
"requires": { "requires": {
"glob": "~7.1.1", "glob": "~7.1.1",
"lodash": "~4.17.10", "lodash": "~4.17.10",
...@@ -3515,8 +3480,7 @@ ...@@ -3515,8 +3480,7 @@
"graceful-fs": { "graceful-fs": {
"version": "4.1.11", "version": "4.1.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
"integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
"dev": true
}, },
"har-schema": { "har-schema": {
"version": "1.0.5", "version": "1.0.5",
...@@ -3549,7 +3513,6 @@ ...@@ -3549,7 +3513,6 @@
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
"integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
"dev": true,
"requires": { "requires": {
"ansi-regex": "^2.0.0" "ansi-regex": "^2.0.0"
}, },
...@@ -3557,8 +3520,7 @@ ...@@ -3557,8 +3520,7 @@
"ansi-regex": { "ansi-regex": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
"dev": true
} }
} }
}, },
...@@ -3571,8 +3533,7 @@ ...@@ -3571,8 +3533,7 @@
"has-unicode": { "has-unicode": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
"dev": true
}, },
"has-value": { "has-value": {
"version": "1.0.0", "version": "1.0.0",
...@@ -3678,8 +3639,7 @@ ...@@ -3678,8 +3639,7 @@
"hosted-git-info": { "hosted-git-info": {
"version": "2.7.1", "version": "2.7.1",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
"integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w=="
"dev": true
}, },
"html-comment-regex": { "html-comment-regex": {
"version": "1.1.2", "version": "1.1.2",
...@@ -3835,14 +3795,12 @@ ...@@ -3835,14 +3795,12 @@
"in-publish": { "in-publish": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
"integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E="
"dev": true
}, },
"indent-string": { "indent-string": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
"integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
"dev": true,
"requires": { "requires": {
"repeating": "^2.0.0" "repeating": "^2.0.0"
} }
...@@ -3863,7 +3821,6 @@ ...@@ -3863,7 +3821,6 @@
"version": "1.0.6", "version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": { "requires": {
"once": "^1.3.0", "once": "^1.3.0",
"wrappy": "1" "wrappy": "1"
...@@ -3872,8 +3829,7 @@ ...@@ -3872,8 +3829,7 @@
"inherits": { "inherits": {
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
"dev": true
}, },
"ini": { "ini": {
"version": "1.3.5", "version": "1.3.5",
...@@ -3925,8 +3881,7 @@ ...@@ -3925,8 +3881,7 @@
"is-arrayish": { "is-arrayish": {
"version": "0.2.1", "version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
"dev": true
}, },
"is-binary-path": { "is-binary-path": {
"version": "1.0.1", "version": "1.0.1",
...@@ -3946,7 +3901,6 @@ ...@@ -3946,7 +3901,6 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
"integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
"dev": true,
"requires": { "requires": {
"builtin-modules": "^1.0.0" "builtin-modules": "^1.0.0"
} }
...@@ -4010,7 +3964,6 @@ ...@@ -4010,7 +3964,6 @@
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
"integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
"dev": true,
"requires": { "requires": {
"number-is-nan": "^1.0.0" "number-is-nan": "^1.0.0"
} }
...@@ -4090,14 +4043,12 @@ ...@@ -4090,14 +4043,12 @@
"is-typedarray": { "is-typedarray": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
"dev": true
}, },
"is-utf8": { "is-utf8": {
"version": "0.2.1", "version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
"integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
"dev": true
}, },
"is-windows": { "is-windows": {
"version": "1.0.2", "version": "1.0.2",
...@@ -4141,14 +4092,12 @@ ...@@ -4141,14 +4092,12 @@
"isstream": { "isstream": {
"version": "0.1.2", "version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
"dev": true
}, },
"js-base64": { "js-base64": {
"version": "2.4.9", "version": "2.4.9",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz",
"integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==", "integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ=="
"dev": true
}, },
"js-beautify": { "js-beautify": {
"version": "1.8.8", "version": "1.8.8",
...@@ -4203,8 +4152,7 @@ ...@@ -4203,8 +4152,7 @@
"jsbn": { "jsbn": {
"version": "0.1.1", "version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
"dev": true
}, },
"jsesc": { "jsesc": {
"version": "1.3.0", "version": "1.3.0",
...@@ -4221,14 +4169,12 @@ ...@@ -4221,14 +4169,12 @@
"json-schema": { "json-schema": {
"version": "0.2.3", "version": "0.2.3",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
"dev": true
}, },
"json-schema-traverse": { "json-schema-traverse": {
"version": "0.3.1", "version": "0.3.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
"integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
"dev": true
}, },
"json-stable-stringify": { "json-stable-stringify": {
"version": "1.0.1", "version": "1.0.1",
...@@ -4243,8 +4189,7 @@ ...@@ -4243,8 +4189,7 @@
"json-stringify-safe": { "json-stringify-safe": {
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
"dev": true
}, },
"json3": { "json3": {
"version": "3.3.2", "version": "3.3.2",
...@@ -4269,7 +4214,6 @@ ...@@ -4269,7 +4214,6 @@
"version": "1.4.1", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
"dev": true,
"requires": { "requires": {
"assert-plus": "1.0.0", "assert-plus": "1.0.0",
"extsprintf": "1.3.0", "extsprintf": "1.3.0",
...@@ -4280,8 +4224,7 @@ ...@@ -4280,8 +4224,7 @@
"assert-plus": { "assert-plus": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
"dev": true
} }
} }
}, },
...@@ -4337,7 +4280,6 @@ ...@@ -4337,7 +4280,6 @@
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
"integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
"dev": true,
"requires": { "requires": {
"graceful-fs": "^4.1.2", "graceful-fs": "^4.1.2",
"parse-json": "^2.2.0", "parse-json": "^2.2.0",
...@@ -4370,8 +4312,7 @@ ...@@ -4370,8 +4312,7 @@
"lodash": { "lodash": {
"version": "4.17.11", "version": "4.17.11",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
"dev": true
}, },
"lodash._arraycopy": { "lodash._arraycopy": {
"version": "3.0.0", "version": "3.0.0",
...@@ -4489,8 +4430,7 @@ ...@@ -4489,8 +4430,7 @@
"lodash.assign": { "lodash.assign": {
"version": "4.2.0", "version": "4.2.0",
"resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
"integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc="
"dev": true
}, },
"lodash.camelcase": { "lodash.camelcase": {
"version": "3.0.1", "version": "3.0.1",
...@@ -4504,8 +4444,7 @@ ...@@ -4504,8 +4444,7 @@
"lodash.clonedeep": { "lodash.clonedeep": {
"version": "4.5.0", "version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
"integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
"dev": true
}, },
"lodash.deburr": { "lodash.deburr": {
"version": "3.2.0", "version": "3.2.0",
...@@ -4614,8 +4553,7 @@ ...@@ -4614,8 +4553,7 @@
"lodash.mergewith": { "lodash.mergewith": {
"version": "4.6.1", "version": "4.6.1",
"resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz",
"integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ=="
"dev": true
}, },
"lodash.pairs": { "lodash.pairs": {
"version": "3.0.1", "version": "3.0.1",
...@@ -4685,7 +4623,6 @@ ...@@ -4685,7 +4623,6 @@
"version": "1.6.0", "version": "1.6.0",
"resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
"integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
"dev": true,
"requires": { "requires": {
"currently-unhandled": "^0.4.1", "currently-unhandled": "^0.4.1",
"signal-exit": "^3.0.0" "signal-exit": "^3.0.0"
...@@ -4706,6 +4643,14 @@ ...@@ -4706,6 +4643,14 @@
"yallist": "^2.1.2" "yallist": "^2.1.2"
} }
}, },
"map-age-cleaner": {
"version": "0.1.3",
"resolved": "http://192.168.110.93:4873/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
"integrity": "sha1-fVg6cwZDTAVf5HSw9FB45uG0uSo=",
"requires": {
"p-defer": "^1.0.0"
}
},
"map-cache": { "map-cache": {
"version": "0.2.2", "version": "0.2.2",
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
...@@ -4715,8 +4660,7 @@ ...@@ -4715,8 +4660,7 @@
"map-obj": { "map-obj": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
"integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0="
"dev": true
}, },
"map-visit": { "map-visit": {
"version": "1.0.0", "version": "1.0.0",
...@@ -4799,7 +4743,6 @@ ...@@ -4799,7 +4743,6 @@
"version": "3.7.0", "version": "3.7.0",
"resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
"integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
"dev": true,
"requires": { "requires": {
"camelcase-keys": "^2.0.0", "camelcase-keys": "^2.0.0",
"decamelize": "^1.1.2", "decamelize": "^1.1.2",
...@@ -4816,8 +4759,7 @@ ...@@ -4816,8 +4759,7 @@
"minimist": { "minimist": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
"dev": true
} }
} }
}, },
...@@ -4880,14 +4822,12 @@ ...@@ -4880,14 +4822,12 @@
"mime-db": { "mime-db": {
"version": "1.37.0", "version": "1.37.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
"integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg=="
"dev": true
}, },
"mime-types": { "mime-types": {
"version": "2.1.21", "version": "2.1.21",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
"integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
"dev": true,
"requires": { "requires": {
"mime-db": "~1.37.0" "mime-db": "~1.37.0"
} }
...@@ -4901,7 +4841,6 @@ ...@@ -4901,7 +4841,6 @@
"version": "3.0.4", "version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": { "requires": {
"brace-expansion": "^1.1.7" "brace-expansion": "^1.1.7"
} }
...@@ -4909,8 +4848,7 @@ ...@@ -4909,8 +4848,7 @@
"minimist": { "minimist": {
"version": "0.0.8", "version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
"dev": true
}, },
"mixin-deep": { "mixin-deep": {
"version": "1.3.1", "version": "1.3.1",
...@@ -4937,7 +4875,6 @@ ...@@ -4937,7 +4875,6 @@
"version": "0.5.1", "version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
"requires": { "requires": {
"minimist": "0.0.8" "minimist": "0.0.8"
} }
...@@ -4950,8 +4887,7 @@ ...@@ -4950,8 +4887,7 @@
"nan": { "nan": {
"version": "2.11.1", "version": "2.11.1",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
"integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA=="
"dev": true
}, },
"nanomatch": { "nanomatch": {
"version": "1.2.13", "version": "1.2.13",
...@@ -5001,8 +4937,7 @@ ...@@ -5001,8 +4937,7 @@
"nice-try": { "nice-try": {
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
"dev": true
}, },
"no-case": { "no-case": {
"version": "2.3.2", "version": "2.3.2",
...@@ -5017,7 +4952,6 @@ ...@@ -5017,7 +4952,6 @@
"version": "3.8.0", "version": "3.8.0",
"resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
"integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
"dev": true,
"requires": { "requires": {
"fstream": "^1.0.0", "fstream": "^1.0.0",
"glob": "^7.0.3", "glob": "^7.0.3",
...@@ -5037,7 +4971,6 @@ ...@@ -5037,7 +4971,6 @@
"version": "5.5.2", "version": "5.5.2",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
"integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
"dev": true,
"requires": { "requires": {
"co": "^4.6.0", "co": "^4.6.0",
"fast-deep-equal": "^1.0.0", "fast-deep-equal": "^1.0.0",
...@@ -5048,20 +4981,17 @@ ...@@ -5048,20 +4981,17 @@
"assert-plus": { "assert-plus": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
"dev": true
}, },
"aws-sign2": { "aws-sign2": {
"version": "0.7.0", "version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
"dev": true
}, },
"form-data": { "form-data": {
"version": "2.3.3", "version": "2.3.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"dev": true,
"requires": { "requires": {
"asynckit": "^0.4.0", "asynckit": "^0.4.0",
"combined-stream": "^1.0.6", "combined-stream": "^1.0.6",
...@@ -5071,14 +5001,12 @@ ...@@ -5071,14 +5001,12 @@
"har-schema": { "har-schema": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
"dev": true
}, },
"har-validator": { "har-validator": {
"version": "5.1.0", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz",
"integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==",
"dev": true,
"requires": { "requires": {
"ajv": "^5.3.0", "ajv": "^5.3.0",
"har-schema": "^2.0.0" "har-schema": "^2.0.0"
...@@ -5088,7 +5016,6 @@ ...@@ -5088,7 +5016,6 @@
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"dev": true,
"requires": { "requires": {
"assert-plus": "^1.0.0", "assert-plus": "^1.0.0",
"jsprim": "^1.2.2", "jsprim": "^1.2.2",
...@@ -5098,20 +5025,17 @@ ...@@ -5098,20 +5025,17 @@
"oauth-sign": { "oauth-sign": {
"version": "0.9.0", "version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
"dev": true
}, },
"performance-now": { "performance-now": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
"dev": true
}, },
"request": { "request": {
"version": "2.88.0", "version": "2.88.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
"integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
"dev": true,
"requires": { "requires": {
"aws-sign2": "~0.7.0", "aws-sign2": "~0.7.0",
"aws4": "^1.8.0", "aws4": "^1.8.0",
...@@ -5138,14 +5062,12 @@ ...@@ -5138,14 +5062,12 @@
"semver": { "semver": {
"version": "5.3.0", "version": "5.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
"integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8="
"dev": true
}, },
"tough-cookie": { "tough-cookie": {
"version": "2.4.3", "version": "2.4.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
"integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
"dev": true,
"requires": { "requires": {
"psl": "^1.1.24", "psl": "^1.1.24",
"punycode": "^1.4.1" "punycode": "^1.4.1"
...@@ -5222,7 +5144,6 @@ ...@@ -5222,7 +5144,6 @@
"version": "4.9.4", "version": "4.9.4",
"resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.4.tgz", "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.4.tgz",
"integrity": "sha512-MXyurANsUoE4/6KmfMkwGcBzAnJQ5xJBGW7Ei6ea8KnUKuzHr/SguVBIi3uaUAHtZCPUYkvlJ3Ef5T5VAwVpaA==", "integrity": "sha512-MXyurANsUoE4/6KmfMkwGcBzAnJQ5xJBGW7Ei6ea8KnUKuzHr/SguVBIi3uaUAHtZCPUYkvlJ3Ef5T5VAwVpaA==",
"dev": true,
"requires": { "requires": {
"async-foreach": "^0.1.3", "async-foreach": "^0.1.3",
"chalk": "^1.1.1", "chalk": "^1.1.1",
...@@ -5249,7 +5170,6 @@ ...@@ -5249,7 +5170,6 @@
"version": "5.5.2", "version": "5.5.2",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
"integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
"dev": true,
"requires": { "requires": {
"co": "^4.6.0", "co": "^4.6.0",
"fast-deep-equal": "^1.0.0", "fast-deep-equal": "^1.0.0",
...@@ -5260,20 +5180,17 @@ ...@@ -5260,20 +5180,17 @@
"assert-plus": { "assert-plus": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
"dev": true
}, },
"aws-sign2": { "aws-sign2": {
"version": "0.7.0", "version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
"dev": true
}, },
"cross-spawn": { "cross-spawn": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
"integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
"dev": true,
"requires": { "requires": {
"lru-cache": "^4.0.1", "lru-cache": "^4.0.1",
"which": "^1.2.9" "which": "^1.2.9"
...@@ -5283,7 +5200,6 @@ ...@@ -5283,7 +5200,6 @@
"version": "2.3.3", "version": "2.3.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"dev": true,
"requires": { "requires": {
"asynckit": "^0.4.0", "asynckit": "^0.4.0",
"combined-stream": "^1.0.6", "combined-stream": "^1.0.6",
...@@ -5293,14 +5209,12 @@ ...@@ -5293,14 +5209,12 @@
"har-schema": { "har-schema": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
"dev": true
}, },
"har-validator": { "har-validator": {
"version": "5.1.0", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz",
"integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==",
"dev": true,
"requires": { "requires": {
"ajv": "^5.3.0", "ajv": "^5.3.0",
"har-schema": "^2.0.0" "har-schema": "^2.0.0"
...@@ -5310,7 +5224,6 @@ ...@@ -5310,7 +5224,6 @@
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"dev": true,
"requires": { "requires": {
"assert-plus": "^1.0.0", "assert-plus": "^1.0.0",
"jsprim": "^1.2.2", "jsprim": "^1.2.2",
...@@ -5320,20 +5233,17 @@ ...@@ -5320,20 +5233,17 @@
"oauth-sign": { "oauth-sign": {
"version": "0.9.0", "version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
"dev": true
}, },
"performance-now": { "performance-now": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
"dev": true
}, },
"request": { "request": {
"version": "2.88.0", "version": "2.88.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
"integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
"dev": true,
"requires": { "requires": {
"aws-sign2": "~0.7.0", "aws-sign2": "~0.7.0",
"aws4": "^1.8.0", "aws4": "^1.8.0",
...@@ -5361,7 +5271,6 @@ ...@@ -5361,7 +5271,6 @@
"version": "2.4.3", "version": "2.4.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
"integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
"dev": true,
"requires": { "requires": {
"psl": "^1.1.24", "psl": "^1.1.24",
"punycode": "^1.4.1" "punycode": "^1.4.1"
...@@ -5373,7 +5282,6 @@ ...@@ -5373,7 +5282,6 @@
"version": "3.0.6", "version": "3.0.6",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
"integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
"dev": true,
"requires": { "requires": {
"abbrev": "1" "abbrev": "1"
} }
...@@ -5382,7 +5290,6 @@ ...@@ -5382,7 +5290,6 @@
"version": "2.4.0", "version": "2.4.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
"integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
"dev": true,
"requires": { "requires": {
"hosted-git-info": "^2.1.4", "hosted-git-info": "^2.1.4",
"is-builtin-module": "^1.0.0", "is-builtin-module": "^1.0.0",
...@@ -5419,7 +5326,7 @@ ...@@ -5419,7 +5326,7 @@
}, },
"normalize-wheel": { "normalize-wheel": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "http://registry.npm.taobao.org/normalize-wheel/download/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=" "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU="
}, },
"npm-run-path": { "npm-run-path": {
...@@ -5434,7 +5341,6 @@ ...@@ -5434,7 +5341,6 @@
"version": "4.1.2", "version": "4.1.2",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
"integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
"dev": true,
"requires": { "requires": {
"are-we-there-yet": "~1.1.2", "are-we-there-yet": "~1.1.2",
"console-control-strings": "~1.1.0", "console-control-strings": "~1.1.0",
...@@ -5472,8 +5378,7 @@ ...@@ -5472,8 +5378,7 @@
"object-assign": { "object-assign": {
"version": "4.1.1", "version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
"dev": true
}, },
"object-copy": { "object-copy": {
"version": "0.1.0", "version": "0.1.0",
...@@ -5566,7 +5471,6 @@ ...@@ -5566,7 +5471,6 @@
"version": "1.4.0", "version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": { "requires": {
"wrappy": "1" "wrappy": "1"
} }
...@@ -5633,8 +5537,7 @@ ...@@ -5633,8 +5537,7 @@
"os-homedir": { "os-homedir": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
"dev": true
}, },
"os-locale": { "os-locale": {
"version": "2.1.0", "version": "2.1.0",
...@@ -5649,24 +5552,32 @@ ...@@ -5649,24 +5552,32 @@
"os-tmpdir": { "os-tmpdir": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
"dev": true
}, },
"osenv": { "osenv": {
"version": "0.1.5", "version": "0.1.5",
"resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
"integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
"dev": true,
"requires": { "requires": {
"os-homedir": "^1.0.0", "os-homedir": "^1.0.0",
"os-tmpdir": "^1.0.0" "os-tmpdir": "^1.0.0"
} }
}, },
"p-defer": {
"version": "1.0.0",
"resolved": "http://192.168.110.93:4873/p-defer/-/p-defer-1.0.0.tgz",
"integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww="
},
"p-finally": { "p-finally": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
"integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
}, },
"p-is-promise": {
"version": "2.1.0",
"resolved": "http://192.168.110.93:4873/p-is-promise/-/p-is-promise-2.1.0.tgz",
"integrity": "sha1-kYzrrqJIpiz3/6uOO8qMX4gvxC4="
},
"p-limit": { "p-limit": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
...@@ -5736,7 +5647,6 @@ ...@@ -5736,7 +5647,6 @@
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
"integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
"dev": true,
"requires": { "requires": {
"error-ex": "^1.2.0" "error-ex": "^1.2.0"
} }
...@@ -5767,8 +5677,7 @@ ...@@ -5767,8 +5677,7 @@
"path-is-absolute": { "path-is-absolute": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
"dev": true
}, },
"path-key": { "path-key": {
"version": "2.0.1", "version": "2.0.1",
...@@ -5791,7 +5700,6 @@ ...@@ -5791,7 +5700,6 @@
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
"integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
"dev": true,
"requires": { "requires": {
"graceful-fs": "^4.1.2", "graceful-fs": "^4.1.2",
"pify": "^2.0.0", "pify": "^2.0.0",
...@@ -5814,20 +5722,17 @@ ...@@ -5814,20 +5722,17 @@
"pify": { "pify": {
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
"dev": true
}, },
"pinkie": { "pinkie": {
"version": "2.0.4", "version": "2.0.4",
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
"integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
"dev": true
}, },
"pinkie-promise": { "pinkie-promise": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
"integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
"dev": true,
"requires": { "requires": {
"pinkie": "^2.0.0" "pinkie": "^2.0.0"
} }
...@@ -5862,6 +5767,11 @@ ...@@ -5862,6 +5767,11 @@
} }
} }
}, },
"pngjs": {
"version": "3.4.0",
"resolved": "http://192.168.110.93:4873/pngjs/-/pngjs-3.4.0.tgz",
"integrity": "sha1-mcp9clll+2VYFOr2XzjxK72/VV8="
},
"posix-character-classes": { "posix-character-classes": {
"version": "0.1.1", "version": "0.1.1",
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
...@@ -6508,8 +6418,7 @@ ...@@ -6508,8 +6418,7 @@
"process-nextick-args": { "process-nextick-args": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
"dev": true
}, },
"promise": { "promise": {
"version": "7.3.1", "version": "7.3.1",
...@@ -6551,14 +6460,21 @@ ...@@ -6551,14 +6460,21 @@
"psl": { "psl": {
"version": "1.1.29", "version": "1.1.29",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
"integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ=="
"dev": true },
"pump": {
"version": "3.0.0",
"resolved": "http://192.168.110.93:4873/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
}, },
"punycode": { "punycode": {
"version": "1.4.1", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
"dev": true
}, },
"q": { "q": {
"version": "1.5.1", "version": "1.5.1",
...@@ -6566,11 +6482,172 @@ ...@@ -6566,11 +6482,172 @@
"integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
"dev": true "dev": true
}, },
"qrcode": {
"version": "1.3.3",
"resolved": "http://192.168.110.93:4873/qrcode/-/qrcode-1.3.3.tgz",
"integrity": "sha1-XvUMDIkM/6GJf0UgcPDwlJNpk94=",
"requires": {
"can-promise": "0.0.1",
"dijkstrajs": "^1.0.1",
"isarray": "^2.0.1",
"pngjs": "^3.3.0",
"yargs": "^12.0.5"
},
"dependencies": {
"camelcase": {
"version": "5.3.1",
"resolved": "http://192.168.110.93:4873/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA="
},
"cross-spawn": {
"version": "6.0.5",
"resolved": "http://192.168.110.93:4873/cross-spawn/-/cross-spawn-6.0.5.tgz",
"integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"requires": {
"nice-try": "^1.0.4",
"path-key": "^2.0.1",
"semver": "^5.5.0",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
}
},
"execa": {
"version": "1.0.0",
"resolved": "http://192.168.110.93:4873/execa/-/execa-1.0.0.tgz",
"integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
"requires": {
"cross-spawn": "^6.0.0",
"get-stream": "^4.0.0",
"is-stream": "^1.1.0",
"npm-run-path": "^2.0.0",
"p-finally": "^1.0.0",
"signal-exit": "^3.0.0",
"strip-eof": "^1.0.0"
}
},
"find-up": {
"version": "3.0.0",
"resolved": "http://192.168.110.93:4873/find-up/-/find-up-3.0.0.tgz",
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"requires": {
"locate-path": "^3.0.0"
}
},
"get-stream": {
"version": "4.1.0",
"resolved": "http://192.168.110.93:4873/get-stream/-/get-stream-4.1.0.tgz",
"integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
"requires": {
"pump": "^3.0.0"
}
},
"invert-kv": {
"version": "2.0.0",
"resolved": "http://192.168.110.93:4873/invert-kv/-/invert-kv-2.0.0.tgz",
"integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA=="
},
"isarray": {
"version": "2.0.4",
"resolved": "http://192.168.110.93:4873/isarray/-/isarray-2.0.4.tgz",
"integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA=="
},
"lcid": {
"version": "2.0.0",
"resolved": "http://192.168.110.93:4873/lcid/-/lcid-2.0.0.tgz",
"integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
"requires": {
"invert-kv": "^2.0.0"
}
},
"locate-path": {
"version": "3.0.0",
"resolved": "http://192.168.110.93:4873/locate-path/-/locate-path-3.0.0.tgz",
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"requires": {
"p-locate": "^3.0.0",
"path-exists": "^3.0.0"
}
},
"mem": {
"version": "4.3.0",
"resolved": "http://192.168.110.93:4873/mem/-/mem-4.3.0.tgz",
"integrity": "sha1-Rhr0l7xK4JYIzbLmDu+2m/90QXg=",
"requires": {
"map-age-cleaner": "^0.1.1",
"mimic-fn": "^2.0.0",
"p-is-promise": "^2.0.0"
}
},
"mimic-fn": {
"version": "2.1.0",
"resolved": "http://192.168.110.93:4873/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs="
},
"os-locale": {
"version": "3.1.0",
"resolved": "http://192.168.110.93:4873/os-locale/-/os-locale-3.1.0.tgz",
"integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
"requires": {
"execa": "^1.0.0",
"lcid": "^2.0.0",
"mem": "^4.0.0"
}
},
"p-limit": {
"version": "2.2.0",
"resolved": "http://192.168.110.93:4873/p-limit/-/p-limit-2.2.0.tgz",
"integrity": "sha1-QXyZQeYCepq8ulCS3SkE4lW1+8I=",
"requires": {
"p-try": "^2.0.0"
}
},
"p-locate": {
"version": "3.0.0",
"resolved": "http://192.168.110.93:4873/p-locate/-/p-locate-3.0.0.tgz",
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"requires": {
"p-limit": "^2.0.0"
}
},
"p-try": {
"version": "2.2.0",
"resolved": "http://192.168.110.93:4873/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY="
},
"yargs": {
"version": "12.0.5",
"resolved": "http://192.168.110.93:4873/yargs/-/yargs-12.0.5.tgz",
"integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
"requires": {
"cliui": "^4.0.0",
"decamelize": "^1.2.0",
"find-up": "^3.0.0",
"get-caller-file": "^1.0.1",
"os-locale": "^3.0.0",
"require-directory": "^2.1.1",
"require-main-filename": "^1.0.1",
"set-blocking": "^2.0.0",
"string-width": "^2.0.0",
"which-module": "^2.0.0",
"y18n": "^3.2.1 || ^4.0.0",
"yargs-parser": "^11.1.1"
}
},
"yargs-parser": {
"version": "11.1.1",
"resolved": "http://192.168.110.93:4873/yargs-parser/-/yargs-parser-11.1.1.tgz",
"integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
"requires": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
}
}
}
},
"qs": { "qs": {
"version": "6.5.2", "version": "6.5.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
"dev": true
}, },
"query-string": { "query-string": {
"version": "4.3.4", "version": "4.3.4",
...@@ -6647,7 +6724,6 @@ ...@@ -6647,7 +6724,6 @@
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
"integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
"dev": true,
"requires": { "requires": {
"load-json-file": "^1.0.0", "load-json-file": "^1.0.0",
"normalize-package-data": "^2.3.2", "normalize-package-data": "^2.3.2",
...@@ -6658,7 +6734,6 @@ ...@@ -6658,7 +6734,6 @@
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
"integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
"dev": true,
"requires": { "requires": {
"find-up": "^1.0.0", "find-up": "^1.0.0",
"read-pkg": "^1.0.0" "read-pkg": "^1.0.0"
...@@ -6668,7 +6743,6 @@ ...@@ -6668,7 +6743,6 @@
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
"integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
"dev": true,
"requires": { "requires": {
"path-exists": "^2.0.0", "path-exists": "^2.0.0",
"pinkie-promise": "^2.0.0" "pinkie-promise": "^2.0.0"
...@@ -6678,7 +6752,6 @@ ...@@ -6678,7 +6752,6 @@
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
"integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
"dev": true,
"requires": { "requires": {
"pinkie-promise": "^2.0.0" "pinkie-promise": "^2.0.0"
} }
...@@ -7036,7 +7109,6 @@ ...@@ -7036,7 +7109,6 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
"integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
"dev": true,
"requires": { "requires": {
"indent-string": "^2.1.0", "indent-string": "^2.1.0",
"strip-indent": "^1.0.1" "strip-indent": "^1.0.1"
...@@ -7211,7 +7283,6 @@ ...@@ -7211,7 +7283,6 @@
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
"integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
"dev": true,
"requires": { "requires": {
"is-finite": "^1.0.0" "is-finite": "^1.0.0"
} }
...@@ -7274,8 +7345,8 @@ ...@@ -7274,8 +7345,8 @@
}, },
"resize-observer-polyfill": { "resize-observer-polyfill": {
"version": "1.5.1", "version": "1.5.1",
"resolved": "http://registry.npm.taobao.org/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz", "resolved": "http://192.168.110.93:4873/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
"integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ=" "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
}, },
"resolve": { "resolve": {
"version": "1.8.1", "version": "1.8.1",
...@@ -7321,7 +7392,6 @@ ...@@ -7321,7 +7392,6 @@
"version": "2.6.2", "version": "2.6.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
"integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
"dev": true,
"requires": { "requires": {
"glob": "^7.0.5" "glob": "^7.0.5"
} }
...@@ -7335,8 +7405,7 @@ ...@@ -7335,8 +7405,7 @@
"safe-buffer": { "safe-buffer": {
"version": "5.1.2", "version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
"dev": true
}, },
"safe-regex": { "safe-regex": {
"version": "1.1.0", "version": "1.1.0",
...@@ -7350,8 +7419,7 @@ ...@@ -7350,8 +7419,7 @@
"safer-buffer": { "safer-buffer": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
"dev": true
}, },
"sass": { "sass": {
"version": "0.5.0", "version": "0.5.0",
...@@ -7363,7 +7431,6 @@ ...@@ -7363,7 +7431,6 @@
"version": "2.2.4", "version": "2.2.4",
"resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
"integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
"dev": true,
"requires": { "requires": {
"glob": "^7.0.0", "glob": "^7.0.0",
"lodash": "^4.0.0", "lodash": "^4.0.0",
...@@ -7374,20 +7441,17 @@ ...@@ -7374,20 +7441,17 @@
"ansi-regex": { "ansi-regex": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
"dev": true
}, },
"camelcase": { "camelcase": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
"integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo="
"dev": true
}, },
"cliui": { "cliui": {
"version": "3.2.0", "version": "3.2.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
"integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
"dev": true,
"requires": { "requires": {
"string-width": "^1.0.1", "string-width": "^1.0.1",
"strip-ansi": "^3.0.1", "strip-ansi": "^3.0.1",
...@@ -7398,7 +7462,6 @@ ...@@ -7398,7 +7462,6 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"dev": true,
"requires": { "requires": {
"number-is-nan": "^1.0.0" "number-is-nan": "^1.0.0"
} }
...@@ -7407,7 +7470,6 @@ ...@@ -7407,7 +7470,6 @@
"version": "1.4.0", "version": "1.4.0",
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
"integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
"dev": true,
"requires": { "requires": {
"lcid": "^1.0.0" "lcid": "^1.0.0"
} }
...@@ -7416,7 +7478,6 @@ ...@@ -7416,7 +7478,6 @@
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"dev": true,
"requires": { "requires": {
"code-point-at": "^1.0.0", "code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0", "is-fullwidth-code-point": "^1.0.0",
...@@ -7427,7 +7488,6 @@ ...@@ -7427,7 +7488,6 @@
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
"requires": { "requires": {
"ansi-regex": "^2.0.0" "ansi-regex": "^2.0.0"
} }
...@@ -7435,14 +7495,12 @@ ...@@ -7435,14 +7495,12 @@
"which-module": { "which-module": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
"integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8="
"dev": true
}, },
"yargs": { "yargs": {
"version": "7.1.0", "version": "7.1.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
"integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
"dev": true,
"requires": { "requires": {
"camelcase": "^3.0.0", "camelcase": "^3.0.0",
"cliui": "^3.2.0", "cliui": "^3.2.0",
...@@ -7463,7 +7521,6 @@ ...@@ -7463,7 +7521,6 @@
"version": "5.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
"integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
"dev": true,
"requires": { "requires": {
"camelcase": "^3.0.0" "camelcase": "^3.0.0"
} }
...@@ -7517,7 +7574,6 @@ ...@@ -7517,7 +7574,6 @@
"version": "0.2.3", "version": "0.2.3",
"resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
"integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
"dev": true,
"requires": { "requires": {
"js-base64": "^2.1.8", "js-base64": "^2.1.8",
"source-map": "^0.4.2" "source-map": "^0.4.2"
...@@ -7527,7 +7583,6 @@ ...@@ -7527,7 +7583,6 @@
"version": "0.4.4", "version": "0.4.4",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
"integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
"dev": true,
"requires": { "requires": {
"amdefine": ">=0.0.4" "amdefine": ">=0.0.4"
} }
...@@ -7537,8 +7592,7 @@ ...@@ -7537,8 +7592,7 @@
"semver": { "semver": {
"version": "5.6.0", "version": "5.6.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
"integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg=="
"dev": true
}, },
"send": { "send": {
"version": "0.16.2", "version": "0.16.2",
...@@ -7891,6 +7945,11 @@ ...@@ -7891,6 +7945,11 @@
"is-plain-obj": "^1.0.0" "is-plain-obj": "^1.0.0"
} }
}, },
"sortablejs": {
"version": "1.10.0-rc3",
"resolved": "http://192.168.110.93:4873/sortablejs/-/sortablejs-1.10.0-rc3.tgz",
"integrity": "sha1-L+Y0Y6OLXNEuyRT8PgNYMEhJb0I="
},
"source-list-map": { "source-list-map": {
"version": "0.1.8", "version": "0.1.8",
"resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz",
...@@ -7935,7 +7994,6 @@ ...@@ -7935,7 +7994,6 @@
"version": "3.0.2", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz",
"integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==",
"dev": true,
"requires": { "requires": {
"spdx-expression-parse": "^3.0.0", "spdx-expression-parse": "^3.0.0",
"spdx-license-ids": "^3.0.0" "spdx-license-ids": "^3.0.0"
...@@ -7944,14 +8002,12 @@ ...@@ -7944,14 +8002,12 @@
"spdx-exceptions": { "spdx-exceptions": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
"integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA=="
"dev": true
}, },
"spdx-expression-parse": { "spdx-expression-parse": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
"integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
"dev": true,
"requires": { "requires": {
"spdx-exceptions": "^2.1.0", "spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0" "spdx-license-ids": "^3.0.0"
...@@ -7960,8 +8016,7 @@ ...@@ -7960,8 +8016,7 @@
"spdx-license-ids": { "spdx-license-ids": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz",
"integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==", "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w=="
"dev": true
}, },
"split-string": { "split-string": {
"version": "3.1.0", "version": "3.1.0",
...@@ -7982,7 +8037,6 @@ ...@@ -7982,7 +8037,6 @@
"version": "1.15.1", "version": "1.15.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.1.tgz", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.1.tgz",
"integrity": "sha512-mSdgNUaidk+dRU5MhYtN9zebdzF2iG0cNPWy8HG+W8y+fT1JnSkh0fzzpjOa0L7P8i1Rscz38t0h4gPcKz43xA==", "integrity": "sha512-mSdgNUaidk+dRU5MhYtN9zebdzF2iG0cNPWy8HG+W8y+fT1JnSkh0fzzpjOa0L7P8i1Rscz38t0h4gPcKz43xA==",
"dev": true,
"requires": { "requires": {
"asn1": "~0.2.3", "asn1": "~0.2.3",
"assert-plus": "^1.0.0", "assert-plus": "^1.0.0",
...@@ -7998,8 +8052,7 @@ ...@@ -7998,8 +8052,7 @@
"assert-plus": { "assert-plus": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
"dev": true
} }
} }
}, },
...@@ -8034,7 +8087,6 @@ ...@@ -8034,7 +8087,6 @@
"version": "1.4.1", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz",
"integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==",
"dev": true,
"requires": { "requires": {
"readable-stream": "^2.0.1" "readable-stream": "^2.0.1"
}, },
...@@ -8042,14 +8094,12 @@ ...@@ -8042,14 +8094,12 @@
"isarray": { "isarray": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
"dev": true
}, },
"readable-stream": { "readable-stream": {
"version": "2.3.6", "version": "2.3.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": { "requires": {
"core-util-is": "~1.0.0", "core-util-is": "~1.0.0",
"inherits": "~2.0.3", "inherits": "~2.0.3",
...@@ -8064,7 +8114,6 @@ ...@@ -8064,7 +8114,6 @@
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": { "requires": {
"safe-buffer": "~5.1.0" "safe-buffer": "~5.1.0"
} }
...@@ -8204,7 +8253,6 @@ ...@@ -8204,7 +8253,6 @@
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
"integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
"dev": true,
"requires": { "requires": {
"is-utf8": "^0.2.0" "is-utf8": "^0.2.0"
} }
...@@ -8218,7 +8266,6 @@ ...@@ -8218,7 +8266,6 @@
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
"integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
"dev": true,
"requires": { "requires": {
"get-stdin": "^4.0.1" "get-stdin": "^4.0.1"
} }
...@@ -8279,7 +8326,6 @@ ...@@ -8279,7 +8326,6 @@
"version": "2.2.1", "version": "2.2.1",
"resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
"integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
"dev": true,
"requires": { "requires": {
"block-stream": "*", "block-stream": "*",
"fstream": "^1.0.2", "fstream": "^1.0.2",
...@@ -8288,8 +8334,8 @@ ...@@ -8288,8 +8334,8 @@
}, },
"throttle-debounce": { "throttle-debounce": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "http://registry.npm.taobao.org/throttle-debounce/download/throttle-debounce-1.1.0.tgz", "resolved": "http://192.168.110.93:4873/throttle-debounce/-/throttle-debounce-1.1.0.tgz",
"integrity": "sha1-UYU9o3vmihVctugns1FKPEIuic0=" "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg=="
}, },
"time-stamp": { "time-stamp": {
"version": "2.2.0", "version": "2.2.0",
...@@ -8379,8 +8425,7 @@ ...@@ -8379,8 +8425,7 @@
"trim-newlines": { "trim-newlines": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
"integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM="
"dev": true
}, },
"trim-right": { "trim-right": {
"version": "1.0.1", "version": "1.0.1",
...@@ -8392,7 +8437,6 @@ ...@@ -8392,7 +8437,6 @@
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz",
"integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==",
"dev": true,
"requires": { "requires": {
"glob": "^7.1.2" "glob": "^7.1.2"
} }
...@@ -8407,7 +8451,6 @@ ...@@ -8407,7 +8451,6 @@
"version": "0.6.0", "version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"dev": true,
"requires": { "requires": {
"safe-buffer": "^5.0.1" "safe-buffer": "^5.0.1"
} }
...@@ -8415,8 +8458,7 @@ ...@@ -8415,8 +8458,7 @@
"tweetnacl": { "tweetnacl": {
"version": "0.14.5", "version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
"dev": true
}, },
"type-is": { "type-is": {
"version": "1.6.16", "version": "1.6.16",
...@@ -8644,8 +8686,7 @@ ...@@ -8644,8 +8686,7 @@
"util-deprecate": { "util-deprecate": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
"dev": true
}, },
"utila": { "utila": {
"version": "0.4.0", "version": "0.4.0",
...@@ -8662,14 +8703,12 @@ ...@@ -8662,14 +8703,12 @@
"uuid": { "uuid": {
"version": "3.3.2", "version": "3.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
"dev": true
}, },
"validate-npm-package-license": { "validate-npm-package-license": {
"version": "3.0.4", "version": "3.0.4",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
"integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
"dev": true,
"requires": { "requires": {
"spdx-correct": "^3.0.0", "spdx-correct": "^3.0.0",
"spdx-expression-parse": "^3.0.0" "spdx-expression-parse": "^3.0.0"
...@@ -8691,7 +8730,6 @@ ...@@ -8691,7 +8730,6 @@
"version": "1.10.0", "version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"dev": true,
"requires": { "requires": {
"assert-plus": "^1.0.0", "assert-plus": "^1.0.0",
"core-util-is": "1.0.2", "core-util-is": "1.0.2",
...@@ -8701,8 +8739,7 @@ ...@@ -8701,8 +8739,7 @@
"assert-plus": { "assert-plus": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
"dev": true
} }
} }
}, },
...@@ -8726,6 +8763,11 @@ ...@@ -8726,6 +8763,11 @@
"integrity": "sha512-AA86yKZ5uOKz87/q1UpngEXhbRkaYg1b7HMMVRobNV1IVKqZe8oLIzo6iMocVwZXnYitlGwf2k4ZRLOZlS8oPQ==", "integrity": "sha512-AA86yKZ5uOKz87/q1UpngEXhbRkaYg1b7HMMVRobNV1IVKqZe8oLIzo6iMocVwZXnYitlGwf2k4ZRLOZlS8oPQ==",
"dev": true "dev": true
}, },
"vue-infinite-scroll": {
"version": "2.0.2",
"resolved": "http://192.168.110.93:4873/vue-infinite-scroll/-/vue-infinite-scroll-2.0.2.tgz",
"integrity": "sha1-yjepH+ku4K07dKz4aCwAkXFEtxE="
},
"vue-lazyload": { "vue-lazyload": {
"version": "1.2.6", "version": "1.2.6",
"resolved": "https://registry.npmjs.org/vue-lazyload/-/vue-lazyload-1.2.6.tgz", "resolved": "https://registry.npmjs.org/vue-lazyload/-/vue-lazyload-1.2.6.tgz",
...@@ -9079,7 +9121,7 @@ ...@@ -9079,7 +9121,7 @@
}, },
"webpack-sources": { "webpack-sources": {
"version": "0.1.5", "version": "0.1.5",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.1.5.tgz", "resolved": "http://192.168.110.93:4873/webpack-sources/-/webpack-sources-0.1.5.tgz",
"integrity": "sha1-qh86vw8NdNtxEcQOUAuE+WZkB1A=", "integrity": "sha1-qh86vw8NdNtxEcQOUAuE+WZkB1A=",
"dev": true, "dev": true,
"requires": { "requires": {
...@@ -9126,11 +9168,15 @@ ...@@ -9126,11 +9168,15 @@
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
"integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
"dev": true,
"requires": { "requires": {
"string-width": "^1.0.2 || 2" "string-width": "^1.0.2 || 2"
} }
}, },
"window-or-global": {
"version": "1.0.1",
"resolved": "http://192.168.110.93:4873/window-or-global/-/window-or-global-1.0.1.tgz",
"integrity": "sha1-2+RboqKRqrxW1iz2bEW3+jIpRt4="
},
"window-size": { "window-size": {
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
...@@ -9188,8 +9234,7 @@ ...@@ -9188,8 +9234,7 @@
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
"dev": true
}, },
"xtend": { "xtend": {
"version": "4.0.1", "version": "4.0.1",
......
...@@ -20,13 +20,17 @@ ...@@ -20,13 +20,17 @@
"axios": "0.16.2", "axios": "0.16.2",
"better-scroll": "^0.1.15", "better-scroll": "^0.1.15",
"echarts": "^4.2.0-rc.2", "echarts": "^4.2.0-rc.2",
"element-ui": "^2.6.1", "element-ui": "^2.10.0",
"fastclick": "^1.0.6", "fastclick": "^1.0.6",
"iscroll": "^5.2.0", "iscroll": "^5.2.0",
"js-cookie": "^2.2.0", "js-cookie": "^2.2.0",
"js-md5": "^0.7.3", "js-md5": "^0.7.3",
"node-sass": "^4.9.2",
"qrcode": "^1.3.3",
"showdown": "^1.6.4", "showdown": "^1.6.4",
"sortablejs": "^1.10.0-rc3",
"vue": "^2.1.0", "vue": "^2.1.0",
"vue-infinite-scroll": "^2.0.2",
"vue-router": "^2.1.1", "vue-router": "^2.1.1",
"vuex": "^2.0.0" "vuex": "^2.0.0"
}, },
...@@ -56,7 +60,6 @@ ...@@ -56,7 +60,6 @@
"less-loader": "^2.2.3", "less-loader": "^2.2.3",
"lodash": "^4.17.11", "lodash": "^4.17.11",
"node-gyp": "^3.4.0", "node-gyp": "^3.4.0",
"node-sass": "^4.9.2",
"opn": "^4.0.2", "opn": "^4.0.2",
"ora": "^0.3.0", "ora": "^0.3.0",
"sass": "^0.5.0", "sass": "^0.5.0",
......
<template> <template>
<div v-if="$route.name!='loginPage'"> <div v-if="$route.name!='loginPage'">
<v-header :userName="userName" :portrait="portrait" :idType="idType"></v-header> <v-header :userName="userName" :portrait="portrait" :idType="idType"></v-header>
<v-slidebar :authList="authList" :tokenValue="token" :storageIdType="storageIdType"></v-slidebar> <v-slidebar :authList="authList" :tokenValue="token" :storageIdType="storageIdType" :notCompleteCount="redNum"></v-slidebar>
<el-container> <el-container>
<div class="content" id="body-content"> <div class="content" id="body-content">
<transition name="router-fade" mode="out-in"> <transition name="router-fade" mode="out-in">
...@@ -30,6 +30,7 @@ import VFooter from './views/layout/footer.vue' ...@@ -30,6 +30,7 @@ import VFooter from './views/layout/footer.vue'
import { base64decode, isNotEmptyUtils, getUrlParamsMap } from "./utils/utils.js" import { base64decode, isNotEmptyUtils, getUrlParamsMap } from "./utils/utils.js"
import { mapActions, mapGetters } from 'vuex' import { mapActions, mapGetters } from 'vuex'
import { getLoginUrl } from './utils/index.js' import { getLoginUrl } from './utils/index.js'
import { getRedNum } from './utils/patients/patientsapi'
let vm = null let vm = null
export default { export default {
components:{ components:{
...@@ -44,7 +45,8 @@ export default { ...@@ -44,7 +45,8 @@ export default {
token: '', token: '',
userName: '', userName: '',
portrait: '', portrait: '',
authList: {} authList: {},
redNum: 0,
} }
}, },
computed:{ computed:{
...@@ -59,6 +61,7 @@ export default { ...@@ -59,6 +61,7 @@ export default {
} }
}, },
mounted() { mounted() {
vm.getRedData()
function checkIE(){ function checkIE(){
return '-ms-scroll-limit' in document.documentElement.style && '-ms-ime-align' in document.documentElement.style return '-ms-scroll-limit' in document.documentElement.style && '-ms-ime-align' in document.documentElement.style
} }
...@@ -84,7 +87,13 @@ export default { ...@@ -84,7 +87,13 @@ export default {
if (isNotEmptyUtils(paramMap["token"])) { if (isNotEmptyUtils(paramMap["token"])) {
vm.token = paramMap["token"] vm.token = paramMap["token"]
localStorage.setItem('storageToken', vm.token) localStorage.setItem('storageToken', vm.token)
vm.$router.push({ path: 'home' }) vm.$router.push({ path: 'home' })
// if(href.indexOf("mypatients-manage/patients-list") > -1) {
// // vm.$router.push({ path: 'patients-manage/mypatients-manage/patients-list' })
// vm.$router.push({ path: 'patients-list' })
// }else {
// vm.$router.push({ path: 'home' })
// }
} else { } else {
if(!localStorage.getItem('storageToken')) { if(!localStorage.getItem('storageToken')) {
console.log('域名',window.location.host) console.log('域名',window.location.host)
...@@ -141,7 +150,18 @@ export default { ...@@ -141,7 +150,18 @@ export default {
vm.$message.info(res.message) vm.$message.info(res.message)
} }
}) })
} },
getRedData() {
getRedNum({
openTime: (new Date()).getTime()
}).then((data) => {
if(data.code == '000000') {
vm.redNum = data.data
}
}).catch(error => {
vm.$message.error(error)
})
}
}, },
watch: { watch: {
_token(val) { _token(val) {
...@@ -149,6 +169,14 @@ export default { ...@@ -149,6 +169,14 @@ export default {
vm.getUserAuth(val) vm.getUserAuth(val)
} }
}, },
$route:{
deep:true,
handler:function(newVal){
if(vm.$route.path == '/patients-manage/not-complete/uncompleted-list'){ //避免重复请求
vm.redNum = 0
}
}
}
} }
} }
</script> </script>
...@@ -181,4 +209,13 @@ export default { ...@@ -181,4 +209,13 @@ export default {
.login-div { .login-div {
height: 100%; height: 100%;
} }
.check-auth{
width: 480px!important;
height: 240px;
padding: 20px 50px;
.el-message-box__content{
padding:20px 0;
margin-bottom: 10px;
}
}
</style> </style>
...@@ -3,7 +3,8 @@ ...@@ -3,7 +3,8 @@
<el-breadcrumb separator="/"> <el-breadcrumb separator="/">
<el-breadcrumb-item>{{curmbFirst}}</el-breadcrumb-item> <el-breadcrumb-item>{{curmbFirst}}</el-breadcrumb-item>
<el-breadcrumb-item v-if="curmbSecond" :to="{ path: jumPathThird }">{{curmbSecond}}</el-breadcrumb-item> <el-breadcrumb-item v-if="curmbSecond" :to="{ path: jumPathThird }">{{curmbSecond}}</el-breadcrumb-item>
<el-breadcrumb-item v-if="curmbThird">{{curmbThird}}</el-breadcrumb-item> <el-breadcrumb-item v-if="curmbThird" :to="{ path: jumPathFouth }">{{curmbThird}}</el-breadcrumb-item>
<el-breadcrumb-item v-if="curmbFouth">{{curmbFouth}}</el-breadcrumb-item>
</el-breadcrumb> </el-breadcrumb>
</div> </div>
</template> </template>
...@@ -19,8 +20,14 @@ export default { ...@@ -19,8 +20,14 @@ export default {
curmbThird: { curmbThird: {
type: String type: String
}, },
curmbFouth: {
type: String
},
jumPathThird: { jumPathThird: {
type: String type: String
},
jumPathFouth: {
type: String
} }
} }
} }
......
<template>
<div class="add-diagnose-wrap">
<div class="fixed-wrap" v-show="showDiagnoseModal">
<div class="fullscreen-bg"></div>
<div class="add-diagnose-modal" >
<span class="close-btn el-icon-close" @click="hideSelf"></span>
<p class="title-text">添加诊断</p>
<div class="search-input">
<el-input v-model="searchInput" placeholder="搜索诊断" class="search-disease" @input="handleInputSearch" @blur="handleSearchListBlur"></el-input>
</div>
<div class="main-content">
<div class="left-box left">
<!-- 搜索列表 有搜索结果时-->
<div
v-if="searchList && searchList.length > 0"
class="search-list-wrap"
v-infinite-scroll="loadMore"
:infinite-scroll-disabled="busy"
infinite-scroll-distance="5"
infinite-scroll-immediate-check="false"
>
<ul class="search-list">
<li v-for="(searchLi, index) in searchList" @mousedown="handleSearchLiClick(searchLi)">
<div class="left">
<p class="disease-name" v-html="searchLi.diseaseName"></p>
<div class="one-line">
<p class="alias" v-html="searchLi.alias"></p>
<p class="sign" v-if="searchLi.alias">|</p>
<p class="code">{{searchLi.icdCode}}</p>
</div>
</div>
<div class="right" v-if="isSearchLiSelected(searchLi)"><i class="el-icon-check"></i></div>
</li>
<p v-if="busy" class="loading">加载中...</p>
<p v-if="noMore" class="loading">没有更多了...</p>
</ul>
</div>
<!-- 常用诊断 -->
<div v-if="!(searchList && searchList.length > 0)" class="common-diagnose">
<p class="title">常用诊断<span class='no-result' v-if="hasNoResult">没有找到相关搜索结果</span></p>
<ul class="list">
<li
v-for="item in commonList"
:class="returnEachCommonLiClass(item)"
@click="handleEachCommonLiClick(item)"
>
{{item.diseaseName}}
</li>
</ul>
</div>
</div>
<!-- 已选 -->
<div class="choosed-list-wrap left">
<div class="title">已选 {{choosedList.length}}/20</div>
<div class="choosed-list">
<el-tag
v-for="(tag, index) in choosedList"
closable
:disable-transitions="false"
@close="handleClose(tag)">
<div class="text" v-html="tag.alias ? tag.alias : tag.diseaseName"></div>
</el-tag>
</div>
</div>
</div>
<div class="dialog-footer">
<el-button @click="hideSelf">取 消</el-button>
<el-button type="primary" @click="handleConfirm">确 定</el-button>
</div>
</div>
</div>
<!-- 已选数量不能超过20个 提示 -->
<div class="tips-wrap" @mousedown.prevent="preventDefault">
<el-dialog
title="提示"
:close-on-click-modal="false"
:visible.sync="limitTipsVisible"
width="400px"
center>
<span>最多只能选择20种诊断</span>
<span slot="footer" class="dialog-footer">
<!-- <el-button type="primary" >我知道了</el-button> -->
<div class="know-confirm" @mousedown.prevent="hideNumLimitTips" >我知道了</div>
</span>
</el-dialog>
</div>
</div>
</template>
<script>
import {
getCommonDiagnoseList,
goToSearch,
} from '@/utils/patients/patientsapi';
export default {
data() {
return {
showDiagnoseModal: false,
limitTipsVisible: false,
searchInput: '',
searchList: [],
commonList: [],
choosedList: [],
hasNoResult: false,
page: 1,
pageSize: 30,
busy: false,
noMore: false,
totalPageNum: 0,
isInputResponse: false,
searchFlagTimer: null,
}
},
computed: {
},
created() {
let that = this;
getCommonDiagnoseList().then(res => {
// console.log('>>>>>>*********** res: ', res)
if(res.code == '000000'){
that.commonList = res.data;
}else{
that.$message({
message: (data && data.message) || '接口出错',
type: 'warning'
});
}
})
},
mounted() {
// console.log('>>>>>>>>>>>>>>>>>>>>>>>> ', this.showDiagnoseModal)
},
watch: {
showDiagnoseModal(val) {
}
},
methods: {
showSelf(params) {
this.showDiagnoseModal = true;
let list = JSON.parse(JSON.stringify(this.$store.state.patientsDiagnose.selectedDiagList));
this.choosedList = list;
},
hideSelf() {
this.showDiagnoseModal = false;
this.choosedList = [];
this.searchList = [];
this.searchInput = ''
},
preventDefault() {
// console.log('prevent>>>>>>>>>>>>>>>>>>>')
},
hideNumLimitTips() {
this.limitTipsVisible = false;
},
isSearchLiSelected(item) {
return this.hasItem(this.choosedList, item) > -1 ? true : false;
},
handleSearchLiClick(item) {
this.searchInput = '';
let hasIndex = this.hasItem(this.choosedList, item);
if( hasIndex > -1 ){
this.choosedList.splice(hasIndex, 1);
}else{
// 已选20个后,不能再添加,出Tips
if( this.choosedList && this.choosedList.length == 20 ){
this.limitTipsVisible = true;
return;
}
this.choosedList.push(item);
}
},
handleSearchListBlur() {
this.searchList = [];
clearTimeout(this.searchFlagTimer);
// console.log('blur.....')
},
handleSearchWrapScroll() {
// console.log('ddxx88888888888')
// let that = this;
// // console.log('val: ', val)
// // 搜索时
// that.$nextTick(function(){
// let searchListWrap = document.querySelector('.search-list-wrap');
// console.log('>>> ', searchListWrap)
// if( searchListWrap ){
// // searchListWrap.onscroll = function(){
// let contentH = document.querySelector('.search-list').offsetHeight;
// let viewH = 290;
// let scrollTop = searchListWrap.scrollTop;
// if( that.canScroll && (contentH - viewH - scrollTop <= 50) ){
// console.log('到达临界点,开始加载下一页');
// that.canScroll = false;
// that.loadMoreSearchData();
// }
// // }
// }
// })
},
// 搜索框中输入文字 时 page=1 pageSize=30
handleInputSearch() {
// debugger;
clearTimeout(this.searchFlagTimer);
let that = this;
that.page = 1;
that.isInputResponse = false;
if( that.searchInput == ''){
that.searchList = [];
return;
}
that.searchList = [];
let params = {
diseaseName: that.searchInput,
page: 1,
pageSize: 30,
};
this.searchFlagTimer = setTimeout(() => {
goToSearch(params).then(res => {
// console.log('>>>>>>*********** search: ', res)
if(res.code == '000000'){
that.isInputResponse = true;
that.totalPageNum = Math.ceil(res.data.total/that.pageSize); // 总页数
let list = res.data.icdContentsList || [];
if(list.length > 0){
if(that.searchInput == ''){
that.searchList = [];
return;
}
that.searchList = list;
that.hasNoResult = false;
}else{
that.searchList = [];
that.hasNoResult = true;
}
}else{
that.isInputResponse = false;
that.searchList = [];
that.$message({
message: data.message,
type: 'warning'
});
}
})
}, 300)
},
// 上拉加载更多
loadMore() {
// debugger;
// console.log('loadmore...')
let that = this;
if( !that.isInputResponse ){
return;
}
if( !(that.searchList && that.searchList.length > 0) ){
return;
}
that.busy = true;
that.page += 1;
// console.log('请求第几页数据: ', that.page)
if(that.page > that.totalPageNum){
// console.log('没有更多了。。。。。');
that.busy = false;
that.noMore = true;
return;
}else{
that.noMore = false;
}
let params = {
diseaseName: that.searchInput,
page: that.page,
pageSize: that.pageSize,
}
setTimeout(()=>{
goToSearch(params).then(res => {
// console.log('>>>>>>*********** search: ', res)
// request ...加载完成后,可以继续滚动加载\
that.busy = false;
if(res.code == '000000'){
let list = res.data.icdContentsList || [];
if(list.length > 0){
that.searchList = that.searchList.concat(list);
}
}else{
that.$message({
message: data.message,
type: 'warning'
});
}
})
}, 500)
},
handleInputSearchBlur(){
this.searchList = [];
},
handleConfirm() {
let list = JSON.parse(JSON.stringify(this.choosedList));
this.$store.dispatch('patientsDiagnose/changeDiagnoseList', list)
this.showDiagnoseModal = false;
this.searchInput = '';
this.searchList = [];
},
handleClose(tag) {
this.choosedList.splice(this.hasItem(this.choosedList, tag), 1);
},
returnEachCommonLiClass(item) {
let hasIndex = this.hasItem(this.choosedList, item);
if( hasIndex > -1 ){
return 'active';
}else{
return '';
}
},
handleEachCommonLiClick(item) {
// console.log('ddd', item);
let hasIndex = this.hasItem(this.choosedList, item);
if( hasIndex > -1 ){
this.choosedList.splice(hasIndex, 1);
}else{
// 已选20个后,不能再添加,出Tips
if( this.choosedList && this.choosedList.length == 20 ){
this.limitTipsVisible = true;
return;
}
this.choosedList.push(item);
}
},
hasItem(list, item) {
for(let i=0; i<list.length; i++){
if( list[i].icdCode == item.icdCode ){
return i;
}
}
return -1;
},
},
}
</script>
<style lang="less">
.scroll-bar{
/*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/
&::-webkit-scrollbar
{
width: 5px;
height: 5px;
background-color: #fff;
}
/*定义滚动条轨道 内阴影+圆角*/
&::-webkit-scrollbar-track
{
// border-radius: 10px;
// background-color: rgb(241, 239, 239);
// background: #fff;
}
/*定义滑块 内阴影+圆角*/
&::-webkit-scrollbar-thumb
{
border-radius: 10px;
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);
background-color: #bbb;
}
}
.add-diagnose-wrap{
.fixed-wrap{
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
overflow: auto;
z-index: 1000;
.fullscreen-bg{
position: absolute;
width: 100%; height: 100%;
background: black; opacity: 0.3;
}
.add-diagnose-modal{
position: relative;
border-radius: 4px;
width: 910px; padding: 0 30px 0;
position: fixed;
left: 50%; margin-left: -455px;
top: 60px;
background: #fff;
.close-btn{
position: absolute; right: 20px; top: 20px;
cursor: pointer;
&:hover{
color: #409eff;
}
}
.title-text{
text-align: center;
line-height: 60px;
}
.search-disease{
width: 370px;
}
.main-content{
overflow: hidden;
.left{
float: left;
}
.left-box{
width: 370px;
height: 300px;
.common-diagnose{
width: 100%; height: 300px;
.title{
color: #303133;
font-size: 16px;
line-height: 40px;
margin-top: 10px;
.no-result{
font-size: 14px;
color: #e6a23c;
margin-left: 28px;
}
}
.list{
width: 100%; height: 250px;
overflow: hidden;
overflow-y: scroll;
.scroll-bar;
padding: 10px;
border: 1px solid #DCDFE6;
li{
height: 35px; line-height: 35px; padding: 0 15px;
background: #fff;
border: 1px solid #dcdfe6;
color: #606266;
cursor: pointer;
font-size: 12px;
&.active{
color: #fff;
background: #409eff;
border-color: #409eff;
}
display: inline-block;
margin: 0 10px 10px 0;
border-radius: 4px;
max-width: 350px;
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
}
}
.search-list-wrap{
width: 100%; height: 290px; margin-top: 10px;
border: 1px solid #DCDFE6;
overflow: hidden;
overflow-y: scroll;
.scroll-bar;
.search-list{
border-radius: 4px;
width: 100%;
padding: 10px;
li{
position: relative;
line-height: 30px;
overflow: hidden;
cursor: pointer;
font-size: 12px;
&:hover{
background: #eee;
}
.left{
width: 310px;
float: left;
span{
color: #ff8429;
}
.disease-name{
font-size: 14px;
}
.one-line{
width: 100%; overflow: hidden;
font-size: 12px; color: #aaa;
.alias{
float: left;
}
.sign{
float: left;
margin: 0 5px;
}
.code{
float: left;
}
}
}
.right{
position: absolute;
right: 0;
top: 50%;
margin-top: -13px;
// width: 0px;
// float: left;
display: inline-block;
vertical-align: middle;
i{
font-size: 24px;
color: #449284;
font-weight: 700;
}
}
.code{
line-height: 30px;
}
}
.loading{
color: #ccc;
text-align: center;
margin: 0;
font-size: 12px;
margin-top: 5px;
}
}
}
}
.choosed-list-wrap{
width: 450px;
height: 300px;
margin-left: 30px;
.title{
color: #303133;
font-size: 16px;
line-height: 40px;
margin-top: 10px;
}
.choosed-list{
overflow: hidden;
overflow-y: scroll;
width: 450px;
height: 250px;
padding: 10px;
border: 1px solid #DCDFE6;
.scroll-bar;
.el-tag {
margin: 0 10px 10px 0;;
.text{
display: inline-block;
max-width: 342px;
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.el-tag__close{
top: -12px;
}
}
}
}
}
}
.dialog-footer{
text-align: center;
margin: 20px auto;
}
}
.tips-wrap {
.know-confirm{
width: 98px;
height: 40px;
background: #449284;
border-radius: 4px;
text-align: center;
line-height: 40px;
color: #FFF;
margin: 0 auto;
font-size: 14px;
cursor: pointer;
}
}
}
</style>
<template>
<div class="opinion-container">
<el-dialog title="意见反馈" :center="true" :visible.sync="dialogFormVisible" :before-close="beforeClose" :close-on-click-modal="false">
<el-form :model="form" :rules="rules" ref="opinionForm" >
<el-form-item label="意见反馈:" :label-width="formLabelWidth" prop="opinion">
<el-input type="textarea" :rows="5" :maxlength="maxlength" v-model="form.opinion" autocomplete="off" placeholder="请告诉我们您遇到的问题或者建议"></el-input>
<span class="text-count">{{currentCount}}/{{maxlength}}</span>
</el-form-item>
<el-form-item label="上传图片:" :label-width="formLabelWidth" prop="imgs">
<el-upload
class="upload-demo"
:action="action"
:headers="headers"
multiple
list-type="picture"
:limit="imgLimit"
:accept="'image/jpg,image/jpeg,image/png,image/bmp'"
:data="imgFile"
:before-upload="getImgParam"
:on-remove="handleRemove"
:on-success="handleSuccess"
:on-error="handleError"
:on-exceed="handleExceed"
:file-list="fileList">
<!--:disabled="addImageDisabled"-->
<!--<el-button size="small" type="primary" @click="addImage" :disabled="addImageDisabled">添加图片</el-button>-->
<el-button size="small" type="primary" v-if="!addImageDisabled" @click="addImage">添加图片</el-button>
<div slot="tip" class="el-upload__tip">最多5张,每张小于5M,支持jpg,png,bmp</div>
</el-upload>
</el-form-item>
<el-form-item label="联系方式:" :label-width="formLabelWidth" prop="contact">
<el-input v-model="form.contact" maxlength="50" autocomplete="off" placeholder="请输入您的联系方式,如有需要我们会尽快联系您" class="contact-info"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="beforeClose">取 消</el-button>
<el-button type="primary" @click="submitFrom('opinionForm')">提 交</el-button>
</div>
<div slot="footer" class="dialog-footer bottom-msg">
<div class="disblock">
<h1>客服电话:400-920-8877 工作日:9:00~18:00</h1>
</div>
<div class="disblock">
<img src="https://file.yunqueyi.com/File/static/qrcode_for_yunqueyi.jpg" alt="">
<div class="ewm-wrap">
<h1>您可以在「云鹊医」公众号里直接留言</h1>
<h1>扫一扫二维码关注云鹊医公众号</h1>
</div>
</div>
</div>
</el-dialog>
<el-dialog
width="60%"
title=""
:center="true"
:visible.sync="innerVisible"
:before-close="beforeCloseInner"
:custom-class="'result-opinion'"
append-to-body>
<div class="result-msg">
<i class="el-icon-success"></i>
<span>提交成功</span>
</div>
<div class="msg-wrap">
<h1>感谢您的反馈,我们会在<span>1个工作日</span>内答复您的问题</h1>
<h1>请耐心等待</h1>
</div>
<div class="btn-wrap">
<el-button type="primary" class="button" @click="beforeCloseInner">我知道了</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import fetch from '@/utils/fetch'
import { envConfig } from '@/utils/env-config'
import { uploadImg } from '@/utils/index'
import { getQiniuToken, submitFeedback } from '@/utils/patients/patientsapi'
export default {
data(){
return{
maxlength: 1000,
form: {
opinion: '',
imgs: '',
contact: '',
},
innerVisible: false,
dialogFormVisible: true,
formLabelWidth: '100px',
rules: {
opinion: [
{ required: true, message: '请输入意见反馈', trigger: 'blur' }
]
},
imgDomin: '',
addImageDisabled: false,
imgLimit: 5,// 最多允许上传的图片个数
action: 'https://upload.qiniup.com/',
token: '',
headers: {
token: ''
},
imgToken: null,//qiniu上传token
imgFile: {},
fileList: [],
urlString: ''
}
},
created(){
// this.token = 'C712F412E096492B84E2B1D636565626';
this.token = localStorage.getItem('storageToken');
this.headers.token = this.token
},
computed: {
currentCount(){
return this.form.opinion.length
}
},
methods: {
// 获取七牛token
addImage(){
if(this.fileList.length>=this.imgLimit){
this.$message.warning(`最多上传${this.imgLimit}张图片`);
return;
}
getQiniuToken().then((res) => {
if(res.code=='000000'){
this.imgToken = res.data.token;
}else{
this.$message.error(res.message);
}
})
},
beforeClose(e){
this.$emit('closeDialog',false)
},
beforeCloseInner(e){
this.$emit('closeDialog',false)
},
submitFrom(formName){
this.$refs[formName].validate((valid) => {
if (valid) {
this.urlString = '';
this.fileList.forEach((item)=>{
// this.urlString += `${this.imgDomin}/${item.response.key};`
this.urlString += `${item.response.key};`
})
const data = {
input_text: this.form.opinion,
system_type: 'workStation',
token: this.token,
contact_information: this.form.contact,
url: this.urlString,
};
submitFeedback(data).then(res=>{
this.dialogFormVisible = false;
this.innerVisible = true;
})
} else {
return false;
}
});
},
getImgParam(file) {
let isAllowed = /^image\/(jpg|jpeg|png|bmp)$/.test(file.type);
if( !isAllowed ){
this.$message.error('仅支持jpg、png、bmp格式图片文件');
return false;
}
const isLt2M = (file.size / 1024 / 1024) < 5;
if (!isLt2M) {
this.$message.error('上传图片大小不能超过 5MB!');
return false;
}
const date = new Date();
const year = date.getFullYear();
const month = date.getMonth() + 1;
// const day = date.getDate();
// const hour = date.getHours();
// const minute = date.getMinutes();
// const second = date.getSeconds();
// this.imgFile.imageType = this.imageType;
this.imgFile.file = file;
this.imgFile.name = file.name;
this.imgFile.key = `qiniu/image/feedback/${year}/${month}/${file.name}`;
this.imgFile.token = this.imgToken;
},
handleRemove(file, fileList){
this.fileList = fileList
this.addImageDisabled = false;
},
handleSuccess(response, file, fileList){
const imgDomin = uploadImg();
this.imgDomin = imgDomin;
// this.urlString += `${imgDomin}/${response.key};`
// this.fileList.forEach((item)=>{
// this.urlString += `${imgDomin}/${response.key};`
// })
this.fileList = fileList;
this.$message.success(`上传成功!`);
if(fileList.length>=this.imgLimit){
this.addImageDisabled = true;
}
},
handleError(err, file, fileList){
this.$message.error(JSON.stringify(err) + '| 如果出现这个错误信息,说明图片上传失败,请检查代码,如果没有问题,请查看服务器是否有问题!并且删除这段代码提示,只保留前面错误信息提示即可!');
},
// 超出限制时
handleExceed(files, fileList){
if(fileList.length>=this.imgLimit){
this.$message.warning(`最多上传${this.imgLimit}张图片`);
}
},
}
}
</script>
<style lang="scss">
.opinion-container{
.text-count{
position: absolute;
right: 5px;
bottom: 3px;
line-height: 28px;
}
.el-form-item__label{
text-align: center;
}
.el-upload__tip{
display: inline;
margin-left: 10px;
}
.el-upload-list--picture .el-upload-list__item-thumbnail{
margin-left: -75px;
}
.el-upload-list__item{
width: 92px;
height: 102px !important;
padding-top: 15px !important;
display: inline-block;
margin-right: 5px;
.el-upload-list__item-name{
display: none;
}
.el-icon-close-tip{
display: none;
}
&.is-success:focus:not(:hover) .el-icon-close-tip {
display: none;
}
}
.el-upload-list--picture .el-upload-list__item-status-label{
background: #449284;
}
.el-upload-list--picture .el-progress{
top: 7px;
}
.el-dialog--center .el-dialog__body{
padding: 25px 25px 0;
}
.el-dialog__footer{
padding: 0;
}
.bottom-msg{
margin-top: 30px;
padding: 20px 0;
background: #efefef;
.disblock{
width: 48%;
display: inline-block;
vertical-align: middle;
img,div{
display: inline-block;
vertical-align: middle;
}
h1{
color: #000;
font-size: 14px;
line-height: 28px;
}
img{
width: 80px;
height: 80px;
}
.ewm-wrap{
h1{
text-align: left;
}
}
}
}
}
.contact-info{
width: 100% !important;
}
.result-opinion{
border-radius: 8px!important;
text-align: center;
.result-msg{
text-align: center;
color: #449284;
span{
color: #000;
margin-left: 5px;
font-size: 20px;
}
}
.msg-wrap{
margin: 10px 0;
text-align: center;
h1{
font-size: 18px;
}
span{
color: #449284;
}
}
.btn-wrap{
text-align: center;
padding: 10px 5px;
}
}
</style>
...@@ -8,9 +8,11 @@ import FastClick from 'fastclick' ...@@ -8,9 +8,11 @@ import FastClick from 'fastclick'
import vueFilters from '@/utils/filter' import vueFilters from '@/utils/filter'
// 引入ElementUI // 引入ElementUI
import ElementUI from 'element-ui' import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css'; import 'element-ui/lib/theme-chalk/index.css';
//引入滚动加载分页
import infiniteScroll from 'vue-infinite-scroll'
Vue.use(infiniteScroll)
// 可调试 // 可调试
// Vue.config.devtools = true; // Vue.config.devtools = true;
// Vue.use(Logger, { prefix: new Date(), isDev: process.env.NODE_ENV === 'development', cLevel: 'debug' }) // Vue.use(Logger, { prefix: new Date(), isDev: process.env.NODE_ENV === 'development', cLevel: 'debug' })
...@@ -45,6 +47,22 @@ const router = new VueRouter({ ...@@ -45,6 +47,22 @@ const router = new VueRouter({
} }
}) })
import utils from '@/utils/followup/followupUtils';
router.beforeEach((to, from, next) => {
if(to.meta.checkAuth){
utils.checkAuthFunc().then(res=>{
if(res==3){
next()
}else{
next(false)
return
}
})
return
}
next()
});
// 加入混合 // 加入混合
Vue.mixin({ Vue.mixin({
...mixins ...mixins
......
...@@ -88,6 +88,7 @@ const followRouters = { ...@@ -88,6 +88,7 @@ const followRouters = {
], ],
meta: { meta: {
title: '计划管理', title: '计划管理',
checkAuth: true
}, },
}, },
{ {
...@@ -108,6 +109,7 @@ const followRouters = { ...@@ -108,6 +109,7 @@ const followRouters = {
], ],
meta: { meta: {
title: '预约管理', title: '预约管理',
checkAuth: true
}, },
}, },
{ {
...@@ -137,6 +139,7 @@ const followRouters = { ...@@ -137,6 +139,7 @@ const followRouters = {
], ],
meta: { meta: {
title: '录入管理', title: '录入管理',
checkAuth: true
}, },
}, },
......
const patientsManage = r => require.ensure([], () => r(require('../views/patients/layout.vue')), 'patientsManage');
/*我的居民*/
const myPatientsManage = r => require.ensure([], () => r(require('../views/patients/mypatients-manage/layout.vue')), 'myPatientsManage');
const patientsList = r => require.ensure([], () => r(require('../views/patients/mypatients-manage/patients-list.vue')), 'patientsList');
const patientDetail = r => require.ensure([], () => r(require('../views/patients/mypatients-manage/patient-detail.vue')), 'patientDetail');
const basicInfo = r => require.ensure([], () => r(require('../views/patients/mypatients-manage/basic-info.vue')), 'basicInfo');
/*新增居民*/
const newManage = r => require.ensure([], () => r(require('../views/patients/new-manage/layout.vue')), 'newManage');
const newPatient = r => require.ensure([], () => r(require('../views/patients/new-manage/new-patient.vue')), 'newPatient');
/*分组管理*/
const labelsManage = r => require.ensure([], () => r(require('../views/patients/labels-manage/layout.vue')), 'labelsManage');
const labelsList = r => require.ensure([], () => r(require('../views/patients/labels-manage/labels-list.vue')), 'labelsList');
const labelsDetail = r => require.ensure([], () => r(require('../views/patients/labels-manage/labels-detail.vue')), 'labelsDetail');
/*资料不全居民*/
const notCompleteManage = r => require.ensure([], () => r(require('../views/patients/not-complete/layout.vue')), 'halfDataManage');
const notCompleteList = r => require.ensure([], () => r(require('../views/patients/not-complete/not-complete-list.vue')), 'halfDataList');
const patientsRouters = {
path: '/patients-manage',
name: 'patientsManage',
component: patientsManage,
redirect: 'patients-manage/mypatients-manage/patients-list',
children: [
{
path: 'mypatients-manage',
component: myPatientsManage,
name: 'myPatientsManage',
redirect: 'mypatients-manage/patients-list',
children: [
{
path: 'patients-list',
component: patientsList,
name: 'patientsList',
meta: {
title: '我的居民列表',
keepAlive: false, //页面不需要缓存
checkAuth: true
},
},
{
path: 'patient-detail',
component: patientDetail,
name: 'patientDetail',
meta: {
title: '居民详情',
keepAlive: false
},
},
{
path: 'basic-info',
component: basicInfo,
name: 'basicInfo',
meta: {
title: '居民详情',
keepAlive: false
},
},
],
meta: {
title: '我的居民',
},
},
{
path: 'new-manage',
component: newManage,
name: 'newManage',
redirect: 'new-manage/new-patient',
children: [
{
path: 'new-patient',
component: newPatient,
name: 'newPatient',
meta: {
title: '新增居民',
keepAlive: false,
checkAuth: true
},
},
],
meta: {
title: '新增居民',
},
},
{
path: 'labels-manage',
component: labelsManage,
name: 'labelsManage',
redirect: 'labels-manage/labels-list',
children: [
{
path: 'labels-list',
component: labelsList,
name: 'labelsList',
meta: {
title: '分组管理',
keepAlive: false,
checkAuth: true
},
},
{
path: 'labels-detail',
component: labelsDetail,
name: 'labelsDetail',
meta: {
title: '分组详情',
keepAlive: false
},
},
],
meta: {
title: '分组管理',
},
},
{
path: 'not-complete',
component: notCompleteManage,
name: 'notCompleteManage',
redirect: 'not-complete/uncompleted-list',
children: [
{
path: 'uncompleted-list',
component: notCompleteList,
name: 'notCompleteList',
meta: {
title: '资料不全居民',
keepAlive: false,
checkAuth: true
},
},
],
meta: {
title: '资料不全居民',
},
},
],
};
export default patientsRouters
...@@ -10,9 +10,17 @@ const createComponent = r => require.ensure([], () => r(require('../views/educat ...@@ -10,9 +10,17 @@ const createComponent = r => require.ensure([], () => r(require('../views/educat
const roleManager = r => require.ensure([], () => r(require('../views/system/role.vue')),'role') const roleManager = r => require.ensure([], () => r(require('../views/system/role.vue')),'role')
const addManager = r => require.ensure([], () => r(require('../views/education/add-manager.vue')), 'add-manager') const addManager = r => require.ensure([], () => r(require('../views/education/add-manager.vue')), 'add-manager')
const itemRole = r => require.ensure([], () => r(require('../views/system/item-role.vue')), 'item-role') const itemRole = r => require.ensure([], () => r(require('../views/system/item-role.vue')), 'item-role')
const msgPush = r => require.ensure([], () => r(require('../views/msgpush/msg-push.vue')), 'msg-push')
import patientsRouters from './patients'
import followRouters from './follow' import followRouters from './follow'
const reportLis = r => require.ensure([], () => r(require('../views/learning/report-list.vue')), 'report-list')
const itemList = r => require.ensure([], () => r(require('../views/learning/item-list.vue')), 'item-list')
const nameList = r => require.ensure([], () => r(require('../views/learning/name-list.vue')), 'name-list')
const dataAlignment = r => require.ensure([], () => r(require('../views/learning/data-alignment.vue')), 'data-alignment')
const exportDownload = r => require.ensure([], () => r(require('../views/learning/export-download.vue')), 'export-download')
export default [{ export default [{
path: '/', path: '/',
component: App, component: App,
...@@ -52,7 +60,35 @@ export default [{ ...@@ -52,7 +60,35 @@ export default [{
},{ },{
path: '/item-role', path: '/item-role',
component: itemRole component: itemRole
},{
path: '/report-list',
component: reportLis
},{
path: '/item-list',
component: itemList
},{
path: '/data-alignment',
component: dataAlignment
},{
path: '/name-list',
component: nameList
},
{
path: '/export-download',
component: exportDownload
}, },
{
path: '/msg-push',
component: msgPush,
// redirect: 'msgpush/msg-push',
},
// {
// path: '/followup',
// name: 'followUp',
// component: followUp,
// redirect: 'followup/plan-manage/planList',
// },
followRouters, followRouters,
patientsRouters,
] ]
}] }]
...@@ -4,6 +4,8 @@ import common from './education/common'; ...@@ -4,6 +4,8 @@ import common from './education/common';
//随访 //随访
import followModules from './followup/index'; import followModules from './followup/index';
import getters from './getters' import getters from './getters'
//居民诊断
import patientsDiagnose from './patientsManage/patientsDiagnose';
Vue.use(Vuex) Vue.use(Vuex)
...@@ -11,7 +13,8 @@ Vue.use(Vuex) ...@@ -11,7 +13,8 @@ Vue.use(Vuex)
export default new Vuex.Store({ export default new Vuex.Store({
modules: { modules: {
common, common,
...followModules ...followModules,
patientsDiagnose,
}, },
getters getters
}) })
......
const patientsDiagnose = {
namespaced: true,
state: {
selectedDiagList: [],
},
mutations: {
CHANGE_DIAGNOSE_LIST: (state, data) => {
state.selectedDiagList = data;
}
},
actions: {
changeDiagnoseList({ commit }, list) {
commit('CHANGE_DIAGNOSE_LIST', list);
}
}
}
export default patientsDiagnose;
\ No newline at end of file
...@@ -14,7 +14,8 @@ body, div, span, header, footer, nav, section, aside, article, ul, dl, dt, dd, l ...@@ -14,7 +14,8 @@ body, div, span, header, footer, nav, section, aside, article, ul, dl, dt, dd, l
border: none; border: none;
// color: #333; // color: #333;
font-weight: normal; font-weight: normal;
font-family: "PingFangSC", "Microsoft Yahei"; // font-family: "PingFangSC", "Microsoft Yahei";
font-family: "Helvetica Neue", "Helvetica", "PingFang SC", "Hiragino Sans GB","Microsoft YaHei", "SimSun", "sans-serif";
box-sizing: border-box; box-sizing: border-box;
-webkit-tap-highlight-color:transparent; -webkit-tap-highlight-color:transparent;
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
...@@ -60,7 +61,8 @@ html,body{ ...@@ -60,7 +61,8 @@ html,body{
height: 100%; height: 100%;
width: 100%; width: 100%;
background-color: #fff; background-color: #fff;
font-family: Arial, Helvetica, sans-serif; // font-family: Arial, Helvetica, sans-serif;
font-family: "Helvetica Neue", "Helvetica", "PingFang SC", "Hiragino Sans GB","Microsoft YaHei", "SimSun", "sans-serif";
font-size: 16px; font-size: 16px;
} }
#app { #app {
...@@ -229,3 +231,8 @@ html,body{ ...@@ -229,3 +231,8 @@ html,body{
.el-breadcrumb__inner.is-link:hover { .el-breadcrumb__inner.is-link:hover {
color: #449284 !important; color: #449284 !important;
} }
.el-radio-button__orig-radio:checked+.el-radio-button__inner {
background-color: #449284 !important;
border-color: #449284 !important;
}
\ No newline at end of file
.label-detail-wrap{
.err-text{
height: 12px;
visibility: hidden;
}
.special-error-tips{
.el-textarea__inner{
border: 1px solid red;
outline: none;
}
.err-text{
color: red;
visibility: visible;
}
}
.remove-btn{
color: #449284;
}
}
\ No newline at end of file
.label-detail-wrap{
.screenSet{
background: #fff;
padding: 30px;
display: flex;
flex-direction: column;
display: block;
}
.label-name{
width: 100%; height: 45px;
border-bottom: 1px solid #efefef;
font-size: 14px;
line-height: 32px;
color: #606266;
p{
display: inline-block;
&.name{
color: #93969c;
padding: 0 15px;
}
&.modify{
color: #449284;
cursor: pointer;
}
}
.delete-label{
float: right;
&:hover{
color: #fff;
background-color: #f56c6c;
border-color: #f56c6c;
}
}
}
.label-member{
width: 100%; height: 65px;
font-size: 14px;
color: #606266;
p{
display: inline-block;
line-height: 65px;
&.member-number{
padding: 0 15px;
color: #449284;
}
}
.right{
float: right;
padding-top: 16px;
}
}
.delete-tips{
text-align: center !important;
line-height: 29px;
padding: 0 20px;
}
.pagination-style{
text-align: right;
margin: 20px 0;
}
.table-empty{
width: 100%;
height: auto;
text-align: center;
margin-top: 20%;
.empty-pic{
width: 100px;
height: 100px;
display: block;
border: 0;
margin: 0 auto;
}
.tips{
font-size: 14px;
color: #909399;
line-height: 14px;
padding-bottom: 200px;
}
}
}
\ No newline at end of file
.label-list-wrap{
.el-form-item{
margin-bottom: 0;
.el-textarea{
position: relative;
}
.el-textarea__inner{
outline: none !important;
resize: none !important;
height: 80px;
}
&.special-error-tips{
.el-textarea__inner{
border: 1px solid #F56C6C !important;
outline: none;
resize: none;
}
.err-text{
display: block;
position: absolute;
left: 0;
top: 80px;
}
}
.err-text{
display: none;
color: #F56C6C;
font-size: 12px;
padding-top: 4px;
line-height: 12px;
}
}
}
\ No newline at end of file
.label-list-wrap{
.screenSet{
background: #fff;
padding: 30px;
display: flex;
flex-direction: column;
}
.top-title{
font-size: 20px;
padding-bottom: 20px;
border-bottom: 1px solid #efefef;
}
.label-name-row{
margin-top: 10px;
.right{
float: right;
.create-new-label{
float: right;
}
}
}
.total-label{
font-size: 12px; padding: 30px 0 10px;
}
.label-list{
width: 100%;
height: 100%;
background: #fff;
border: 1px solid #efefef;
border-radius: 4px;
overflow: hidden;
overflow-y: scroll;
padding: 20px 10px;
.each-label{
margin: 0 10px 10px 0;
color: #449284;
background: rgba(68,146,132, .1);
border: 1px solid rgba(68,146,132, .2);
&:hover{
color: #fff;
background: #449284;
cursor: pointer;
}
}
/*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/
&::-webkit-scrollbar
{
width: 5px;
height: 5px;
background-color: #fff;
}
/*定义滚动条轨道 内阴影+圆角*/
&::-webkit-scrollbar-track
{
// border-radius: 10px;
// background-color: rgb(241, 239, 239);
// background: #fff;
}
/*定义滑块 内阴影+圆角*/
&::-webkit-scrollbar-thumb
{
border-radius: 10px;
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);
background-color: #bbb;
}
}
.table-empty{
width: 100%;
height: auto;
text-align: center;
.empty-pic{
width: 100px;
height: 100px;
display: block;
border: 0;
margin: 0 auto;
}
.tips{
font-size: 14px;
color: #909399;
}
}
}
.newly-increased-wrap{
.screenSet{
background: #fff;
padding: 30px;
display: flex;
display: block;
flex-direction: column;
&.upload-history-wrap{
margin: 0;
padding: 0;
.septal-line{
width: 100%;
height: 1px;
background: #EBEEF5;
}
}
}
.top-title{
font-size: 20px;
padding-bottom: 20px;
border-bottom: 1px solid #efefef;
}
.single-input{
background-color: #ffffff!important;
.save-and-add{
text-align: right;
}
}
.batch-import-wrap{
.el-upload-list{
display: none;
}
.upload-success-modal{
.el-dialog__body{
padding: 5px 25px 20px;
}
.tips{
text-align: center;
line-height: 25px;
i{
color: #449284;
}
}
}
.el-table__body-wrapper{
.el-table__row{
td:nth-child(1) .cell{
width: 100%;
text-overflow: ellipsis;
display: -webkit-box;
// -webkit-box-orient: vertical;
/*! autoprefixer: off */
-webkit-box-orient: vertical;
/* autoprefixer: on */
-webkit-line-clamp: 2;
overflow: hidden;
}
}
}
}
}
.newly-increased-wrap{
#msg{
width: 180px !important;
height: 180px !important;
padding: 10px;
}
.top-title{
border: 0 !important;
}
.screenSet{
background: #fff;
}
.upload-record{
width: 100%;
font-size: 20px;
line-height: 28px;
color: #1E2F3D;
background: #fff;
margin: 30px 0 24px;
}
.pagination-style{
text-align: right;
margin-top: 20px;
}
.tab-list{
flex: 1;
display: flex;
flex-direction: column;
display: block;
.choose-label-wrap{
.el-dialog__body{
padding: 0 25px 30px;
}
.under-title-tips{
font-size: 12px;
color: #595959;
text-align: center;
}
.row-in-line{
overflow: hidden;
margin-top: 35px;
.el-button, .tips{
display: inline-block;
}
.clear-select{
color: #449284;
border: 1px solid #449284;
&.is-disabled{
color: #c0c4cc !important;
background: #fff !important;
border: 1px solid #dcdfe6 !important;
opacity: 1;
}
}
.tips, .right{
float: right;
}
.tips{
line-height: 32px;
}
}
.list-wrap{
width: 100%;
height: 300px;
border: 1px solid #E4E7ED;
margin-top: 10px;
padding: 10px;
border-radius: 4px;
overflow: hidden;
overflow-y: scroll;
&::-webkit-scrollbar
{
width: 5px;
height: 5px;
background-color: #fff;
}
&::-webkit-scrollbar-thumb
{
border-radius: 10px;
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);
background-color: #bbb;
}
.el-checkbox{
margin-right: 10px;
margin-left: 0;
margin-bottom: 10px;
.el-checkbox__input{
&.is-focus{
.el-checkbox__inner{
border-color: #DCDFE6;
}
}
}
&.is-checked{
border-color: #449284;
.el-checkbox__inner{
background-color: #449284;
border-color: #449284;
}
.el-checkbox__label{
color: #449284;
}
}
}
}
}
.reload-label-modal{
text-align: center;
.el-dialog__body{
padding: 0 25px 8px;
.tips{
text-align: center;
}
}
}
.download-qr-modal{
.qr-pic{
width: 200px;
height: 200px;
background: pink;
margin: 0 auto;
}
.exp-date{
line-height: 36px;
text-align: center;
color: #606060;
padding-bottom: 10px;
}
.choose-group{
text-align: center;
padding-bottom: 10px;
.title{
display: inline-block;
}
.el-select{
width: 350px;
}
}
.under-tips{
color: #a3a5aa;
font-size: 12px;
line-height: 20px;
text-align: center;
}
}
.el-tabs__item{
color: #303133;
font-weight: 600;
letter-spacing: 1px;
}
.el-tabs__active-bar{
background-color: #449284;
}
.el-tabs__content{
flex: 1;
overflow: hidden;
.el-tab-pane{
width: 100%;
height: 100%;
background: #fff;
overflow: hidden;
display: flex;
flex-direction: column;
.step-guide{
width: 100%;
background: #fff;
.guide-list{
width: 100%;
height: 237px;
margin-top: 15px;
.first{
width: 250px;
// width: 30%;
height: 200px;
float: left;
.procedure{
width: 100%; height: 20px;
.icon{
width: 20px;
height: 20px;
display: inline-block;
background: #449284;
border-radius: 20px;
text-align: center; line-height: 20px;
font-size: 12px; color: #fff;
}
.text{
display: inline-block;
font-size: 14px;
color: #262626;
font-weight: 600;
}
.border{
display: inline-block;
// width: 200px;
width: 60%;
height: 0px;
border-bottom: 1px solid #449284;
vertical-align: middle;
}
&::after{
content: '';
height: 100%;
display: inline-block;
vertical-align: middle;
}
}
.under-info{
padding-left: 25px;
.step-tips{
width: 100%;
font-size: 12px;
color: #595959;
margin: 8px 0 20px;
}
}
}
.second{
width: 350px;
// width: 40%;
.procedure{
.border{
// width: 250px;
width: 63%;
}
}
.under-info{
.fill-tips{
li{
font-size: 12px;
width: 300px;
line-height: 18px;
.tips-title{
display: inline-block;
color: #262626;
font-weight: 600;
&.notice{
color: #449284;
}
}
p{
display: inline;
color: #595959;
}
}
}
}
}
.third{
width: 300px;
// width: 30%;
.el-upload{
width: 260px;
height: 150px;
}
.el-upload-dragger{
width: 260px;
// width: 100%;
height: 150px;
}
}
}
}
.upload-table{
}
.el-table__body-wrapper{
&::-webkit-scrollbar
{
width: 5px;
height: 5px;
background-color: #fff;
}
&::-webkit-scrollbar-thumb
{
border-radius: 10px;
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);
background-color: #bbb;
}
}
}
}
.qr-code-wrap{
background: #fff;
.qr-group{
width: 100%; height:auto;
overflow: hidden;
margin: 30px 0 40px;
.label-name{
display: inline-block;
font-size: 12px;
color: #8C8C8C;
}
.el-tag{
color: #449284;
background:rgba(236,244,242,1);
border:1px solid rgba(150,195,193,1);
margin: 0 0 10px 10px;
&.choose-group{
color: #666666;
background:rgba(255,255,255,1);
border:1px dashed rgba(217,217,217,1);
cursor: pointer;
}
}
}
.qr-pic-wrap{
width: 100%; height: auto;
.qr-box{
width: 200px;
margin: 0 auto;
text-align: center;
.pic{
background:rgba(240,242,245,1);
width: 200px; height: auto;
border: 0;
.qr-code-img{
width: 200px;
height: 200px;
overflow: hidden;
border: 0;
display: block;
}
border: 0;
.qr-download-btn{
color: #fff;
background: #449284;
width: 200px;
border: 0;
margin-top: -3px;
}
}
.time-limit{
width: 100%;
text-align: center;
color: #8C8C8C;
font-size: 12px;
line-height: 41px;
}
.refresh-btn{
color: #449284;
background:rgba(236,244,242,1);
border:1px solid rgba(150,195,193,1);
}
}
}
.border-space{
width: 100%;
height: 1px;
background: #EBEEF5;
margin-top: 30px;
}
.increased-steps-wrap{
overflow: hidden;
.label-title{
font-size: 20px;
color: #1E2F3D;
line-height: 28px;
margin: 30px 0 24px;
}
.flow-path{
// width: 100%;
height: 395px;
display: block;
border: 0;
margin-left: -20px;
}
}
}
}
}
/*重置tabs样式*/
.el-tabs__active-bar{
background-color: #449284!important;
}
.el-tabs__item:hover{
color: #449284;
}
.el-tabs__item.is-active{
color: #449284;
}
/*重置朴素按钮样式——plain*/
.el-button.is-plain:focus, .el-button.is-plain:hover {
color: #449284;
border-color: #449284;
}
/*恢复messageBox默认样式*/
.el-message-box {
width: 360px;
height: 220px;
}
.el-message-box__status+.el-message-box__message{
padding-left: 20px;
padding-right: 20px;
}
/*重置单选按钮样式*/
.el-radio-button__orig-radio:checked+.el-radio-button__inner {
background-color: #449284;
border-color: #449284;
box-shadow: -1px 0 0 0 #449284;
}
.el-radio-button__inner:hover {
color: #449284;
}
/*重置输入框,选择框样式*/
.el-range-editor.is-active, .el-range-editor.is-active:hover, .el-select .el-input.is-focus .el-input__inner,.el-input__inner:focus{
border-color: #449284;
}
.el-select-dropdown__item.selected {
color: #449284;
}
.el-select .el-input__inner:focus {
border-color: #449284;
}
/*重置文字按钮样式*/
.el-button--text{
color: #606266;
}
.el-button--text:focus, .el-button--text:hover{
color: #449284;
}
/*重置表格选择框*/
.el-checkbox__input.is-checked .el-checkbox__inner, .el-checkbox__input.is-indeterminate .el-checkbox__inner {
border-color: #449284;
background-color: #449284;
}
.el-checkbox__inner {
border-color: #DCDFE6!important;
}
.el-checkbox__input.is-focus,.el-checkbox__inner:hover,.el-checkbox__inner.is-focus {
border-color: #449284!important;
}
/*重置textarea聚焦样式*/
.el-textarea__inner:focus {
border-color: #449284!important;
}
...@@ -3,13 +3,17 @@ ...@@ -3,13 +3,17 @@
*/ */
export const envConfig = { export const envConfig = {
development: { development: {
// baseUrl: 'https://dev-sc.yunqueyi.com/',
// // baseUrl: 'http://10.177.15.180:10202/', // // baseUrl: 'http://10.177.15.180:10202/',
// // baseUrl: 'http://192.168.140.14:10201/', // // baseUrl: 'http://192.168.140.14:10201/',
// baseUrl: 'https://test1-sc.yunqueyi.com/', // baseUrl: 'https://test1-sc.yunqueyi.com/',
//baseUrl: 'https://uat-sc.yunqueyi.com/', // baseUrl: 'https://uat-sc.yunqueyi.com/',
// baseUrl: 'http://10.177.15.150:10401/',
// baseUrl: 'http://10.177.15.150:11905/',
baseUrl: 'https://dev-sc.yunqueyi.com/', baseUrl: 'https://dev-sc.yunqueyi.com/',
// baseUrl: 'https://test1-sc.yunqueyi.com/',
// baseUrl: 'https://uat-sc.yunqueyi.com/',
apiUrl: 'https://dev-api.yunqueyi.com/',
qiniuFileUrl: "https://dev-sc.yunqueyi.com/contents/admin/qiniu/token1", qiniuFileUrl: "https://dev-sc.yunqueyi.com/contents/admin/qiniu/token1",
qiniuResourceUrl: "https://test1-videos.yunqueyi.com", qiniuResourceUrl: "https://test1-videos.yunqueyi.com",
qiniuImgUrl: "https://test1-file.yunqueyi.com", qiniuImgUrl: "https://test1-file.yunqueyi.com",
...@@ -20,9 +24,16 @@ export const envConfig = { ...@@ -20,9 +24,16 @@ export const envConfig = {
followUpSC: 'https://dev-sc.yunqueyi.com', followUpSC: 'https://dev-sc.yunqueyi.com',
saasDomainUrl: 'https://dev-saas.yunqueyi.com/', saasDomainUrl: 'https://dev-saas.yunqueyi.com/',
workApiUrl: 'https://dev-work.yunqueyi.com/web', workApiUrl: 'https://dev-work.yunqueyi.com/web',
workApiSrc: 'https://dev-work.yunqueyi.com',
// reportUrl: 'http://10.177.15.150:10401/',
// reportUrl: 'http://192.168.140.13:10401/',
reportUrl: 'https://dev-sc-report.yunqueyi.com/',
// reportUrl: 'https://test1-sc-report.yunqueyi.com/',
// reportUrl: 'https://uat-sc-report.yunqueyi.com/',
}, },
dev: { dev: {
baseUrl: 'https://dev-sc.yunqueyi.com/', baseUrl: 'https://dev-sc.yunqueyi.com/',
apiUrl: 'https://dev-api.yunqueyi.com/',
qiniuFileUrl: "https://dev-sc.yunqueyi.com/contents/admin/qiniu/token1", qiniuFileUrl: "https://dev-sc.yunqueyi.com/contents/admin/qiniu/token1",
qiniuResourceUrl: "https://test1-videos.yunqueyi.com", qiniuResourceUrl: "https://test1-videos.yunqueyi.com",
qiniuImgUrl: "https://test1-file.yunqueyi.com", qiniuImgUrl: "https://test1-file.yunqueyi.com",
...@@ -32,9 +43,12 @@ export const envConfig = { ...@@ -32,9 +43,12 @@ export const envConfig = {
followUpSC: 'https://dev-sc.yunqueyi.com', followUpSC: 'https://dev-sc.yunqueyi.com',
saasDomainUrl: 'https://dev-saas.yunqueyi.com/', saasDomainUrl: 'https://dev-saas.yunqueyi.com/',
workApiUrl: 'https://dev-work.yunqueyi.com/web', workApiUrl: 'https://dev-work.yunqueyi.com/web',
workApiSrc: 'https://dev-work.yunqueyi.com',
reportUrl: 'https://dev-sc-report.yunqueyi.com/',
}, },
test: { test: {
baseUrl: 'https://test1-sc.yunqueyi.com/', baseUrl: 'https://test1-sc.yunqueyi.com/',
apiUrl: 'https://test1-api.yunqueyi.com/',
qiniuFileUrl: "https://test1-sc.yunqueyi.com/contents/admin/qiniu/token1", qiniuFileUrl: "https://test1-sc.yunqueyi.com/contents/admin/qiniu/token1",
qiniuResourceUrl: "https://test1-videos.yunqueyi.com", qiniuResourceUrl: "https://test1-videos.yunqueyi.com",
qiniuImgUrl: "https://test1-file.yunqueyi.com", qiniuImgUrl: "https://test1-file.yunqueyi.com",
...@@ -44,6 +58,8 @@ export const envConfig = { ...@@ -44,6 +58,8 @@ export const envConfig = {
yuequeyiIndexUrl: 'https://test1.yunqueyi.com/pica_index.html', yuequeyiIndexUrl: 'https://test1.yunqueyi.com/pica_index.html',
saasDomainUrl: 'https://test1.yunqueyi.com/', saasDomainUrl: 'https://test1.yunqueyi.com/',
workApiUrl: 'https://test1-work.yunqueyi.com/web', workApiUrl: 'https://test1-work.yunqueyi.com/web',
workApiSrc: 'https://test1-work.yunqueyi.com',
reportUrl: 'https://test1-sc-report.yunqueyi.com/',
}, },
test2: { test2: {
baseUrl: 'https://test2-work.yunqueyi.com/sc/', baseUrl: 'https://test2-work.yunqueyi.com/sc/',
...@@ -56,29 +72,37 @@ export const envConfig = { ...@@ -56,29 +72,37 @@ export const envConfig = {
yuequeyiIndexUrl: 'https://test1.yunqueyi.com/pica_index.html', yuequeyiIndexUrl: 'https://test1.yunqueyi.com/pica_index.html',
saasDomainUrl: 'https://test2-work.yunqueyi.com/web/', saasDomainUrl: 'https://test2-work.yunqueyi.com/web/',
workApiUrl: 'https://test2-work.yunqueyi.com/web', workApiUrl: 'https://test2-work.yunqueyi.com/web',
workApiSrc: 'https://test2-work.yunqueyi.com',
reportUrl: 'https://test2-sc-report.yunqueyi.com/',
}, },
uat: { uat: {
baseUrl: 'https://uat-sc.yunqueyi.com/', baseUrl: 'https://uat-sc.yunqueyi.com/',
apiUrl: 'https://uat-api.yunqueyi.com/',
qiniuFileUrl: "https://uat-sc.yunqueyi.com/contents/admin/qiniu/token1", qiniuFileUrl: "https://uat-sc.yunqueyi.com/contents/admin/qiniu/token1",
qiniuResourceUrl: "https://video.yunqueyi.com", // 视频 qiniuResourceUrl: "https://test1-videos.yunqueyi.com", // 视频
qiniuImgUrl: "https://files.yunqueyi.com", qiniuImgUrl: "https://test1-file.yunqueyi.com",
loginUrl: 'https://uat.yunqueyi.com/pica-login/work_station.html', loginUrl: 'https://uat.yunqueyi.com/pica-login/work_station.html',
innerLoginUrl: 'https://uat-sso.yunqueyi.com/PICA_SSO_FE/html/pica_index.html', innerLoginUrl: 'https://uat-sso.yunqueyi.com/PICA_SSO_FE/html/pica_index.html',
followUpSC: 'https://uat-sc.yunqueyi.com', followUpSC: 'https://uat-sc.yunqueyi.com',
yuequeyiIndexUrl: 'https://uat.yunqueyi.com/pica_index.html', yuequeyiIndexUrl: 'https://uat.yunqueyi.com/pica_index.html',
saasDomainUrl: 'https://uat.yunqueyi.com/', saasDomainUrl: 'https://uat.yunqueyi.com/',
workApiUrl: 'https://uat-work.yunqueyi.com/web', workApiUrl: 'https://uat-work.yunqueyi.com/web',
workApiSrc: 'https://uat-work.yunqueyi.com',
reportUrl: 'https://uat-sc-report.yunqueyi.com/',
}, },
pro: { pro: {
baseUrl: 'https://sc.yunqueyi.com/', baseUrl: 'https://sc.yunqueyi.com/',
apiUrl: 'https://api.yunqueyi.com/',
qiniuFileUrl: "https://sc.yunqueyi.com/contents/admin/qiniu/token1", qiniuFileUrl: "https://sc.yunqueyi.com/contents/admin/qiniu/token1",
qiniuResourceUrl: "https://video.yunqueyi.com", qiniuResourceUrl: "https://video.yunqueyi.com",
qiniuImgUrl: "https://files.yunqueyi.com", qiniuImgUrl: "https://files.yunqueyi.com",
loginUrl: 'https://yunqueyi.com/pica-login/work_station.html', loginUrl: 'https://www.yunqueyi.com/pica-login/work_station.html',
innerLoginUrl: 'https://sso.yunqueyi.com/PICA_SSO_FE/html/pica_index.html', innerLoginUrl: 'https://sso.yunqueyi.com/PICA_SSO_FE/html/pica_index.html',
followUpSC: 'https://sc.yunqueyi.com', followUpSC: 'https://sc.yunqueyi.com',
yuequeyiIndexUrl: 'https://www.yunqueyi.com/pica_index.html', yuequeyiIndexUrl: 'https://www.yunqueyi.com/pica_index.html',
saasDomainUrl: 'https://www.yunqueyi.com/', saasDomainUrl: 'https://www.yunqueyi.com/',
workApiUrl: 'https://work.yunqueyi.com/web', workApiUrl: 'https://work.yunqueyi.com/web',
workApiSrc: 'https://work.yunqueyi.com',
reportUrl: 'https://sc-report.yunqueyi.com/',
} }
} }
...@@ -41,12 +41,26 @@ service.interceptors.request.use(config => { ...@@ -41,12 +41,26 @@ service.interceptors.request.use(config => {
}else{ }else{
showFullScreenLoading(); showFullScreenLoading();
} }
if( config.headers['sysCode']==undefined) {
config.headers['sysCode'] = 12 const noSysCode = config.headers.noSysCode;
if(noSysCode){
delete config.headers.sysCode;
delete config.headers.deviceInfo;
delete config.headers.noSysCode;
delete config.headers.token;
}else{
if( config.headers['sysCode']==undefined) {
config.headers['sysCode'] = 12
}
if( process.env.BUILD_ENV == "development" ){ // 本地开发环境
// console.log('环境变量>>>> ', process.env.BUILD_ENV);
// config.headers['token'] = 'BFD804F3A3194FBBBE113962222839F6';
config.headers['token'] = '8BAA42D51C014A6090AB7717589F8967';
}else{
config.headers['token'] = localStorage.getItem('storageToken')
}
config.headers['deviceInfo'] = JSON.stringify({ "app_channel": "", "app_mac": "", "app_uuid": "", "app_version": "", "device_brand": "", "device_ip": "", "device_model": "", "device_net": "", "device_ops": "", "resolution_wh": "", "system_level": "", "device_type": '10' })
} }
// config.headers['token'] = 'AE013D42003D4BA3856FAD9DBDC82254'
config.headers['token'] = localStorage.getItem('storageToken')
config.headers['deviceInfo'] = JSON.stringify({ "app_channel": "", "app_mac": "", "app_uuid": "", "app_version": "", "device_brand": "", "device_ip": "", "device_model": "", "device_net": "", "device_ops": "", "resolution_wh": "", "system_level": "", "device_type": '10' })
// if (config.data && config.data.setEntry) { // if (config.data && config.data.setEntry) {
// config.headers['sysCode'] = config.data.sysCode || 10 // config.headers['sysCode'] = config.data.sysCode || 10
// if(config.data.token){ // if(config.data.token){
......
...@@ -157,6 +157,84 @@ const vueFilter = { ...@@ -157,6 +157,84 @@ const vueFilter = {
return '普通用户' return '普通用户'
} }
}, },
joinStatus: (value) => {
if(value == "0") {
return '未参与'
}else if(value == "1") {
return '参与中'
}else {
return '已完成'
}
},
reportStatus: (value) => {
if(value == 1) {
return '进行中'
}else if(value == 2) {
return '已结束'
}
},
partJoin: (value) => {
if(value == 1) {
return '未参与'
}else {
return '参与'
}
},
partFinish: (value) => {
if(value == 1) {
return '未完成'
}else {
return '完成'
}
},
projectStatus: (value) => {
if(value == 1) {
return '未参与'
}else if(value == 2) {
return '参与中'
}else if(value == 3) {
return '完成项目'
}
},
recordValue: (value) => {
if(value == 1) {
return '无成绩'
}else if(value == 2) {
return '不通过'
}else if(value == 3) {
return '通过'
}
},
exportStatus: (value) => {
if(value == 0) {
return '数据生成中,请稍后---';
}else if(value == 1) {
return '数据生成完成';
} else {
return '文件生成失败 请重新操作导出';
}
},
getAvgTime: (value) => {
let list = [0,0];
let avgTime = '';
if(value != null && value !='') {
list[0] = Math.floor(value / 60);
list[1] = value % 60;
}
if(list[0] == 0 && list[1] == 0) {
avgTime = list[1] + '秒';
} else if(list[0] == 0 && list[1] != 0) {
avgTime = list[1] + '秒';
} else if(list[0] != 0 && list[1] == 0) {
avgTime = list[0] + '分';
} else if(list[0] != 0 && list[1] != 0) {
avgTime = list[0] + '分' + list[1] + '秒';
}
return avgTime;
},
getTotalTime: (value) => {
let time = value +'分钟';
return time;
},
} }
export default vueFilter export default vueFilter
\ No newline at end of file
...@@ -8,7 +8,8 @@ import utils from './followupUtils'; ...@@ -8,7 +8,8 @@ import utils from './followupUtils';
const headers = { const headers = {
sysCode: 45 sysCode: 45,
hospitalAuth:true
} /**/ } /**/
/*工作台*/ /*工作台*/
export const getTodayAppointsList = (params) => { export const getTodayAppointsList = (params) => {
...@@ -41,301 +42,396 @@ export const getTodayPlans = (params) => { ...@@ -41,301 +42,396 @@ export const getTodayPlans = (params) => {
/*计划管理*/ /*计划管理*/
export const createFollowPlan = (data) => { export const createFollowPlan = (data) => {
return fetch({ return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/plans`), headers,
method: 'post', url: getFollowUpSC(`/followup/plans`),
data: data, method: 'post',
description: '新增、修改随访计划', data: data,
},) description: '新增、修改随访计划',
})
})
} }
export const getPlanList = (params) => { export const getPlanList = (params) => {
return fetch({ // return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/plans`), headers,
method: 'get', url: getFollowUpSC(`/followup/plans`),
params: params, method: 'get',
description: '获取计划列表', params: params,
}) description: '获取计划列表',
})
// })
}; };
export const getPlanDetail = (planId) => { export const getPlanDetail = (planId) => {
return fetch({ // return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/plans/${planId}`), headers,
method: 'get', url: getFollowUpSC(`/followup/plans/${planId}`),
description: '获取计划详情', method: 'get',
}) description: '获取计划详情',
})
// })
}; };
export const getNodeTimeList = (planId) => { export const getNodeTimeList = (planId) => {
return fetch({ // return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/plans/${planId}/time`), headers,
method: 'get', url: getFollowUpSC(`/followup/plans/${planId}/time`),
description: '获取随访时间节点列表', method: 'get',
}) description: '获取随访时间节点列表',
})
// })
}; };
export const getNodeTimeContent = (planTimeId) => { export const getNodeTimeContent = (planTimeId) => {
return fetch({ // return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/plans/time/${planTimeId}`), headers,
method: 'get', url: getFollowUpSC(`/followup/plans/time/${planTimeId}`),
description: '获取节点详情', method: 'get',
}) description: '获取节点详情',
})
// })
}; };
export const getResidentList = (params) => { export const getResidentList = (params) => {
return fetch({ // return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/planPatient/`), headers,
method: 'get', url: getFollowUpSC(`/followup/planPatient/`),
params: params, method: 'get',
description: '获取居民列表', params: params,
}) description: '获取居民列表',
})
// })
}; };
export const getGroupList = (params) => { export const getGroupList = (params) => {
return fetch({ // return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/planPatient/group`), headers,
method: 'get', url: getFollowUpSC(`/followup/planPatient/group`),
params: params, method: 'get',
description: '获取分组列表', params: params,
}) description: '获取分组列表',
})
// })
}; };
export const getFollowStartTimeList = (planId) => { export const getFollowStartTimeList = (planId) => {
return fetch({ // return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/planPatient/${planId}/times`), headers,
method: 'get', url: getFollowUpSC(`/followup/planPatient/${planId}/times`),
description: '获取随访开始时间列表(居民相关)', method: 'get',
}) description: '获取随访开始时间列表(居民相关)',
})
// })
}; };
export const getResidentDetail = (planId,patientId,fuPlanPatientId ) => { export const getResidentDetail = (planId,patientId,fuPlanPatientId ) => {
return fetch({ // return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/planPatient/${planId}/detail/${patientId}?planPatientsId=${fuPlanPatientId}`), headers,
method: 'get', url: getFollowUpSC(`/followup/planPatient/${planId}/detail/${patientId}?planPatientsId=${fuPlanPatientId}`),
description: '获取居民详情', method: 'get',
}) description: '获取居民详情',
})
// })
}; };
export const changePlan = (data) => { export const changePlan = (data) => {
return fetch({ return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/planPatient/change`), headers,
method: 'put', url: getFollowUpSC(`/followup/planPatient/change`),
data: data, method: 'put',
description: '变更计划', data: data,
description: '变更计划',
})
}) })
}; };
export const finishPlan = (data) => { export const finishPlan = (data) => {
return fetch({ return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/planPatient/status`), headers,
method: 'put', url: getFollowUpSC(`/followup/planPatient/status`),
data: data, method: 'put',
description: '变更计划', data: data,
description: '变更计划',
})
}) })
}; };
export const deletePlan = (planId) => { export const deletePlan = (planId) => {
return fetch({ return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/plans/${planId}`), headers,
method: 'delete', url: getFollowUpSC(`/followup/plans/${planId}`),
description: '删除计划', method: 'delete',
description: '删除计划',
})
}) })
}; };
export const getVerifyStatus = (params) => { export const getVerifyStatus = (params) => {
return fetch({ return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/plans/validate/status`), headers,
method: 'get', url: getFollowUpSC(`/followup/plans/validate/status`),
params: params, method: 'get',
description: '认证校验', params: params,
description: '认证校验',
})
}) })
}; };
/*预约管理*/ /*预约管理*/
export const getReservationList = (data) => { export const getReservationList = (data) => {
return fetch({ return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/appoint/appointed/list`), headers,
method: 'post', url: getFollowUpSC(`/followup/appoint/appointed/list`),
data: data, method: 'post',
description: '获取预约列表', data: data,
description: '获取预约列表',
})
}) })
}; };
export const getCheckReservation = (data) => { export const getCheckReservation = (data) => {
return fetch({ return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/healths/notice/fu/doctor/appoint/pushValid`), headers,
method: 'post', url: getFollowUpSC(`/healths/notice/fu/doctor/appoint/pushValid`),
data: data, method: 'post',
description: '发送预约校验', data: data,
description: '发送预约校验',
})
}) })
}; };
export const getReservationPatients = (data) => { export const getReservationPatients = (data) => {
return fetch({ // return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/appoint/appointed/count`), headers,
method: 'post', url: getFollowUpSC(`/followup/appoint/appointed/count`),
data: data, method: 'post',
description: '查看预约人数', data: data,
}) description: '查看预约人数',
})
// })
}; };
export const changeReservationStatus = (data) => { export const changeReservationStatus = (data) => {
return fetch({ return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/appoint/status/`), headers,
method: 'post', url: getFollowUpSC(`/followup/appoint/status/`),
data: data, method: 'post',
description: '手动变更预约状态', data: data,
description: '手动变更预约状态',
})
}) })
}; };
export const sendReservation = (data) => { export const sendReservation = (data) => {
return fetch({ return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/appoint/`), headers,
method: 'post', url: getFollowUpSC(`/followup/appoint/`),
data: data, method: 'post',
description: '发送预约', data: data,
description: '发送预约',
})
}) })
}; };
/*录入管理*/ /*录入管理*/
export const getEnteringList = (data) => { export const getEnteringList = (data) => {
return fetch({ return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/entering/list`), headers,
method: 'post', url: getFollowUpSC(`/followup/entering/list`),
data: data, method: 'post',
description: '录入列表查看', data: data,
description: '录入列表查看',
})
}) })
} }
export const changeEnteringStatus = (data) => { export const changeEnteringStatus = (data) => {
return fetch({ return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/entering/status/change`), headers,
method: 'post', url: getFollowUpSC(`/followup/entering/status/change`),
data: data, method: 'post',
description: '变更随访状态', data: data,
},) description: '变更随访状态',
})
})
} }
export const getEnteringInfo = (patientId, fuPlanPatientTimesId) => { export const getEnteringInfo = (patientId, fuPlanPatientTimesId) => {
return fetch({ // return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/entering/${patientId}/fuInfo/${fuPlanPatientTimesId}`), headers,
method: 'get', url: getFollowUpSC(`/followup/entering/${patientId}/fuInfo/${fuPlanPatientTimesId}`),
// params: params, method: 'get',
description: '随访单条信息查看', // params: params,
},) description: '随访单条信息查看',
},)
// })
} }
export const getFormList = (planTimesId) => { export const getFormList = (planTimesId) => {
return fetch({ // return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/entering/scale/${planTimesId}/list`), headers,
method: 'get', url: getFollowUpSC(`/followup/entering/scale/${planTimesId}/list`),
// params: params, method: 'get',
description: '获取量表列表', // params: params,
},) description: '获取量表列表',
},)
// })
} }
//获取新建计划居民列表 //获取新建计划居民列表
export const getPlanPatientsList = (data) =>{ export const getPlanPatientsList = (data) =>{
return fetch({ // return utils.checkAuth(()=>{
headers:{ return fetch({
sysCode: 9 headers:{
}, sysCode: 9,
url: getFollowUpSC(`/healths/patients/infolist`), hospitalAuth:true
method: 'post', },
data: data, url: getFollowUpSC(`/healths/patients/infolist`),
description: '获取新建计划居民列表', method: 'post',
},) data: data,
description: '获取新建计划居民列表',
},)
// })
} }
// 获取随访计划模板列表 // 获取随访计划模板列表
export const getFollowupTemplate = (data) => { export const getFollowupTemplate = (data) => {
return fetch({ // return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/plans/templets`), headers,
method: 'get', url: getFollowUpSC(`/followup/plans/templets`),
data: data, method: 'get',
description: '获取随访计划模板列表', data: data,
}) description: '获取随访计划模板列表',
})
// })
} }
// 获取随访量表固定模板 // 获取随访量表固定模板
export const getFollowupTableTemplate = (id) => { export const getFollowupTableTemplate = (id) => {
return fetch({ // return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/plans/templets/${id}`), headers,
method: 'get', url: getFollowUpSC(`/followup/plans/templets/${id}`),
data: {}, method: 'get',
description: '获取随访量表固定模板', data: {},
}) description: '获取随访量表固定模板',
})
// })
} }
// 获取量表列表 // 获取量表列表
export const getFormOptions = (data)=>{ export const getFormOptions = (data)=>{
return fetch({ // return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/followup/entering/scale/list`), headers,
method: 'get', url: getFollowUpSC(`/followup/entering/scale/list`),
data: data, method: 'get',
description: '获取量表列表', data: data,
}) description: '获取量表列表',
})
// })
} }
/*常量*/ /*常量*/
export const getBasicData = (params) => { export const getBasicData = (params) => {
return fetch({ // return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/basic-data/constants/`), headers,
method: 'get', url: getFollowUpSC(`/basic-data/constants/`),
params: params, method: 'get',
description: '获取常量', params: params,
}) description: '获取常量',
})
// })
}; };
// 获取所有漫画列表 // 获取所有漫画列表
export const getAllEducationComtent = (data) => { export const getAllEducationComtent = (data) => {
return fetch({ // return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/healths/comtent/workstation/list`), headers,
method: 'post', url: getFollowUpSC(`/healths/comtent/workstation/list`),
data: data, method: 'post',
description: '获取所有漫画列表' data: data,
}) description: '获取所有漫画列表'
})
// })
} }
// 获取所有疾病 // 获取所有疾病
export const getAllDiseases = (params) => { export const getAllDiseases = (params) => {
return fetch({ // return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/healths/patients/diseases/-1`), headers,
method: 'get', url: getFollowUpSC(`/healths/patients/diseases/-1`),
params: params, method: 'get',
description: '获取所有疾病', params: params,
}) description: '获取所有疾病',
})
// })
} }
// 获取所有分组 // 获取所有分组
export const getAllLabels = (params) => { export const getAllLabels = (params) => {
return fetch({ // return utils.checkAuth(()=>{
headers, return fetch({
url: getFollowUpSC(`/healths/labels/`), headers,
method: 'get', url: getFollowUpSC(`/healths/labels/`),
params: params, method: 'get',
description: '获取所有分组', params: params,
}) description: '获取所有分组',
})
// })
} }
// 获取微信和短信病人数接口 // 获取微信和短信病人数接口
export const getPatientNumber = (data) => { export const getPatientNumber = (data) => {
return fetch({ // return utils.checkAuth(()=>{
headers: { return fetch({
sysCode: 9 headers: {
}, sysCode: 9,
url: getFollowUpSC(`/healths/patientEducation/getSendPatientTypeNum`), hospitalAuth:true
method: 'post', },
data: data, url: getFollowUpSC(`/healths/patientEducation/getSendPatientTypeNum`),
description: '获取微信和短信病人数接口', method: 'post',
}) data: data,
description: '获取微信和短信病人数接口',
})
// })
} }
......
...@@ -100,34 +100,100 @@ function changeFivteenToEighteen(card){ ...@@ -100,34 +100,100 @@ function changeFivteenToEighteen(card){
} }
return card; return card;
} }
//最新的身份证校验规则
export const checkCardNum = (rule, value, callback) => { function validateIdCard (num) {
var vcity={ 11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古", num = num.toUpperCase(); //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。
21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏", if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {
33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南", return false;
42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",
51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",
63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"
};
//是否为空
if(value === ''){
callback(new Error('请输入正确的身份证'))
} }
//校验长度,类型 //验证前2位,城市符合
if(isCardNo(value) === false){ var aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江 ",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"};
callback(new Error('请输入正确的身份证')) if(aCity[parseInt(num.substr(0,2))]==null){
return false;
} }
//检查省份
if(checkProvince(value,vcity) === false){ //下面分别分析出生日期和校验位
callback(new Error('请输入正确的身份证')) var len, re; len = num.length;
if (len == 15) {
re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
var arrSplit = num.match(re); //检查生日日期是否正确
var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
var bGoodDay; bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
if (!bGoodDay) { // 身份证号的出生日期不对
return false;
} else { //将15位身份证转成18位 //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var nTemp = 0, i;
num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);
for(i = 0; i < 17; i ++) {
nTemp += num.substr(i, 1) * arrInt[i];
}
num += arrCh[nTemp % 11];
return true;
}
} }
//校验生日 if (len == 18) {
if(checkBirthday(value) === false){ re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
callback(new Error('请输入正确的身份证')) var arrSplit = num.match(re); //检查生日日期是否正确
var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
var bGoodDay; bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
if (!bGoodDay) { // 身份证号的出生日期不对
return false;
}
else { //检验18位身份证的校验码是否正确。 //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
var valnum;
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var nTemp = 0, i;
for(i = 0; i < 17; i ++) {
nTemp += num.substr(i, 1) * arrInt[i];
}
valnum = arrCh[nTemp % 11];
if (valnum != num.substr(17, 1)) { // 18位身份证号的校验码不正确
return false;
}
return true;
}
} }
//检验位的检测 return false;
if(checkParity(value) === false){ }
export const checkCardNum = (rule, value, callback) => {
// var vcity={ 11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",
// 21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",
// 33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",
// 42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",
// 51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",
// 63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"
// };
// //是否为空
// if(value === ''){
// callback(new Error('请输入正确的身份证'))
// }
// //校验长度,类型
// if(isCardNo(value) === false){
// callback(new Error('请输入正确的身份证'))
// }
// //检查省份
// if(checkProvince(value,vcity) === false){
// callback(new Error('请输入正确的身份证'))
// }
// //校验生日
// if(checkBirthday(value) === false){
// callback(new Error('请输入正确的身份证'))
// }
// //检验位的检测
// if(checkParity(value) === false){
// callback(new Error('请输入正确的身份证'))
// }
// callback()
if(value === ''){
callback(new Error('请输入正确的身份证')) callback(new Error('请输入正确的身份证'))
}else {
if(validateIdCard(value)) {
callback()
}else {
callback(new Error('请输入正确的身份证'))
}
} }
callback()
} }
...@@ -38,7 +38,7 @@ export const checkRange = (rule, value, callback) => { ...@@ -38,7 +38,7 @@ export const checkRange = (rule, value, callback) => {
// 校验手机号 // 校验手机号
export const checkMobile = (rule, value, callback) => { export const checkMobile = (rule, value, callback) => {
const reg = /^1[3|4|5|7|8|9][0-9]{9}$/; //验证规则 const reg = /^1[3|4|5|6|7|8|9][0-9]{9}$/; //验证规则
const flag = reg.test(value); const flag = reg.test(value);
if(flag){ if(flag){
callback() callback()
......
import dataConverter from './dataConverter'; import dataConverter from './dataConverter';
import fetch from '@/utils/fetch';
import { getBaseUrl, getSaasDomain, getSaasApiDomain } from '@/utils/index'
import Vue from 'vue';
function getSaasHost(){
var host;
if(location.host.indexOf('dev-work')>-1 || location.host.indexOf('localhost')>-1){
host = 'https://dev-saas.yunqueyi.com'
}else if(location.host.indexOf('test1-work')>-1){
host = 'https://test1.yunqueyi.com'
}else if(location.host.indexOf('uat-work')>-1){
host = 'https://uat.yunqueyi.com'
}else{
host = 'https://www.yunqueyi.com'
}
return host
}
function getWsHost(){
var host;
if(location.host.indexOf('dev-work')>-1 || location.host.indexOf('localhost')>-1){
host = 'https://dev-ws.yunqueyi.com'
}else if(location.host.indexOf('test1-work')>-1){
host = 'https://test1-ws.yunqueyi.com'
}else if(location.host.indexOf('uat-work')>-1){
host = 'https://uat-ws.yunqueyi.com'
}else{
host = 'https://ws.yunqueyi.com'
}
return host
}
const alertMessage = (msg, confirmButtonText, cancelButtonText, callback) => {
Vue.prototype.$confirm(msg, '提醒', {
confirmButtonText: confirmButtonText,
cancelButtonText: cancelButtonText,
customClass: 'check-auth',
showClose: false,
}).then(() => {
callback();
}).catch(() => {
// 关闭弹窗
});
}
export default { export default {
DC: dataConverter, DC: dataConverter,
checkAuth: (callback) => {
return new Promise((resolve, reject) => {
resolve(fetch({
headers: {
token: localStorage.getItem('storageToken')
},
url: getBaseUrl(`/healths/doctor/hospitalAuth`),
method: 'get',
description: '检查用户的机构权限',
}).then(res => {
// 1、未加入 2、审核中 3、加入成功
if (res.code == '000000') {
if (res.data == 1) {
// 点击 去加入,进入加入机构流程
alertMessage('您当前暂无机构,无法使用居民管理、随访管理和群发消息等功能,请在加入机构后重试。','去加入','暂不加入', ()=>{
location.href = getSaasHost() + '/pica-base/pica_join.html'
})
return new Promise((resolve, reject) => {
})
} else if (res.data == 2) {
alertMessage('您创建的机构正在审核中,暂无法使用居民管理、随访管理和群发消息等功能,请在审核通过后重试。','查看审核','取消', ()=>{
location.href = getWsHost() + '/outside/status?tk=' + localStorage.getItem('storageToken')
})
return new Promise((resolve, reject) => {
})
} else if (res.data == 3) {
return callback()
}
}
}))
})
},
checkAuthFunc: ()=>{
return new Promise((resolve, reject) => {
resolve(fetch({
headers: {
token: localStorage.getItem('storageToken')
},
url: getBaseUrl(`healths/doctor/hospitalAuth`),
method: 'get',
description: '检查用户的机构权限',
}).then(res => {
// res.data = 2
if (res.code == '000000') {
if (res.data == 1) {
alertMessage('您当前暂无机构,无法使用居民管理、随访管理和群发消息等功能,请在加入机构后重试。','去加入','暂不加入', ()=>{
location.href = getSaasHost() + '/pica-base/pica_join.html'
})
} else if (res.data == 2) {
alertMessage('您创建的机构正在审核中,暂无法使用居民管理、随访管理和群发消息等功能,请在审核通过后重试。','查看审核','取消', ()=>{
location.href = getWsHost() + '/outside/status?tk=' + localStorage.getItem('storageToken')
})
} else if (res.data == 3) {
}
return new Promise((resolve, reject) => {
resolve(res.data)
})
}
}))
})
}
}; };
...@@ -191,9 +191,23 @@ export function getWorkApi(url) { ...@@ -191,9 +191,23 @@ export function getWorkApi(url) {
return getConfigByEnvType('workApiUrl') + url return getConfigByEnvType('workApiUrl') + url
} }
// 获取saas端api域名地址
export function getSaasApiDomain(url) {
return getConfigByEnvType('apiUrl') + url
}
// 获取工作站的域名地址
export function getWorkDomain(url) {
return getConfigByEnvType('workApiSrc') + url
}
// 根据不同环境,生成URL // 根据不同环境,生成URL
function getConfigByEnvType(urlType) { function getConfigByEnvType(urlType) {
return envConfig[process.env.BUILD_ENV][urlType] return envConfig[process.env.BUILD_ENV][urlType]
} }
// 获取report服务器域名地址
export function getReportUrl(url) {
return getConfigByEnvType('reportUrl') + url
}
\ No newline at end of file
import fetch from '@/utils/fetch' import fetch from '@/utils/fetch'
import { getBaseUrl, getWorkApi } from '@/utils/index' import { getBaseUrl, getReportUrl, getWorkApi } from '@/utils/index'
module.exports = { module.exports = {
data: function () { data: function () {
...@@ -153,6 +153,16 @@ module.exports = { ...@@ -153,6 +153,16 @@ module.exports = {
data: para data: para
}) })
}, },
reportGET(api, para, callback,str) {
// para.token = para.token || this.token || "343BCABC890349ACAF357FA79122F9FE"
let url = api + this.getUrlPara(para)
url = encodeURI(url);
return fetch({
url: getReportUrl(url),
method: 'get',
data: para
})
},
// saas-GET请求 // saas-GET请求
saasGET(api, para) { saasGET(api, para) {
// para.token = para.token || this.token || "343BCABC890349ACAF357FA79122F9FE" // para.token = para.token || this.token || "343BCABC890349ACAF357FA79122F9FE"
...@@ -186,6 +196,14 @@ module.exports = { ...@@ -186,6 +196,14 @@ module.exports = {
data: para data: para
}) })
}, },
reportPOST(api, para, callback) {
// para.token = para.token || this.token || "343BCABC890349ACAF357FA79122F9FE"
return fetch({
url: getReportUrl(api),
method: 'post',
data: para
})
},
// 通用saas-POST请求 // 通用saas-POST请求
saasPOST(api, para, cType) { saasPOST(api, para, cType) {
// para.token = para.token || this.token || "343BCABC890349ACAF357FA79122F9FE" // para.token = para.token || this.token || "343BCABC890349ACAF357FA79122F9FE"
......
...@@ -28,7 +28,7 @@ export function getIntersect(a, b) { ...@@ -28,7 +28,7 @@ export function getIntersect(a, b) {
//获取id的list //获取id的list
export function getIdList(data) { export function getIdList(data) {
let list = []; let list = [];
if(typeof data === 'undefined') { if (typeof data === 'undefined') {
return list; return list;
} }
if (data.constructor === Array) { if (data.constructor === Array) {
...@@ -208,7 +208,7 @@ function addEmpty(data) { ...@@ -208,7 +208,7 @@ function addEmpty(data) {
label: "全部地区", label: "全部地区",
value: "0", value: "0",
} }
for(let i=0;i<data.length;i++) { for (let i = 0; i < data.length; i++) {
after.push(data[i]); after.push(data[i]);
} }
return after; return after;
...@@ -236,7 +236,7 @@ export function getEcologyList() { ...@@ -236,7 +236,7 @@ export function getEcologyList() {
cityName: '上海市', cityName: '上海市',
countyName: '浦东新区', countyName: '浦东新区',
townName: '--', townName: '--',
},{ }, {
id: '124', id: '124',
name: '上海第二人民医院', name: '上海第二人民医院',
hospitalLevelName: '二甲医院', hospitalLevelName: '二甲医院',
...@@ -244,7 +244,7 @@ export function getEcologyList() { ...@@ -244,7 +244,7 @@ export function getEcologyList() {
cityName: '上海市', cityName: '上海市',
countyName: '浦东新区', countyName: '浦东新区',
townName: '--', townName: '--',
},{ }, {
id: '125', id: '125',
name: '上海第三人民医院', name: '上海第三人民医院',
hospitalLevelName: '二甲医院', hospitalLevelName: '二甲医院',
...@@ -255,7 +255,7 @@ export function getEcologyList() { ...@@ -255,7 +255,7 @@ export function getEcologyList() {
}] }]
return dataList; return dataList;
} }
export function getEcologySelect (data) { export function getEcologySelect(data) {
// let ecologyist = [{ // let ecologyist = [{
// label: '上海小生态', // label: '上海小生态',
// value: '1', // value: '1',
...@@ -264,7 +264,7 @@ export function getEcologySelect (data) { ...@@ -264,7 +264,7 @@ export function getEcologySelect (data) {
// value: '2', // value: '2',
// }]; // }];
let ecologyist = []; let ecologyist = [];
for(let i=0;i<data.length;i++) { for (let i = 0; i < data.length; i++) {
let obj = { let obj = {
label: data[i].name, label: data[i].name,
value: data[i].id, value: data[i].id,
...@@ -272,4 +272,310 @@ export function getEcologySelect (data) { ...@@ -272,4 +272,310 @@ export function getEcologySelect (data) {
ecologyist.push(obj); ecologyist.push(obj);
} }
return ecologyist; return ecologyist;
}
export function isOverlap(startA, endA, startB, endB) {
let maxStart = Math.max(startA, startB);
let minEnd = Math.min(endA, endB);
console.log('maxStart', maxStart, 'minEnd', minEnd);
if (maxStart <= minEnd) {
return true;
} else {
return false;
}
}
export function setRegionOption(data) {
let option = [];
for (let i = 0; i < data.length; i++) {
let obj = data[i];
obj.label = data[i].provinceName;
obj.value = data[i].provinceId;
option.push(obj);
}
return option;
}
export function getRegionOption() {
let option = [{
value: 1,
label: '浙江',
children: [{
value: 2,
label: '杭州',
children: [{
value: 120115000000,
label: '西湖区'
}, {
value: 5,
label: '东湖区'
}]
}]
}];
return option;
}
export function getLearnOrganization(data) {
if(data.length == 0) {
let arr = [];
return arr;
}
let organization = [
{
label: "全部",
value: 0
},
];
for (let i = 0; i < data.length; i++) {
let obj = {
label: data[i].hospital_name,
value: data[i].hospital_id,
index: i,
};
organization.push(obj);
}
return organization;
}
export function getPicOption(title, legendData, colorData, seriesData) {
let option = {
title: {
text: title,
x: "center",
top: "3%",
},
tooltip: {
trigger: 'item',
formatter: "{a} <br/>{b} : {c} ({d}%)"
},
legend: {
orient: "vertical",
top: "3%",
left: "left",
data: legendData
},
grid: {
left: "30%",
right: "0%",
bottom: "10%",
containLabel: true
},
color: colorData,
backgroundColor: '#F3F3F3',
series: [
{
name: "",
type: "pie",
radius: "55%",
center: ["60%", "65%"],
data: seriesData,
}
]
};
return option;
}
export function getBarOption(xAxisData, seriesData) {
let option = {
title: {
text: "用户年龄发布",
x: "center",
top: "3%",
},
color: ['#3398DB'],
backgroundColor: '#F3F3F3',
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
data: xAxisData,
axisLabel: {
interval: 0
}
// axisTick: {
// alignWithLabel: true
// }
}
],
yAxis: [
{
type: 'value'
}
],
series: [
{
name: '',
type: 'bar',
barWidth: 30,
data: seriesData,
}
]
};
return option;
}
export function getRank(xAxisData, seriesData) {
let option = {
color: ["#1E90FF", "#32CD32"],
title: {
text: "排行榜",
x: "left",
textStyle: {
//主标题文本样式{"fontSize": 18,"fontWeight": "bolder","color": "#333"}
fontSize: 20,
fontStyle: "normal",
fontWeight: "normal",
color: "#000"
}
},
tooltip: {
trigger: "axis",
formatter: '{b0}<br/>{a0}: {c0}%',
axisPointer: {
// 坐标轴指示器,坐标轴触发有效
type: "shadow" // 默认为直线,可选为:'line' | 'shadow'
}
},
legend: {
data: ["完成人数"],
bottom: 0
},
grid: {
left: "3%",
right: "4%",
bottom: "10%",
containLabel: true
},
xAxis: [
{
type: "category",
data: xAxisData,
}
],
yAxis: [
{
type: "value",
axisLabel: {
show: true,
interval: 'auto',
formatter: '{value}%'
},
}
],
series: [
{
name: "完成通过率",
type: "bar",
stack: "完成通过率",
barMaxWidth: "50",
data: seriesData,
},
// {
// name: "参与人数",
// type: "bar",
// stack: "人数",
// barMaxWidth: "80",
// data: [220, 182, 191, 220, 182, 191]
// }
]
};
return option;
}
export function getSearchType(formData,checkAll) {
let type = 0;
if (formData.region.length == 1 || formData.region.length == 2) {
type = formData.region.length;
} else if (formData.region.length == 3) {
if (formData.organization.length == 0 || checkAll === true) {
type = 3;
} else {
type = 4
}
}
return type;
}
export function hasAll(data) {
let flag = false;
for (let i = 0; i < data.length; i++) {
if (data[i] == 0) {
flag = true;
return flag
}
}
return flag;
}
export function getIds(formData, organizationList, checkAll) {
let ids = '';
if (formData.organization.length == 0) {
//地区id
ids = formData.region[formData.region.length - 1];
} else {
//机构id 选了'全部'
if (checkAll === true) {
// for (let i = 0; i < organizationList.length; i++) {
// if (organizationList[i].value != 0) {
// ids += organizationList[i].value + ',';
// }
// }
ids = formData.region[formData.region.length - 1];
} else {
for (let i = 0; i < formData.organization.length; i++) {
if (formData.organization[i] != 0) {
ids += formData.organization[i] + ',';
}
}
ids = ids.substring(0, ids.length - 1);
}
}
return ids;
}
//获取id的list
export function getDoctorIdList(data) {
let list = [];
if (typeof data === 'undefined') {
return list;
}
if (data.constructor === Array) {
for (let i = 0; i < data.length; i++) {
list.push(data[i].doctorId);
}
}
return list;
}
export function getAjustmentList(data) {
let idList = "";
for (let i = 0; i < data.length; i++) {
idList += data[i] + ',';
}
idList = idList.substring(0, idList.length - 1);
return idList;
}
export function removeZero(data) {
let list = [];
for(let i = 0;i<data.length;i++) {
if(data[i].value != 0) {
list.push(data[i]);
}
}
return list;
}
export function initRank(data) {
let list = [{gradeFlag: -1, gradeName: "全部"}];
for(let i=0;i<data.length;i++) {
list.push(data[i]);
}
return list;
}
export function getAvgTime(data) {
let list = [0,0];
if(data != null && data !='') {
list[0] = Math.floor(data / 60);
list[1] = data % 60;
}
return list;
}
export function getComponent(data) {
let list = [];
for(let i=0;i<data.length;i++) {
list.push(data[i].value);
}
return list;
} }
\ No newline at end of file
// 检查号码是否符合规范,包括长度,类型
export const isCardNo = (card) =>{
//身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
// var reg = /(^\d{15}$)|(^\d{17}(\d|X|x)$)/;
let reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
if(reg.test(card) === false){
return false;
}
return true;
}
// 取身份证前两位,校验省份
export const checkProvince = (card,vcity) =>{
var province = card.substr(0,2);
if(vcity[province] == undefined){
return false;
}
return true;
}
// 检查生日是否正确
export const checkBirthday = (card) =>{
var len = card.length;
//身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字
if(len == '15'){
var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;
var arr_data = card.match(re_fifteen);
var year = arr_data[2];
var month = arr_data[3];
var day = arr_data[4];
var birthday = new Date('19'+year+'/'+month+'/'+day);
return verifyBirthday('19'+year,month,day,birthday);
}
//身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X
if(len == '18'){
var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X|x)$/;
var arr_data = card.match(re_eighteen);
var year = arr_data[2];
var month = arr_data[3];
var day = arr_data[4];
var birthday = new Date(year+'/'+month+'/'+day);
return verifyBirthday(year,month,day,birthday);
}
return false;
}
// 校验日期
function verifyBirthday(year,month,day,birthday) {
var now = new Date();
var now_year = now.getFullYear();
//年月日是否合理
if(birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day)
{
//判断年份的范围(0岁到100岁之间)
var time = now_year - year;
if(time >= 0 && time <= 100)
{
return true;
}
return false;
}
return false;
}
// 校验位的检测
export const checkParity = (card)=>{
//15位转18位
card = changeFivteenToEighteen(card);
var len = card.length;
if(len == '18'){
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var cardTemp = 0, i, valnum;
for(i = 0; i < 17; i ++) {
cardTemp += card.substr(i, 1) * arrInt[i];
}
valnum = arrCh[cardTemp % 11];
if (valnum == card.substr(17, 1).toLocaleUpperCase())
{
return true;
}
return false;
}
return false;
}
// 15位转18位身份证号
function changeFivteenToEighteen(card){
if(card.length == '15')
{
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var cardTemp = 0, i;
card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);
for(i = 0; i < 17; i ++)
{
cardTemp += card.substr(i, 1) * arrInt[i];
}
card += arrCh[cardTemp % 11];
return card;
}
return card;
}
export const validateIdCard = (num)=> {
num = num.toUpperCase(); //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。
if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {
return false;
}
//验证前2位,城市符合
var aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江 ",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"};
if(aCity[parseInt(num.substr(0,2))]==null){
return false;
}
//下面分别分析出生日期和校验位
var len, re; len = num.length;
if (len == 15) {
re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
var arrSplit = num.match(re); //检查生日日期是否正确
var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
var bGoodDay; bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
if (!bGoodDay) { // 身份证号的出生日期不对
return false;
} else { //将15位身份证转成18位 //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var nTemp = 0, i;
num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);
for(i = 0; i < 17; i ++) {
nTemp += num.substr(i, 1) * arrInt[i];
}
num += arrCh[nTemp % 11];
return true;
}
}
if (len == 18) {
re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
var arrSplit = num.match(re); //检查生日日期是否正确
var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
var bGoodDay; bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
if (!bGoodDay) { // 身份证号的出生日期不对
return false;
}
else { //检验18位身份证的校验码是否正确。 //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
var valnum;
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var nTemp = 0, i;
for(i = 0; i < 17; i ++) {
nTemp += num.substr(i, 1) * arrInt[i];
}
valnum = arrCh[nTemp % 11];
if (valnum != num.substr(17, 1)) { // 18位身份证号的校验码不正确
return false;
}
return true;
}
}
return false;
}
// export const checkCardNum = (rule, value, callback) => {
// var vcity={ 11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",
// 21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",
// 33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",
// 42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",
// 51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",
// 63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"
// };
// //是否为空
// // if(value === ''){
// // callback(new Error('请输入正确的身份证'))
// // }
// if(value) {
// //校验长度,类型
// if(isCardNo(value) === false){
// callback(new Error('请输入正确的身份证'))
// }
// //检查省份
// if(checkProvince(value,vcity) === false){
// callback(new Error('请输入正确的身份证'))
// }
// //校验生日
// if(checkBirthday(value) === false){
// callback(new Error('请输入正确的身份证'))
// }
// //检验位的检测
// if(checkParity(value) === false){
// callback(new Error('请输入正确的身份证'))
// }
// }else {
// callback()
// }
// }
// 校验手机号
export const checkMobile = (rule, value, callback) => {
var reg = /^1[3|4|5|6|7|8|9][0-9]{9}$/; //验证规则
const flag = reg.test(value);
if(flag){
callback()
}else{
callback(new Error(`请输入正确的手机号码`))
}
}
import fetch from '../fetch';
import { getBaseUrl, getSaasDomain, getSaasApiDomain } from '@/utils/index'
import utils from '@/utils/followup/followupUtils';
const headers = {
sysCode: 9,
hospitalAuth:true
}
/*常量API*/
export const getConstants = (params) => {
// return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`basic-data/constants/`),
method: 'get',
params: params,
description: '获取常量',
})
// })
};
/*获取省市县乡列表*/
export const getProvinceList = (params) => {
// return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`basic-data/position/provinces`),
method: 'get',
params: params,
description: '获取省列表',
})
// })
};
export const getCityList = (params) => {
// return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`basic-data/position/cities`),
method: 'get',
params: params,
description: '获取市列表',
})
// })
};
export const getCountyList = (params) => {
// return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`basic-data/position/counties`),
method: 'get',
params: params,
description: '获取区县列表',
})
// })
};
export const getTownList = (params) => {
// return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`basic-data/position/towns`),
method: 'get',
params: params,
description: '获取乡镇列表',
})
// })
};
/*居民管理*/
export const getPatientList = (data) => {
return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`healths/patients/infolist`),
method: 'post',
data: data,
description: '获取居民列表',
})
})
};
export const getDiseasesList = (params) => {
// return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`healths/patients/diseases/-1`),
method: 'get',
params: params,
description: '获取所有疾病',
})
// })
};
// 新增居民
export const getQRCode = data => {
return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`healths/qrcodes/get`),
method: 'post',
data: data,
description: '获取二维码',
})
})
}
export const getUploadHistory = params => {
return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`healths/docImpPat/import/records`),
method: 'get',
params: params,
description: '获取上传历史记录',
})
})
}
export const refreshCode = data => {
return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`healths/qrcodes/refresh`),
method: 'post',
data: data,
description: '刷新二维码有效期',
})
})
}
export const getLabelsInfo = params => {
// return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`healths/qrcodes/getLabelsInfo`),
method: 'get',
params: params,
description: '获取分组信息',
})
// })
}
export const downloadQRCode = data => {
return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`healths/qrcodes/shareUrl`),
method: 'post',
data: data,
description: '下载二维码',
})
})
}
export const uploadExcel = data => {
// return utils.checkAuth(()=>{
return fetch({
headers: {
noSysCode: true,
// hospitalAuth:true
},
url: getSaasDomain('web/patientManages/import'),
method: 'post',
data: data,
description: '上传excel文件',
})
// })
}
// 分组管理
export const getLabelList = (params) => {
// return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`healths/labels/`),
method: 'get',
params: params,
description: '获取分组列表',
})
// })
}
export const createNewLabel = (data) => {
return utils.checkAuth(()=>{
return fetch({
url: getBaseUrl(`healths/labels/`),
headers: {
"Content-Type": 'application/json',
hospitalAuth:true
},
method: 'post',
data: data,
description: '新增分组',
})
})
}
export const changeLabelName = (data) => {
return utils.checkAuth(()=>{
return fetch({
url: getBaseUrl(`healths/labels/`),
headers,
method: 'put',
data: data,
description: '修改分组名',
})
})
}
export const getLabelDetail = (labelId, params) => {
// return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`healths/labels/v2/${labelId}/patients`),
method: 'get',
params: params,
description: '获取分组详情',
})
// })
}
export const deleteCurrentLabel = (data) => {
return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`healths/labels/`),
method: 'delete',
data: data,
description: '删除分组',
})
})
}
export const deleteCurrentPatients = data => {
return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`healths/labels/patients`),
method: 'delete',
data: data,
description: '删除分组下的居民',
})
})
}
export const saveLabelsForPatient = (labelId, data) => {
return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`healths/labels/v2/${labelId}/patients`),
method: 'post',
data: data,
description: '分组中添加居民',
})
})
}
// 获取七牛上传token
export const getQiniuToken = (params) => {
return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`file/image/token`),
method: 'get',
params: params,
})
})
};
// 意见反馈 getSaasApiDomain
export const submitFeedback = (data) => {
// return utils.checkAuth(()=>{
return fetch({
headers: {
noSysCode: true,
"Content-Type": 'application/json'
},
url: getSaasApiDomain(`web/companys/feedback`),
method: 'post',
data: data,
})
// })
};
/*资料不全居民*/
export const getNotCompleteList = (params) => {
// return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`healths/patients/uncomplate/${params.pageNo}/${params.pageSize}`),
method: 'get',
description: '获取资料不全居民列表',
})
// })
};
export const sendCompleteMessage = (data) => {
return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`healths/patients/remind`),
method: 'post',
data: data,
description: '提醒居民完善信息',
})
})
};
export const sendCompleteMessageList = (data) => {
return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`healths/patients/list/remind`),
method: 'post',
data: data,
description: '批量提醒居民完善信息',
})
})
};
export const getNotCompleteCount = (params) => {
// return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`healths/patients/uncomplate/counts`),
method: 'get',
params: params,
description: '获取未完善居民人数',
})
// })
};
export const getRedNum = (params) => {
// 这个方法暂不做权限校验
return fetch({
headers,
url: getBaseUrl(`healths/patients/uncompleted/last/counts`),
method: 'get',
params: params,
description: '获取小红点数据',
})
};
export const getPatientDetail = (patientId) => {
// return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`healths/patients/${patientId}`),
method: 'get',
// params: params,
description: '获取居民详情',
})
// })
};
export const deletePatient = (data) => {
return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`healths/patients/batch`),
method: 'delete',
data: data,
description: '删除居民',
})
})
};
export const getRemindPatient = (data) => {
return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`healths/patients/remind`),
method: 'post',
data: data,
description: '提醒居民绑定微信',
})
})
};
// 保存并新增
export const savePatientInfo = (data) => {
return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`healths/patients/update`),
method: 'post',
data: data,
description: '保存居民信息',
})
})
};
export const getNationsList = (params) => {
// return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`resident/constants/nations`),
method: 'get',
params: params,
description: '获取56个民族列表',
})
// })
};
export const getHealthRecordList = (data) => {
// return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`followup/entering/health/records`),
method: 'post',
data: data,
description: '健康档案记录列表',
})
// })
};
/*新的获取居民接口,搜索条件有变化*/
export const getPatientInfoList = (data) => {
return utils.checkAuth(()=>{
return fetch({
headers,
url: getBaseUrl(`healths/patients/v2/infolist`),
method: 'post',
data: data,
description: '获取居民列表',
})
})
};
// 添加诊断:获取常用诊断列表
export const getCommonDiagnoseList = params => {
return fetch({
headers,
url: getBaseUrl(`medicineDictionary/icdCommonDiagnosis`),
method: 'get',
params: params,
description: '获取常用诊断列表',
})
}
// 添加诊断:搜索
export const goToSearch = params => {
return fetch({
headers,
url: getBaseUrl(`medicineDictionary/icdContents`),
method: 'get',
params: params,
description: '常用诊断搜索',
})
}
// 选择或搜索诊断
export const getIcdList = params => {
return fetch({
headers,
url: getBaseUrl(`healths/icd/list`),
// url: 'http://sosoapi.yunqueyi.com/sosoapi-web/pass/mock/46/healths/icd/list',
method: 'get',
params: params,
description: '选择或搜索诊断',
})
}
...@@ -427,8 +427,10 @@ export const doUpload = (self,file, filePath, previewId,progressId, fileType) => ...@@ -427,8 +427,10 @@ export const doUpload = (self,file, filePath, previewId,progressId, fileType) =>
result.path = '/' + res.key; result.path = '/' + res.key;
// result.fullPath = domain + '/' + res.key + '_' + new Date().getTime(); // result.fullPath = domain + '/' + res.key + '_' + new Date().getTime();
if(!fileType) { // 图片 文件 if(!fileType) { // 图片 文件
console.log('---domain-------',domain)
result.fullPath = domain + '/' + res.key; result.fullPath = domain + '/' + res.key;
}else{ // 视频 }else{ // 视频
console.log('----domain1------',domain1)
result.fullPath = domain1 + '/' + res.key; result.fullPath = domain1 + '/' + res.key;
} }
......
...@@ -36,9 +36,32 @@ ...@@ -36,9 +36,32 @@
style="width:83%;" style="width:83%;"
:disabled="peopleLevel == 'L3'" :disabled="peopleLevel == 'L3'"
></el-input> ></el-input>
<span class="word-num">{{(formData.projectName).replace(/\s+/g,"").length}}/20</span> <span class="word-num">{{(formData.projectName).replace(/\s+/g,"").length}}/24</span>
</el-col> </el-col>
</el-form-item> </el-form-item>
<el-form-item label="发起机构名称:" prop="organizationName">
<el-col :span="13">
<el-input
size="small"
v-model="formData.organizationName"
placeholder="请输入发起机构名称"
style="width:83%;"
:disabled="peopleLevel == 'L3'"
@input="changeOrganizationName"
@blur = "blurName"
@focus = "focusName"
></el-input>
<span class="word-num">{{(formData.organizationName).replace(/\s+/g,"").length}}/12</span>
</el-col>
<el-popover
class="popover-content"
placement="bottom"
:content="organizationContent"
v-model="visibleName"
@click="checkDefault">
<p @click="checkDefault"> 我的机构: {{ organizationContent }} </p>
</el-popover>
</el-form-item>
<el-form-item label="项目时间:" required> <el-form-item label="项目时间:" required>
<el-col :span="5"> <el-col :span="5">
<el-form-item prop="projectBegintime"> <el-form-item prop="projectBegintime">
...@@ -82,7 +105,7 @@ ...@@ -82,7 +105,7 @@
style="width:83%;" style="width:83%;"
:disabled="peopleLevel == 'L3'" :disabled="peopleLevel == 'L3'"
></el-input> ></el-input>
<span class="word-num">{{(formData.projectIntro).replace(/\s+/g,"").length}}/150</span> <span class="word-num">{{(formData.projectIntro).replace(/\s+/g,"").length}}/200</span>
</el-col> </el-col>
</el-form-item> </el-form-item>
<div class="basic-item-icon"> <div class="basic-item-icon">
...@@ -180,6 +203,26 @@ ...@@ -180,6 +203,26 @@
<el-radio :label="1">使用小生态范围</el-radio> <el-radio :label="1">使用小生态范围</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="项目上线通知">
<el-radio-group
size="small"
v-model="formData.sendOption"
:disabled="showNoticeType()"
>
<el-radio :label="1">通知</el-radio>
<el-radio :label="2">不通知</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="formData.sendOption != 2" label="通知范围">
<el-radio-group
size="small"
v-model="formData.receiveOption"
:disabled="showNoticeType()"
>
<el-radio :label="1">次级负责人</el-radio>
<el-radio :label="2">所有人</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="添加下载文件:"> <el-form-item label="添加下载文件:">
<el-col :span="10"> <el-col :span="10">
<el-upload <el-upload
...@@ -544,12 +587,13 @@ ...@@ -544,12 +587,13 @@
<div class="third-step" v-else-if="active === 2"> <div class="third-step" v-else-if="active === 2">
<el-form <el-form
ref="formComponent" ref="formComponent"
class="form-component"
label-width="150px" label-width="150px"
:model="formComponent" :model="formComponent"
:rules="rulesComponent" :rules="rulesComponent"
> >
<el-form-item label="选择组件:" prop="component"> <el-form-item label="选择组件:" prop="component">
<el-col :span="20"> <el-col :span="10">
<el-select <el-select
v-model="formComponent.component" v-model="formComponent.component"
multiple multiple
...@@ -568,11 +612,12 @@ ...@@ -568,11 +612,12 @@
</el-select> </el-select>
</el-col> </el-col>
</el-form-item> </el-form-item>
<el-form-item label="已选择:"> <el-form-item label="已选择:" class="check-component">
<el-col :span="20"> <el-col :span="20">
<el-tag <el-tag
class = "tags-component"
v-for="tag in tagsComponent" v-for="tag in tagsComponent"
:key="tag.name" :key="tag.value"
closable closable
:type="tag.type" :type="tag.type"
style="margin-left: 10px;" style="margin-left: 10px;"
...@@ -581,12 +626,14 @@ ...@@ -581,12 +626,14 @@
</el-col> </el-col>
</el-form-item> </el-form-item>
<el-form-item label="配置证书:"> <el-form-item label="配置证书:">
<el-radio-group v-model="formComponent.configure" :disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6"> <el-col :span="10">
<el-radio-group class="el-configure" v-model="formComponent.configure" :disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6">
<el-radio :label="1"></el-radio> <el-radio :label="1"></el-radio>
<el-radio :label="2"></el-radio> <el-radio :label="2"></el-radio>
</el-radio-group> </el-radio-group>
</el-col>
</el-form-item> </el-form-item>
<el-form-item v-show="formComponent.configure == 1" label="选择证书:"> <!-- <el-form-item v-show="formComponent.configure == 1" label="选择证书:">
<el-col :span="20"> <el-col :span="20">
<el-select <el-select
v-model="formComponent.certificate" v-model="formComponent.certificate"
...@@ -602,6 +649,82 @@ ...@@ -602,6 +649,82 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-col> </el-col>
</el-form-item> -->
</el-form>
<el-form
ref="formExam"
label-width="150px"
:model="formExam"
class="achievement"
v-show="formComponent.configure == 1"
>
<el-form-item label="项目成绩评定条件">
<el-select
v-model="formExam.certificateType"
placeholder="请选择"
style="width: 350px"
@change="updateCertificateType"
:disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6"
>
<el-option
v-for="item in certificateTypeList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<div v-show="formExam.certificateType == 2" v-for="(item , index) in formExam.exam" :key="index">
<el-form-item label="发放证书">
<el-col :span="6">
<el-select
v-model="item.certificateId"
placeholder="请选择证书"
style=""
@change="updateCertificate(index)"
:disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6"
>
<el-option
v-for="item in optionsCertificate"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-col>
<el-col :span="3">
<el-button @click="addCertificate" icon="el-icon-plus" circle></el-button>
<el-button @click="reduceCertificate(index)" icon="el-icon-minus" circle></el-button>
</el-col>
</el-form-item>
<el-form-item label="项目中最高">
<el-col :span="3">
<el-input v-model="item.examCount" @change="updateCount(index)" :disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6"></el-input>
</el-col>
<el-col class="line" :span="3.5" > &nbsp 门考试平均分:</el-col>
<el-col :span="3">
<el-input v-model="item.rangeMin" @change="updateMin(index)" :disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6"></el-input>
</el-col>
<el-col class="line" :span="1.5"> &nbsp 分~ &nbsp</el-col>
<el-col :span="3">
<el-input v-model="item.rangeMax" @change="updateMax(index)" :disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6"></el-input>
</el-col>
</el-form-item>
</div>
<el-form-item v-show="formExam.certificateType == 1" label="发放证书">
<el-select
v-model="formComponent.certificate"
placeholder="请选择证书"
style="width: 350px"
:disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6"
>
<el-option
v-for="item in optionsCertificate"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
...@@ -615,33 +738,28 @@ import { mapGetters } from "vuex"; ...@@ -615,33 +738,28 @@ import { mapGetters } from "vuex";
import { openLoading, closeLoading } from "../../utils/utils"; import { openLoading, closeLoading } from "../../utils/utils";
import * as commonUtil from "../../utils/utils"; import * as commonUtil from "../../utils/utils";
import * as operationData from "../../utils/operation"; import * as operationData from "../../utils/operation";
import Sortable from 'sortablejs'
let vm = null; let vm = null;
export default { export default {
components: { components: {
BreadCrumb BreadCrumb
}, },
data() { data() {
// const itemOrganization = {
// name: "上海市第一人民医院", let checkProjectStr = (rule, value, callback) => {
// grade: "二甲医院", if(value.indexOf("\\") != -1) {//存在
// province: "上海市", callback(new Error('请勿输入字符“ \\ ”'));
// city: "上海市", } else if (value.indexOf(".") != -1) {
// district: "浦东新区", callback(new Error('请勿输入字符“ . ”'));
// street: "张江街道" } else {
// }; callback();
// const itemPerson = { }
// name: "云小鹊", };
// hospital: "上海市第一人民医院",
// department: "全科",
// province: "上海市",
// city: "上海市",
// district: "长宁区"
// };
return { return {
idTypeValue: 1, idTypeValue: 1,
idTypeProject: '', idTypeProject: '',
// itemOrganization: itemOrganization,
// itemPerson: itemPerson,
projectId: null, projectId: null,
peopleLevel: null, peopleLevel: null,
//面包屑 //面包屑
...@@ -669,6 +787,9 @@ export default { ...@@ -669,6 +787,9 @@ export default {
attachmentMore1: {}, attachmentMore1: {},
attachmentMore2: {}, attachmentMore2: {},
scopeType: 0, scopeType: 0,
organizationName: '',
sendOption: 1,
receiveOption: 1,
}, },
pickerOptions0: { pickerOptions0: {
disabledDate: time => { disabledDate: time => {
...@@ -802,6 +923,29 @@ export default { ...@@ -802,6 +923,29 @@ export default {
projectStatus: "", projectStatus: "",
status4Flag: "", status4Flag: "",
showStorage: false, showStorage: false,
//考试数据
formExam: {
certificateType: 1,
exam: [{
examCount: 1,
rangeMin: '',
rangeMax: '',
certificateId: '',
certificateName: '',
}]
},
certificateTypeList: [
{
label: '根据平均分发证书',
value: 2,
},
{
label: '所有组件通过即发放',
value: 1,
}
],
visibleName: false,
organizationContent: '',
//校验工具 数据 //校验工具 数据
rulesComponent: { rulesComponent: {
component: [ component: [
...@@ -816,10 +960,15 @@ export default { ...@@ -816,10 +960,15 @@ export default {
{ required: true, message: "请输入项目名称", trigger: "blur" }, { required: true, message: "请输入项目名称", trigger: "blur" },
{ {
min: 2, min: 2,
max: 20, max: 24,
message: "输入长度为2-20的内容,可包含中英文、数字及特殊符号", message: "输入长度为2-24的内容,可包含中英文、数字及特殊符号",
trigger: "blur" trigger: "blur"
} },
{ validator: checkProjectStr, trigger: 'blur' }
],
organizationName: [
{ required: true, message: "请填写发起机构名称", trigger: "blur" },
{ min: 1, max: 12, message: "超过12个最大字数限制,请精简字数或使用简称", trigger: "blur" }
], ],
duringTime: [ duringTime: [
{ {
...@@ -855,7 +1004,7 @@ export default { ...@@ -855,7 +1004,7 @@ export default {
], ],
projectIntro: [ projectIntro: [
{ required: true, message: "请填写项目简介", trigger: "blur" }, { required: true, message: "请填写项目简介", trigger: "blur" },
{ min: 1, max: 150, message: "超出可输入的最大长度", trigger: "blur" } { min: 1, max: 200, message: "超出可输入的最大长度", trigger: "blur" }
], ],
attachmentUrl1: [ attachmentUrl1: [
{ required: true, message: "请选择列表图片", trigger: "blur" } { required: true, message: "请选择列表图片", trigger: "blur" }
...@@ -950,7 +1099,12 @@ export default { ...@@ -950,7 +1099,12 @@ export default {
attachmentSize: editData.attachmentData[1].attachmentSize attachmentSize: editData.attachmentData[1].attachmentSize
}, },
scopeType: editData.projectData.scopeType, scopeType: editData.projectData.scopeType,
organizationName: editData.projectData.organizationName,
notifyId: editData.notifyData.notifyId,
sendOption: editData.notifyData.sendOption,
receiveOption: editData.notifyData.receiveOption,
}; };
this.organizationContent = editData.projectData.creatorOrganizationName;
if (editData.attachmentData.length > 2) { if (editData.attachmentData.length > 2) {
for (let i = 2; i < editData.attachmentData.length; i++) { for (let i = 2; i < editData.attachmentData.length; i++) {
let pdfItem = { let pdfItem = {
...@@ -975,6 +1129,21 @@ export default { ...@@ -975,6 +1129,21 @@ export default {
this.formComponent.certificate = this.formComponent.certificate =
editData.certificateData[0].relevanceId; editData.certificateData[0].relevanceId;
} }
if (editData.certificateRule.length > 0) {
this.formComponent.configure = 1;
}
//初始化考试平均分配置数据
this.formExam.certificateType = editData.projectData.certificateType;
this.formExam.exam = editData.certificateRule;
if(this.formExam.exam.length == 0) {
this.formExam.exam = [{
examCount: 1,
rangeMin: '',
rangeMax: '',
certificateId: '',
certificateName: '',
}]
}
}, },
//编辑管理 //编辑管理
editManager(data) { editManager(data) {
...@@ -1014,6 +1183,7 @@ export default { ...@@ -1014,6 +1183,7 @@ export default {
projectEndtime: this.formData.projectEndtime, projectEndtime: this.formData.projectEndtime,
projectIntro: this.formData.projectIntro, projectIntro: this.formData.projectIntro,
scopeType: this.formData.scopeType, scopeType: this.formData.scopeType,
organizationName: this.formData.organizationName,
}; };
let attachmentModel = [ let attachmentModel = [
{ {
...@@ -1061,10 +1231,20 @@ export default { ...@@ -1061,10 +1231,20 @@ export default {
} }
//idTypeProject //idTypeProject
} }
//教培项目v2.1.0新增通知优化
let notifyData = {
notifyId: 0,
receiveOption: this.formData.receiveOption,
sendOption: this.formData.sendOption,
};
if(option == "edit" || option == "storageEdit") {
notifyData.notifyId = this.formData.notifyId;
}
let postData = { let postData = {
projectModel: JSON.stringify(projectModel), projectModel: JSON.stringify(projectModel),
attachmentModel: JSON.stringify(attachmentModel), attachmentModel: JSON.stringify(attachmentModel),
attachmentPDFModel: JSON.stringify(attachmentPDFModel) attachmentPDFModel: JSON.stringify(attachmentPDFModel),
notifyData: JSON.stringify(notifyData),
}; };
//console.log(postData); //console.log(postData);
openLoading(vm); openLoading(vm);
...@@ -1140,6 +1320,7 @@ export default { ...@@ -1140,6 +1320,7 @@ export default {
} }
this.optionsComponent = optionsComponent; this.optionsComponent = optionsComponent;
this.optionsCertificate = optionsCertificate; this.optionsCertificate = optionsCertificate;
this.organizationContent = res.data.creatorOrganizationName;
} }
this.editManager(); this.editManager();
}); });
...@@ -1147,12 +1328,42 @@ export default { ...@@ -1147,12 +1328,42 @@ export default {
//项目组件信息 暂存/完成 //项目组件信息 暂存/完成
componentDraft(type) { componentDraft(type) {
let param = { let param = {
componentIds: this.formComponent.component, // componentIds: this.formComponent.component,
certificateId: this.formComponent.certificate, componentIds: operationData.getComponent(vm.tagsComponent),
// certificateId: this.formComponent.certificate,
certificateId: [],
projectId: this.projectId, projectId: this.projectId,
type: type, type: type,
status: this.projectStatus status: this.projectStatus,
certificateType: this.formExam.certificateType,
getCertificateRule: [],
}; };
// console.log('排序后',vm.tagsComponent,'param',param);
if(this.formComponent.configure == 1) {
// 2.多证书有规
if(this.formExam.certificateType == 2) {
let ruleData = vm.formExam.exam;
for(let o=0;o<ruleData.length;o++) {
if(ruleData[o].certificateId != '' && ruleData[o].certificateId != null) {
param.certificateId[o] = ruleData[o].certificateId;
}
param.getCertificateRule[o] = {
certificateId: ruleData[o].certificateId,
certificateName: ruleData[o].certificateName,
examCount: ruleData[o].examCount,
portalProjectId: this.projectId,
rangeMax: ruleData[o].rangeMax,
rangeMin: ruleData[o].rangeMin,
}
}
}
// 1.单证书无规则
else {
if(this.formComponent.certificate != '' && this.formComponent.certificate != null) {
param.certificateId[0] = this.formComponent.certificate;
}
}
}
vm.POST("portal/portalInfo/componentDraft", param).then(res => { vm.POST("portal/portalInfo/componentDraft", param).then(res => {
console.log(res); console.log(res);
vm.$message({ vm.$message({
...@@ -1178,6 +1389,7 @@ export default { ...@@ -1178,6 +1389,7 @@ export default {
this.getDepartment(); this.getDepartment();
} else if (active == 2) { } else if (active == 2) {
this.stepData = [false, false, true]; this.stepData = [false, false, true];
this.tagDrop();
} }
}, },
//点击暂存 //点击暂存
...@@ -1275,24 +1487,26 @@ export default { ...@@ -1275,24 +1487,26 @@ export default {
} else if (this.active == 2) { } else if (this.active == 2) {
//暂存步骤3 //暂存步骤3
this.componentDraft(1); this.componentDraft(1);
// let formName = "formComponent";
// let completeState = this.submitForm(formName);
// if (completeState === true) {
// this.componentDraft(1);
// }
} }
}, },
//点击完成 //点击完成
complete() { complete() {
//type 1:暂存 2:完成 //type 1:暂存 2:完成
if (this.status4Flag == 1) { // if (this.status4Flag == 1) {
// vm.$message.info("完成");
// vm.$router.push({ path: "item-manager" });
// return;
// }
console.log('this.peopleLevel',this.peopleLevel);
if (this.peopleLevel == 'L3') {
vm.$message.info("完成"); vm.$message.info("完成");
vm.$router.push({ path: "item-manager" }); vm.$router.push({ path: "item-manager" });
return; return;
} }
let formName = "formComponent"; let formName = "formComponent";
let completeState = this.submitForm(formName); let completeState = this.submitForm(formName);
if (completeState === true) { let certificateState = this.checkCertificate();
if (completeState === true && certificateState === true) {
this.componentDraft(2); this.componentDraft(2);
} }
}, },
...@@ -1364,6 +1578,7 @@ export default { ...@@ -1364,6 +1578,7 @@ export default {
if (res.code == "000000") { if (res.code == "000000") {
this.active++; this.active++;
this.stepData = [false, false, true]; this.stepData = [false, false, true];
this.tagDrop();
} }
} }
); );
...@@ -1413,6 +1628,7 @@ export default { ...@@ -1413,6 +1628,7 @@ export default {
if(statusMove === 0) { if(statusMove === 0) {
this.active++; this.active++;
this.stepData = [false, false, true]; this.stepData = [false, false, true];
this.tagDrop();
} else { } else {
console.log('不能改变范围status:'+res.data.status) console.log('不能改变范围status:'+res.data.status)
} }
...@@ -1462,6 +1678,7 @@ export default { ...@@ -1462,6 +1678,7 @@ export default {
if(statusMove === 0) { if(statusMove === 0) {
this.active++; this.active++;
this.stepData = [false, false, true]; this.stepData = [false, false, true];
this.tagDrop();
} else { } else {
console.log('不能改变范围status:'+res.data.status) console.log('不能改变范围status:'+res.data.status)
} }
...@@ -1842,6 +2059,7 @@ export default { ...@@ -1842,6 +2059,7 @@ export default {
return { type: 2, key: key }; return { type: 2, key: key };
}), }),
allSelectedKeys = savedCheckedKeys.concat(savedHalfCheckedKeys); allSelectedKeys = savedCheckedKeys.concat(savedHalfCheckedKeys);
// console.log('allSelectedKeys值:',allSelectedKeys)
return allSelectedKeys; return allSelectedKeys;
}, },
// 递归删除列表中所有子节点 // 递归删除列表中所有子节点
...@@ -2217,7 +2435,7 @@ export default { ...@@ -2217,7 +2435,7 @@ export default {
} }
} }
} else if (type == "administrativeUpdate") { } else if (type == "administrativeUpdate") {
//console.log(this.allSelectedKeys.length); console.log('this.allSelectedKeys',this.allSelectedKeys);
if (this.allSelectedKeys.length > 0) { if (this.allSelectedKeys.length > 0) {
for (let i = 0; i < this.allSelectedKeys.length; i++) { for (let i = 0; i < this.allSelectedKeys.length; i++) {
scope += scope +=
...@@ -2228,11 +2446,19 @@ export default { ...@@ -2228,11 +2446,19 @@ export default {
} }
} else { } else {
let noChangeTree = this.getTreeCheck(); let noChangeTree = this.getTreeCheck();
console.log(noChangeTree); console.log('noChangeTree值',noChangeTree);
for (let i = 0; i < noChangeTree.length; i++) { if(noChangeTree.length > 0) {
scope += noChangeTree[i].key + ":" + noChangeTree[i].type; for (let i = 0; i < noChangeTree.length; i++) {
if (i < noChangeTree.length - 1) { scope += noChangeTree[i].key + ":" + noChangeTree[i].type;
scope += "|"; if (i < noChangeTree.length - 1) {
scope += "|";
}
}
} else {
//选全国项目
if(this.tagsRegion[0].key == '000') {
scope = '000:1';
console.log(this.tagsRegion,'scope',scope);
} }
} }
} }
...@@ -2728,6 +2954,15 @@ export default { ...@@ -2728,6 +2954,15 @@ export default {
} }
return true; return true;
}, },
//判断通知展示问题
showNoticeType() {
if(this.projectStatus == '' || this.projectStatus == 1 || this.projectStatus == 2) {
if(this.peopleLevel != 'L3') {
return false;
}
}
return true;
},
//选择小生态 //选择小生态
selectChangeEcology(value) { selectChangeEcology(value) {
this.formEcology.pageNum = 1; this.formEcology.pageNum = 1;
...@@ -2919,6 +3154,7 @@ export default { ...@@ -2919,6 +3154,7 @@ export default {
} }
} }
//console.log('this.tagsComponent',this.tagsComponent); //console.log('this.tagsComponent',this.tagsComponent);
vm.tagDrop();
}, },
initTags(value) { initTags(value) {
//console.log('value',value,'optionsComponent',this.optionsComponent); //console.log('value',value,'optionsComponent',this.optionsComponent);
...@@ -2935,6 +3171,9 @@ export default { ...@@ -2935,6 +3171,9 @@ export default {
} }
} }
//console.log('this.tagsComponent',this.tagsComponent); //console.log('this.tagsComponent',this.tagsComponent);
// if(vm.tagsComponent.length > 0) {
// vm.tagDrop();
// }
}, },
//选择组件数据绑定 //选择组件数据绑定
handleCloseComponent(tag) { handleCloseComponent(tag) {
...@@ -2945,7 +3184,230 @@ export default { ...@@ -2945,7 +3184,230 @@ export default {
this.formComponent.component[j] = this.tagsComponent[j].value; this.formComponent.component[j] = this.tagsComponent[j].value;
} }
} }
} },
addCertificate() {
let obj = {
examCount: 1,
rangeMin: '',
rangeMax: '',
certificateId: '',
certificateName: '',
};
vm.formExam.exam.push(obj);
},
reduceCertificate(index) {
// console.log(index);
if(vm.formExam.exam.length > 1) {
vm.formExam.exam.splice(index,1);
} else {
vm.$message('至少配置一个证书');
}
},
//考试门数更新校验
updateCount(index) {
if(vm.formExam.exam[index].examCount) {
vm.formExam.exam[index].examCount = parseInt(vm.formExam.exam[index].examCount);
if(!Number.isInteger(vm.formExam.exam[index].examCount)){
vm.formExam.exam[index].examCount = '';
}
if(vm.formExam.exam[index].examCount <= 0) {
vm.formExam.exam[index].examCount = '';
}
if(vm.formExam.exam[index].examCount != '') {
for(let i=0;i<vm.formExam.exam.length;i++) {
vm.formExam.exam[i].examCount = vm.formExam.exam[index].examCount;
}
}
}
},
//区间控制在0~100
baseCheck(index) {
if(vm.formExam.exam[index].rangeMin != '') {
vm.formExam.exam[index].rangeMin = parseInt(vm.formExam.exam[index].rangeMin);
if(vm.formExam.exam[index].rangeMin > 100) {
vm.formExam.exam[index].rangeMin = 100;
}
if(vm.formExam.exam[index].rangeMin < 0) {
vm.formExam.exam[index].rangeMin = 0;
}
}
if(vm.formExam.exam[index].rangeMax != '') {
vm.formExam.exam[index].rangeMax = parseInt(vm.formExam.exam[index].rangeMax);
if(vm.formExam.exam[index].rangeMax > 100) {
vm.formExam.exam[index].rangeMax = 100;
}
if(vm.formExam.exam[index].rangeMax < 0) {
vm.formExam.exam[index].rangeMax = 0;
}
}
},
//区间不能有交集
withoutUnion(index,type) {
let examList = vm.formExam.exam;
let nowMin = vm.formExam.exam[index].rangeMin;
let nowMax = vm.formExam.exam[index].rangeMax;
console.log('nowMin',nowMin,'nowMax',nowMax);
if(nowMin!=='' && nowMax!=='') {
for(let i=0;i<examList.length;i++) {
if(index !== i && examList[i].rangeMin!=='' && examList[i].rangeMax!=='') {
let overlapStatus = operationData.isOverlap(examList[i].rangeMin,examList[i].rangeMax,nowMin,nowMax);
if(overlapStatus === true) {//区间有交集
vm.$message('设置分数区间不能重合');
vm.formExam.exam[index].rangeMin = '';
vm.formExam.exam[index].rangeMax = '';
// console.log('重合制空',vm.formExam.exam[index])
}
}
}
}
},
updateMin(index) {
vm.baseCheck(index);
if(!Number.isInteger(vm.formExam.exam[index].rangeMin)){
vm.formExam.exam[index].rangeMin = '';
return;
}
// console.log('更新 nowMin',vm.formExam.exam[index].rangeMin,'nowMax',vm.formExam.exam[index].rangeMax);
if(vm.formExam.exam[index].rangeMin == '' || vm.formExam.exam[index].rangeMax == '') {
return;
}
if(vm.formExam.exam[index].rangeMin > vm.formExam.exam[index].rangeMax) {
vm.formExam.exam[index].rangeMin = vm.formExam.exam[index].rangeMax;
}
vm.withoutUnion(index,'min')
},
updateMax(index) {
vm.baseCheck(index);
if(!Number.isInteger(vm.formExam.exam[index].rangeMax)){
// console.log('只能整数');
vm.formExam.exam[index].rangeMax = '';
return;
}
if(vm.formExam.exam[index].rangeMin == '' || vm.formExam.exam[index].rangeMax == '') {
return;
}
if(vm.formExam.exam[index].rangeMin > vm.formExam.exam[index].rangeMax) {
vm.formExam.exam[index].rangeMax = vm.formExam.exam[index].rangeMin;
}
vm.withoutUnion(index,'max')
},
updateCertificate(index) {
// console.log('optionsCertificate',vm.optionsCertificate,'index',index,'item',vm.formExam.exam[index])
for(let i=0;i<vm.optionsCertificate.length;i++) {
if(vm.optionsCertificate[i].value == vm.formExam.exam[index].certificateId) {
vm.formExam.exam[index].certificateName = vm.optionsCertificate[i].label;
break;
}
}
},
//更新项目成绩评定条件
updateCertificateType() {
console.log('更新certificateType',vm.formExam.certificateType)
if(vm.formExam.certificateType == 2) {
vm.formExam.exam = [{
examCount: 1,
rangeMin: '',
rangeMax: '',
certificateId: '',
certificateName: '',
}];
} else if(vm.formExam.certificateType == 1) {
vm.formComponent.certificate = '';
}
},
//校验考试通过平均分配置
checkCertificate () {
if(vm.formComponent.configure == 2) {
return true;
}
//空判断
if(vm.formExam.certificateType == 2) {
let checkIdList = [];
for(let i=0;i<vm.formExam.exam.length;i++) {
checkIdList[i] = vm.formExam.exam[i].certificateId;
if(vm.formExam.exam[i].certificateId == ''){
vm.$message('证书不能为空');
return false;
}
if(vm.formExam.exam[i].examCount == ''){
vm.$message('考试门数不能为空');
return false;
}
if(vm.formExam.exam[i].rangeMin == '' || vm.formExam.exam[i].rangeMax == ''){
vm.$message('分数不能为空');
return false;
}
}
// 判断证书不能重复
checkIdList = checkIdList.sort();
for(let j=0;j<checkIdList.length-1;j++) {
if (checkIdList[j] == checkIdList[j+1]) {
vm.$message('证书不能重复选择');
return false;
}
}
// 考试门数必须相同
for(let i=0;i<vm.formExam.exam.length-1;i++) {
if (vm.formExam.exam[i].examCount != vm.formExam.exam[i+1].examCount) {
vm.$message('考试门数必须相同');
return false;
}
}
} else if(vm.formExam.certificateType == 1) {
//组件通过即发放 证书必填
if(vm.formComponent.configure == 1 && vm.formExam.certificateType == 1) {
if(vm.formComponent.certificate == '') {
vm.$message('证书不能为空!');
return false;
}
}
}
return true;
},
blurName() {
vm.visibleName = false;
setTimeout(function(){
// console.log('失去焦点');
vm.submitForm('formData');
},200)
},
focusName() {
let textLength = vm.formData.organizationName.length;
if(textLength == 0) {
vm.visibleName = true;
} else {
vm.visibleName = false;
}
},
changeOrganizationName() {
let textLength = vm.formData.organizationName.length;
console.log('文字长度',textLength);
if(textLength == 0) {
vm.visibleName = true;
} else {
vm.visibleName = false;
}
},
checkDefault() {
// console.log('点击checkDefault')
vm.formData.organizationName = vm.organizationContent;
vm.visibleName = false;
},
tagDrop() {
this.$nextTick(function() {
if(vm.tagsComponent.length > 0) {
const ele = document.querySelector('.check-component .el-col-20');
// console.log('ele',ele);
// Sortable.create(ele,{});
Sortable.create(ele, {
onEnd({ newIndex, oldIndex }) {
const currRow = vm.tagsComponent.splice(oldIndex, 1)[0]
vm.tagsComponent.splice(newIndex, 0, currRow)
}
})
}
});
},
} }
}; };
</script> </script>
...@@ -3087,6 +3549,10 @@ export default { ...@@ -3087,6 +3549,10 @@ export default {
color: #409eff; color: #409eff;
border: 1px solid #409eff; border: 1px solid #409eff;
} }
.el-popover--plain {
padding: 18px 20px;
top: 40px;
}
} }
.second-step { .second-step {
margin: 10px 0 0 20px; margin: 10px 0 0 20px;
...@@ -3162,6 +3628,25 @@ export default { ...@@ -3162,6 +3628,25 @@ export default {
.third-step { .third-step {
margin: 30px 0 0px 30px; margin: 30px 0 0px 30px;
padding-bottom: 30px; padding-bottom: 30px;
.achievement {
margin-top: 60px;
}
.form-component {
position: relative;
}
.check-component {
top: 0px;
left: 550px;
position: absolute;
z-index: 999;
}
.el-tag {
margin-top: 5px;
display: table;
}
.el-configure {
width: 200px;
}
} }
} }
</style> </style>
\ No newline at end of file
<template> <template>
<div class="create-component-wrap"> <div class="create-component-wrap">
<bread-crumb <bread-crumb
:curmbFirst="curmbFirst" :curmbFirst="curmbFirst"
:curmbSecond="curmbSecond" :curmbSecond="curmbSecond"
:curmbThird="curmbThird" :curmbThird="curmbThird"
:jumPathThird="jumPathThird"> :jumPathThird="jumPathThird">
</bread-crumb> </bread-crumb>
...@@ -17,8 +17,8 @@ ...@@ -17,8 +17,8 @@
<div class="btn-container"> <div class="btn-container">
<el-button v-if="stepNum == 1 && (componentStatus == 1 || !componentStatus)" @click="storageAndNext(1)" type="default" size="small">暂存</el-button> <el-button v-if="stepNum == 1 && (componentStatus == 1 || !componentStatus)" @click="storageAndNext(1)" type="default" size="small">暂存</el-button>
<el-button v-if="stepNum == 1" @click="storageAndNext(2)" type="primary" size="small" style="margin-left:0;">下一步</el-button> <el-button v-if="stepNum == 1" @click="storageAndNext(2)" type="primary" size="small" style="margin-left:0;">下一步</el-button>
<el-button v-if="stepNum == 2 && (componentStatus == 1 || !componentStatus)" :disabled="conditionSelect" @click="finishConponent(1)" type="default" size="small">暂存</el-button> <el-button v-if="stepNum == 2 && (componentStatus == 1 || !componentStatus)" :disabled="newconditionSelect" @click="finishConponent(1)" type="default" size="small">暂存</el-button>
<el-button v-if="stepNum == 2" @click="finishConponent(2)" :disabled="conditionSelect" type="primary" size="small" style="margin-left:0;">完成</el-button> <el-button v-if="stepNum == 2" @click="finishConponent(2)" :disabled="newconditionSelect" type="primary" size="small" style="margin-left:0;">完成</el-button>
</div> </div>
</div> </div>
<div class="first-step" v-if="stepNum == 1"> <div class="first-step" v-if="stepNum == 1">
...@@ -79,13 +79,13 @@ ...@@ -79,13 +79,13 @@
</el-col> </el-col>
</el-row> </el-row>
<el-form-item v-if="hasCertificate" label="组件完成(%)" prop="certificateCondition"> <el-form-item v-if="hasCertificate" label="组件完成(%)" prop="certificateCondition">
<el-input-number <el-input-number
v-model="portalComponent.certificateCondition" v-model="portalComponent.certificateCondition"
controls-position="right" controls-position="right"
@change="handleChange" @change="handleChange"
:disabled="componentStatus == 3 || componentStatus == 4" :disabled="componentStatus == 3 || componentStatus == 4"
:step="10" :step="10"
:min="10" :min="10"
:max="100"> :max="100">
</el-input-number> </el-input-number>
</el-form-item> </el-form-item>
...@@ -104,28 +104,36 @@ ...@@ -104,28 +104,36 @@
<el-row> <el-row>
<el-col :span="10"> <el-col :span="10">
<el-form-item label="模块名称" prop="name"> <el-form-item label="模块名称" prop="name">
<el-input v-model="item.name" @blur="moduleNameValidate(index)" :disabled="conditionSelect || idType == 2 || item.moduleType == 2 || (item.id != '' && item.openFlag == 2)" size="small" placeholder="请选择模块名称" style="width:288px;"></el-input> <el-input v-model="item.name" @blur="moduleNameValidate(index)" :disabled="fieldDisabled(item)" size="small" placeholder="请选择模块名称" style="width:288px;"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="10" v-if="idType == 1"> <el-col :span="8" v-if="idType == 1">
<el-form-item label="是否对外开放" prop="openFlag"> <el-form-item label="是否对外开放" prop="openFlag">
<el-radio-group v-model="item.openFlag" @change="selectIsOpen(index)" :disabled="conditionSelect || item.moduleType == 2 || (item.id != '' && item.openFlag == 2)"> <el-radio-group v-model="item.openFlag" @change="selectIsOpen(index)" :disabled="fieldDisabled(item) || item.openDisabled">
<el-radio :label="2"></el-radio> <el-radio :label="2"></el-radio>
<el-radio :label="1"></el-radio> <el-radio :label="1"></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6" v-if="idType == 1">
<el-form-item label="是否启用" prop="status">
<el-radio-group v-model="item.status" @change="selectIsOpenStatus(index)" :disabled="fieldDisabled(item)">
<el-radio :label="2"></el-radio>
<el-radio :label="1"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row> </el-row>
</el-form> </el-form>
<div class="template-btn" v-if="idType == 1"> <div class="template-btn" v-if="idType == 1">
<span class="word-size">添加一个模板</span> <span class="word-size">添加一个模板</span>
<el-button <el-button
:disabled="conditionSelect || item.moduleType == 2 || (item.id != '' && item.openFlag == 2)" :disabled="fieldDisabled(item)"
v-for="(_item,_index) in templateDataList" v-for="(_item,_index) in templateDataList"
:key="_index" :key="_index"
type="primary" type="primary"
size="small" size="small"
@click="addTemplate(_item,index)" @click="addTemplate(_item,index)"
style="margin-right:0px;">{{_item.name}}</el-button> style="margin-right:0px;">{{_item.name}}</el-button>
</div> </div>
<div v-for="(item1,index1) in item.templetModelList" :key="index1"> <div v-for="(item1,index1) in item.templetModelList" :key="index1">
...@@ -134,7 +142,7 @@ ...@@ -134,7 +142,7 @@
<div class="template-content-div"> <div class="template-content-div">
<div class="title"> <div class="title">
{{item1.name}} {{item1.name}}
<span v-if="conditionAnd && item.moduleType == 1 && (item.id == '' || (item.id != '' && item.openFlag == 1)) && idType == 1"> <span v-if="newfieldDisabled(item)">
变更顺序: 变更顺序:
<i class="el-icon-caret-bottom" @click="sortUp(index,index1)" style="font-size:17px;"></i> <i class="el-icon-caret-bottom" @click="sortUp(index,index1)" style="font-size:17px;"></i>
<i class="el-icon-caret-top" @click="sortDown(index,index1)" style="font-size:17px;"></i> <i class="el-icon-caret-top" @click="sortDown(index,index1)" style="font-size:17px;"></i>
...@@ -150,15 +158,15 @@ ...@@ -150,15 +158,15 @@
<el-col :span="10" class="item-icon"> <el-col :span="10" class="item-icon">
<span class="require">*</span> <span class="require">*</span>
<el-form-item label="考试名称"> <el-form-item label="考试名称">
<el-input v-model="item3.content1" :disabled="conditionSelect || item.moduleType == 2 || (item.id != '' && item.openFlag == 2) || idType == 2" size="small" maxlength='30' placeholder="请输入考试名称" style="width:288px;"></el-input> <el-input v-model="item3.content1" :disabled="fieldDisabled(item)" size="small" maxlength='30' placeholder="请输入考试名称" style="width:288px;"></el-input>
<span v-if="conditionAnd && item2.numFlag == 2 && index3 == 0 && item.moduleType == 1 && idType == 1 && (item.id == '' || (item.id != '' && item.openFlag == 1))"><i class="el-icon-circle-plus" @click="addMatterCourse(index,index1,index2)" style="color:#449284;"></i></span> <span v-if="newfieldDisabled(item) && item2.numFlag == 2 && index3 == 0 "><i class="el-icon-circle-plus" @click="addMatterCourse(index,index1,index2)" style="color:#449284;"></i></span>
<span v-if="conditionAnd && item2.numFlag == 2 && index3 > 0 && item.moduleType == 1 && idType == 1 && (item.id == '' || (item.id != '' && item.openFlag == 1))"><i class="el-icon-delete" @click="deleteMatterCourse(index,index1,index2,index3)" style="color:red;"></i></span> <span v-if="newfieldDisabled(item) && item2.numFlag == 2 && index3 > 0 "><i class="el-icon-delete" @click="deleteMatterCourse(index,index1,index2,index3)" style="color:red;"></i></span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="10" class="item-icon"> <el-col :span="10" class="item-icon">
<span class="require">*</span> <span class="require">*</span>
<el-form-item label="关联考试"> <el-form-item label="关联考试">
<el-select v-model="item3.content2" @focus="examIDfocus(index,index1,index2,index3)" @change="changeExamID" :disabled="conditionSelect || item.moduleType == 2 || idType == 2 || (item.id != '' && item.openFlag == 2)" size="small" placeholder="请选择考试ID" style="width:288px;"> <el-select v-model="item3.content2" filterable @focus="examIDfocus(index,index1,index2,index3)" @change="changeExamID" :disabled="fieldDisabled(item)" size="small" placeholder="请选择考试ID" style="width:288px;">
<el-option <el-option
v-for="(itemTest,indexTest) in testIdSelect" v-for="(itemTest,indexTest) in testIdSelect"
:key="indexTest" :key="indexTest"
...@@ -173,7 +181,7 @@ ...@@ -173,7 +181,7 @@
<el-col :span="10" class="item-icon"> <el-col :span="10" class="item-icon">
<span class="require">*</span> <span class="require">*</span>
<el-form-item label="配置证书"> <el-form-item label="配置证书">
<el-radio-group v-model="item3.certificateFlag" :disabled="conditionSelect || item.moduleType == 2 || idType == 2 || (item.id != '' && item.openFlag == 2)"> <el-radio-group v-model="item3.certificateFlag" :disabled="fieldDisabled(item)">
<el-radio :label="2"></el-radio> <el-radio :label="2"></el-radio>
<el-radio :label="1"></el-radio> <el-radio :label="1"></el-radio>
</el-radio-group> </el-radio-group>
...@@ -182,7 +190,7 @@ ...@@ -182,7 +190,7 @@
<el-col :span="10" v-if="item3.certificateFlag == 2" class="item-icon"> <el-col :span="10" v-if="item3.certificateFlag == 2" class="item-icon">
<span class="require">*</span> <span class="require">*</span>
<el-form-item label="选择证书"> <el-form-item label="选择证书">
<el-select v-model="item3.content4" :disabled="conditionSelect || item.moduleType == 2 || idType == 2 || (item.id != '' && item.openFlag == 2)" size="small" placeholder="请选择证书" style="width:288px;"> <el-select v-model="item3.content4" :disabled="fieldDisabled(item)" size="small" placeholder="请选择证书" style="width:288px;">
<el-option <el-option
v-for="(itemCertificate,indexCertificate) in certificateIdSelect" v-for="(itemCertificate,indexCertificate) in certificateIdSelect"
:key="indexCertificate" :key="indexCertificate"
...@@ -202,15 +210,15 @@ ...@@ -202,15 +210,15 @@
<el-col :span="10" class="item-icon"> <el-col :span="10" class="item-icon">
<span class="require">*</span> <span class="require">*</span>
<el-form-item label="课程名称"> <el-form-item label="课程名称">
<el-input v-model="item3.content1" :disabled="conditionSelect || item.moduleType == 2 || idType == 2 || (item.id != '' && item.openFlag == 2)" size="small" maxlength='30' placeholder="请输入课程名称" style="width:288px;"></el-input> <el-input v-model="item3.content1" :disabled="fieldDisabled(item)" size="small" maxlength='30' placeholder="请输入课程名称" style="width:288px;"></el-input>
<span v-if="conditionAnd && item2.numFlag == 2 && index3 == 0 && item.moduleType == 1 && idType == 1 && (item.id == '' || (item.id != '' && item.openFlag == 1))"><i class="el-icon-circle-plus" @click="addMatterCourse(index,index1,index2)" style="color:#449284;"></i></span> <span v-if="newfieldDisabled(item) && item2.numFlag == 2 && index3 == 0"><i class="el-icon-circle-plus" @click="addMatterCourse(index,index1,index2)" style="color:#449284;"></i></span>
<span v-if="conditionAnd && item2.numFlag == 2 && index3 > 0 && item.moduleType == 1 && idType == 1 && (item.id == '' || (item.id != '' && item.openFlag == 1))"><i class="el-icon-delete" @click="deleteMatterCourse(index,index1,index2,index3)" style="color:red;"></i></span> <span v-if="newfieldDisabled(item) && item2.numFlag == 2 && index3 > 0"><i class="el-icon-delete" @click="deleteMatterCourse(index,index1,index2,index3)" style="color:red;"></i></span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="10" class="item-icon"> <el-col :span="10" class="item-icon">
<span class="require">*</span> <span class="require">*</span>
<el-form-item label="关联课程"> <el-form-item label="关联课程">
<el-select v-model="item3.content2" @focus="courseIDfocus(index,index1,index2,index3)" @change="changeCourseID" :disabled="conditionSelect || item.moduleType == 2 || idType == 2 || (item.id != '' && item.openFlag == 2)" size="small" placeholder="请选择课程ID" style="width:288px;"> <el-select v-model="item3.content2" filterable @focus="courseIDfocus(index,index1,index2,index3)" @change="changeCourseID" :disabled="fieldDisabled(item)" size="small" placeholder="请选择课程ID" style="width:288px;">
<el-option <el-option
v-for="(itemCourse,indexCourse) in courseIdSelect" v-for="(itemCourse,indexCourse) in courseIdSelect"
:key="indexCourse" :key="indexCourse"
...@@ -365,6 +373,7 @@ export default { ...@@ -365,6 +373,7 @@ export default {
componentStatus: '', componentStatus: '',
resultFlag: '', resultFlag: '',
conditionSelect: false, conditionSelect: false,
newconditionSelect: false,
conditionAnd: true, conditionAnd: true,
isStorage: false, isStorage: false,
dialogTitle: '选择模板', dialogTitle: '选择模板',
...@@ -422,7 +431,7 @@ export default { ...@@ -422,7 +431,7 @@ export default {
], ],
"introduce": [ "introduce": [
{ required: true, message: '请输入组件简介', trigger: 'blur' }, { required: true, message: '请输入组件简介', trigger: 'blur' },
{ min: 1, max: 150, message: '超出可输入的最大长度', trigger: 'blur' } { min: 1, max: 151, message: '超出可输入的最大长度', trigger: 'blur' }
], ],
"certificateId": [ "certificateId": [
{ required: true, message: '请选择证书', trigger: 'blur' }, { required: true, message: '请选择证书', trigger: 'blur' },
...@@ -434,7 +443,7 @@ export default { ...@@ -434,7 +443,7 @@ export default {
moduleRules: { moduleRules: {
"name": [ "name": [
{ required: true, message: '请输入模块名称', trigger: 'blur' }, { required: true, message: '请输入模块名称', trigger: 'blur' },
{ min: 2, max: 20, message: '输入长度为2-20个字符', trigger: 'blur' }, { min: 2, max: 40, message: '输入长度为2-40个字符', trigger: 'blur' },
{ validator: function(rule, value, callback) { { validator: function(rule, value, callback) {
validateModuleName(rule, value, callback, '模块名称已存在,请修改名称后保存') validateModuleName(rule, value, callback, '模块名称已存在,请修改名称后保存')
}, },
...@@ -442,6 +451,9 @@ export default { ...@@ -442,6 +451,9 @@ export default {
], ],
"openFlag": [ "openFlag": [
{ required: true, message: '请选择是否对外开放', trigger: 'blur' } { required: true, message: '请选择是否对外开放', trigger: 'blur' }
],
"stauts": [
{ required: true, message: '请选择是否启用', trigger: 'blur' }
] ]
} }
} }
...@@ -453,20 +465,29 @@ export default { ...@@ -453,20 +465,29 @@ export default {
]) ])
}, },
created() { created() {
console.log("#######==========#####")
vm = this vm = this
vm.componentId = vm.$route.query.id vm.componentId = vm.$route.query.id;
vm.componentStatus = vm.$route.query.status // 3 启用 4 禁用 vm.componentStatus = vm.$route.query.status; // 3 启用 4 禁用
vm.resultFlag = vm.$route.query.resultFlag // 判断可编辑范围是基础信息还是全部信息 1 为全部 2 为基础 vm.resultFlag = vm.$route.query.resultFlag; // 判断可编辑范围是基础信息还是全部信息 1 为全部 2 为基础
vm.getCertificateList() // 获取证书列表 vm.getCertificateList(); // 获取证书列表
vm.componentBasicInfo() // 根据ID查询组件基本信息 vm.componentBasicInfo(); // 根据ID查询组件基本信息
vm.getTestListData(); // 获取考试列表
vm.getCourseData(); // 获取课程列表
vm.getTemplateData(); // 获取模板信息
vm.conditionSelect = vm.resultFlag == 2 || vm.componentStatus == 3 || vm.componentStatus == 4 vm.conditionSelect = vm.resultFlag == 2 || vm.componentStatus == 3 || vm.componentStatus == 4
// vm.conditionSelect = vm.resultFlag == 2 || vm.componentStatus == 4
vm.newconditionSelect = vm.componentStatus == 4
if(vm.componentStatus && vm.resultFlag) { if(vm.componentStatus && vm.resultFlag) {
vm.conditionAnd = vm.resultFlag == 1 && vm.componentStatus != 3 && vm.componentStatus != 4 //vm.conditionAnd = vm.resultFlag == 1 && vm.componentStatus != 3 && vm.componentStatus != 4
vm.conditionAnd = vm.componentStatus != 4
} }
}, },
// 挂载到Dom完成时 // 挂载到Dom完成时
mounted: function() { mounted: function() {
commonUtil.resizeHeight() commonUtil.resizeHeight()
console.log('idType==>',vm.idType)
}, },
methods: { methods: {
// 根据ID查询组件基本信息 // 根据ID查询组件基本信息
...@@ -583,10 +604,10 @@ export default { ...@@ -583,10 +604,10 @@ export default {
} }
if(flag == 2) { if(flag == 2) {
vm.stepNum = 2 vm.stepNum = 2
vm.getTemplateData() //vm.getTemplateData()
vm.getModuleData() vm.getModuleData()
vm.getTestListData() // vm.getTestListData()
vm.getCourseData() // vm.getCourseData()
} else { } else {
vm.$message.info("暂存成功!") vm.$message.info("暂存成功!")
} }
...@@ -607,10 +628,10 @@ export default { ...@@ -607,10 +628,10 @@ export default {
} }
if(flag == 2) { if(flag == 2) {
vm.stepNum = 2 vm.stepNum = 2
vm.getTemplateData() //vm.getTemplateData()
vm.getModuleData() vm.getModuleData()
vm.getTestListData() // vm.getTestListData()
vm.getCourseData() // vm.getCourseData()
} else { } else {
vm.$message.info("暂存成功!") vm.$message.info("暂存成功!")
} }
...@@ -635,7 +656,7 @@ export default { ...@@ -635,7 +656,7 @@ export default {
image.onload = function() { image.onload = function() {
let _this = this let _this = this
if(_this.width != 750 || _this.height != 420) { if(_this.width != 750 || _this.height != 420) {
vm.$message.info('图片不符合规范,请根据规范上传图片') vm.$message.info('图片不符合规范,请根据规范上传图片')
}else { }else {
openLoading(vm) openLoading(vm)
doUpload(vm,file, getFilePath(file,null), 'preview4', 'progress1', 1).then(function (path) { doUpload(vm,file, getFilePath(file,null), 'preview4', 'progress1', 1).then(function (path) {
...@@ -718,11 +739,43 @@ export default { ...@@ -718,11 +739,43 @@ export default {
vm.GET('portal/portalComponent/ModuleList',{componentId: vm.componentId}).then((res) => { vm.GET('portal/portalComponent/ModuleList',{componentId: vm.componentId}).then((res) => {
if( res.code == '000000') { if( res.code == '000000') {
vm.componentList.moduleModelList = res.data.moduleModelList vm.componentList.moduleModelList = res.data.moduleModelList
vm.setOpenStatusFromData(vm.componentList.moduleModelList)
}else { }else {
vm.$message.info(res.message) vm.$message.info(res.message)
} }
}) })
}, },
// 从接口数据的status判断启用状态
setOpenStatusFromData(list){
// 1模块未启用 2模块已启用
for(let i=0;i<list.length;i++){
if(list[i].status == 2){
vm.componentList.moduleModelList[i].statusFlag = true;
}else{
vm.componentList.moduleModelList[i].statusFlag = false;
vm.componentList.moduleModelList[i].openDisabled = true;
}
}
},
fieldDisabled(item){
// return vm.conditionSelect || item.moduleType == 2 || (item.id != '' && item.openFlag == 2) || vm.idType == 2 || item.statusFlag
return vm.newconditionSelect || item.moduleType == 2 || vm.idType == 2 || (vm.componentStatus != 1 && vm.componentStatus != 2 && item.statusFlag);
},
newfieldDisabled(item) {
//conditionAnd && item.moduleType == 1 && (item.id == '' || (item.id != '' && item.status == 1)) && idType == 1
return vm.conditionAnd && ((vm.componentStatus == 1 || vm.componentStatus == 2) || ((vm.componentStatus != 1 || vm.componentStatus != 2) && !item.statusFlag)) && item.moduleType == 1 && vm.idType == 1
},
// 选择是否启用状态
selectIsOpenStatus(index) {
const status = vm.componentList.moduleModelList[index].status;
if(status == 1){
vm.componentList.moduleModelList[index].openFlag = 1;
vm.componentList.moduleModelList[index].openDisabled = true;
}else{
vm.componentList.moduleModelList[index].openDisabled = false;
}
vm.$forceUpdate();
},
// 模块是否对外开放 // 模块是否对外开放
selectIsOpen(index) { selectIsOpen(index) {
for(let i = 0; i < vm.componentList.moduleModelList.length; i++) { for(let i = 0; i < vm.componentList.moduleModelList.length; i++) {
...@@ -740,6 +793,12 @@ export default { ...@@ -740,6 +793,12 @@ export default {
break break
} }
} }
// const openFlag = vm.componentList.moduleModelList[index].openFlag;
// if(openFlag == 2){
//// vm.componentList.moduleModelList[index].openFlag = 1;
// vm.componentList.moduleModelList[index].statusFlag = true;
// }
// vm.$forceUpdate();
}, },
// 删除tab // 删除tab
removeTab(targetName) { removeTab(targetName) {
...@@ -751,7 +810,7 @@ export default { ...@@ -751,7 +810,7 @@ export default {
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
if(vm.componentList.moduleModelList[i].id != '' && vm.componentList.moduleModelList[i].moduleType == 1) { if(vm.componentList.moduleModelList[i].id != '' && vm.componentList.moduleModelList[i].moduleType == 1) {
vm.GET('portal/portalComponent/deletePortalModuleById',{id:vm.componentList.moduleModelList[i].id}).then((res) => { vm.GET('portal/portalComponent/deletePortalModuleById',{id:vm.componentList.moduleModelList[i].id}).then((res) => {
if( res.code == '000000') { if( res.code == '000000') {
vm.$message.info('成功删除模块!') vm.$message.info('成功删除模块!')
...@@ -770,7 +829,7 @@ export default { ...@@ -770,7 +829,7 @@ export default {
}) })
}) })
}else { }else {
if(vm.componentList.moduleModelList[i].id) { if(vm.componentList.moduleModelList[i].id) {
vm.GET('portal/portalComponent/deletePortalModuleById',{id:vm.componentList.moduleModelList[i].id}).then((res) => { vm.GET('portal/portalComponent/deletePortalModuleById',{id:vm.componentList.moduleModelList[i].id}).then((res) => {
if( res.code == '000000') { if( res.code == '000000') {
vm.$message.info('成功删除模块!') vm.$message.info('成功删除模块!')
...@@ -794,8 +853,10 @@ export default { ...@@ -794,8 +853,10 @@ export default {
name: '', name: '',
openFlag: 1, // 1不开放 2开放 openFlag: 1, // 1不开放 2开放
moduleType: 1, // 2为从预设模块中添加 moduleType: 1, // 2为从预设模块中添加
status: 1, // 1 不启用 2启用
templetModelList: [] templetModelList: []
}) });
vm.componentList.moduleModelList[(vm.componentList.moduleModelList.length - 1)].openDisabled = true;
}, },
// 添加模板 // 添加模板
addTemplate(item,index) { addTemplate(item,index) {
...@@ -844,7 +905,7 @@ export default { ...@@ -844,7 +905,7 @@ export default {
content1: '', content1: '',
content2: '' content2: ''
}] }]
}) })
} }
} }
vm.templetIndex ++ vm.templetIndex ++
...@@ -978,11 +1039,10 @@ export default { ...@@ -978,11 +1039,10 @@ export default {
vm.$message.info("请输入模块名称") vm.$message.info("请输入模块名称")
return return
} }
if(isEmptyList(vm.componentList.moduleModelList[i].templetModelList)) { if(isEmptyList(vm.componentList.moduleModelList[i].templetModelList) && vm.componentList.moduleModelList[i].status == 2 ) {
vm.$message.info("模块内容不能为空") vm.$message.info("模块内容不能为空")
return return
} }
for(let j = 0; j < vm.componentList.moduleModelList[i].templetModelList.length; j++) { for(let j = 0; j < vm.componentList.moduleModelList[i].templetModelList.length; j++) {
for(let k = 0; k < vm.componentList.moduleModelList[i].templetModelList[j].partModelList.length; k++) { for(let k = 0; k < vm.componentList.moduleModelList[i].templetModelList[j].partModelList.length; k++) {
// 考试 // 考试
...@@ -997,7 +1057,6 @@ export default { ...@@ -997,7 +1057,6 @@ export default {
return return
} }
} }
} }
} }
} }
...@@ -1026,27 +1085,27 @@ export default { ...@@ -1026,27 +1085,27 @@ export default {
vm.componentList.moduleModelList[i].templetModelList[j].partModelList[k].partContentModelList[0].content3 = vm.certificateIdSelect[q].name vm.componentList.moduleModelList[i].templetModelList[j].partModelList[k].partContentModelList[0].content3 = vm.certificateIdSelect[q].name
} }
} }
} }
} }
} }
} }
} }
} }
} }
vm.$nextTick(() => { vm.$nextTick(() => {
for(let i=0;i<vm.componentList.moduleModelList.length;i++) { for(let i=0;i<vm.componentList.moduleModelList.length;i++) {
if(!vm.componentList.moduleModelList[i].name) { if(!vm.componentList.moduleModelList[i].name) {
return if(flag == 2) {
}else { return
vm.POST('portal/portalComponent/insertOrUpdatePortalModule',{model: vm.componentList.moduleModelList,status: flag}).then((res) => { }
if( res.code == '000000') {
vm.enableComponent(req, flag)
}
})
} }
} }
console.log(vm.componentList.moduleModelList)
vm.POST('portal/portalComponent/insertOrUpdatePortalModule',{model: vm.componentList.moduleModelList,status: flag}).then((res) => {
if( res.code == '000000') {
vm.enableComponent(req, flag)
}
})
}) })
}, },
// 启用 // 启用
...@@ -1297,7 +1356,7 @@ export default { ...@@ -1297,7 +1356,7 @@ export default {
color: #999; color: #999;
padding: 0px 0 15px; padding: 0px 0 15px;
} }
} }
.module-form { .module-form {
.el-input__inner { .el-input__inner {
......
<template> <template>
<div class="item-component-wrap"> <div class="item-component-wrap">
<bread-crumb <bread-crumb
:curmbFirst="curmbFirst" :curmbFirst="curmbFirst"
:curmbSecond="curmbSecond"> :curmbSecond="curmbSecond">
</bread-crumb> </bread-crumb>
<div class="component-content screenSet" id="screenSet"> <div class="component-content screenSet" id="screenSet">
...@@ -34,8 +34,8 @@ ...@@ -34,8 +34,8 @@
<el-row :gutter="10" class="row create-button" style="margin-right:0;"> <el-row :gutter="10" class="row create-button" style="margin-right:0;">
<el-button type="primary" size="small" :disabled="idType == 2 && masterAdministratorFlag == 'false'" @click="createComponent">新建项目组件</el-button> <el-button type="primary" size="small" :disabled="idType == 2 && masterAdministratorFlag == 'false'" @click="createComponent">新建项目组件</el-button>
</el-row> </el-row>
<el-table <el-table
:data="tableData" :data="tableData"
style="width: 100%"> style="width: 100%">
<el-table-column prop="id" label="ID编号" min-width="100" align="center"></el-table-column> <el-table-column prop="id" label="ID编号" min-width="100" align="center"></el-table-column>
<el-table-column prop="name" label="组件名称" min-width="200" align="center"></el-table-column> <el-table-column prop="name" label="组件名称" min-width="200" align="center"></el-table-column>
...@@ -129,10 +129,10 @@ export default { ...@@ -129,10 +129,10 @@ export default {
"introduce": [ "introduce": [
{ required: true, message: '请输入组件简介', trigger: 'blur' }, { required: true, message: '请输入组件简介', trigger: 'blur' },
], ],
} }
} }
}, },
computed: { computed: {
...mapGetters([ ...mapGetters([
...@@ -143,9 +143,9 @@ export default { ...@@ -143,9 +143,9 @@ export default {
}, },
created() { created() {
vm = this vm = this
vm.search()
vm.idType = localStorage.getItem('storageIdType') vm.idType = localStorage.getItem('storageIdType')
vm.masterAdministratorFlag = localStorage.getItem('storageMaster') vm.masterAdministratorFlag = localStorage.getItem('storageMaster')
vm.search()
}, },
// 挂载到Dom完成时 // 挂载到Dom完成时
mounted: function() { mounted: function() {
......
...@@ -360,54 +360,84 @@ export default { ...@@ -360,54 +360,84 @@ export default {
} }
}); });
} else { } else {
if (type === 8) { // if (type === 8) {
//取消审批值对应2 // //取消审批值对应2
type = 2; // type = 2;
let req = { // let req = {
portalProjectId: projectId, // portalProjectId: projectId,
warnType: 5 // warnType: 5
}; // };
vm.GET("portal/portalCheck/remindPortalCheck", req).then(res => { // vm.GET("portal/portalCheck/remindPortalCheck", req).then(res => {
vm.$message.info(res.message); // vm.$message.info(res.message);
if (res.code == "000000") { // if (res.code == "000000") {
console.log(res); // console.log(res);
vm.getProjectList(); // vm.getProjectList();
} // }
}); // });
} // }
if (type == 4 || type == 6) { // if (type == 4 || type == 6) {
//发送消息 // //发送消息
let warnType = ""; // let warnType = "";
if (type == 4) { // if (type == 4) {
warnType = 3; // warnType = 3;
} else if (type == 6) { // } else if (type == 6) {
warnType = 4; // warnType = 4;
} // }
let req = { // let req = {
portalProjectId: projectId, // portalProjectId: projectId,
warnType: warnType // warnType: warnType
}; // };
vm.GET("portal/portalCheck/remindPortalCheck", req).then(res => { // vm.GET("portal/portalCheck/remindPortalCheck", req).then(res => {
vm.$message.info(res.message); // vm.$message.info(res.message);
if (res.code == "000000") { // if (res.code == "000000") {
console.log(res); // console.log(res);
vm.getProjectList(); // vm.getProjectList();
} // }
}); // });
} // }
let req = { let req = {
projectId: projectId, projectId: projectId,
changeStatus: type changeStatus: vm.getType(type)
}; };
vm.POST("portal/portalInfo/changeStatus", req).then(res => { vm.POST("portal/portalInfo/changeStatus", req).then(res => {
vm.$message.info(res.message); vm.$message.info(res.message);
if (res.code == "000000") { if (res.code == "000000") {
console.log(res); console.log(res);
vm.getProjectList(); vm.getProjectList();
//changeStatus之后remindPortalCheck
if (type == 4 || type == 6 || type == 8) {
//发送消息
let warnType = "";
if (type == 4) {
warnType = 3;
} else if (type == 6) {
warnType = 4;
} else if (type == 8) {
warnType = 5;
}
let req = {
portalProjectId: projectId,
warnType: warnType
};
vm.GET("portal/portalCheck/remindPortalCheck", req).then(res => {
vm.$message.info(res.message);
if (res.code == "000000") {
vm.getProjectList();
}
});
}
} }
}); });
} }
}, },
getType(value) {
let data = value;
if(data == 8) {
data = 2;
}
return data;
},
//删除项目 //删除项目
delItem(row) { delItem(row) {
let req = {}; let req = {};
......
...@@ -26,12 +26,20 @@ ...@@ -26,12 +26,20 @@
label="年龄" label="年龄"
align="center" align="center"
min-width="70px"> min-width="70px">
<template slot-scope="scope">
<span v-if="scope.row.age || scope.row.age===0">{{scope.row.age}}</span>
<span v-else>-</span>
</template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="id" prop="idNo"
label="身份证号" label="身份证号"
align="center" align="center"
min-width="220"> min-width="220">
<template slot-scope="scope">
<span v-if="scope.row.idNo">{{scope.row.idNo}}</span>
<span v-else>-</span>
</template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="mobilePhone" prop="mobilePhone"
...@@ -43,7 +51,8 @@ ...@@ -43,7 +51,8 @@
prop="labelId" prop="labelId"
label="分组" label="分组"
align="center" align="center"
min-width="200"> min-width="200"
:show-overflow-tooltip="true">
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-row type="flex" justify="end" class="margin-top20"> <el-row type="flex" justify="end" class="margin-top20">
...@@ -85,6 +94,23 @@ ...@@ -85,6 +94,23 @@
hasSelectedList: Array, // 所有已选人数 hasSelectedList: Array, // 所有已选人数
}, },
mounted() { mounted() {
if(this.hasSelectedList.length){
this.hasSelectedList.forEach((item) => {
let groupNames = []
//转化分组
if(item.labelModels) {
item.labelModels.forEach(item => {
groupNames.push(item.label)
});
item.labelId = groupNames.join('、');
} else if(item.labelId){
item.labelId = item.labelId;
// item.labelId = '-';
}else {
item.labelId = '-';
}
});
}
this.eachHasSelectedList = this.getPageList(this.hasSelectedList) this.eachHasSelectedList = this.getPageList(this.hasSelectedList)
const totalLength = this.hasSelectedList.length const totalLength = this.hasSelectedList.length
this.paginationSet.total = totalLength this.paginationSet.total = totalLength
......
...@@ -97,6 +97,7 @@ ...@@ -97,6 +97,7 @@
:patientIdList="baseInfo.patientIdList" :patientIdList="baseInfo.patientIdList"
@closeSelectPatient="closeSelectPatient" @closeSelectPatient="closeSelectPatient"
@sureSelectPatient="sureSelectPatient(arguments)" @sureSelectPatient="sureSelectPatient(arguments)"
:selectPatientType="selectPatientType"
/> />
<has-selected-patient <has-selected-patient
v-if="isShowSelectedDialog" v-if="isShowSelectedDialog"
...@@ -109,7 +110,8 @@ ...@@ -109,7 +110,8 @@
<script> <script>
import BreadCrumb from '@/components/breadcrumb' import BreadCrumb from '@/components/breadcrumb'
import SelectPatient from '@/views/followup/plan-manage/dialog/select-patient'; // import SelectPatient from '@/views/followup/plan-manage/dialog/select-patient';
import SelectPatient from '@/views/patients/labels-manage/dialog/select-patitents';
import HasSelectedPatient from '@/views/followup/plan-manage/dialog/has-selected-patient'; import HasSelectedPatient from '@/views/followup/plan-manage/dialog/has-selected-patient';
import SetTimeNode from '@/views/followup/plan-manage/dialog/set-time-node'; import SetTimeNode from '@/views/followup/plan-manage/dialog/set-time-node';
import { createFollowPlan, getFollowupTableTemplate } from '@/utils/followup/followapis' import { createFollowPlan, getFollowupTableTemplate } from '@/utils/followup/followapis'
...@@ -151,6 +153,7 @@ ...@@ -151,6 +153,7 @@
}, },
isShowSelectPatient: false, isShowSelectPatient: false,
isShowSelectedDialog: false, isShowSelectedDialog: false,
selectPatientType: 1,
hasSelectedList: [], hasSelectedList: [],
rules: { rules: {
name: [{ required: true, message: '请输入随访计划名称', trigger: 'blur' }], name: [{ required: true, message: '请输入随访计划名称', trigger: 'blur' }],
......
...@@ -66,7 +66,8 @@ ...@@ -66,7 +66,8 @@
:patientIdList="planDetailData.patientIdList" :patientIdList="planDetailData.patientIdList"
:oldPatientIdList="selectResidentIdList" :oldPatientIdList="selectResidentIdList"
@closeSelectPatient="closeSelectPatient" @closeSelectPatient="closeSelectPatient"
@sureSelectPatient="sureSelectPatient(arguments)"> @sureSelectPatient="sureSelectPatient(arguments)"
:selectPatientType="selectPatientType">
</select-patient> </select-patient>
<has-selected-patient <has-selected-patient
v-if="isShowSelectedDialog" v-if="isShowSelectedDialog"
...@@ -83,7 +84,8 @@ ...@@ -83,7 +84,8 @@
</template> </template>
<script> <script>
import SelectPatient from '@/views/followup/plan-manage/dialog/select-patient'; // import SelectPatient from '@/views/followup/plan-manage/dialog/select-patient';
import SelectPatient from '@/views/patients/labels-manage/dialog/select-patitents';
import HasSelectedPatient from '@/views/followup/plan-manage/dialog/has-selected-patient'; import HasSelectedPatient from '@/views/followup/plan-manage/dialog/has-selected-patient';
import SetTimeNode from '@/views/followup/plan-manage/dialog/set-time-node'; import SetTimeNode from '@/views/followup/plan-manage/dialog/set-time-node';
...@@ -144,6 +146,7 @@ ...@@ -144,6 +146,7 @@
newHasSelectedList: [], newHasSelectedList: [],
initResidentList: [], //重置需要的居民列表 initResidentList: [], //重置需要的居民列表
initResidentIdList: [], //重置需要的id initResidentIdList: [], //重置需要的id
selectPatientType: 1,
} }
}, },
created() { created() {
...@@ -341,7 +344,7 @@ ...@@ -341,7 +344,7 @@
people = { people = {
nickname: item.patientName, nickname: item.patientName,
age: item.age, age: item.age,
id: item.idNo, idNo: item.idNo,
mobilePhone: item.mobilePhone, mobilePhone: item.mobilePhone,
labelId: item.labelName, labelId: item.labelName,
patientId: item.patientId patientId: item.patientId
......
...@@ -136,7 +136,8 @@ ...@@ -136,7 +136,8 @@
:patientIdList="initialPatientIdList" :patientIdList="initialPatientIdList"
:oldPatientIdList="initialPatientIdList" :oldPatientIdList="initialPatientIdList"
@closeSelectPatient="closeSelectPatient" @closeSelectPatient="closeSelectPatient"
@sureSelectPatient="sureSelectPatient(arguments)"> @sureSelectPatient="sureSelectPatient(arguments)"
:selectPatientType="selectPatientType">
</select-patient> </select-patient>
<add-patient-time <add-patient-time
:showThisPage="showAddPatientTime" :showThisPage="showAddPatientTime"
...@@ -151,7 +152,8 @@ ...@@ -151,7 +152,8 @@
//结束随访dialog //结束随访dialog
import FinishFollowup from '@/views/followup/plan-manage/dialog/finish-followup'; import FinishFollowup from '@/views/followup/plan-manage/dialog/finish-followup';
//添加居民 //添加居民
import SelectPatient from '@/views/followup/plan-manage/dialog/select-patient'; // import SelectPatient from '@/views/followup/plan-manage/dialog/select-patient';
import SelectPatient from '@/views/patients/labels-manage/dialog/select-patitents';
//添加居民选择随访时间 //添加居民选择随访时间
import addPatientTime from '@/views/followup/plan-manage/dialog/add-patient-time'; import addPatientTime from '@/views/followup/plan-manage/dialog/add-patient-time';
...@@ -189,6 +191,7 @@ ...@@ -189,6 +191,7 @@
statusTotal: null, //每种状态的总数 statusTotal: null, //每种状态的总数
planTitle: '', //随访计划名称 planTitle: '', //随访计划名称
residentCrumb: [], //面包屑 residentCrumb: [], //面包屑
selectPatientType: 1,
getRowKeys(row) { getRowKeys(row) {
return row.patientId; return row.patientId;
}, },
......
...@@ -3,54 +3,54 @@ ...@@ -3,54 +3,54 @@
<bread-crumb :curmbFirst="curmbFirst"></bread-crumb> <bread-crumb :curmbFirst="curmbFirst"></bread-crumb>
<div class="message-content"> <div class="message-content">
<el-row> <el-row>
<el-col class="visitor screenSet" :span="24"> <!--<el-col class="visitor screenSet" :span="24">-->
<div class="visitor-title"> <!--<div class="visitor-title">-->
<div class="title">今日随访: <!--<div class="title">今日随访:-->
<span style="color:#449284;margin-right: 10px">{{todayPlansList.length}}</span> <!--<span style="color:#449284;margin-right: 10px">{{todayPlansList.length}}</span>-->
<span class="type-button" :style="{background:(planBtn?'rgba(68,146,132,0.06)':'#ffffff')}" @click="changeTodayPlansList(0)">未完成</span> <!--<span class="type-button" :style="{background:(planBtn?'rgba(68,146,132,0.06)':'#ffffff')}" @click="changeTodayPlansList(0)">未完成</span>-->
<span class="type-button" :style="{background:(!planBtn?'rgba(68,146,132,0.06)':'#ffffff')}" @click="changeTodayPlansList(1)">已过期</span> <!--<span class="type-button" :style="{background:(!planBtn?'rgba(68,146,132,0.06)':'#ffffff')}" @click="changeTodayPlansList(1)">已过期</span>-->
</div> <!--</div>-->
<span class="visitor-more" @click="lookMore(1)">查看更多</span> <!--<span class="visitor-more" @click="lookMore(1)">查看更多</span>-->
</div> <!--</div>-->
<div class="visitor-info"> <!--<div class="visitor-info">-->
<el-table <!--<el-table-->
:data="todayPlansList" <!--:data="todayPlansList"-->
style="width: 100%"> <!--style="width: 100%">-->
<el-table-column prop="patientName" label="姓名" align="center"></el-table-column> <!--<el-table-column prop="patientName" label="姓名" align="center"></el-table-column>-->
<el-table-column prop="appointTime" label="预约时间" align="center"></el-table-column> <!--<el-table-column prop="appointTime" label="预约时间" align="center"></el-table-column>-->
<el-table-column prop="fuTypeStr" label="随访方式" align="center"></el-table-column> <!--<el-table-column prop="fuTypeStr" label="随访方式" align="center"></el-table-column>-->
<el-table-column prop="content" label="操作" align="center"> <!--<el-table-column prop="content" label="操作" align="center">-->
<template slot-scope="scope"> <!--<template slot-scope="scope">-->
<span class="text-btn" @click="goToScale(scope.row)">随访录入</span> | <span class="text-btn" @click="changeFollowStatus(scope.row)">变更随访状态</span> <!--<span class="text-btn" @click="goToScale(scope.row)">随访录入</span> | <span class="text-btn" @click="changeFollowStatus(scope.row)">变更随访状态</span>-->
</template> <!--</template>-->
</el-table-column> <!--</el-table-column>-->
</el-table> <!--</el-table>-->
</div> <!--</div>-->
</el-col> <!--</el-col>-->
<el-col class="visitor screenSet" :span="24" style="margin-top: 0;margin-bottom: 0;"> <!--<el-col class="visitor screenSet" :span="24" style="margin-top: 0;margin-bottom: 0;">-->
<div class="visitor-title"> <!--<div class="visitor-title">-->
<div class="title">今日预约 <!--<div class="title">今日预约-->
<span class="type-button" :style="{background:(appointBtn?'rgba(68,146,132,0.06)':'#ffffff')}" @click="changeTodayAppointsList(0)" style="margin-left: 10px;">未完成</span> <!--<span class="type-button" :style="{background:(appointBtn?'rgba(68,146,132,0.06)':'#ffffff')}" @click="changeTodayAppointsList(0)" style="margin-left: 10px;">未完成</span>-->
<span class="type-button" :style="{background:(!appointBtn?'rgba(68,146,132,0.06)':'#ffffff')}" @click="changeTodayAppointsList(1)" >已过期</span> <!--<span class="type-button" :style="{background:(!appointBtn?'rgba(68,146,132,0.06)':'#ffffff')}" @click="changeTodayAppointsList(1)" >已过期</span>-->
</div> <!--</div>-->
<span class="visitor-more" @click="lookMore(2)">查看更多</span> <!--<span class="visitor-more" @click="lookMore(2)">查看更多</span>-->
</div> <!--</div>-->
<div class="visitor-info"> <!--<div class="visitor-info">-->
<el-table <!--<el-table-->
:data="todayAppointsList" <!--:data="todayAppointsList"-->
style="width: 100%"> <!--style="width: 100%">-->
<el-table-column prop="planName" label="随访计划名称" align="center"></el-table-column> <!--<el-table-column prop="planName" label="随访计划名称" align="center"></el-table-column>-->
<el-table-column prop="appointTime" label="随访计划时间" align="center"></el-table-column> <!--<el-table-column prop="appointTime" label="随访计划时间" align="center"></el-table-column>-->
<el-table-column prop="appointedCount" label="已经预约" align="center"></el-table-column> <!--<el-table-column prop="appointedCount" label="已经预约" align="center"></el-table-column>-->
<el-table-column prop="notAppointedCount" label="未预约" align="center"></el-table-column> <!--<el-table-column prop="notAppointedCount" label="未预约" align="center"></el-table-column>-->
<el-table-column prop="content" label="操作" align="center"> <!--<el-table-column prop="content" label="操作" align="center">-->
<template slot-scope="scope"> <!--<template slot-scope="scope">-->
<span class="text-btn" @click="goToReservation(scope.row.planName, scope.row.appointTime)">去预约</span> <!--<span class="text-btn" @click="goToReservation(scope.row.planName, scope.row.appointTime)">去预约</span>-->
</template> <!--</template>-->
</el-table-column> <!--</el-table-column>-->
</el-table> <!--</el-table>-->
</div> <!--</div>-->
</el-col> <!--</el-col>-->
<el-col class="message screenSet" :span="24" id="screenSet"> <el-col class="message screenSet" :span="24" id="screenSet">
<div class="message-title">系统消息 <span>今日消息:{{count}}条</span></div> <div class="message-title">系统消息 <span>今日消息:{{count}}条</span></div>
<div class="message-info" v-if="messageList.length > 0"> <div class="message-info" v-if="messageList.length > 0">
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
<span>{{item.menuName}}</span> <span>{{item.menuName}}</span>
<span>{{item.portalTime}}</span> <span>{{item.portalTime}}</span>
</div> </div>
<div class="text-bottom">{{item.content}}</div> <div class="text-bottom" v-html="item.content"></div>
</div> </div>
</div> </div>
<div class="no-message" v-else> <div class="no-message" v-else>
...@@ -143,7 +143,7 @@ export default { ...@@ -143,7 +143,7 @@ export default {
}, },
// 挂载到Dom完成时 // 挂载到Dom完成时
mounted: function() { mounted: function() {
commonUtil.resizeHeight() // commonUtil.resizeHeight()
}, },
methods: { methods: {
...mapActions('workbench', ['getTodayPlansList', 'getTodayAppointsList', 'getTodayOverview']), ...mapActions('workbench', ['getTodayPlansList', 'getTodayAppointsList', 'getTodayOverview']),
...@@ -303,15 +303,16 @@ export default { ...@@ -303,15 +303,16 @@ export default {
} }
.message { .message {
padding: 0 25px 30px; padding: 0 25px 30px;
margin-top: 20px; /*margin-top: 20px;*/
margin-top: 90px;
background: #fff; background: #fff;
@media screen and (min-width:1240px) and (max-width:1900px) { @media screen and (min-width:1240px) and (max-width:1900px) {
width: 95%; width: 95%;
height: 320px !important; // height: 320px !important;
} }
@media screen and (min-width:1900px) { @media screen and (min-width:1900px) {
width: 96.7%; width: 96.7%;
height: 400px !important; // height: 400px !important;
} }
.message-title { .message-title {
font-size: 20px; font-size: 20px;
...@@ -355,7 +356,8 @@ export default { ...@@ -355,7 +356,8 @@ export default {
text-align: center; text-align: center;
img { img {
width: 100px; width: 100px;
margin-top: 17%; // margin-top: 17%;
margin: 6% 0 6%;
} }
} }
} }
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
<img src="../../assets/image/index_logoicon.png"/> <img src="../../assets/image/index_logoicon.png"/>
<p>云鹊医工作站</p> <p>云鹊医工作站</p>
</div> </div>
<div class="user-info"> <div class="user-info">
<el-dropdown trigger="click" @command="handleCommand"> <el-dropdown trigger="click" @command="handleCommand">
<div class="el-dropdown-link"> <div class="el-dropdown-link">
...@@ -16,13 +17,37 @@ ...@@ -16,13 +17,37 @@
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</div> </div>
<div class="exp-msg">
<el-row :gutter="20">
<el-col :span="9" class="msg-opinion">
<div class="grid-content bg-purple">
<i class="el-icon-edit"></i>
<h1 @click="opinionShow=true">意见反馈</h1>
</div>
</el-col>
<el-col :span="15" class="msg-phone">
<div class="grid-content bg-purple-light" style="cursor: default;">
<i class="el-icon-phone" style="cursor: default;"></i>
<h1 style="cursor: default;">400-920-8877</h1>
</div>
</el-col>
</el-row>
</div>
<opinionDialog v-if="opinionShow" @closeDialog="closeDialog"></opinionDialog>
</div> </div>
</template> </template>
<script> <script>
import { getLoginUrl,getInnerLoginUrl, getYunQueYiUrl } from '../../utils/index.js' import { getLoginUrl,getInnerLoginUrl, getYunQueYiUrl } from '../../utils/index.js'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import opinionDialog from '@/components/opinionDialog'
let vm = null let vm = null
export default { export default {
components: {
opinionDialog
},
props: { props: {
portrait: { portrait: {
type: String type: String
...@@ -37,7 +62,8 @@ export default { ...@@ -37,7 +62,8 @@ export default {
data() { data() {
return { return {
name: '', name: '',
systemInfoList: [] systemInfoList: [],
opinionShow: false
} }
}, },
computed: { computed: {
...@@ -66,7 +92,10 @@ export default { ...@@ -66,7 +92,10 @@ export default {
if(command === 'forward') { if(command === 'forward') {
window.location.href = getYunQueYiUrl() window.location.href = getYunQueYiUrl()
} }
} },
closeDialog(val){
this.opinionShow = val
}
} }
} }
</script> </script>
...@@ -78,7 +107,7 @@ export default { ...@@ -78,7 +107,7 @@ export default {
box-sizing: border-box; box-sizing: border-box;
height: 64px; height: 64px;
width: 100%; width: 100%;
z-index: 1000; // z-index: 1000;
font-size: 22px; font-size: 22px;
line-height: 64px; line-height: 64px;
color: #fff; color: #fff;
...@@ -100,6 +129,31 @@ export default { ...@@ -100,6 +129,31 @@ export default {
margin-left: 60px; margin-left: 60px;
} }
} }
.exp-msg{
float: right;
line-height: 64px;
.msg-opinion{
width: 140px;
}
.msg-phone{
width: 180px;
}
.grid-content{
i,h1{
display: inline-block;
vertical-align: middle;
font-size: 16px;
line-height: 32px;
color: #838683;
cursor: pointer;
}
h1{
padding-right: 20px;
border-right: 1px solid #838683;
}
}
}
.user-info { .user-info {
float: right; float: right;
padding-right: 50px; padding-right: 50px;
......
<template> <template>
<div id="slidebar-container" class="slidebar-container"> <div id="slidebar-container" class="slidebar-container">
<el-menu :default-active="onRoutes" class="el-menu-vertical-demo" theme="dark" unique-opened router> <el-menu :default-active="onRoutes" class="el-menu-vertical-demo" theme="dark" unique-opened router>
<template v-for="(item,_index) in items"> <template v-for="(item,_index) in items">
<template v-if="item.subs"> <template v-if="item.subs">
<el-submenu :index=" 'index_' + _index" :key="item.index"> <el-submenu :index=" 'index_' + _index" :key="item.index">
<template slot="title"><i :class="item.icon"></i>{{item.title}}</template> <template slot="title"><i :class="item.icon"></i>{{item.title}}</template>
<el-menu-item v-for="(subItem,i) in item.subs" :key="i" :index="'/'+subItem.index"> <el-menu-item v-for="(subItem,i) in item.subs" :key="i" :index="'/'+subItem.index">
<i class="sub-icon" :class="subItem.icon"></i> <i class="sub-icon" :class="subItem.icon"></i>
{{subItem.title}} {{subItem.title}}
</el-menu-item> <p class="redNum"
</el-submenu> v-if="subItem.title == '资料不全居民'
</template> &&notCompleteCount
<template v-else> &&$route.path!='/patients-manage/not-complete/uncompleted-list'"
<el-menu-item :index="'/'+item.index" :key="item.index"> >
<i :class="item.icon"></i>{{ item.title }} <span v-if="notCompleteCount>999">+999</span>
</el-menu-item> <span v-else>{{notCompleteCount}}</span>
</template> </p>
</template> </el-menu-item>
</el-menu> </el-submenu>
</div> </template>
<template v-else>
<template v-if="item.isMessageSend">
<el-menu-item :index="'/'+item.index" :key="item.index" @click="goToMessageSendPage(item.checkAuth)" class="set-normal-background">
<i :class="item.icon"></i>{{ item.title }}
</el-menu-item>
</template>
<template v-else>
<el-menu-item :index="'/'+item.index" :key="item.index">
<i :class="item.icon"></i>{{ item.title }}
</el-menu-item>
</template>
</template>
</template>
</el-menu>
</div>
</template> </template>
<script> <script>
import { mapGetters } from 'vuex' import utils from '@/utils/followup/followupUtils';
import { setTimeout } from 'timers' import { mapGetters } from 'vuex'
import { isNotEmptyUtils } from '../../utils/utils' import { setTimeout } from 'timers'
let vm = null import { isNotEmptyUtils } from '../../utils/utils'
export default { let vm = null
export default {
props: { props: {
storageIdType: { storageIdType: {
type: Number, type: Number,
default: 0 default: 0
}, },
tokenValue: { tokenValue: {
type: String type: String
}, },
authList: { authList: {
type: Object, type: Object,
default: () => {} default: () => {}
} },
notCompleteCount: {
type: Number,
}
}, },
data() { data() {
return { return {
items: [ items: [
{ {
title: '数据总览', title: '数据总览',
icon: 'el-icon-menu', icon: 'el-icon-menu',
index: 'home', index: 'home',
},{
},{ title: '教培项目',
title: '教培项目', icon: 'el-icon-message',
icon: 'el-icon-message', index: 'item',
index: 'item', subs: [
subs: [ {
{ title: '项目组件',
title: '项目组件', icon: 'el-icon-setting',
icon: 'el-icon-setting', index: 'item-component'
index: 'item-component' },
}, {
{ title: '项目管理',
title: '项目管理', icon: 'el-icon-setting',
icon: 'el-icon-setting', index: 'item-manager'
index: 'item-manager' },
},
]
},{
title: '系统管理',
icon: 'el-icon-menu',
index: 'system',
subs: [
{
title: '角色管理',
icon: 'el-icon-setting',
index: 'role'
}
]
}
] ]
} },{
title: '系统管理',
icon: 'el-icon-menu',
index: 'system',
subs: [
{
title: '角色管理',
icon: 'el-icon-setting',
index: 'role'
}
]
},{
title: '居民管理',
icon: 'el-icon-patients-manage',
index: 'patients-manage',
subs: [
{
title: '我的居民',
icon: 'el-icon-setting',
index: 'patients-manage/mypatients-manage/patients-list'
},
{
title: '新增居民',
icon: 'el-icon-setting',
index: 'patients-manage/new-manage/new-patient'
},
{
title: '分组管理',
icon: 'el-icon-setting',
index: 'patients-manage/labels-manage/labels-list'
},
{
title: '资料不全居民',
icon: 'el-icon-setting',
index: 'patients-manage/not-complete/uncompleted-list'
}
]
},{
title: '消息推送',
icon: 'el-icon-message',
index: 'msg-push',
isMessageSend: true,
checkAuth: true,
},{
title: '学情报告',
icon: 'el-icon-tickets',
index: 'report-list',
subs: [
{
title: '项目列表',
icon: 'el-icon-document',
index: 'report-list'
},
{
title: '导出下载',
icon: 'el-icon-document',
index: 'export-download'
}
]
},
]
}
}, },
computed: { computed: {
onRoutes() { onRoutes() {
return this.$route.path; return this.$route.path;
} }
}, },
created() { created() {
vm = this; vm = this;
}, },
mounted(){ mounted(){
if(vm.storageIdType==2){ if(vm.storageIdType==2){
vm.setFollowSide() // vm.setFollowSide()
} }
}, },
watch: { watch: {
authList(newVal, oldVal){ authList(newVal, oldVal){
if(!newVal.P001) { // 项目管理 if(!newVal.P001) { // 项目管理
vm.items[1].subs[1].index = 'blank' vm.items[1].subs[1].index = 'blank'
} }
if(!newVal.P002) { // 组件管理 if(!newVal.P002) { // 组件管理
vm.items[1].subs[0].index = 'blank' vm.items[1].subs[0].index = 'blank'
} }
if(!newVal.P003) { // 角色管理 if(!newVal.P003) { // 角色管理
vm.items[2].subs[0].index = 'blank' vm.items[2].subs[0].index = 'blank'
} }
}, },
storageIdType(val,ov){ storageIdType(val,ov){
if(val==2){ if(val==2){
vm.setFollowSide() // vm.setFollowSide()
} }
} }
}, },
...@@ -134,12 +200,37 @@ export default { ...@@ -134,12 +200,37 @@ export default {
] ]
} }
vm.items.push(followSider); vm.items.push(followSider);
} },
goToMessageSendPage(checkAuth) {
if(checkAuth){
utils.checkAuthFunc().then(res=>{
console.log(res)
if(res==3){
}else{
return
}
let env = process.env.BUILD_ENV;
let src = '';
if( (env == 'development') || (env == 'dev') ){ // 本地开发环境 || jenkins dev
src = 'https://dev-saas.yunqueyi.com/pica-frontend/patientEduManage/pica_patient_edu_manage.html#/pageTab/message'
}else if( (env == 'test') || (env == 'test2') ){ // test
src = 'https://test1.yunqueyi.com/pica-frontend/patientEduManage/pica_patient_edu_manage.html#/pageTab/message';
}else if( env == 'uat' ){ // uat
src = 'https://uat.yunqueyi.com/pica-frontend/patientEduManage/pica_patient_edu_manage.html#/pageTab/message';
}else if( env == 'pro' ){ // 线上
src = 'https://www.yunqueyi.com/pica-frontend/patientEduManage/pica_patient_edu_manage.html#/pageTab/message';
}
location.href = src;
// let newTab=window.open('about:blank');
// newTab.location = src;
})
}
},
} }
} }
</script> </script>
<style lang="scss"> <style lang="scss">
.slidebar-container { .slidebar-container {
display: block; display: block;
position: absolute; position: absolute;
left: 0; left: 0;
...@@ -148,30 +239,53 @@ export default { ...@@ -148,30 +239,53 @@ export default {
width: 255px; width: 255px;
background: #06232C; background: #06232C;
.el-menu { .el-menu {
background: #06232C;
border-right: none;
.sub-icon {
font-size: 12px;
}
.el-menu-item, .el-submenu__title {
color: #8FA4AC;
}
.el-menu-item.is-active {
color: #fff;
background: #509284 !important
}
.el-menu-item:hover,
.el-submenu__title:hover,
.slidebar-container .el-menu .el-menu-item:hover,
.slidebar-container .el-menu .el-submenu__title:hover {
color: #fff;
background: #06232C; background: #06232C;
border-right: none; }
.sub-icon { // .el-menu-item:focus, .el-menu-item:hover {
font-size: 12px; // background: #06232C !important;
} // }
.el-menu-item, .el-submenu__title { .el-icon-patients-manage{
color: #8FA4AC; width: 17px;
} height: 17px;
.el-menu-item.is-active { background: url('../../assets/image/patients-icon.png');
color: #fff; margin: 0 8px 0 3px ;
background: #509284 !important background-size: 17px 17px;
} opacity: 0.6;
.el-menu-item:hover, }
.el-submenu__title:hover, .set-normal-background{
.slidebar-container .el-menu .el-menu-item:hover, background: #06232C;
.slidebar-container .el-menu .el-submenu__title:hover { }
color: #fff; }
background: #06232C; .redNum {
} display: inline-block;
// .el-menu-item:focus, .el-menu-item:hover { border-radius: 10px;
// background: #06232C !important; margin-left: 15px;
// } background: #EE263E;
color: #fff;
font-size: 12px;
line-height: 12px;
/*padding: 5px 10px;*/
padding: 2px 5px;
span {
display: block;
}
} }
} }
</style> </style>
<template>
<div class="data-alignment">
<div class="alignment-header">
<el-row>
<el-col :span="18">
<div class="title">数据调整</div>
</el-col>
<el-col :span="3">
<el-button class="add-button" size="small" type="primary" @click="saveUpdate">保存修改</el-button>
</el-col>
<el-col :span="3">
<el-button class="add-button" size="small" @click="close">取消</el-button>
</el-col>
</el-row>
</div>
<div class="text">
<p>地区:{{ dialogData.region }}</p>
<p>选择机构:{{ dialogData.organization }}</p>
</div>
<el-form
class="form-update"
ref="serchForm"
:model="formData"
label-width="100px"
style="width:40%;"
>
<el-form-item label="项目成绩:">
<el-select
v-model="formData.achievementStatus"
size="small"
style="width: 100%;"
placeholder="请选择项目成绩"
>
<el-option
v-for="(item,index) in achievementList"
:key="index"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="统计状态:">
<el-select
v-model="formData.status"
size="small"
style="width: 100%;"
placeholder="请选择统计状态"
>
<el-option
v-for="(item,index) in statusList"
:key="index"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
</el-form>
<div class="form-button">
<el-button @click="searchData()" type="primary">查询</el-button>
<el-button @click="resetForm()">重置</el-button>
</div>
<!-- <div class="line"></div> -->
<p class="explain">说明:只有被勾选中的人才会归入数据统计范围,不勾的不会统计</p>
<el-table
class="data-main"
border
center
ref="multipleTable"
:data="tableData"
tooltip-effect="dark"
@selection-change="handleSelectionChange"
:row-key="getRowKeys"
>
<el-table-column type="selection" width="55" :reserve-selection="true"></el-table-column>
<el-table-column prop="name" label="姓名" min-width="80"></el-table-column>
<el-table-column prop="projectStatus" label="项目状态" width="120">
<template slot-scope="scope">{{ scope.row.projectStatus | projectStatus }}</template>
</el-table-column>
<el-table-column prop="projectResult" label="项目成绩" width="120">
<template slot-scope="scope">{{ scope.row.projectResult | recordValue }}</template>
</el-table-column>
<el-table-column prop="hospitalName" label="机构" min-width="120" show-overflow-tooltip></el-table-column>
<el-table-column prop="departmentName" label="科室" show-overflow-tooltip></el-table-column>
<el-table-column prop="provinceName" label="省/直辖市" show-overflow-tooltip></el-table-column>
<el-table-column prop="cityName" label="市" show-overflow-tooltip></el-table-column>
<el-table-column prop="countyName" label="区/县" show-overflow-tooltip></el-table-column>
<el-table-column prop="townName" label="乡镇/街道" show-overflow-tooltip></el-table-column>
<div slot="empty">
<div class="table-empty">
<img src="../../assets/image/no-content1.png" />
<p>没有相关数据,请重新选择查询范围</p>
</div>
</div>
</el-table>
<!-- 分页 -->
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="formData.pageNo"
:page-sizes="[20, 50 ,100]"
:page-size="formData.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows"
></el-pagination>
</div>
<el-dialog title="发布学情报告" :visible.sync="dialogVisible" width="30%" append-to-body>
<p style="color:red">项目【{{ projectName }}】的数据修改</p>
<p>确认需要更新学情报告吗?</p>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="updateData()">确定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { openLoading, closeLoading } from "../../utils/utils";
import * as operationData from "../../utils/operation";
let vm;
export default {
props: {
formInline: {
type: Object
},
organizationList: {
type: Array
},
dialogData: {
type: Object
}
},
data() {
return {
formData: {
achievementStatus: "",
status: 1,
pageNo: 1,
pageSize: 20,
},
achievementList: [
//项目状态
{
label: "全部",
value: '',
},
{
label: "通过",
value: 1
},
{
label: "不通过",
value: 2
},
{
label: "无成绩",
value: 3
}
],
statusList: [
//项目状态
{
label: "全部",
value: 1
},
{
label: "归入统计",
value: 2
},
{
label: "移除统计",
value: 3
},
],
tableData: [],
multipleSelection: [], //被选中的行
totalRows: 0, //数据总数
getRowKeys(row) {
return row.doctorId;
},
selectedData: [],
dialogVisible: false,
projectId: "",
projectName: "",
changedDoctor: [],
changedDoctor2: [],
lookedDoctor: [],
};
},
created() {
vm = this;
this.projectId = vm.getUrlSearch(window.location.href, "id");
this.projectName = vm.getUrlSearch(window.location.href, "projectName");
// this.search();
console.log(vm.dialogData);
},
mounted: function() {
//父组件传值
this.$on("search", () => {
// this.lookedDoctor = [];
// this.changedDoctor = [];
// this.changedDoctor2 = [];
// this.$refs.multipleTable.clearSelection();
this.resetForm();
// this.search();
});
},
methods: {
// 将选中行放入数组
handleSelectionChange(rows) {
this.changedDoctor = [];
this.changedDoctor2 = [];
this.selectedData = [];
if (rows) {
rows.forEach(row => {
if (row) {
this.changedDoctor.push(row.doctorId);
}
});
}
this.changedDoctor2 = operationData.getDifference(
this.lookedDoctor,
this.changedDoctor
);
console.log(
"选",
this.changedDoctor,
"没",
this.changedDoctor2
);
},
// 更改数据显示数量
handleSizeChange(val) {
console.log(`每页 ${val} 条`);
vm.formData.pageSize = val;
vm.search();
},
// 换页
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
vm.formData.pageNo = val;
vm.search();
},
close() {
this.$emit("closeDialog");
},
searchData() {
vm.formData.pageNo = 1;
vm.search();
},
search() {
setTimeout(function(){
openLoading(vm);
},20);
let checkAll = operationData.hasAll(vm.formInline.organization);
let req = {
projectId: vm.projectId,
achievementStatus: vm.formData.achievementStatus,
status: vm.formData.status,
ids: operationData.getIds(vm.formInline,vm.organizationList,checkAll),
type: operationData.getSearchType(vm.formInline,checkAll),
pageNo: vm.formData.pageNo,
pageSize: vm.formData.pageSize,
};
vm.reportGET("report/portal/getProjectData", req).then(res => {
// closeLoading(vm);
if (res.code == "000000") {
vm.tableData = res.data.projectData;
vm.totalRows = res.data.count;
let idList = operationData.getDoctorIdList(vm.tableData);
// console.log('idList',idList);
vm.lookedDoctor = operationData.getUnion(
vm.lookedDoctor,
idList
);
vm.initDoctorChoose();
}
});
},
initDoctorChoose() {
let tableStatus = vm.tableData;
if(typeof tableStatus === 'undefined') {
return;
}
tableStatus.forEach(row => {
let idList = [];
idList[0] = row.doctorId;
let intersect = operationData.getIntersect(idList,this.changedDoctor);
let intersect2 = operationData.getIntersect(idList,this.changedDoctor2);
// console.log('intersect',intersect,'intersect2',intersect2);
//debugger;
if(intersect.length > 0) {
//选中
//this.$refs.multipleOrganization.toggleRowSelection(row);
} else if (intersect2.length > 0) {
//不选
} else {
if (row.status == 1) {
this.$nextTick(function() {
this.$refs.multipleTable.toggleRowSelection(row);
});
}
}
});
},
//重置
resetForm() {
this.lookedDoctor = [];
this.changedDoctor = [];
this.changedDoctor2 = [];
this.$refs.multipleTable.clearSelection();
vm.formData = Object.assign(
{},
{
achievementStatus: "",
status: 1,
pageNo: 1,
pageSize: 20,
}
);
vm.search();
},
saveUpdate() {
this.dialogVisible = true;
},
updateData() {
let req = {
projectId: vm.projectId,
removeDoctorIdList: operationData.getAjustmentList(vm.changedDoctor2),
joinDoctorIdList: operationData.getAjustmentList(vm.changedDoctor),
};
openLoading(vm);
vm.reportPOST("report/portal/peopleAdjustment", req).then(res => {
closeLoading(vm);
vm.$message(res.message);
if (res.code == "000000") {
this.$emit("closeSearch");
}
});
this.dialogVisible = false;
}
}
};
</script>
<style lang='scss' rel='stylesheet/scss'>
.data-alignment {
background: #fff;
.alignment-header {
padding: 20px;
margin: 0 30px;
border-bottom: 1px solid #606266;
}
.text {
margin-top: 30px;
margin-left: 98px;
font-size: 13px;
color: #606266;
}
.form-update {
margin: 30px 0px 0px 60px;
}
.form-button {
width: 45%;
top: -62px;
position: relative;
left: 50%;
}
.line {
margin: -20px 30px 30px 30px;
width: 100%;
border-bottom: 1px solid #606266;
}
.explain {
margin: 10px 0 10px 38px;
font-size: 13px;
color: #606266;
}
.data-main {
margin-left: 36px;
width: 90%;
// padding: 0 40px;
.select {
margin-bottom: 30px;
}
}
.pagination {
margin-right: 10px;
}
}
</style>
<template>
<div class="export-download">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb>
<div class="component-content screenSet" id="screenSet">
<p>导出文件列表</p>
<el-table :data="tableData" style="width: 100%">
<el-table-column
prop="title"
label="名称"
align="center"
min-width="150"
show-overflow-tooltip
></el-table-column>
<el-table-column prop="createdTime" label="时间" align="center" min-width="120">
<template slot-scope="scope">{{ scope.row.createdTime }}</template>
</el-table-column>
<el-table-column prop="status" label="状态" align="center" min-width="150">
<template slot-scope="scope">{{ scope.row.status | exportStatus }}</template>
</el-table-column>
<el-table-column label="操作" fixed="right" align="center" min-width="70">
<template slot-scope="scope">
<el-button
type="primary"
:disabled="scope.row.buttonStatus"
size="small"
@click="update(scope.row)"
>{{ scope.row.buttonText }}</el-button>
</template>
</el-table-column>
<div slot="empty">
<div class="table-empty">
<img src="../../assets/image/no-content1.png" />
<p>没有相关数据,请重新选择查询范围</p>
</div>
</div>
</el-table>
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="param.pageNo"
:page-sizes="[20, 50 ,100]"
:page-size="param.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows"
></el-pagination>
</div>
</div>
</div>
</template>
<script>
import BreadCrumb from "../../components/breadcrumb.vue";
import * as commonUtil from "../../utils/utils";
import { openLoading, closeLoading } from "../../utils/utils";
import axios from "axios";
let vm = null;
export default {
components: {
BreadCrumb
},
data() {
return {
curmbFirst: "学情报告",
curmbSecond: "导出下载",
projectId: "",
tableData: [],
param: {
pageSize: 20,
pageNo: 1
},
totalRows: 0,
totalTime: 3,
queryData: {}
// buttonText: "刷新",
// buttonStatus: false,
};
},
created() {
vm = this;
this.projectId = vm.getUrlSearch(window.location.href, "projectId");
this.search();
},
mounted: function() {
commonUtil.resizeHeight();
},
methods: {
setButton() {
for (let i = 0; i < vm.tableData.length; i++) {
vm.tableData[i].index = i;
if (vm.tableData[i].status == 1) {
vm.tableData[i].buttonText = "下载";
vm.tableData[i].buttonStatus = false;
} else if(vm.tableData[i].status == 0) {
vm.tableData[i].buttonText = "刷新";
vm.tableData[i].buttonStatus = false;
} else if(vm.tableData[i].status == 2) {
vm.tableData[i].buttonText = "刷新";
vm.tableData[i].buttonStatus = true;
}
}
},
search() {
// this.setButton();
let req = {
projectId: vm.projectId
};
if(req.projectId == null) {
req.projectId = '';
}
vm.reportGET("report/downLoad/getDownloadList", req).then(res => {
if (res.code == "000000") {
vm.tableData = res.data.data;
vm.totalRows = res.data.totalRows;
vm.setButton();
}
});
},
downLoad(row) {
// vm.queryData = this.$route.query;
// let req = vm.queryData;
// openLoading(vm);
// vm.reportGET("report/downLoad/downLoad", req).then(res => {
// closeLoading(vm);
// // console
// if (res.code == "000000") {
// }
// });
setTimeout(() => {
window.open(row.fileUrl);
}, 500);
},
getDownLoadStatus(row) {
let req = {
id: row.id
};
vm.reportGET("report/downLoad/getDownLoadStatus", req).then(res => {
if (res.code == "000000") {
vm.tableData[row.index].status = res.data.data;
// console.log('res.data.data',res.data.data);
if (res.data.data == 1) {
vm.tableData[row.index].title = vm.tableData[row.index].title + " ";
vm.tableData[row.index].buttonText = "下载";
vm.tableData[row.index].fileUrl = res.data.url;
} else if(res.data.data == 0) {
console.log("res", res, vm.tableData[row.index]);
vm.tableData[row.index].title = vm.tableData[row.index].title + " ";
vm.tableData[row.index].buttonText = "刷新";
} else if(res.data.data == 2) {
vm.tableData[row.index].title = vm.tableData[row.index].title + " ";
vm.tableData[row.index].buttonText = "刷新";
vm.tableData[row.index].buttonStatus = true;
}
} else {
vm.$message(res.message);
vm.tableData[row.index].title = vm.tableData[row.index].title + " ";
vm.tableData[row.index].buttonText = "刷新";
}
});
},
update(row) {
if (vm.tableData[row.index].status == 1) {
vm.downLoad(row);
} else {
this.$nextTick(function() {
console.log(vm.tableData[row.index]);
let nowTime = vm.totalTime;
vm.tableData[row.index].title = vm.tableData[row.index].title + " ";
vm.tableData[row.index].buttonText = nowTime + "s后可以刷新";
vm.tableData[row.index].buttonStatus = true;
let clock = window.setInterval(() => {
nowTime--;
vm.tableData[row.index].title = vm.tableData[row.index].title + " ";
vm.tableData[row.index].buttonText = nowTime + "s后可以刷新";
if (nowTime <= 0) {
window.clearInterval(clock);
vm.tableData[row.index].title =
vm.tableData[row.index].title + " ";
// vm.tableData[row.index].buttonText = "刷新";
vm.tableData[row.index].buttonStatus = false; //这里重新开启
vm.getDownLoadStatus(row);
}
}, 1000);
});
}
},
// 更改数据显示数量
handleSizeChange(val) {
vm.param.pageSize = val;
vm.search();
},
// 换页
handleCurrentChange(val) {
vm.param.pageNo = value;
vm.search();
}
}
};
</script>
<style lang="scss">
.export-download {
.component-content {
background: #fff;
padding: 10px;
}
}
</style>
\ No newline at end of file
<template>
<div class="course-analysis-wrap">
<div v-for="(item , index) in cardData" :key="index" class="">
<el-card class="box-card">
<div slot="header" class="title">
<span class="weight">{{ item.title }}</span>
</div>
<div class="box-content">
<span v-if="item.num !=0" class="weight">{{ item.num }} </span>
<span v-if="item.num !=0">{{ item.unit }} </span>
<span v-if="index == 2 && second !=0" class="weight" >{{ second }} </span>
<span v-if="index == 2 && second !=0"></span>
</div>
</el-card>
<div v-if="index+1 !== cardData.length" class="line"></div>
</div>
<el-table
:data="tableData"
class="course-table">
<el-table-column prop="courseName" label="课程名" align="center">
</el-table-column>
<el-table-column prop="courseTotalTime" label="课程时长" align="center">
<template slot-scope="scope">
{{ scope.row.courseTotalTime | getTotalTime }}
</template>
</el-table-column>
<el-table-column prop="courseAvgStudyTime" label="人均学习时长" align="center">
<template slot-scope="scope">
{{ scope.row.courseAvgStudyTime | getAvgTime }}
</template>
</el-table-column>
<el-table-column prop="courseLearnerCount" label="参与培训人数" align="center">
</el-table-column>
<el-table-column prop="courseFinishedCount" label="完成培训人数" align="center">
</el-table-column>
<el-table-column fixed="right" label="操作" min-width="50" align="center">
<template slot-scope="scope">
<el-button
@click="checkName(scope.row)"
type="text"
size="small"
>查看名单</el-button>
</template>
</el-table-column>
<div slot="empty">
<div class="table-empty">
<img src="../../assets/image/no-content1.png">
<p>没有相关数据,请重新选择查询范围</p>
</div>
</div>
</el-table>
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pageNo"
:page-sizes="[20, 50 ,100]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows"
></el-pagination>
</div>
</div>
</template>
<script>
import { create } from "domain";
import * as operationData from "../../utils/operation";
import { openLoading, closeLoading } from "../../utils/utils";
let vm = null;
export default {
props: {
formInline: {
type: Object
},
activeName: {
type: String
},
dialogData: {
type: Object
},
organizationList: {
type: Array
}
},
data() {
return {
cardData: [],
tableData: [],
totalRows: 0,
projectId: '',
pageNo: 1,
pageSize: 20,
second: 0,
}
},
created() {
vm = this;
this.projectId = vm.getUrlSearch(window.location.href, "id");
},
mounted: function() {
this.$on('search',()=>{
// console.log(this.formInline);
this.pageNo = 1;
this.search();
});
this.$on("init", () => {
this.$nextTick(function() {
if (vm.formInline.region.length != 0) {
this.search();
}
});
});
this.$on("reset",() =>{
this.pageNo = 1;
this.pageSize = 20;
this.tableData = [];
this.cardData = [];
});
},
methods: {
setCardData(data) {
vm.totalRows = data.projectCourseCount;
let avgTime = [];
avgTime = operationData.getAvgTime(data.projectAvgStudyTime);
vm.cardData = [
{
title: '项目所有课程数',
num: data.projectCourseCount,
unit: '门课程',
},{
title: '项目所有课程总时长',
num: data.projectCourseTotalTime,
unit: '分钟',
},{
title: '项目人均学习时长',
num: avgTime[0],
unit: '分钟',
}
];
vm.second = avgTime[1];
},
search() {
if (vm.formInline.region.length == 0) {
const h = this.$createElement;
vm.$message({
message: h('p', { style: 'color: #FF3399' }, '请先选择地区后再进行查询 ')
});
return;
}
let checkAll = operationData.hasAll(vm.formInline.organization)
let req = {
projectId: vm.projectId,
ids: operationData.getIds(vm.formInline,vm.organizationList,checkAll),
type: operationData.getSearchType(vm.formInline,checkAll),
originalFlag: vm.formInline.checked == false ? 0 : 1
};
console.log("3 req", req);
openLoading(vm);
vm.reportGET("report/portalProjectCourse/getTotal", req).then(res => {
closeLoading(vm);
if (res.code == "000000") {
if(res.data.projectCourseCount == 0 ) {
vm.$message("没有相关数据,请重新选择查询范围");
}
vm.setCardData(res.data)
} else {
vm.$message(res.message);
}
});
let reqList = req;
reqList.pageNo = vm.pageNo;
reqList.pageSize = vm.pageSize;
vm.reportGET("report/portalProjectCourse/getCourseList", reqList).then(res => {
closeLoading(vm);
if (res.code == "000000") {
vm.tableData = res.data.list;
}
});
},
checkName(data) {
console.log('dialogData',this.dialogData);
let checkAll = operationData.hasAll(vm.formInline.organization)
let routerData = {};
routerData = this.dialogData;
routerData.projectId = vm.projectId;
routerData.projectName = vm.getUrlSearch(window.location.href, "projectName");
routerData.tableType = 1;
routerData.courseId = data.courseId;
routerData.ids = operationData.getIds(vm.formInline,vm.organizationList,checkAll);
routerData.type = operationData.getSearchType(vm.formInline,checkAll);
routerData.originalFlag = vm.formInline.checked == false ? 0 : 1;
// this.$router.push({ path: '/name-list', query: routerData});
let routeData = this.$router.resolve({ path: '/name-list', query: routerData});
window.open(routeData.href, '_blank');
},
handleSizeChange(val) {
console.log(`每页 ${val} 条`);
vm.pageSize = val;
vm.search();
},
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
vm.pageNo = val;
vm.search();
},
},
}
</script>
<style lang="scss">
.course-analysis-wrap {
background: #fff;
overflow: hidden;
padding: 10px;
.weight {
font-weight: bold;
}
.title:after {
clear: both
}
.el-card {
border-width: 0px;
}
.el-card.is-always-shadow {
box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.1);
}
.line {
background: #e4e4e4;
height: 80px;
width: 1px;
float: left;
margin-top: 20px;
}
.box-card {
width: 32%;
margin-right: 1%;
float: left;
.el-card__header {
border-bottom-width: 0;
}
.title {
text-align: center;
}
.box-content {
text-align: center;
height: 40px;
}
}
.course-table {
top: 20px;
margin-bottom: 20px;
}
}
</style>
\ No newline at end of file
<template>
<div class="crowd-analysis-wrap">
<el-radio-group class="crowd-radio" v-model="radio" size="small" @change="updateRadio">
<el-radio-button label="1">全部用户</el-radio-button>
<el-radio-button label="2">参与项目</el-radio-button>
<el-radio-button label="3">通过项目</el-radio-button>
</el-radio-group>
<div v-show="!showData" class="empty">
<p>"没有相关数据,请重新选择查询范围"</p>
</div>
<div class="chart" v-show="showData">
<div class="item" id="education" ref="education"></div>
<div class="item item-right" id="job" ref="job"></div>
<div class="item">
<div class="title">用户性别分布</div>
<div class="sex">
<div class="sex-item" v-for="(item , index) in sexData" :key="index">
<img class="sex-img" v-bind:src="item.src" />
<p class="sex-type">{{ item.type }}</p>
<p></p>
<p class="sex-num">{{ item.num }}</p>
</div>
</div>
</div>
<div class="item item-right" id="age" ref="age"></div>
</div>
</div>
</template>
<script>
import BreadCrumb from "../../components/breadcrumb.vue";
import { create } from "domain";
import { mapGetters } from "vuex";
import { openLoading, closeLoading } from "../../utils/utils";
import * as commonUtil from "../../utils/utils";
import * as operationData from "../../utils/operation";
import echarts from "echarts";
import { setTimeout } from "timers";
let vm = null;
export default {
components: {
BreadCrumb
},
props: {
formInline: {
type: Object
},
activeName: {
type: String
},
organizationList: {
type: Array
}
},
data() {
return {
radio: 1,
sexData: [],
projectId: "",
crowdData: {},
showData: false,
echartsData: {
chart1: {},
chart2: {},
chart3: {},
},
};
},
created() {
vm = this;
this.projectId = vm.getUrlSearch(window.location.href, "id");
},
mounted: function() {
// commonUtil.resizeHeight();
//父组件传值
this.$on("search", () => {
vm.radio = 1;
this.search();
});
this.$on("init", () => {
this.$nextTick(function() {
if (vm.formInline.region.length != 0) {
this.search();
}
});
});
this.$on("reset", () => {
this.showData = false;
this.crowdData = {};
});
if (this.activeName == "second") {
}
},
methods: {
search() {
if (vm.formInline.region.length == 0) {
const h = this.$createElement;
vm.$message({
message: h('p', { style: 'color: #FF3399' }, '请先选择地区后再进行查询 ')
});
return;
}
let checkAll = operationData.hasAll(vm.formInline.organization);
let req = {
projectId: vm.projectId,
cityOrHospitalId: operationData.getIds(vm.formInline,vm.organizationList,checkAll),
kind: operationData.getSearchType(vm.formInline,checkAll),
type: vm.radio,
originalFlag: vm.formInline.checked == false ? 0 : 1
};
console.log("2 req", req);
openLoading(vm);
vm.reportGET("report/portal/getPeoplesDetails", req).then(res => {
closeLoading(vm);
if (res.code == "000000") {
if(res.data.educationList.length == 0 && res.data.jobTitle.length == 0 ) {
vm.$message("没有相关数据,请重新选择查询范围");
this.showData = false;
} else {
this.showData = true;
}
this.crowdData = res.data;
setTimeout(function() {
vm.educationDivision();
vm.jobDivision();
vm.getSexData();
vm.ageDivision();
},20);
// this.educationDivision();
// this.jobDivision();
// this.getSexData();
// this.ageDivision();
} else {
vm.$message(res.message);
}
});
},
updateResize() {
this.$nextTick(function() {
window.onresize = function() {
vm.echartsData.chart1.resize();
vm.echartsData.chart2.resize();
vm.echartsData.chart3.resize();
};
});
},
updateRadio(value) {
console.log(value,vm.radio);
this.search();
},
//用户性别分布
getSexData() {
let sexList = this.crowdData.sexList;
// if(sexList.length <3) {
// this.sexData = [];
// return;
// }
this.sexData = [
{
src: require("../../assets/image/man.png"),
type: "男性",
num: 0
},
{
src: require("../../assets/image/weman.png"),
type: "女性",
num: 0
},
{
src: require("../../assets/image/question.png"),
type: "未完善信息",
num: 0
}
];
for(let i=0;i<sexList.length;i++) {
if(sexList[i].name == "男") {
this.sexData[0].num = sexList[i].value;
} else if(sexList[i].name == "女") {
this.sexData[1].num = sexList[i].value;
} else {
this.sexData[2].num = sexList[i].value;
}
}
},
educationDivision(data) {
let myChart = echarts.init(this.$refs.education);
let educationList = operationData.removeZero(this.crowdData.educationList);
let legendData = [];
let seriesData = [];
let colorData = ["#FF9F7F", "#008000", "#E062AE", "#37A2DA", "#0050DC", "#67E0E3", "#8A2BE2"];
// for (let i = 0; i < educationList.length; i++) {
// legendData[i] = educationList[i].name;
// }
if(educationList.length > 0) {
legendData = ['博士后','博士','硕士','本科','大专','中专及以下','其他'];
}
seriesData = educationList;
let option = operationData.getPicOption(
"用户学历分布",
legendData,
colorData,
seriesData
);
myChart.setOption(option);
vm.echartsData.chart1 = myChart;
vm.updateResize();
},
jobDivision(data) {
let myChart2 = echarts.init(this.$refs.job);
let jobTitle = operationData.removeZero(this.crowdData.jobTitle);
let legendData = [];
let seriesData = [];
let colorData = ["#FF9F7F", "#008000", "#E062AE", "#37A2DA", "#0050DC", "#67E0E3", "#8A2BE2"];
for (let i = 0; i < jobTitle.length; i++) {
legendData[i] = jobTitle[i].name;
}
seriesData = jobTitle;
let option = operationData.getPicOption(
"用户职务分布",
legendData,
colorData,
seriesData
);
myChart2.setOption(option);
vm.echartsData.chart2 = myChart2;
vm.updateResize();
},
ageDivision(data) {
let myChart3 = echarts.init(this.$refs.age);
let xAxisData = [];
let seriesData = [];
let ageList = this.crowdData.ageList;
for (let i = 0; i < ageList.length; i++) {
// xAxisData[i] = ageList[i].name;
if(ageList[i].value != 0) {
xAxisData.push(ageList[i].name);
}
}
for (let i = 0; i < ageList.length; i++) {
// seriesData[i] = ageList[i].value;
if(ageList[i].value != 0) {
seriesData.push(ageList[i].value);
}
}
let option = operationData.getBarOption(xAxisData, seriesData);
myChart3.setOption(option);
vm.echartsData.chart3 = myChart3;
vm.updateResize();
}
}
};
</script>
<style lang="scss">
.crowd-analysis-wrap {
background: #fff;
overflow: hidden;
padding: 10px;
.header-title {
padding: 10px 12px;
font-size: 12px;
color: #449284;
border-bottom: 1px solid #efefef;
}
.crowd-radio {
position: relative;
left: 50%;
margin-top: 25px;
margin-left: -119px;
.is-active {
.el-radio-button__inner {
// background: #fff;
// color: #409EFF;
}
}
}
.empty {
height: 300px;
line-height: 300px;
color: #FF3399;
text-align: center;
}
.chart {
position: relative;
margin: 20px auto 0 auto;
width: 100%;
// overflow: auto;
.item {
position: relative;
float: left;
margin-top: 20px;
padding: 0;
width: 48%;
// height: 20vw;
height: 350px;
border: 1px solid #dedede;
.title {
position: relative;
margin: 15px auto 10px auto;
font-size: 18px;
text-align: center;
font-weight: bold;
}
.sex {
position: relative;
top: 42px;
left: 0;
.sex-item {
float: left;
height: 350px;
width: 33.3%;
.sex-img {
margin: 0 auto;
position: relative;
left: 10%;
// width: 80%;
width: 60%;
margin-left: 10%;
}
.sex-type {
text-align: center;
}
.sex-num {
margin-top: 40px;
font-size: 30px;
font-weight: bold;
text-align: center;
}
}
}
}
.item-right {
float: right;
}
}
}
</style>
\ No newline at end of file
<template>
<div class="examination-analysis">
<div v-for="(item , index) in cardData" :key="index" class="box">
<el-card class="box-card">
<div slot="header" class="title">
<span class="weight">{{ item.title }}</span>
</div>
<div class="box-content">
<span class="weight">{{ item.num }}</span>
{{ item.unit }}
</div>
</el-card>
<div v-if="index+1 !== cardData.length" class="line"></div>
</div>
<div class="table">
<el-table :data="tableData" style="width: 100%" border>
<el-table-column prop="examName" label="考试名" min-width="150" align="center"></el-table-column>
<el-table-column prop="examUserCount" label="参与考试人数" min-width="100" align="center"></el-table-column>
<el-table-column prop="userCountForPassExam" label="通过考试人数" min-width="80" align="center"></el-table-column>
<el-table-column v-if="showTd[0]" prop="userCountList[0]" :label="labelTd[0]" min-width="80" align="center"></el-table-column>
<el-table-column v-if="showTd[1]" prop="userCountList[1]" :label="labelTd[1]" min-width="80" align="center"></el-table-column>
<el-table-column v-if="showTd[2]" prop="userCountList[2]" :label="labelTd[2]" min-width="80" align="center"></el-table-column>
<el-table-column v-if="showTd[3]" prop="userCountList[3]" :label="labelTd[3]" min-width="80" align="center"></el-table-column>
<el-table-column label="操作" fixed="right" align="center" min-width="100">
<template slot-scope="scope">
<el-button type="text" size="small" @click="goPage(scope.row)">查看名单</el-button>
</template>
</el-table-column>
<div slot="empty">
<div class="table-empty">
<img src="../../assets/image/no-content1.png">
<p>没有相关数据,请重新选择查询范围</p>
</div>
</div>
</el-table>
</div>
<!-- 分页 -->
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pageNo"
:page-sizes="[20, 50 ,100]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows"
></el-pagination>
</div>
</div>
</template>
<script>
import { log } from 'util';
import * as operationData from "../../utils/operation";
import { openLoading, closeLoading } from "../../utils/utils";
import * as commonUtil from "../../utils/utils";
let vm
export default {
props: {
formInline: {
type: Object
},
activeName: {
type: String
},
dialogData: {
type: Object
},
organizationList: {
type: Array
}
},
data() {
return {
projectId: '',
tableData: [],
cardData: [],
totalRows: 0, //数据总数
pageNo: 1, //当前是第几页
pageSize: 20, //页面总数
labelTd: [],
showTd: [false,false,false,false],
};
},
created() {
vm = this;
this.projectId = vm.getUrlSearch(window.location.href, "id");
},
// 挂载到Dom完成时
mounted: function() {
this.$on('search',()=>{
// console.log(this.formInline);
this.pageNo = 1;
this.search();
});
this.$on("init", () => {
this.$nextTick(function() {
if (vm.formInline.region.length != 0) {
this.search();
}
});
});
this.$on("reset",() =>{
this.pageNo = 1;
this.pageSize = 20;
this.tableData = [];
this.cardData = [];
});
},
methods: {
setCardData(data) {
vm.totalRows = data.projectExamCount;
vm.cardData = [
{
title: "项目所有考试数",
num: data.projectExamCount,
unit: "门考试"
},
{
title: "项目所有考题数",
num: data.projectExamQuestionCount,
unit: "道题"
}
];
// vm.cardData[0].num = data.projectExamCount;
// vm.cardData[1].num = data.projectExamQuestionCount;
},
// 搜索列表
search() {
if (vm.formInline.region.length == 0) {
const h = this.$createElement;
vm.$message({
message: h('p', { style: 'color: #FF3399' }, '请先选择地区后再进行查询 ')
});
return;
}
let checkAll = operationData.hasAll(vm.formInline.organization)
let req = {
projectId: vm.projectId,
ids: operationData.getIds(vm.formInline,vm.organizationList,checkAll),
type: operationData.getSearchType(vm.formInline,checkAll),
originalFlag: vm.formInline.checked == false ? 0 : 1
};
console.log("4 req", req);
openLoading(vm);
vm.reportGET("report/portalProjectExam/getTotal", req).then(res => {
closeLoading(vm);
if (res.code == "000000") {
if(res.data.projectExamCount == 0 ) {
vm.$message("没有相关数据,请重新选择查询范围");
}
vm.setCardData(res.data);
vm.labelTd = res.data.gradeNameList;
} else {
vm.$message(res.message);
}
});
let reqList = req;
reqList.pageNo = vm.pageNo;
reqList.pageSize = vm.pageSize;
vm.reportGET("report/portalProjectExam/getExamList", req).then(res => {
closeLoading(vm);
if (res.code == "000000") {
vm.tableData = res.data.list;
if(res.data.list.length == 0) {
return;
}
if(res.data.list[0].userCountList == null || res.data.list[0].userCountList.length == 0) {
vm.showTd = [false,false,false,false];
} else if (res.data.list[0].userCountList.length == 1){
vm.showTd = [true,false,false,false];
} else if (res.data.list[0].userCountList.length == 2){
vm.showTd = [true,true,false,false];
} else if (res.data.list[0].userCountList.length == 3){
vm.showTd = [true,true,true,false];
} else if (res.data.list[0].userCountList.length == 4){
vm.showTd = [true,true,true,true];
}
}
});
//
},
// 跳转查看名单页面
goPage(data) {
let checkAll = operationData.hasAll(vm.formInline.organization)
let routerData = {};
routerData = this.dialogData;
routerData.projectId = vm.projectId;
routerData.projectName = vm.getUrlSearch(window.location.href, "projectName");
routerData.tableType = 2;
routerData.examId = data.examId;
routerData.ids = operationData.getIds(vm.formInline,vm.organizationList,checkAll);
routerData.type = operationData.getSearchType(vm.formInline,checkAll),
routerData.originalFlag = vm.formInline.checked == false ? 0 : 1
// this.$router.push({ path: '/name-list', query: routerData});
let routeData = this.$router.resolve({ path: '/name-list', query: routerData});
window.open(routeData.href, '_blank');
},
// 更改数据显示数量
handleSizeChange(val) {
console.log(`每页 ${val} 条`)
vm.pageSize = val
vm.search()
},
// 换页
handleCurrentChange(val) {
console.log(`当前页: ${val}`)
vm.pageNo = val
vm.search()
}
}
};
</script>
<style lang='scss' rel='stylesheet/scss'>
.examination-analysis {
background: #fff;
overflow: hidden;
padding: 10px;
.weight {
font-weight: bold;
}
.el-card {
border-width: 0px;
}
.el-card.is-always-shadow {
box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.1);
}
.line {
background: #e4e4e4;
height: 80px;
width: 1px;
float: left;
margin-top: 20px;
}
.box {
}
.table {
margin-top: 30px;
}
.box-card {
width: 48%;
margin-right: 1%;
float: left;
.el-card__header {
border-bottom-width: 0;
}
.title {
text-align: center;
}
.box-content {
text-align: center;
height: 40px;
font-size: 15px;
}
}
}
</style>
<template>
<div class="learning-effect">
<div class="learning" ref="learning"></div>
<div class="education" ref="education"></div>
</div>
</template>
<script>
import { openLoading, closeLoading } from "../../utils/utils";
import * as commonUtil from "../../utils/utils";
const echarts = require("echarts");
export default {
data() {
return {};
},
mounted() {
commonUtil.resizeHeight();
this.initEcharts();
},
methods: {
// 初始化图表
initEcharts() {
openLoading(this);
let trainChart = echarts.init(this.$refs["learning"]);
let educationChart = echarts.init(this.$refs["education"]);
let trainPara = {
color: ["#FF9999", "#66CCFF"],
text: '培训前后知识点掌握情况变化',
xAxisData: [
"转诊与随访",
"转诊与随访",
"周三",
"治疗原则及降压目标",
"周五",
"治疗原则及降压目标",
"周日"
],
seriesBeforeDate: [20, 32, 31, 34, 39, 33, 32],
seriesAfterDate: [86, 10, 96, 10, 16, 16, 15]
}
let educationPara = {
color: ["#33FFFF", "#FF9999"],
text: '不同学历培训前后正确率对比',
xAxisData: [
"转诊与随访",
"转诊与随访",
"周三",
"治疗原则及降压目标",
"周五",
"治疗原则及降压目标",
"周日"
],
seriesBeforeDate: [20, 32, 31, 34, 39, 33, 32],
seriesAfterDate: [86, 10, 96, 10, 16, 16, 15]
};
// 显示图表。
trainChart.setOption(this.echartOptions(trainPara));
educationChart.setOption(this.echartOptions(educationPara));
closeLoading(this)
},
// 图表的参数
echartOptions(parameter) {
let option = {
color: parameter.color,
title: {
text: parameter.text,
x: "center",
textStyle: {
//主标题文本样式
fontSize: 16,
fontWeight: "bolder",
color: "#333"
}
},
tooltip: {
trigger: "axis",
axisPointer: {
type: "shadow"
}
},
legend: {
data: ["培训前正确率", "培训后正确率"],
right: 0,
top: 20
},
grid: {
left: "3%",
right: "4%",
bottom: "3%",
containLabel: true
},
xAxis: [
{
type: "category",
data: parameter.xAxisData,
axisLabel: {
//坐标轴刻度标签的相关设置。
interval: 0,
rotate: "45"
}
}
],
yAxis: [
{
name: "比率(%)",
type: "value",
axisLabel: {
show: true,
interval: "auto",
formatter: "{value} %"
},
show: true,
axisLine: {
// 轴线
show: false
}
}
],
series: [
{
name: "培训前正确率",
type: "bar",
barGap: "20%",
barMaxWidth: "50",
itemStyle: {
normal: {
label: {
show: true,
position: "top",
formatter: "{c}%"
}
}
},
data: parameter.seriesBeforeDate
},
{
name: "培训后正确率",
type: "bar",
barGap: "20%",
barMaxWidth: "50",
itemStyle: {
normal: {
label: {
show: true,
position: "top",
formatter: "{c}%" //这是关键,在需要的地方加上就行了
}
}
},
data: parameter.seriesAfterDate
}
]
};
return option;
}
}
};
</script>
<style lang='scss' rel='stylesheet/scss'>
.learning-effect {
width: 100%;
.learning,
.education {
margin-top: 40px;
min-width: 400px;
height: 400px;
background: #fff;
}
}
</style>
<template>
<div class="item-list-wrap">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond" :curmbThird="curmbThird" :jumPathThird="jumPathThird"></bread-crumb>
<div class="component-content screenSet" id="screenSet">
<el-form class="item-form" ref="formInline" :model="formInline" label-width="80px">
<el-form-item label="选择地区:">
<!-- :props="props" -->
<el-cascader
size="small"
ref="cascaderRegion"
:options="optionsRegion"
:props="props"
v-model="formInline.region"
@change="handleChange"
filterable
change-on-select
placeholder="请先选择地区后再进行查询"
style="width:330px"
></el-cascader>
</el-form-item>
<el-form-item label="选择机构:">
<el-select
size="small"
v-model="formInline.organization"
:placeholder="organizationNotice"
@change="changeOrganization"
multiple
collapse-tags
:disabled="formInline.region.length !== 3"
style="width:330px"
>
<el-option
v-for="item in organizationList"
:key="item.index"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<div class="tag-group">
<el-tag
v-for="tag in tags"
:key="tag.value"
type="info"
closable
@close="handleTagClose(tag)"
>{{ tag.label }}</el-tag>
</div>
<el-form-item label v-if="showOriginal == 1">
<el-checkbox size="small" v-model="formInline.checked">查看原始数据</el-checkbox>
</el-form-item>
</el-form>
<div class="form-button">
<el-button @click="search()" type="primary">查询</el-button>
<el-button @click="resetForm()">重置</el-button>
</div>
<div class="button-group">
<el-button v-if="roleType == 'L1' || roleType == 'L2'" type="default" size="small" @click="changeDate">数据修改</el-button>
<!-- <el-button type="default" size="small" @click="update" v-else>修改范围</el-button> -->
<el-button type="default" size="small" :disabled="exportStatus" @click="exportExcel">导出明细</el-button>
</div>
<!-- <div class="item-tab"></div> -->
<el-tabs v-model="activeName" @tab-click="handleClick" :before-leave="beforeLeave">
<el-tab-pane label="参与情况" name="first">
<part-in
ref="childPart"
:formInline="formInline"
:activeName="activeName"
:organizationNum="organizationNum"
:organizationList="organizationList"
></part-in>
</el-tab-pane>
<el-tab-pane label="人群分析" name="second">
<crowd-analysis
ref="childCrowd"
:formInline="formInline"
:activeName="activeName"
:organizationList="organizationList"
></crowd-analysis>
</el-tab-pane>
<el-tab-pane label="课程分析" name="third">
<course-analysis
ref="childCourse"
:formInline="formInline"
:activeName="activeName"
:dialogData="dialogData"
:organizationList="organizationList"
></course-analysis>
</el-tab-pane>
<el-tab-pane label="考试分析" name="fourth" v-if="displayExam == 1">
<examination-analysisfrom
ref="childExam"
:formInline="formInline"
:activeName="activeName"
:dialogData="dialogData"
:organizationList="organizationList"
></examination-analysisfrom>
</el-tab-pane>
<!-- <el-tab-pane label="学习效果分析" name="fifth" lazy>
<learning-effect></learning-effect>
</el-tab-pane>-->
</el-tabs>
<el-dialog title="提示" :visible.sync="dialogVisible" width="30%" center>
<p style="text-align:center">文件正在生成,你可以去“我的导出下载”页,下载文件</p>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">留在当前页</el-button>
<el-button type="primary" @click="toDownload()">去下载</el-button>
</span>
</el-dialog>
<el-dialog title :visible.sync="dialogUpdate" width="80%" center>
<!-- <el-button @click="dialogUpdate = false">取 消</el-button> -->
<data-alignment
ref="childAlignment"
@closeDialog="dialogUpdate = false"
@closeSearch="closeSearch"
:formInline="formInline"
:dialogData="dialogData"
:organizationList="organizationList"
></data-alignment>
</el-dialog>
</div>
</div>
</template>
<script>
import BreadCrumb from "../../components/breadcrumb.vue";
import CourseAnalysis from "./item-course-analysis.vue";
import CrowdAnalysis from "./item-crowd-analysis.vue";
import PartIn from "./item-part-in.vue";
import ExaminationAnalysisfrom from "./item-examination-analysis.vue";
import LearningEffect from "./item-learning-effect.vue";
import DataAlignment from "./data-alignment.vue";
import { create } from "domain";
import { mapGetters } from "vuex";
import { openLoading, closeLoading } from "../../utils/utils";
import * as commonUtil from "../../utils/utils";
import * as operationData from "../../utils/operation";
import { log } from "util";
let vm = null;
export default {
components: {
BreadCrumb,
CourseAnalysis,
CrowdAnalysis,
PartIn,
ExaminationAnalysisfrom,
LearningEffect,
DataAlignment
},
data() {
return {
curmbFirst: "学情报告",
curmbSecond: "项目列表",
curmbThird: "",
jumPathThird: "/report-list",
projectId: "",
projectName: "",
exportStatus: false,
organizationList: [],
optionsRegion: [],
props: {
lazy: true,
lazyLoad(node, resolve) {
const { level } = node;
console.log("node", node);
if (node.level == 1) {
let req = {
provinceId: node.data.value
};
vm.GET("basic-data/position/cities", req).then(res => {
let newData = vm.setMoreOption(res.data.cityList, "cities");
console.log("newData", newData);
resolve(newData);
});
} else if (node.level == 2) {
let req = {
cityId: node.data.value
};
vm.GET("basic-data/position/counties", req).then(res => {
let newData = vm.setMoreOption(res.data.countyList, "counties");
console.log("newData", newData);
resolve(newData);
});
}
}
},
showOriginal: 2,
roleType: '',
formInline: {
region: [],
date: "",
organization: [],
checked: false,
pageNo: 1,
pageSize: 20
},
organizationNotice: '选择地区筛选到区才能选择机构',
dialogData: {
region: "",
// regionData: "",
organization: ""
// organizationData: "",
},
tags: [],
activeName: "first",
organizationNum: 0,
dialogVisible: false,
dialogUpdate: false,
displayExam: 2,
flag: 1,
};
},
computed: {
...mapGetters(["_token"])
},
watch: {
tags: function(val) {
this.setDialogData();
}
},
created() {
vm = this;
this.projectId = vm.getUrlSearch(window.location.href, "id");
this.projectName = vm.getUrlSearch(window.location.href, "projectName");
this.curmbThird = vm.getUrlSearch(window.location.href, "projectName");
this.getDisplay();
// this.getRegionOption();
},
mounted: function() {
commonUtil.resizeHeight();
},
methods: {
getDisplay(type) {
let req = {
projectId: vm.projectId,
projectName: vm.projectName,
};
openLoading(vm);
vm.reportGET("report/portal/display", req).then(res => {
closeLoading(vm);
if (res.code == "000000") {
console.log('vm.showOriginal',res.data)
vm.showOriginal = res.data.status;
vm.roleType = res.data.roleType;
vm.displayExam = res.data.existExam;
vm.flag = res.data.flag;
}
if(type !=2) {
vm.getRegionOption();
}
});
},
beforeLeave(activeName, oldActiveName) {
console.log('action',activeName,'oldActive',oldActiveName)
},
handleClick(tab, event) {
//console.log(tab, event);
// if(tab.name == this.activeName) {
// return;
// }
console.log("activeName", this.activeName, tab.name);
if (tab.name == "first") {
this.$refs.childPart.$emit("init");
} else if (tab.name == "second") {
this.$refs.childCrowd.$emit("init");
} else if (tab.name == "third") {
this.$refs.childCourse.$emit("init");
} else if (tab.name == "fourth") {
this.$refs.childExam.$emit("init");
}
},
handleChange(value) {
this.formInline.organization = [];
this.tags = [];
setTimeout(function() {
// console.log(vm.$refs["cascaderRegion"].inputValue);
vm.dialogData.region = vm.$refs["cascaderRegion"].inputValue;
// vm.dialogData.regionData = value[value.length-1];
// console.log('vm.dialogData.region',vm.dialogData.region)
}, 20);
// console.log('region',value,vm.formInline);
if (value.length >= 3) {
this.getOrganizationList();
this.organizationNotice = "请选择机构";
} else {
this.organizationNotice = "选择地区筛选到区才能选择机构";
}
},
setMoreOption(data, type) {
let option = [];
for (let i = 0; i < data.length; i++) {
let obj = data[i];
if (type == "cities") {
obj.label = data[i].cityName;
obj.value = data[i].cityId;
} else if (type == "counties") {
obj.label = data[i].countyName;
obj.value = data[i].countyId;
obj.leaf = true;
}
option.push(obj);
}
return option;
},
changeOrganization(value) {
// console.log('formInline',this.formInline.organization);
this.tags = [];
//选了全部的情况下
for (let a = 0; a < this.formInline.organization.length; a++) {
if (this.formInline.organization[a] == 0) {
//选了全部
let tagItem = {
label: "全部",
value: 0
};
this.tags.push(tagItem);
return;
}
}
//没选全部
for (let i = 0; i < this.organizationList.length; i++) {
for (let j = 0; j < value.length; j++) {
if (value[j] == this.organizationList[i].value) {
// console.log('value[j]',j,value[j],this.organizationList[i].label )
let tagItem = {
label: this.organizationList[i].label,
value: this.organizationList[i].value
};
this.tags.push(tagItem);
}
}
}
},
handleTagClose(tag) {
// console.log(tag);
//选了全部的情况下
if (this.tags.length > 0 && this.tags[0].value == 0) {
this.tags.splice(0, 1);
this.formInline.organization = [];
return;
}
//没全部的情况下
for (let i = 0; i < this.tags.length; i++) {
if (tag.value == this.tags[i].value) {
this.tags.splice(i, 1);
this.formInline.organization.splice(
this.formInline.organization.indexOf(tag.value),
1
);
break;
}
}
},
getMoreRegion() {
let http = new Promise((resolve, reject) => {
let req = {
provinceId: 350
};
vm.GET("basic-data/position/cities", req).then(res => {
resolve(res);
});
});
console.log("http值", http);
return http;
},
//获取地区
getRegionOption() {
if(vm.flag == 2 && vm.roleType == "L2") {
this.optionsRegion = [{id: 11, provinceId: 330, provinceName: "浙江省",value: 330, label: "浙江省"}]
} else {
let req = {};
openLoading(vm);
vm.GET("basic-data/position/provinces", req).then(res => {
closeLoading(vm);
if (res.code == "000000") {
this.optionsRegion = operationData.setRegionOption(
res.data.provinceList
);
// console.log("this.optionsRegion", this.optionsRegion);
}
});
}
},
getOrganizationList() {
this.organizationList = [
// {
// label: "全部",
// value: 0
// },
// {
// label: "西湖区第二人民医院",
// value: 66
// },
// {
// label: "杭州市中医院",
// value: 233
// },
// {
// label: "仁济医院",
// value: 999
// }
];
let countyId = vm.formInline.region[vm.formInline.region.length - 1];
let req = {
projectId: vm.projectId,
countyId: countyId
};
openLoading(vm);
vm.reportGET("report/portal/getOrganizationList", req).then(res => {
closeLoading(vm);
if (res.code == "000000") {
this.organizationList = operationData.getLearnOrganization(
res.data.hospitalList
);
}
});
},
getOrganizationNum() {
//选择全部
let num = 0;
if (this.tags.length == 0) {
return;
}
if (this.tags[0].value == 0) {
num = this.organizationList.length - 1;
return num;
}
//没有选择全部
num = this.tags.length;
return num;
},
closeSearch() {
vm.dialogUpdate = false;
vm.getDisplay(2);
vm.search();
},
search() {
// console.log(this.formInline,this.activeName);
if (this.activeName == "first") {
this.organizationNum = this.getOrganizationNum();
// console.log('this.organizationNum',this.organizationNum)
this.$nextTick(function() {
this.$refs.childPart.$emit("search");
});
} else if (this.activeName == "second") {
this.$refs.childCrowd.$emit("search");
} else if (this.activeName == "third") {
this.$refs.childCourse.$emit("search");
} else if (this.activeName == "fourth") {
this.$refs.childExam.$emit("search");
}
},
//重置
resetForm() {
vm.formInline = Object.assign(
{},
{
region: [],
date: "",
organization: [],
checked: false,
pageNo: 1,
pageSize: 20,
}
);
vm.tags = [];
if (this.activeName == "first") {
this.$refs.childPart.$emit("reset");
} else if (this.activeName == "second") {
this.$refs.childCrowd.$emit("reset");
} else if (this.activeName == "third") {
this.$refs.childCourse.$emit("reset");
} else if (this.activeName == "fourth") {
this.$refs.childExam.$emit("reset");
}
},
exportExcel() {
if (vm.formInline.region.length == 0) {
const h = this.$createElement;
vm.$message({
message: h('p', { style: 'color: #FF3399' }, '请先选择地区后再进行导出 ')
});
return;
}
//按钮置灰三秒
vm.exportStatus = true;
setTimeout(function() {
vm.exportStatus = false;
},3000);
this.dialogVisible = true;
//download接口
let checkAll = operationData.hasAll(vm.formInline.organization)
let req = {
projectId : vm.projectId,
ids: operationData.getIds(vm.formInline,vm.organizationList,checkAll),
type: operationData.getSearchType(vm.formInline,checkAll),
originalFlag: vm.formInline.checked == false ? 0 : 1,
projectName: vm.$route.query.projectName,
cityName: vm.getCityName(),
};
openLoading(vm);
vm.reportGET("report/downLoad/downLoad", req).then(res => {
closeLoading(vm);
// console
if (res.code == "000000") {
}
});
},
getCityName() {
let city = '';
let region = vm.dialogData.region;
console.log('region',region,typeof region,region == '');
if(region != '') {
city = region.split(' / ').join('');
console.log('city',city);
}
return city;
},
toDownload() {
let checkAll = operationData.hasAll(vm.formInline.organization)
let routerData = {
// projectId : vm.projectId,
projectId : '',
};
vm.$router.push({ path: "export-download", query: routerData });
},
update() {},
release() {},
setDialogData() {
//传递给dialog数据
this.dialogData.organization = "";
for (let x = 0; x < this.tags.length; x++) {
this.dialogData.organization += this.tags[x].label + "、";
}
let len = this.dialogData.organization.length;
this.dialogData.organization = this.dialogData.organization.substring(
0,
len - 1
);
},
changeDate() {
if (vm.formInline.region.length == 0) {
const h = this.$createElement;
vm.$message({
message: h('p', { style: 'color: #FF3399' }, '请先选择地区后再进行修改 ')
});
return;
}
this.setDialogData();
this.dialogUpdate = true;
this.$nextTick(function() {
this.$refs.childAlignment.$emit("search");
});
}
}
};
</script>
<style lang="scss">
.item-list-wrap {
.component-content {
// background: #fff;
padding: 10px;
.header-title {
padding: 10px 12px;
font-size: 12px;
color: #449284;
border-bottom: 1px solid #efefef;
}
.item-form {
padding: 10px;
background: #fff;
width:100%;
border-radius: 4px;
}
.form-button {
width: 45%;
top: -120px;
position: relative;
left: 50%;
}
.button-group {
position: relative;
// right: 100px;
float: right;
margin-right: 20px;
}
.choose {
font-size: 12px;
margin-bottom: 20px;
}
.item-tab {
width: 95%;
height: 46px;
background: #F0F2F5;
position: absolute;
}
.el-tabs__item.is-active {
color: #409eff;
}
.el-tabs__header {
width: 65%;
}
.el-tabs__nav-wrap::after {
height: 0px;
}
.tag-group {
margin-left: 78px;
.el-tag {
margin-right: 20px;
}
}
}
}
</style>
\ No newline at end of file
<template>
<div class="part-in-wrap">
<div v-show="!showData" class="empty">
<p>"没有相关数据,请重新选择查询范围"</p>
</div>
<div v-for="(item , index) in cardData" :key="index" class>
<el-card class="box-card">
<div slot="header" class="title">
<span class="weight">{{ item.title }}</span>
</div>
<div class="box-content">
<span class="weight">{{ item.num }}</span>
</div>
</el-card>
<div class="line"></div>
</div>
<div v-if="showChart" class="charts" id="rankChart" ref="rankChart"></div>
<!-- <div class="charts" id="age" ref="age"></div> -->
<el-table
v-if="showTable"
v-show="organizationNum < 2"
:data="finishDetail"
class="project-table"
style="width: 100%;margin-bottom: 30px;"
border
>
<el-table-column prop="name" label="姓名" align="center"></el-table-column>
<el-table-column prop="departmentName" label="科室" align="center"></el-table-column>
<el-table-column prop="joinStatus" label="是否参与项目" align="center">
<template slot-scope="scope">{{ scope.row.joinStatus | partJoin }}</template>
</el-table-column>
<el-table-column prop="projectStatus" label="是否完成项目" align="center">
<template slot-scope="scope">{{ scope.row.projectStatus | partFinish }}</template>
</el-table-column>
<el-table-column prop="finishTime" label="完成项目日期" align="center">
<template slot-scope="scope">{{ scope.row.finishTime }}</template>
</el-table-column>
<div slot="empty">
<div class="table-empty">
<img src="../../assets/image/no-content1.png">
<p>没有相关数据,请重新选择查询范围</p>
</div>
</div>
</el-table>
</div>
</template>
<script>
import { openLoading, closeLoading } from "../../utils/utils";
import * as commonUtil from "../../utils/utils";
import * as operationData from "../../utils/operation";
import echarts from "echarts";
import { setTimeout } from "timers";
let vm = null;
export default {
props: {
formInline: {
type: Object
},
activeName: {
type: String
},
organizationNum: {
type: Number
},
organizationList: {
type: Array
}
},
data() {
return {
// 只有一个机构时显示人员完成情况
projectId: "",
finishDetail: [],
cardData: [],
showChart: false,
showTable: false,
showData: false,
};
},
created() {
vm = this;
this.projectId = vm.getUrlSearch(window.location.href, "id");
},
mounted: function() {
// commonUtil.resizeHeight();
this.$on("search", () => {
this.search();
});
this.$on("init", () => {
this.$nextTick(function() {
if (vm.formInline.region.length != 0) {
this.search();
}
});
});
this.$on("reset", () => {
this.showData = false;
this.showChart = false;
this.showTable = false;
this.finishDetail = [];
this.cardData = [];
});
// if (this.activeName == "first") {
// this.updateResize();
// }
},
methods: {
search() {
if (vm.formInline.region.length == 0) {
const h = this.$createElement;
vm.$message({
message: h('p', { style: 'color: #FF3399' }, '请先选择地区后再进行查询 ')
});
return;
}
let checkAll = operationData.hasAll(vm.formInline.organization)
console.log(vm.formInline,checkAll,vm.organizationList);
let req = {
projectId: vm.projectId,
ids: operationData.getIds(vm.formInline,vm.organizationList,checkAll),
type: operationData.getSearchType(vm.formInline,checkAll),
originalFlag: vm.formInline.checked == false ? 0 : 1
};
console.log("1 req", req);
openLoading(vm);
vm.reportGET("report/portal/getParticipateInfo", req).then(res => {
closeLoading(vm);
if (res.code == "000000") {
this.getCardData(res.data);
vm.showData = true;
if(res.data.participateHospitalCount == 0 && res.data.participatePeopleCount == 0) {
vm.$message("没有相关数据,请重新选择查询范围");
}
} else {
vm.$message(res.message);
}
});
vm.reportGET("report/portal/top", req).then(res => {
closeLoading(vm);
if (res.code == "000000") {
this.getRank(res.data);
this.getTableData(res.data);
}
});
},
updateResize() {
this.$nextTick(function() {
let chartRank = echarts.init(document.getElementById("rankChart"));
window.onresize = function() {
chartRank.resize();
};
});
},
getTableData(data) {
if (vm.formInline.region.length == 3 && vm.organizationNum == 1) {
vm.showTable = true;
vm.finishDetail = data.hospitalPeopleList;
} else {
vm.showTable = false;
}
},
getRank(data) {
let xAxisData = [];
let seriesData = [];
for (let i = 0; i < data.top.length; i++) {
xAxisData[i] = data.top[i].name;
seriesData[i] = data.top[i].percentage;
}
if(vm.organizationNum == 1 || xAxisData.length <= 1) {
vm.showChart = false;
}
if (xAxisData.length > 1 && vm.organizationNum !=1) {
vm.showChart = true;
setTimeout(function() {
let myChart = echarts.init(vm.$refs.rankChart);
let optionValue = operationData.getRank(xAxisData, seriesData);
myChart.setOption(optionValue);
vm.updateResize();
}, 200);
}
},
getCardData(data) {
vm.cardData = [
{
title: "应参与机构数",
num: data.participateHospitalCount,
},
{
title: "已参与机构数",
num: data.hasParticipateHospitalCount,
},
{
title: "应参与人数",
num: data.participatePeopleCount,
},
{
title: "已参与人数",
num: data.hasParticipatePeopleCount,
},
{
title: data.type == 1 ? "项目完成人数" : "项目获证人数",
num: data.acquireCertificatePeopleCount,
},
];
if(data.manyCertificate != null) {
for(let i=0;i<data.manyCertificate.length;i++) {
let obj = {
title: data.manyCertificate[i].name,
num: data.manyCertificate[i].value,
}
if(obj.title != null) {
vm.cardData.push(obj);
}
}
}
// vm.cardData[0].num = data.participateHospitalCount;
// vm.cardData[1].num = data.participatePeopleCount;
// vm.cardData[2].num = data.hasParticipatePeopleCount;
// vm.cardData[3].num = data.acquireCertificatePeopleCount;
},
}
};
</script>
<style lang='scss'>
.part-in-wrap {
background: #fff;
overflow: hidden;
// padding: 10px;
.empty {
height: 300px;
line-height: 300px;
color: #FF3399;
text-align: center;
}
.el-card {
border-width: 0px;
}
.el-card.is-always-shadow {
box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.1);
}
.line {
background: #e4e4e4;
height: 80px;
width: 1px;
float: left;
margin-top: 20px;
}
.box-card {
width: 13%;
margin-right: 1%;
font-size: 14px;
float: left;
.el-card__header {
border-bottom-width: 0;
}
.title {
text-align: center;
}
.box-content {
text-align: center;
height: 40px;
font-size: 15px;
}
}
.charts {
top: 20px;
margin-left: 10%;
width: 80%;
border-radius: 4px;
border: 1px solid #ebeef5;
background-color: #fff;
overflow: hidden;
color: #303133;
-webkit-transition: 0.3s;
transition: 0.3s;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
height: 600px;
background: #fff;
padding: 20px;
}
.project-table {
top: 15px;
background: #fff;
}
}
</style>
<template>
<div class="name-list-wrap">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond" :curmbThird="curmbThird" :curmbFouth="curmbFouth" :jumPathThird="jumPathThird" :jumPathFouth="jumPathFouth"></bread-crumb>
<div class="component-content screenSet" id="screenSet">
<p class="course-p">地区:{{ queryData.region }}</p>
<p class="course-p">选择机构:{{ queryData.organization }}</p>
<el-form
class="form-update"
ref="serchForm"
:model="formData"
label-width="100px"
style="width:40%;"
>
<el-form-item v-if="tableType == 1" label="课程完成状态:">
<el-select
v-model="formData.learnFlag"
size="small"
style="width: 100%;"
placeholder="请选择状态"
>
<el-option
v-for="(item,index) in statusList"
:key="index"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item v-if="tableType == 2" label="考试成绩等级:">
<el-select v-model="formData.gradeFlag" size="small" style="width: 100%;" placeholder="请选择状态">
<el-option
v-for="(item,index) in rankList"
:key="index"
:label="item.gradeName"
:value="item.gradeFlag"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="查询姓名: ">
<el-input size="small" placeholder="查询姓名" v-model="formData.doctorName"></el-input>
</el-form-item>
</el-form>
<div class="form-button">
<el-button @click="searchData()" type="primary">查询</el-button>
<el-button @click="resetForm()">重置</el-button>
</div>
<el-table :data="tableData" class="course-table">
<el-table-column prop="doctorName" label="姓名" align="center"></el-table-column>
<el-table-column prop="sex" label="性别" align="center"></el-table-column>
<el-table-column prop="age" label="年龄" align="center"></el-table-column>
<el-table-column prop="titleName" label="职称" align="center"></el-table-column>
<el-table-column prop="hospitalName" label="机构" align="center"></el-table-column>
<el-table-column prop="addressName" label="地区" align="center"></el-table-column>
<el-table-column v-if="tableType == 1" prop="learnStatus" label="参与课程状态" align="center">
<template slot-scope="scope">
<span>{{ scope.row.learnStatus }}</span>
</template>
</el-table-column>
<el-table-column
v-if="tableType == 1"
prop="finishedTime"
label="完成培训日期"
align="center"
min-width="150"
>
<template slot-scope="scope">
<span>{{ scope.row.finishedTime }}</span>
</template>
</el-table-column>
<el-table-column
v-if="tableType == 2"
prop="passTime"
label="通过考试日期"
min-width="150"
align="center"
>
<template slot-scope="scope">
<span>{{ scope.row.passTime }}</span>
</template>
</el-table-column>
<el-table-column
v-if="tableType == 2"
prop="gradeName"
label="考试成绩等级"
min-width="80"
align="center"
>
<template slot-scope="scope">
<span>{{ scope.row.gradeName }}</span>
</template>
</el-table-column>
<div slot="empty">
<div class="table-empty">
<img src="../../assets/image/no-content1.png">
<p>没有相关数据,请重新选择查询范围</p>
</div>
</div>
</el-table>
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="formData.pageNo"
:page-sizes="[20, 50 ,100]"
:page-size="formData.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows"
></el-pagination>
</div>
</div>
</div>
</template>
<script>
import BreadCrumb from "../../components/breadcrumb.vue";
import { create } from "domain";
import { mapGetters } from "vuex";
import { openLoading, closeLoading } from "../../utils/utils";
import * as commonUtil from "../../utils/utils";
import * as operationData from "../../utils/operation";
let vm = null;
export default {
components: {
BreadCrumb
},
props: {
formInline: {
type: Object
}
},
data() {
return {
curmbFirst: "学情报告",
curmbSecond: "项目管理",
curmbThird: "",
curmbFouth: "",
jumPathThird: "/report-list",
jumPathFouth: "",
formData: {
doctorName: "",
learnFlag: -1,
gradeFlag: -1,
pageNo: 1,
pageSize: 20,
},
region: "",
organization: "",
tableData: [],
tableType: 1,
totalRows: 0,
statusList: [
{
value: -1,
label: "全部"
},
{
value: 0,
label: "未参与"
},
{
value: 1,
label: "参与中"
},
{
value: 2,
label: "已完成"
}
],
rankList: [],
queryData: {}
};
},
// computed: {
// ...mapGetters([
// "_token",
// ])
// },
created() {
vm = this;
vm.getInitData();
vm.search();
},
mounted: function() {
commonUtil.resizeHeight();
},
methods: {
getHostital() {
let req = {
projectId: vm.queryData.projectId,
hospitalIds: vm.queryData.ids,
};
vm.reportGET("report/portal/getHostitalName", req).then(res => {
if (res.code == "000000") {
}
});
},
getInitData() {
vm.queryData = this.$route.query;
vm.tableType = vm.queryData.tableType;
vm.curmbThird = vm.getUrlSearch(window.location.href, "projectName");
vm.jumPathFouth = '/item-list?id=' + vm.queryData.projectId + '&projectName=' + vm.queryData.projectName;
console.log("queryData", vm.queryData);
if(vm.queryData.type == 4) {
vm.getHostital();
}
},
searchData() {
vm.formData.pageNo = 1;
vm.search();
},
search() {
let query = this.queryData;
if (this.tableType == 1) {
vm.curmbFouth = "课程培训情况";
//课程分析
// console.log('this.tableType',this.tableType)
let req = {
projectId: query.projectId,
originalFlag: query.originalFlag,
ids: query.ids,
type: query.type,
courseId: query.courseId,
learnFlag: vm.formData.learnFlag,
doctorName: vm.formData.doctorName,
pageNo: vm.formData.pageNo,
pageSize: vm.formData.pageSize,
};
console.log("course req", req);
openLoading(vm);
vm.reportGET("report/portalProjectCourse/getUserList", req).then(res => {
closeLoading(vm);
if (res.code == "000000") {
if(res.data.totalCount == 0 ) {
vm.$message("没有相关数据,请重新选择查询范围");
}
vm.tableData = res.data.list;
vm.totalRows = res.data.totalCount;
} else {
vm.$message(res.message);
}
});
} else if (this.tableType == 2) {
vm.curmbFouth = "考试培训情况";
//考试分析
let reqRank = {
projectId: query.projectId,
}
vm.reportGET("report/portalProjectExam/getGradeList", reqRank).then(res => {
if (res.code == "000000") {
vm.rankList = operationData.initRank(res.data.list);
}
});
let req = {
projectId: query.projectId,
originalFlag: query.originalFlag,
ids: query.ids,
type: query.type,
examId: query.examId,
gradeFlag: vm.formData.gradeFlag,
doctorName: vm.formData.doctorName,
pageNo: vm.formData.pageNo,
pageSize: vm.formData.pageSize,
};
console.log("exam req", req);
openLoading(vm);
vm.reportGET("report/portalProjectExam/getUserList", req).then(res => {
closeLoading(vm);
if (res.code == "000000") {
if(res.data.totalCount == 0 ) {
vm.$message("没有相关数据,请重新选择查询范围");
}
vm.tableData = res.data.list;
vm.totalRows = res.data.totalCount;
} else {
vm.$message(res.message);
}
});
}
},
resetForm() {
vm.formData = Object.assign(
{},
{
doctorName: "",
learnFlag: -1,
gradeFlag: -1,
pageNo: 1,
pageSize: 20,
}
);
vm.search();
},
handleSizeChange(val) {
console.log(`每页 ${val} 条`);
this.formData.pageSize = val;
this.search();
},
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
this.formData.pageNo = val;
this.search();
}
}
};
</script>
<style lang="scss">
.name-list-wrap {
.component-content {
background: #fff;
padding: 10px;
.header-title {
padding: 10px 12px;
font-size: 12px;
color: #449284;
border-bottom: 1px solid #efefef;
}
.course-p {
margin: 30px 0 20px 30px;
font-size: 13px;
color: #606266;
}
.form-update {
margin: 30px 0px 0px 20px;
}
.form-button {
width: 45%;
top: -62px;
position: relative;
left: 50%;
}
}
}
</style>
\ No newline at end of file
<template>
<div class="item-list">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb>
<div class="itemlist-content screenSet" id="screenSet">
<el-row :gutter="30" class="row" type="flex" style="margin-top: 10px;">
<el-form ref="serchForm" :model="formData" label-width="75px" style="width:100%;">
<el-col :span="6">
<el-form-item label="项目状态:">
<el-select
v-model="formData.status"
size="small"
style="width: 100%;"
placeholder="请选择项目状态"
>
<el-option
v-for="(item,index) in statusSelect"
:key="index"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item>
<el-input v-model="formData.name" size="small" placeholder="请输入项目名称">
<i slot="suffix" class="el-icon-search"></i>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12" style="padding:0;text-align:right;padding-right:15px;">
<el-button type="primary" size="small" @click="searchData()">查询</el-button>
<el-button type="default" size="small" @click="resetForm()" style="margin-left:0;">重置</el-button>
</el-col>
</el-form>
</el-row>
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="projectName" label="项目名称" min-width="200" align="center"></el-table-column>
<el-table-column prop="timeStatus" label="项目状态" min-width="80" align="center">
<template slot-scope="scope">
{{ scope.row.timeStatus | reportStatus }}
</template>
</el-table-column>
<el-table-column prop="projectBegintime" label="开始时间" min-width="160" align="center">
<template slot-scope="scope">{{ scope.row.projectBegintime }}</template>
</el-table-column>
<el-table-column prop="projectEndtime" label="结束时间" min-width="160" align="center">
<template slot-scope="scope">{{ scope.row.projectEndtime }}</template>
</el-table-column>
<el-table-column label="操作" fixed="right" align="center" min-width="200">
<template slot-scope="scope">
<el-button style="color:#509284" type="text" size="small" @click="go(scope.row)">查看学情报告</el-button>
</template>
</el-table-column>
<div slot="empty">
<div class="table-empty">
<img src="../../assets/image/no-content1.png" />
<p>没有找到符合的结果</p>
</div>
</div>
</el-table>
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="formData.pageNo"
:page-sizes="[20, 50 ,100]"
:page-size="formData.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows"
></el-pagination>
</div>
</div>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import { openLoading, closeLoading } from "../../utils/utils";
import * as commonUtil from "../../utils/utils";
import BreadCrumb from "../../components/breadcrumb.vue";
let vm = null;
export default {
data() {
return {
curmbFirst: "学情报告",
curmbSecond: "项目列表",
formData: {
//搜索信息
status: "",
name: "",
pageNo: 1, //当前是第几页
pageSize: 20 //页面总数
},
statusSelect: [
//项目状态
{
label: "全部",
value: ""
},
{
label: "进行中",
value: 1
},
{
label: "已结束",
value: 2
}
],
tableData: [],
totalRows: 0, //数据总数
idType: '',
};
},
components: {
BreadCrumb
},
created() {
vm = this;
vm.idType = localStorage.getItem('storageIdType');
vm.search();
},
// 挂载到Dom完成时
mounted: function() {
commonUtil.resizeHeight();
},
methods: {
searchData() {
vm.formData.pageNo = 1;
vm.search();
},
// 搜索列表
search() {
let req = {};
req = this.formData;
openLoading(vm);
vm.GET("portal/portalInfo/getPortalReportProject", req).then(res => {
closeLoading(vm);
if (res.code == "000000") {
if(res.data.totalRows == 0) {
vm.$message("没有找到符合的结果");
}
vm.tableData = res.data.projectList;
vm.totalRows = res.data.totalRows;
} else {
vm.$message(res.message);
}
});
},
// 重置搜索信息
resetForm() {
this.formData = {
status: "",
name: "",
pageNo: 1, //当前是第几页
pageSize: 20 //页面总数
};
vm.search();
},
// 更改数据显示数量
handleSizeChange(val) {
console.log(`每页 ${val} 条`);
vm.formData.pageSize = val;
vm.search();
},
// 换页
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
vm.formData.pageNo = val;
vm.search();
},
//跳转到报告详情页
go(row) {
let routerData = {
id: row.id,
projectName: row.projectName,
};
vm.$router.push({ path: "/item-list" , query: routerData });
}
}
};
</script>
<style lang="scss">
.item-list {
.itemlist-content {
padding: 10px;
background: #fff;
}
}
</style>
\ No newline at end of file
...@@ -127,7 +127,7 @@ ...@@ -127,7 +127,7 @@
'changeToken', 'changeToken',
]), ]),
checkPhone(val) { checkPhone(val) {
if(!(/^1[345678]\d{9}$/.test(val))) { if(!(/^1[3456789]\d{9}$/.test(val))) {
return false; return false;
} else { } else {
return true; return true;
......
<template>
<div>
</div>
</template>
<script>
export default {}
</script>
<style scoped lang="scss">
</style>
<template>
<div class="select-patient-dialog">
<el-dialog
title="添加居民"
:visible.sync="showSelectPatient"
v-if="isShowSelectPatient"
:before-close="clickClose"
:close-on-click-modal="false"
:close-on-press-escape="false"
width="1100px"
top="2%"
center>
<div class="finish-content">
<el-form
ref="searchData"
:model="searchData"
:inline="true"
class="select-width"
size="small">
<div style="display: flex;justify-content: flex-end;margin-bottom: 15px">
<el-button plain size="small" @click="goAddPatient">+ 新增居民</el-button>
</div>
<div style="display: flex;justify-content: space-between;">
<div>
<el-form-item prop="sex">
<el-select
class="init-width"
v-model="searchData.sex"
placeholder="请选择性别"
clearable>
<el-option
v-for="(item,index) in sexOptions"
:key="index"
:label="item.value"
:value="item.no">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="ageRange">
<el-select
v-model="searchData.ageRange"
multiple
collapse-tags
filterable
placeholder="请选择年龄段"
class="init-width2"
clearable>
<el-option
v-for="(item,index) in ageOptions"
:key="index"
:label="item.value"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="diseaseId">
<!--<el-select
v-model="searchData.diseaseId"
multiple
collapse-tags
filterable
placeholder="请选择诊断"
class="set-width"
clearable>
<el-option
v-for="(item,index) in diseaseOptions"
:key="index"
:label="item.diseaseName"
:value="item.diseaseId">
</el-option>-->
<!--</el-select>-->
<el-select
v-model="searchData.icdCodeList"
multiple
collapse-tags
filterable
remote
reserve-keyword
placeholder="请选择或搜索诊断"
:remote-method="getDiseaseData"
:loading="loading"
class="set-width"
>
<el-option
v-for="item in icdOptions"
:key="item.icdCode"
:label="item.diseaseName"
:value="item.icdCode">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="labelId">
<el-select
v-model="searchData.labelId"
multiple
collapse-tags
filterable
class="set-width"
placeholder="请选择或搜索分组"
clearable>
<el-option
v-for="(item,index) in labelOptions"
:key="index"
:label="item.labelName"
:value="item.labelId">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="fuPlanIdList" v-if="selectPatientType == 1">
<el-select
v-model="searchData.fuPlanIdList"
multiple
collapse-tags
filterable
class="set-width"
placeholder="请选择随访计划"
clearable>
<el-option
v-for="(item,index) in fuPlanOptions"
:key="index"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="searchCondition">
<el-input
v-model="searchData.searchCondition"
placeholder="请输入姓名,手机号,身份证"
clearable
class="set-width">
<!--<i slot="prefix" class="el-input__icon el-icon-search" @click="searchHandler" style="cursor: pointer"></i>-->
</el-input>
</el-form-item>
</div>
<div>
<el-button type="primary" @click="searchHandler" size="small">查询</el-button>
<el-button plain @click="resetData('searchData')" size="small">重置</el-button>
</div>
</div>
</el-form>
<el-table
:data="patientsData"
ref="multipleTable"
center
style="width: 100%;margin-top: 10px;"
height="250"
:row-key="getRowKeys"
class="spe-table"
@selection-change="handleSelectionChange">
<el-table-column
type="selection"
align="center"
:reserve-selection="true"
:selectable="checkboxInit">
</el-table-column>
<el-table-column
prop="nickname"
label="姓名"
align="center">
</el-table-column>
<el-table-column
prop="sexStr"
label="性别"
min-width="50"
align="center">
</el-table-column>
<el-table-column
prop="ageStr"
label="年龄"
min-width="50"
align="center">
</el-table-column>
<el-table-column
prop="mobilePhone"
label="手机"
align="center"
min-width="130">
</el-table-column>
<el-table-column
prop="idNoStr"
label="身份证"
align="center"
min-width="130">
</el-table-column>
<el-table-column
prop="showDiseaseNames"
label="诊断"
align="center"
width="180"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column
prop="showLabelName"
label="分组"
align="center"
width="180"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column
v-if="selectPatientType == 1"
prop="fuPlanName"
label="随访计划"
align="center"
width="180"
:show-overflow-tooltip="true">
<template slot-scope="scope">
<span v-if="scope.row.fuPlanName">{{scope.row.fuPlanName}}</span>
<span v-else>-</span>
</template>
</el-table-column>
</el-table>
<el-row type="flex" justify="space-between" align="middle" class="margin-top15">
<!--<span>已选:{{newSelects.length}}人</span>-->
<span></span>
<el-pagination
background
v-if="patientsData.length"
@size-change="handleSizeChangePre"
@current-change="handleCurrentChangePre"
layout="total, sizes, prev, pager, next, jumper"
:current-page="paginationSet.pageNum"
:page-sizes="[15,30,50,100]"
:page-size="paginationSet.pageSize"
:total="paginationSet.total">
</el-pagination>
</el-row>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="clickClose" size="small" plain>取 消</el-button>
<el-button type="primary" size="small" @click="sureClick">确 定</el-button>
</div>
</el-dialog>
<el-dialog
class="reload-label-modal"
:visible.sync="showReloadModal"
width="320px"
:show-close="false"
:close-on-click-modal="false"
center>
<p class="tips">您刚才跳转到新增居民页面进行新增居民,请点击下方按钮刷新数据</p>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleReload">重新加载</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { mapState, mapActions } from 'vuex'
import { getConstants, getPatientInfoList, getDiseasesList, getLabelList, getIcdList } from '@/utils/patients/patientsapi'
import { getPlanList } from '@/utils/followup/followapis'
export default {
components: {},
name: "select-patient",
data() {
return {
showSelectPatient: true,
allSelects: [],
// eachSelects: [],//仅仅是操作选择的总人员
// totalSelect: [],// 当前所选的人
srvPackageId: '',
patientsData: [],
searchData: {
sex: null,
ageRange: [],
diseaseId: [],
labelId: [],
fuPlanIdList: [],
searchCondition: '',
icdCodeList: [],
},
paginationSet: {
pageNum: 1,
pageSize: 15,
total: 0
},
sexOptions: [{
no: '',
value: '不限'
}],
ageOptions: [
// {no: '', value: '年龄范围'}
],
diseaseOptions: [
// {diseaseId: '', diseaseName: '基础疾病'}
],
labelOptions: [
// {labelId: '', labelName: '分组'}
],
fuPlanOptions: [],
newSelects: [], //新选中的人
oldPatientList: [],
showReloadModal: false,
loading: false,
icdOptions: [],
getRowKeys(row) {
return row.patientId;
},
}
},
props: {
isShowSelectPatient: Boolean, //是否显示model,
patientIdList: Array,// 确定已经选过的居民
oldPatientIdList: Array,// 确定已经选过的居民
selectPatientType: Number, //获取居民列表所需字段,随访是1,分组是2,患教是3
sourceId: {
type: String,
required: false,
default: '',
},
},
watch: {
isShowSelectPatient(val){
if(val){
this.getPatientsList()
//获取搜索诊断
this.getDiseaseData();
// 获取常量 性别、年龄
getConstants({
numList: 'P057,P006'
}).then(res=>{
this.sexOptions = [{
no: '',
value: '不限'
}];
this.sexOptions = this.sexOptions.concat(res.data.P006);//性别
this.ageOptions = [
// {no: '', value: '年龄范围'}
];
this.ageOptions = this.ageOptions.concat(res.data.P057);//年龄段
});
// 获取所有疾病
getDiseasesList().then(res=>{
this.diseaseOptions = [
// {diseaseId: '', diseaseName: '基础疾病'}
];
this.diseaseOptions = this.diseaseOptions.concat(res.data);
});
// 获取所有分组
getLabelList({type: 1}).then(res=>{
this.labelOptions = [
// {labelId: '', labelName: '分组'}
]
this.labelOptions = this.labelOptions.concat(res.data.labelNameList);
});
// 获取随访计划列表
getPlanList({
pageNo: -1,
}).then(res => {
if(res.code == '000000') {
this.fuPlanOptions = res.data.fPlanDtoList;
}
})
}
},
},
methods: {
checkboxInit(row,index){
if(row.disableNum == undefined) {
return 1
} else {
return row.disableNum
}
},
getDiseaseData(query) {
// if (query !== '') {
let params = {
diseaseName: query ? query : '',
pageSize: 200,
pageNum: 1,
};
this.loading = true;
getIcdList(params).then(data => {
this.loading = false;
if(data.code == "000000") {
this.icdOptions = data.data;
}
}).catch((error) => {
this.$message({
message: error,
type: 'error'
});
});
// }else {
// this.icdOptions = [];
// }
},
getPatientsList(){
const data = {
pageSize: this.paginationSet.pageSize,
pageNo: this.paginationSet.pageNum,
labelIdList:this.searchData.labelId,
diseaseIdList: this.searchData.diseaseId,
ageList: this.searchData.ageRange,
sex: this.searchData.sex,
searchCondition:this.searchData.searchCondition,
srvPackageId:this.srvPackageId,
addType: this.selectPatientType, //随访是1,分组是2,患教是3
fuPlanIdList: this.searchData.fuPlanIdList || [],
sourceId: this.sourceId, //若是随访的话,传planId;若是分组的话,传labeledId;
icdCodeList: this.searchData.icdCodeList
}
getPatientInfoList(data).then(res=>{
if(res.data.patientList){
this.patientsData = res.data.patientList //接口获取的当页居民
this.getSex()
this.paginationSet.total = res.data.totalRows
// 设置所请求的当页人员是否成为选中状态
// console.log('传入的已选居民',this.patientIdList)
this.patientsData.forEach((item)=>{
item.disableNum = 1;
let diseaseNames = [];
let groupNames = []
//转化分组
if(item.labelModels) {
item.labelModels.forEach(item => {
groupNames.push(item.label)
});
item.showLabelName = groupNames.join('、');
} else {
item.showLabelName = '-';
}
//转化诊断
if(item.patientTypeModels) {
item.patientTypeModels.forEach(item => {
diseaseNames.push(item.diseaseName)
})
item.showDiseaseNames = diseaseNames.join('、');
}else {
item.showDiseaseNames = '-';
}
//针对随访项目
if(this.patientIdList.length > 0){
if(this.patientIdList.includes(item.patientId)){// 如果已经选过居民
this.$nextTick(()=>{
this.$refs.multipleTable.toggleRowSelection(item,true);
})
}
}
if(this.oldPatientIdList!=undefined&&this.oldPatientIdList.length) {
this.oldPatientList = [];
this.patientsData.forEach((item)=>{
if(this.oldPatientIdList.includes(item.patientId)){// 如果已经选过居民
item.disableNum = 0;
this.oldPatientList.push(item);
} else {
item.disableNum = 1
}
})
}
//针对分组详情
// this.patientIdList = res.data.selectedPatientIdList;
let selectedPatientIdList = res.data.selectedPatientIdList;
if(selectedPatientIdList && selectedPatientIdList.length > 0){
if(selectedPatientIdList.includes(item.patientId)){// 如果已经选过居民
this.$nextTick(()=>{
this.$refs.multipleTable.toggleRowSelection(item,true);
})
}
}
if(selectedPatientIdList && selectedPatientIdList.length > 0) {
this.patientsData.forEach((item)=>{
if(selectedPatientIdList.includes(item.patientId)){// 如果已经选过居民
item.disableNum = 0;
this.oldPatientList.push(item);
} else {
item.disableNum = 1
}
})
}
})
// console.log(this.oldPatientIdList)
}else{
this.patientsData = []
}
})
},
getSex(){
this.patientsData.forEach((item,index)=>{
if(item.sex==1){
this.patientsData[index].sexStr = '男'
}else if(item.sex==2){
this.patientsData[index].sexStr = '女'
}else{
this.patientsData[index].sexStr = '-'
}
if(!item.idNo) {
this.patientsData[index].idNoStr = '-'
}else {
this.patientsData[index].idNoStr = item.idNo
}
if(item.age || item.age == 0) {
this.patientsData[index].ageStr = item.age
}else {
this.patientsData[index].ageStr = '-'
}
})
},
// 对选中的居民进行去重
removeDuplicates(list){
return Array.from(new Set(list))
},
// 选择居民
handleSelectionChange(val) {
const _this = this;
_this.newSelects = [];
val.forEach(item => {
if(item.disableNum == 1) {
_this.newSelects.push(item)
}
})
},
// 切换分页
handleCurrentChangePre(val) {
this.paginationSet.pageNum = val
this.getPatientsList()
//控制切换页码的时候,滚动条滚到最上面
this.$refs.multipleTable.bodyWrapper.scrollTop = 0;
},
clickClose(){
// this.searchData.searchCondition = ''
this.searchData = {
sex: null,
ageRange: [],
diseaseId: [],
labelId: [],
fuPlanIdList: [],
searchCondition: '',
icdCodeList: [],
}
this.$emit('closeSelectPatient',false)
},
sureClick(){
if(this.newSelects.length) {
// this.searchData.searchCondition = ''
this.searchData = {
sex: null,
ageRange: [],
diseaseId: [],
labelId: [],
fuPlanIdList: [],
searchCondition: '',
icdCodeList: [],
}
this.$emit('sureSelectPatient',false,this.newSelects,this.oldPatientList)
} else {
this.$message.warning('请先选择!')
}
},
handleSizeChangePre(val) {
this.paginationSet.pageSize = val;
this.getPatientsList();
this.$refs.multipleTable.bodyWrapper.scrollTop = 0;
},
searchHandler() {
this.paginationSet.pageNum = 1;
this.getPatientsList();
this.$refs.multipleTable.bodyWrapper.scrollTop = 0;
},
resetData(formName) {
this.$refs[formName].resetFields();
this.getPatientsList();
this.$refs.multipleTable.bodyWrapper.scrollTop = 0;
},
goAddPatient() {
// this.$router.push({
// path: '/patients-manage/new-manage/new-patient'
// })
let routeData = this.$router.resolve({ path: '/patients-manage/new-manage/new-patient' });
window.open(routeData.href, '_blank');
this.showReloadModal = true;
},
handleReload() {
this.paginationSet.pageNum = 1;
this.getPatientsList();
this.$refs.multipleTable.bodyWrapper.scrollTop = 0;
this.showReloadModal = false;
},
ageDate(val){
let ageObj;
if(!val){
ageObj = {
ageBegin:'',
ageEnd:''
}
}else if(val.indexOf('+') > -1){
ageObj = {
ageBegin: 84,
ageEnd: 200
}
}else {
let ageItem = val.split('-');
ageObj = {
ageBegin:ageItem[0],
ageEnd:ageItem[1]
}
}
return ageObj;
}
},
}
</script>
<style lang="scss">
.init-width{
width: 100px !important;
.el-input{
width: 100px!important;
}
}
.init-width2{
width: 110px !important;
.el-input{
width: 110px!important;
}
}
.set-width{
width: 150px !important;
.el-input{
width: 150px!important;
}
}
</style>
<style lang="scss">
@import '../../../../style/patients-style/element-reset.css';
.select-patient-dialog {
.el-dialog__wrapper {
overflow: hidden;
.el-dialog--center {
/*height: 580px;*/
.el-dialog__body{
padding: 10px 25px 15px;
}
.el-table--scrollable-y,.el-table__body-wrapper {
&::-webkit-scrollbar{
width:5px;
}
&::-webkit-scrollbar-thumb {/*滚动条里面小方块*/
border-radius: 10px;
-webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2);
background: rgba(0,0,0,0.1);
}
}
/*.el-dialog__body {
max-height: 80%;
overflow: hidden;
.finish-content {
height: 100%;
.el-table {
.el-table--scrollable-y .el-table__body-wrapper {
height: 80%;
}
}
}
}*/
}
}
.select-width .el-form-item{
/*width: 130px;*/
}
.margin-top15{
margin-top: 15px;
}
.el-form-item--mini.el-form-item, .el-form-item--small.el-form-item{
margin-bottom: 5px;
}
.el-select__tags-text{
display: inline-block;
max-width: 70px;
overflow: hidden;
text-overflow:ellipsis;
white-space: nowrap;
}
.el-select .el-tag__close.el-icon-close{
top: -5px;
}
}
</style>
<template>
<div class="label-list-wrap label-detail-wrap">
<bread-crumb
:curmbFirst="curmbFirst"
:curmbSecond="curmbSecond"
:curmbThird="curmbThird"
:jumPathThird="jumPathThird">
</bread-crumb>
<div class="component-content screenSet" id="screenSet">
<div class="label-name">
<p class="title">分组名称:</p>
<p class="name">{{$route.query.labelName}}</p>
<p class="modify" v-if="!isUngrouped" @click="handleChangeLabelName">修改</p>
<el-button type="danger" plain size="small" class="delete-label" v-if="!isUngrouped" @click="goToDeleteLabel">删除分组</el-button>
</div>
<div class="label-member">
<p class="title">分组成员:</p>
<p class="member-number">{{searchData.totalRows}}</p>
<div class="right">
<el-button type="primary" size="small" class="create-new-label" v-if="!isUngrouped" @click="addPatientsHandler">添加居民</el-button>
<el-button type="default" size="small" class="create-new-label" v-if="!isUngrouped" :disabled="isBatchDeleteDisabled" @click="handleDeletePatients">批量移除</el-button>
</div>
</div>
<el-table
ref="multipleTable"
:data="searchData.tableData"
tooltip-effect="dark"
style="width: 100%"
:row-key="getRowKeys"
@selection-change="handleSelectionChange">
<el-table-column
type="selection"
:reserve-selection="true"
width="55">
</el-table-column>
<el-table-column
label="姓名"
prop="nickname"
width="150">
</el-table-column>
<el-table-column
label="性别"
prop="sexStr"
width="150">
</el-table-column>
<el-table-column
label="年龄"
prop="patientAge"
width="150">
</el-table-column>
<el-table-column
label="诊断"
prop="patientTypeGroup"
>
</el-table-column>
<el-table-column
label="操作"
width="120"
>
<template slot-scope="scope" v-if="!isUngrouped">
<el-button
class="remove-btn"
@click="goToDeleteRow(scope.$index, searchData.tableData)"
type="text"
size="small">
移除
</el-button>
</template>
</el-table-column>
<div slot="empty">
<div class="table-empty" v-if="searchData.tableData && searchData.tableData.length < 1">
<img class="empty-pic" src="../../../assets/image/no-content1.png">
<p class="tips">当前分组暂无成员</p>
</div>
</div>
</el-table>
<el-pagination
v-if="searchData.tableData && searchData.tableData.length > 0"
class="pagination-style"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:total="searchData.totalRows"
:current-page="searchData.pageNo"
:page-sizes="[15, 30, 50, 100]"
:page-size="searchData.pageSize"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
<el-dialog
title="修改名称"
:visible.sync="showChangeLabelNameDialog"
width="400px"
center
:show-close='false'
:close-on-click-modal="false"
>
<el-form>
<el-form-item :class="changeNameClass">
<el-input
type="textarea"
v-model="ruleForm.newLabelName"
placeholder="请填写分组名称,最多15个字符"
maxlength="15"
@input="handleNewNameInputChange"
>
</el-input>
<div class="err-text">{{changeNameTips}}</div>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="cancelChangeName">取 消</el-button>
<el-button type="primary" @click="confirmChangeName">确 定</el-button>
</span>
</el-dialog>
<el-dialog
title="删除分组"
:visible.sync="centerDialogVisible"
width="400px"
center
:show-close='false'
:close-on-click-modal="false"
>
<div class="delete-tips">分组删除后,所有分组居民(共{{searchData.totalRows}}人)将不再属于此分组。</div>
<span slot="footer" class="dialog-footer">
<el-button @click="cancelDeleteLabel">取 消</el-button>
<el-button type="primary" @click="confirmDeleteLabel">确认删除</el-button>
</span>
</el-dialog>
<el-dialog
title="移除居民"
:visible.sync="showDeletePatientsDialog"
width="400px"
center
:show-close='false'
:close-on-click-modal="false"
>
<div class="delete-tips">移除后改居民将从分组中移除,若居民已没有任何分组,该居民将被自动分配至「未分组」</div>
<span slot="footer" class="dialog-footer">
<el-button @click="cancelDeletePatients">取 消</el-button>
<el-button type="primary" @click="confirmDeletePatients">确 定</el-button>
</span>
</el-dialog>
</div>
<select-patient
:isShowSelectPatient="isShowSelectPatient"
:patientIdList="patientIdList"
:oldPatientIdList="patientIdList"
@closeSelectPatient="closeSelectPatient"
:selectPatientType="selectPatientType"
:sourceId="String(this.$route.query.labelId)"
@sureSelectPatient="sureSelectPatient(arguments)"
/>
</div>
</template>
<script>
import BreadCrumb from "@/components/breadcrumb.vue";
import * as commonUtil from "@/utils/utils";
import {
getLabelDetail,
deleteCurrentLabel,
changeLabelName,
deleteCurrentPatients,
saveLabelsForPatient,
} from '@/utils/patients/patientsapi'
import SelectPatient from './dialog/select-patitents';
export default {
data(){
return {
curmbFirst: "居民管理",
curmbSecond: "分组管理",
curmbThird: '分组详情',
jumPathThird: '/patients-manage/labels-manage/labels-list',
isChangeNameError: false,
changeNameTips: '',
showChangeLabelNameDialog: false,
centerDialogVisible: false,
showDeletePatientsDialog: false,
isShowSelectPatient: false,
patientIdList: [],
sourceId: '',
searchData: {
pageNo: 1, // 第几页
pageSize: 15, // 每页条数
tableData: [],
totalRows: 0,
},
ruleForm: {
newLabelName: '', // 修改后的分组名
},
isSingleDelete: false,
singleDeleteInfo: [],
multipleSelection: [],
selectPatientType: 2, //选择居民时需要的type类型
getRowKeys(row) {
// console.log('>>>> ', row)
return row.id;
},
}
},
components: {
BreadCrumb,
SelectPatient,
},
computed: {
changeNameClass() {
return this.isChangeNameError == true ? 'special-error-tips' : ''
},
isUngrouped(){ // 是否未分组
return this.$route.query.labelId == 0 ? true : false;
},
isBatchDeleteDisabled() {
let selectList = this.multipleSelection;
if(selectList.length < 1){
return true;
}
return false;
}
},
created() {
this.getDetail();
},
// 挂载到Dom完成时
mounted() {
// commonUtil.resizeHeight();
},
methods: {
getDetail() {
let labelId = this.$route.query.labelId;
// 获取分组详情
let params = {
pageNo: this.searchData.pageNo,
pageSize: this.searchData.pageSize,
};
getLabelDetail(labelId, params).then(data => {
// console.log('获取分组详情>> ', data)
if(data.data){
this.searchData = data.data;
// this.patientIdList = data.data.patientIdList;
let list = data.data.patientListsByLabelModels;
if(list && list.length > 0){
list = list.map(item => {
if(!item.nickname){
item.nickname = '-';
};
if(!item.sexStr){
item.sexStr = '-';
};
if(item.patientAge || item.patientAge == 0){
// 直接显示
}else{
item.patientAge = '-';
};
if(!item.patientTypeGroup){
item.patientTypeGroup = '-';
}
return item;
})
this.searchData.tableData = list;
}else{
this.searchData.tableData = [];
}
}
}).catch(err => {
console.log('error: ', err)
});
},
handleSizeChange(val){
console.log('handleSizeChange>>>')
this.searchData.pageSize = val;
this.getDetail();
},
handleCurrentChange(val){
// 切换当前页
this.searchData.pageNo = val;
this.getDetail();
},
deleteLabel(){
let labelId = this.$route.query.labelId;
let params = {
deleteList: [],
};
params.deleteList.push({
labelId: labelId
});
deleteCurrentLabel(params).then(data => {
// console.log('删除分组>> ', data)
if(data.code == '000000'){
this.centerDialogVisible = false;
this.$router.replace({
path: '/patients-manage/labels-manage/labels-list',
})
}else{
this.$message({
message: '删除分组失败,请重新再试',
type: 'warning'
});
}
}).catch(err => {
console.log('error: ', err)
});
},
goToDeleteLabel(){
this.centerDialogVisible = true;
},
cancelDeleteLabel(){
this.centerDialogVisible = false;
},
confirmDeleteLabel(){
this.deleteLabel();
},
handleChangeLabelName(){
this.showChangeLabelNameDialog = true;
this.ruleForm.newLabelName = this.$route.query.labelName;
},
cancelChangeName(){
this.isChangeNameError = false;
this.ruleForm.newLabelName = '';
this.showChangeLabelNameDialog = false;
},
handleNewNameInputChange(){
this.isChangeNameError = false;
this.changeNameTips = '';
},
// 更改分组名
confirmChangeName() {
let params = {
labelId: this.$route.query.labelId,
labelName: this.$route.query.labelName,
newLabelName: this.ruleForm.newLabelName,
};
if(!params.newLabelName){
this.isChangeNameError = true;
this.changeNameTips = '请输入分组名称';
return;
}
if( params.labelName == params.newLabelName ){
this.isChangeNameError = true;
this.changeNameTips = '该分组名称已被您使用,请重新输入';
return;
}
changeLabelName(params).then(data => {
if(data.code == '000000'){
console.log('分组名修改成功');
this.$message({
message: '分组名修改成功',
type: 'success'
});
this.cancelChangeName();
this.$router.replace({
path: '/patients-manage/labels-manage/labels-detail',
query: {
labelId: params.labelId,
labelName: params.newLabelName,
}
})
}else if(data.code == '202520'){
this.isChangeNameError = true;
this.changeNameTips = '该分组名称已被您使用,请重新输入';
}else{
this.$message({
message: data.message,
type: 'warning'
});
}
}).catch(err => {
console.log('error: ', err)
this.$message({
message: '请求接口失败,请重新再试',
type: 'warning'
});
});
},
handleSelectionChange(val){
console.log('handleSelectionChange>>>> ', val)
this.multipleSelection = val;
},
goToDeleteRow(index, rows) {
// console.log('before: ', this.multipleSelection)
// this.$refs.multipleTable.toggleRowSelection(rows[index]);
// console.log('after: ', this.multipleSelection)
this.isSingleDelete = true;
this.showDeletePatientsDialog = true;
this.singleDeleteInfo = [{ patientId: rows[index].id }];
},
handleDeletePatients() {
this.isSingleDelete = false;
let selectList = this.multipleSelection;
// console.log('list: ', selectList);
let tempArr = [];
for(let i=0; i<selectList.length; i++){
tempArr.push({
patientId: selectList[i].id
})
}
this.multipleSelection = tempArr;
this.showDeletePatientsDialog = true;
},
cancelDeletePatients() {
this.showDeletePatientsDialog = false;
},
confirmDeletePatients() {
let params = {
labelId: this.$route.query.labelId,
patientList: this.multipleSelection,
};
if(this.isSingleDelete == true){ // 点击单个移除时
params.patientList = this.singleDeleteInfo;
}
deleteCurrentPatients(params).then(data => {
if(data.code == '000000'){
this.$message({
message: '移除居民成功',
type: 'success'
});
this.showDeletePatientsDialog = false;
// 删除后去第一页
this.handleCurrentChange(1);
}else{
this.$message({
message: '请求接口失败,请重新再试',
type: 'warning'
});
}
}).catch(err => {
console.log('error: ', err)
});
},
addPatientsHandler() {
this.isShowSelectPatient = true;
},
closeSelectPatient(val) {
this.isShowSelectPatient = val;
},
sureSelectPatient() {
let getArguments = arguments[0];
const selectPatients = getArguments[1]; // 每次选中获取的人
// const oldPatients = getArguments[2]; // 该分组已经存在的居民
let labelId = this.$route.query.labelId;
let patientLen = selectPatients.length;
// let savePatientsList = selectPatients.concat(oldPatients);
saveLabelsForPatient(labelId,{
newLablelName: this.$route.query.labelName,
oldLabelName: this.$route.query.labelName,
saveLists: selectPatients,
// token:
}).then((data) => {
if(data.code == '000000') {
setTimeout(() => {
this.$message.success(`已成功添加${patientLen}位居民`)
this.isShowSelectPatient = getArguments[0];
this.getDetail();
},500)
}else {
this.$message.error(data.message)
}
})
},
}
}
</script>
<style lang="less">
@import "../../../style/patient-manager/labels-manager/labels-detail-wrap.less";
</style>
<style lang="less" scoped>
@import "../../../style/patient-manager/labels-manager/labels-detail.less";
</style>
<template>
<div class="label-list-wrap">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond" ></bread-crumb>
<div class="component-content screenSet" id="screenSet">
<p class="top-title">分组管理</p>
<el-row :gutter="30" class="label-name-row">
<el-col :span="6">
<el-input v-model="labelName" placeholder="请输入分组名称" size="small"></el-input>
</el-col>
<el-col :span="6">
<el-button type="primary" size="small" class="create-new-label" @click="getList">查询</el-button>
<el-button type="default" size="small" class="create-new-label" @click="resetLabelName">重置</el-button>
</el-col>
<el-col :span="6" class="right">
<el-button
type="primary" size="small" class="create-new-label"
:disabled="totalListCount >= 999"
@click="createNewLabel"
>
新增分组
</el-button>
</el-col>
</el-row>
<p class="total-label">共:{{totalListCount}}个分组</p>
<div class="label-list" v-if="labelNameList && labelNameList.length > 0">
<el-tag class="each-label" @click="goToDetail(item)" v-for="(item, index) in labelNameList" :key="index">{{item.labelName}}({{item.labelPatientNums}}人)</el-tag>
</div>
<div class="table-empty" v-if="labelNameList && labelNameList.length < 1">
<img class="empty-pic" src="../../../assets/image/no-content1.png">
<p class="tips">没有找到匹配分组</p>
</div>
<el-dialog
class="dialog-boxd"
title="新增分组"
:visible.sync="centerDialogVisible"
width="400px"
center
:show-close='false'
:close-on-click-modal="false"
>
<el-form>
<el-form-item :class="addNewLabelClass">
<el-input
type="textarea"
v-model="ruleForm.newLabelName"
placeholder="请填写分组名称,最多15个字符"
maxlength="15"
@input="handleNewLabelNameChange"
>
</el-input>
<div class="err-text">{{addNewLabelTips}}</div>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose">取 消</el-button>
<el-button type="primary" @click="submitForm">确 定</el-button>
</span>
</el-dialog>
</div>
</div>
</template>
<script>
import BreadCrumb from "@/components/breadcrumb.vue";
import * as commonUtil from "@/utils/utils";
import { getLabelList, createNewLabel } from '@/utils/patients/patientsapi'
export default {
data(){
return {
curmbFirst: "居民管理",
curmbSecond: "分组管理",
labelName: '',
labelNameList: [],
totalListCount: 0,
centerDialogVisible: false,
ruleForm: {
newLabelName: '', // 新建分组名
},
addNewLabelTips: '',
isAddLabelError: false,
}
},
components: {
BreadCrumb,
},
created(){
this.getList();
},
computed: {
addNewLabelClass() {
return this.isAddLabelError == true ? 'special-error-tips' : ''
}
},
// 挂载到Dom完成时
mounted() {
commonUtil.resizeHeight();
},
methods: {
getList() {
// 获取分组列表
let params = {
type: 1,
};
if(this.labelName){
params.labelName = this.labelName;
}
// commonUtil.openLoading(this);
getLabelList(params).then(data => {
// commonUtil.closeLoading(this);
// console.log('获取分组列表>> ', data)
let hasNoLabel = 0; // 是否存在未分组
if(data.data && data.data.labelNameList){
this.labelNameList = data.data.labelNameList;
for(let i=0; i<this.labelNameList.length; i++){
if(this.labelNameList[i].labelId == 0){
hasNoLabel = 1;
break;
}
}
if( hasNoLabel == 1 ){
this.totalListCount = this.labelNameList.length - 1;
}else{
this.totalListCount = this.labelNameList.length;
}
}
}).catch(err => {
console.log('error: ', err)
});
},
resetLabelName() {
this.labelName = '';
this.getList();
},
createNewLabel() {
console.log('新增分组...');
this.centerDialogVisible = true;
},
handleNewLabelNameChange() {
if(this.isAddLabelError == true){
this.isAddLabelError = false;
this.addNewLabelTips = '';
}
},
submitForm() {
let params = {
labelName: this.ruleForm.newLabelName,
};
if(!params.labelName){
this.isAddLabelError = true;
this.addNewLabelTips = '请输入分组名称';
return;
}
// 请求新增
createNewLabel(params).then(data => {
// console.log('新增分组>> ', data)
if(data.code == '202520'){ // 分组名重复
console.log('tips: ', data.message)
this.isAddLabelError = true;
this.addNewLabelTips = '该分组名称已被您使用,请重新输入';
return;
}
if(data.code == '000000'){
console.log('新增成功');
this.$message({
message: '新增分组成功',
type: 'success'
});
this.handleClose();
this.$router.push({
path: '/patients-manage/labels-manage/labels-detail',
query: {
labelId: data.data.labelId,
labelName: params.labelName
}
})
callback();
}else{
this.$message({
message: data.message,
type: 'warning'
});
callback();
}
}).catch(err => {
console.log('error: ', err)
});
},
handleClose() {
this.isAddLabelError = false;
this.ruleForm.newLabelName = '';
this.centerDialogVisible = false
},
goToDetail(item) {
this.$router.push({
path: '/patients-manage/labels-manage/labels-detail',
query: {
labelId: item.labelId,
labelName: item.labelName,
}
})
}
}
}
</script>
<style lang="less" scoped>
@import "../../../style/patient-manager/labels-manager/labels-list.less";
</style>
<style lang="less">
@import "../../../style/patient-manager/labels-manager/labels-list-wrap.less";
</style>
<template>
<router-view></router-view>
</template>
<script>
export default {
name: "layout"
}
</script>
<style scoped>
</style>
<template>
<router-view></router-view>
</template>
<script>
export default {
name: "layout"
}
</script>
<style scoped>
</style>
<template>
<div class="resident-list">
<bread-crumb
:curmbFirst="curmbFirst"
:curmbSecond="curmbSecond"
:curmbThird="curmbThird"
:jumPathThird="jumPathThird">
</bread-crumb>
<div class="f-main-content screenSet">
<div class="header-title">
<span>居民信息</span>
<p>
<el-button plain size="small" @click="cancelEdit">取消</el-button>
<el-button type="primary" size="small" @click="saveEdit">保存</el-button>
</p>
</div>
<edit-information
:patientInfoObj="patientInfo"
:checkForm="checkForm"
@addListenSave="addListenSave"
:patientId="patientId"></edit-information>
</div>
</div>
</template>
<script>
import BreadCrumb from '@/components/breadcrumb'
import editInformation from './components/edit-information'
import { getPatientDetail, savePatientInfo } from '@/utils/patients/patientsapi'
export default {
name: "basicInfo",
components: {
BreadCrumb,
editInformation
},
data() {
return {
/*面包屑配置*/
curmbFirst: '居民管理',
curmbSecond: '我的居民',
curmbThird: '居民详情',
jumPathThird: '/patients-manage/mypatients-manage/patients-list',
patientId: '',
patientInfo: {},
checkForm: false,
}
},
created() {
this.patientId = String(this.$route.query.patientId);
this.init();
},
computed: {},
methods: {
init() {
getPatientDetail(this.patientId).then((data) => {
if(data.code == '000000') {
this.patientInfo = data.data;
}
})
},
cancelEdit() {
this.$router.go(-1);
},
saveEdit() {
this.checkForm = true;
},
addListenSave(val) {
this.checkForm = false;
if(val.status) {
// this.patientInfo = val.patientInfoForm
// console.log('保存的数据',val.patientInfoForm);
savePatientInfo(val.patientInfoForm).then(data => {
if(data.code == '000000'){
this.$message.success('修改成功')
setTimeout(() => {
this.$router.go(-1);
},500)
} else if(data.code == '202562'){
this.$message.error(data.message);
setTimeout(() => {
this.$router.go(-1);
},1000)
} else {
this.$message.error(data.message);
}
})
// 调用保存接口
}else {
this.$message.error('请正确填写信息');
}
},
},
filters: {
emptyFilter: function(value) {
if (!value) {
return '-';
} else {
return value;
}
},
sexFileter: function(value) {
if (!value && value != 0) {
return '-';
} else {
let hash = {
1: '男',
2: '女'
};
return hash[value];
}
},
},
}
</script>
<style lang="scss" scoped>
@import '../../../style/patients-style/element-reset.css';
.f-main-content{
background: #ffffff;
padding: 30px;
.header-title{
display: flex;
display: -webkit-flex;
align-items: center;
justify-content: space-between;
border-bottom: 2px solid #E4E7ED;
padding-bottom: 10px;
}
.right-btn-group{
position: absolute;
right: 60px;
z-index: 1800;
}
.section{
.item{
display: flex;
font-size: 14px;
div{
display: flex;
flex: 1;
line-height: 36px;
.title{
width: 180px;
text-align: right;
}
.info{
color: #999;
padding-left: 15px;
width: 100%;
}
}
&.wrap-p{
div{
line-height: 28px;
}
}
.btn-right{
width: 35%;
padding-left:10px;
}
}
.has-header{
display: flex;
justify-content: space-between;
padding: 15px 0;
margin-bottom: 15px;
border-bottom: 1px dashed #888;
.right-p{
display: inline-block;
text-align: right;
color: #999;
font-size: 14px;
span:last-child{
margin-left: 15px;
}
}
}
}
.health-record-list{
.item{
width: 100%;
margin-bottom: 15px;
.record-date{
color: #999;
padding-bottom: 10px;
}
.record-content{
width: 100%;
border: 1px solid #E4E7ED;
border-radius: 5px;
padding: 10px 15px 13px;
.record-title{
display: flex;
justify-content: space-between;
padding: 5px 0;
span{
color: #999;
font-size: 14px;
}
}
.list-visit{
line-height: 28px;
padding: 6px 0 2px;
display: flex;
display: -webkit-flex;
align-items: flex-start;
font-size: 14px;
color: #999;
.left-label{
line-height: 28px;
}
.right-item{
flex: 1;
line-height: 28px;
p{
line-height: 28px;
.check-btn{
color: #449284;
cursor: pointer;
margin-left: 15px;
}
}
}
}
}
}
}
.no-record-content{
@media screen and (min-width:1240px) and (max-width:1545px){
height: 300px;
}
@media screen and (min-width:1545px) and (max-width:1600px){
height: 500px;
}
@media screen and (min-width:1600px){
height: 600px;
}
text-align: center;
padding: 50px 0 60px;
img{
width: 120px;
}
p{
color: #B9B9C6;
font-size: 20px;
}
}
.ml10{
margin-left: 10px;
}
}
</style>
<template>
<div class="form-warp">
<addDiagnose ref="addDiagnose"></addDiagnose>
<el-form
:model="patientInfoForm"
:rules="rules"
ref="patientInfoForm"
label-width="150px"
label-suffix=":"
size="small"
>
<el-row>
<el-col :span="12">
<el-form-item label="居民姓名" prop="nickname">
<el-input
v-model.trim="patientInfoForm.nickname"
placeholder="请输入居民姓名"
:disabled="!baseInfoEdit"
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="手机号" prop="mobilePhone">
<el-input
v-model.trim="patientInfoForm.mobilePhone"
maxlength="11"
placeholder="请输入手机号"
:disabled="!baseInfoEdit"
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<!-- <div class="has-header">数据记录</div> -->
<el-row>
<el-col :span="12">
<el-form-item label="诊断" prop="diseaseIdList">
<!-- <el-select
v-model="diseaseIdList"
multiple
@change="changeDiseases"
:popper-append-to-body="false"
placeholder="请选择居民疾病诊断">
<el-option
v-for="(item, index) in diseasesList"
:key="item.diseaseId"
:label="item.diseaseName"
:value="item.diseaseId">
</el-option>
</el-select> -->
<el-button icon="el-icon-plus" @click="handleAddDiagnose">{{ selectedDiagList && selectedDiagList.length > 0 ? '修改诊断' : '添加诊断' }}</el-button>
<ul class="final-diagnose-list" v-if="selectedDiagList && selectedDiagList.length > 0">
<li v-for="diagnose in selectedDiagList" v-html="diagnose.alias ? diagnose.alias+'; ' : diagnose.diseaseName+'; '"></li>
</ul>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="分组" prop="labelIdList">
<el-select
v-model="labelIdList"
multiple
@change="changeLabels"
:popper-append-to-body="false"
placeholder="请选择居民分组">
<el-option
v-for="(item, index) in labelsList"
:key="index.labelId"
:label="item.labelName"
:value="item.labelId">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24" style="text-align: center;margin-top:15px;" v-show="!patientId"> <el-button plain size="small" @click="toggleClick">{{tipsText}}</el-button></el-col>
</el-row>
<div v-show="isShowAll || patientId">
<div class="has-header">基本信息</div>
<el-row>
<el-col :span="12">
<el-form-item label="身份证" prop="idNo">
<el-input
v-model.trim="patientInfoForm.idNo"
placeholder="请输入身份证"
clearable
maxlength="18"
@blur="idNoBlurHandler"
:disabled="hasIdNo">
</el-input>
<span class="idNoTxt">身份证只能输入一次<br>输入后不可更改</span>
<!--<div style="display: inline"><p class="title">身份证只能输入一次<br>输入后不可更改</p></div>-->
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="出生日期" prop="birthTime">
<el-date-picker
type="date"
v-model="patientInfoForm.birthTime"
placeholder="请选择出生日期"
value-format="yyyy-MM-dd"
value="yyyy-MM-dd"
@change="getAge"
:picker-options="setPickerOption"
:editable="false"
style="width:250px"
clearable>
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="年龄" prop="age">
<span>{{(patientInfoForm.age || patientInfoForm.age == 0 ) ? `${patientInfoForm.age}岁` : '-'}}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="性别" prop="sex">
<el-radio-group v-model="patientInfoForm.sex">
<el-radio :label="1"></el-radio>
<el-radio :label="2"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="常驻类型" prop="permanentResidence">
<el-select
v-model="patientInfoForm.permanentResidence"
placeholder="请选择居民常驻类型"
:popper-append-to-body="false"
clearable>
<el-option
v-for="(item, index) in residenceList"
:key="index"
:label="item.value"
:value="item.noChar">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="民族" prop="nationality">
<el-select
v-model="patientInfoForm.nationality"
placeholder="请选择民族"
:popper-append-to-body="false"
clearable>
<el-option
v-for="(item, index) in nationsList"
:key="index"
:label="item.name"
:value="item.code">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<!--<el-col :span="12">-->
<!--<el-form-item label="医保号" prop="socialCard">-->
<!--<el-input-->
<!--v-model.trim="patientInfoForm.socialCard"-->
<!--placeholder="请输入居民医保卡号码"-->
<!--maxlength="30"-->
<!--clearable>-->
<!--</el-input>-->
<!--</el-form-item>-->
<!--</el-col>-->
<!--<el-col :span="12">-->
<!--<el-form-item label="健康档案编号" prop="fileLocator">-->
<!--<el-input-->
<!--v-model.trim="patientInfoForm.fileLocator"-->
<!--placeholder="请输入居民健康档案编号"-->
<!--maxlength="30"-->
<!--clearable>-->
<!--</el-input>-->
<!--</el-form-item>-->
<!--</el-col>-->
</el-row>
<div class="has-header">联系方式</div>
<el-row>
<el-col :span="12">
<el-form-item label="所在地区" prop="addressList">
<!--@active-item-change="handleItemChange"-->
<el-cascader
ref="cascaderRegion"
placeholder="请选择省市县乡"
:options="provinceList"
v-model="addressList"
:props="optionProps"
@change="handleChange">
</el-cascader>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="详细地址" prop="address">
<el-input
v-model="patientInfoForm.address"
placeholder="请输入居民的详细地址"
maxlength="50"
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="工作单位" prop="workplace">
<el-input
v-model="patientInfoForm.workplace"
placeholder="请输入居民的工作单位"
maxlength="30"
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12" v-if="patientId">
<el-form-item label="微信" prop="address">
<p class="info" v-if="patientInfoForm.isWechatBind == '1'">未绑定 <el-button type="text" class="ml10" @click="remindBind" v-if="patientInfoForm.isRemind == '1'" style="color: #449284;">提醒绑定</el-button><span class="ml10" v-if="patientInfoForm.isRemind == '2'">已提醒</span></p>
<!--<p class="info" v-else-if="patientInfoForm.isWechatBind == '2'">已绑定 <span class="ml10">(微信名:{{patientInfoForm.wechatNickname | emptyFilter}}</span></p>-->
<p class="info" v-else-if="patientInfoForm.isWechatBind == '2'">{{patientInfoForm.wechatNickname | emptyFilter}}</p>
</el-form-item>
</el-col>
</el-row>
<div class="has-header">其他</div>
<el-row>
<el-col :span="16">
<el-form-item label="备注" prop="remark">
<el-input
type="textarea"
v-model="patientInfoForm.remark"
placeholder="请输入内容"
clearable
maxlength="200"
:autosize="{ minRows: 3, maxRows: 7}">
</el-input>
<span class="text-count">{{currentCount}} / 200</span>
</el-form-item>
</el-col>
</el-row>
</div>
</el-form>
</div>
</template>
<script>
import { mapGetters, mapState } from 'vuex';
import { checkMobile } from '@/utils/patients/checkValid';
import { isCardNo, checkProvince, checkBirthday, checkParity, validateIdCard } from '@/utils/patients/checkCardNum';
import {
getDiseasesList,
getLabelList,
getConstants,
getNationsList,
getRemindPatient,
getProvinceList,
getCityList,
getCountyList,
getTownList } from '@/utils/patients/patientsapi';
let vm = null;
import addDiagnose from '@/components/icd/addDiagnose.vue';
export default {
name: "basicInfo",
components: { addDiagnose },
data() {
let validCode=(rule,value,callback)=>{
if(value) {
let reg=/^[0-9a-zA-Z]*$/g
if(!reg.test(value)){
callback(new Error('只可输入数字加英文'))
}else if(value.length >30) {
callback(new Error('只可输入30个以内的字符'))
}else{
callback()
}
}else {
callback()
}
};
let checkCardNum = (rule, value, callback) =>{
// let vcity={ 11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",
// 21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",
// 33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",
// 42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",
// 51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",
// 63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"
// };
if(value) {
// if(isCardNo(value) && checkProvince(value,vcity) && checkBirthday(value) && checkParity(value)) {
if(validateIdCard(value)) {
this.isTrue = true;
callback()
}else {
this.isTrue = false;
callback(new Error('请输入正确的身份证'))
}
}else {
this.isTrue = false;
callback()
}
};
return {
diseasesList: [],
labelsList: [],
residenceList: [],
nationsList: [],
diseaseIdList: [],
labelIdList: [],
addressList: [],
baseInfoEdit: true,
isTrue: false,
patientInfoForm: {
nickname: '',
mobilePhone: '',
diseases: [],
patientDiseases: [],
customLabels: [],
idNo: '',
birthTime: '',
age: null,
sex: null,
permanentResidence: '',
nationality: '',
socialCard: '',
fileLocator: '',
isWechatBind: 1,
isRemind: 1,
wechatNickname: '',
remark: '',
patientAddress: '',
address: '',
workplace: '',
provinceId: null,
cityId: null,
countyId: null,
townId: null,
},
hasIdNo: false,
validStatus: false,
provinceList: [],
provinceLists: [], //省列表
cityLists: [], //市列表
countyLists: [], //县列表
townLists: [],//乡镇列表
optionProps: {
value: "id",
label: "name",
children: "children",
lazy: true,
lazyLoad(node, resolve) {
const { level } = node;
console.log("node", node);
if (node.level == 1) {
let req = {
provinceId: node.data.id
};
vm.GET("basic-data/position/cities", req).then(res => {
let newData = res.data.cityList;
newData.map(item => {
vm.$set(item, "id", item.cityId);
vm.$set(item, "name", item.cityName);
vm.$set(item, "children", []);
});
// console.log("newData", newData);
resolve(newData);
});
} else if (node.level == 2) {
let req = {
cityId: node.data.id
};
vm.GET("basic-data/position/counties", req).then(res => {
let newData = res.data.countyList;
newData.map(item => {
vm.$set(item, "id", item.countyId);
vm.$set(item, "name", item.countyName);
vm.$set(item, "children", []);
});
// console.log("newData", newData);
resolve(newData);
});
} else if (node.level == 3) {
let req = {
countyId: node.data.id
};
vm.GET("basic-data/position/towns", req).then(res => {
let newData = res.data.townList;
newData.map(item => {
vm.$set(item, "id", item.townId);
vm.$set(item, "name", item.townName);
vm.$set(item, "leaf", true);
});
// console.log("newData", newData);
resolve(newData);
});
}
}
},
tipsText: '展开录入完整信息',
isShowAll: false,
rules: {
nickname: [{required: true, message: '请输入居民姓名', trigger: ['change', 'blur'] },
{ min: 2, max: 15, message: '长度在2至15个字符之间', trigger: 'change' }],
mobilePhone: [{required: true, message: '请输入手机号', trigger: ['change', 'blur'] },
{ validator: checkMobile , trigger: ['blur','change'] }],
idNo: [{required: false,validator: checkCardNum, trigger: ['change'] }],
socialCard: [{required: false,validator: validCode, trigger: ['change'] }],
fileLocator: [{required: false,validator: validCode, trigger: ['change'] }],
},
setPickerOption: {
disabledDate(time) {
let old = new Date('1900/1/1');
return time > Date.now() || time < old;
}
},
region: [],
}
},
props: {
patientInfoObj: Object,
checkForm: Boolean,
patientId: {
required: false,
type: String,
default: function () {
return '';
}
},
},
watch: {
async patientInfoObj(val) {
if(this.patientId){ //编辑居民信息,对拿到的数据做处理
this.patientInfoForm = val;
this.baseInfoEdit = this.patientInfoForm.baseInfoEdit;
let customLabels = this.patientInfoForm.customLabels;
// let diseases = this.patientInfoForm.diseases;
let icdList = this.patientInfoForm.icdList;
if(customLabels && customLabels.length > 0){
customLabels.forEach((kkk)=>{
this.labelIdList.push(Number(kkk.labelId))
})
}else {
this.labelIdList = [];
}
// if(diseases && diseases.length > 0) {
// diseases.forEach((dis)=>{
// this.diseaseIdList.push(Number(dis.diseaseId))
// })
// }else {
// this.diseaseIdList = [];
// }
if(icdList && icdList.length > 0) {
this.$store.dispatch('patientsDiagnose/changeDiagnoseList', icdList)
}else {
this.$store.dispatch('patientsDiagnose/changeDiagnoseList', [])
}
if(this.patientInfoForm.idNo) {
this.hasIdNo = true;
}else {
this.hasIdNo = false;
}
//对地区数据做回显处理
if(this.patientInfoForm.patientAddress) {
let provinceId = this.patientInfoForm.provinceId;
let cityId = this.patientInfoForm.cityId;
let countyId = this.patientInfoForm.countyId;
let townId = this.patientInfoForm.townId;
if(provinceId) {
await this.getCity(provinceId);
}
if(cityId) {
await this.getCounty(provinceId, cityId);
}
if(countyId) {
await this.getTown(provinceId, cityId, countyId);
}
this.addressList = [Number(provinceId), Number(cityId), Number(countyId), Number(townId)];
// console.log(this.provinceList);
this.$forceUpdate();
}else {
this.addressList = [];
}
}else { // 新增
this.initForm();
}
},
// 'patientInfoForm.age'(val) {
// console.log('年龄',val)
// },
checkForm(val){
if(val){// 触发校验
this.saveInfoData();
}
},
},
created() {
vm = this;
this.initConstant();
},
mounted(){
if(!this.patientId){//新建计划
this.initForm();
}
},
computed: {
...mapGetters([
'_token',
]),
...mapState('patientsDiagnose', {
selectedDiagList: state => state.selectedDiagList
}),
currentCount(){
if(this.patientInfoForm.remark) {
return this.patientInfoForm.remark.length
}else {
return 0;
}
},
},
methods: {
initForm() {
this.patientInfoForm = {
nickname: '',
mobilePhone: '',
diseases: [],
patientDiseases: [],
customLabels: [],
idNo: '',
birthTime: '',
age: null,
sex: null,
permanentResidence: '',
nationality: '',
socialCard: '',
fileLocator: '',
isWechatBind: null,
isRemind: null,
wechatNickname: '',
remark: '',
patientAddress: '',
address: '',
workplace: '',
provinceId: null,
cityId: null,
countyId: null,
townId: null,
},
this.$store.dispatch('patientsDiagnose/changeDiagnoseList', [])
},
// 点击 添加诊断
handleAddDiagnose() {
this.$refs.addDiagnose.showSelf();
},
initConstant(){
getDiseasesList().then((data) => {
if(data.code == '000000') {
this.diseasesList = data.data;
}
});
getLabelList({
type: 2,
token: this._token,
}).then((data) => {
if(data.code == '000000') {
this.labelsList = data.data.labelNameList;
}
});
getConstants({
numList: 'P221',
}).then((data) => {
if(data.code == '000000') {
this.residenceList = data.data.P221;
}
});
getNationsList().then((data) => {
if(data.code == '000000') {
this.nationsList = data.data;
}
});
this.getProvinceLists();
},
// changeDiseases(val) {
// // 格式化数据 提交用
// let newDiseaseList = [];
// val.forEach((valItem) => {
// this.diseasesList.forEach((item2) => {
// if(valItem == item2.diseaseId){
// newDiseaseList.push({parentDiseaseId: item2.diseaseId});
// }
// })
// });
// this.patientInfoForm.patientDiseases = newDiseaseList;
// },
changeLabels(val){
let newLabelsList = [];
val.forEach((valItem) => {
this.labelsList.forEach((item2) => {
if(valItem == item2.labelId){
newLabelsList.push(item2);
}
})
});
this.patientInfoForm.customLabels = newLabelsList;
},
idNoBlurHandler() {
if(this.isTrue) {
this.go(this.patientInfoForm.idNo.length);
}
},
//提醒绑定
remindBind() {
let remindMobileWechatPara = {
qrcodeType: 1,
patientId: this.patientId,
// deviceInfo: window.getDeviceInfo()
}
getRemindPatient({
...remindMobileWechatPara
}).then( data => {
if(data.code == '000000') {
this.$message.success(data.data.respMsg);
this.$router.go(-1);
}else {
this.$message.error(data.message);
}
})
},
saveInfoData() {
//对地区数据做处理
if(this.addressList.length > 0) {
this.patientInfoForm.provinceId = this.addressList[0];
this.patientInfoForm.cityId = this.addressList[1];
this.patientInfoForm.countyId = this.addressList[2];
this.patientInfoForm.townId = this.addressList[3];
// this.provinceLists.forEach((item) => {
// if(this.patientInfoForm.provinceId == item.provinceId) {
// this.patientInfoForm.provinceName = item.provinceName;
// }
// });
// this.cityLists.forEach((item) => {
// if(this.patientInfoForm.cityId == item.cityId) {
// this.patientInfoForm.cityName = item.cityName;
// }
// });
// this.countyLists.forEach((item) => {
// if(this.patientInfoForm.countyId == item.countyId) {
// this.patientInfoForm.countyName = item.countyName;
// }
// })
// this.townLists.forEach((item) => {
// if(this.patientInfoForm.townId == item.townId) {
// this.patientInfoForm.townName = item.townName;
// }
// })
this.patientInfoForm.provinceName = vm.region[0];
this.patientInfoForm.cityName = vm.region[1];
this.patientInfoForm.countyName = vm.region[2];
this.patientInfoForm.townName = vm.region[3];
if(this.patientInfoForm.provinceName && this.patientInfoForm.cityName && this.patientInfoForm.countyName && this.patientInfoForm.townName) {
this.patientInfoForm.patientAddress = `${this.patientInfoForm.provinceName}${this.patientInfoForm.cityName}${this.patientInfoForm.countyName}${this.patientInfoForm.townName}`
}else {
this.patientInfoForm.patientAddress = '';
}
// console.log('-----------',this.patientInfoForm.patientAddress)
}
this.$refs['patientInfoForm'].validate((valid) => {
if(!this.patientInfoForm.idNo) {
this.patientInfoForm.idNo = null;
}
if (valid) {
// console.log('提交表单',this.patientInfoForm);
this.$emit('addListenSave',{
status: true,
patientInfoForm: {
...this.patientInfoForm,
icdList: this.selectedDiagList,
birthTime: this.patientInfoForm.birthTime ? `${this.patientInfoForm.birthTime} 00:00:00` : '',
}
})
} else {
this.$emit('addListenSave',{
status: false,
// patientInfoForm: this.patientInfoForm,
patientInfoForm: {
...this.patientInfoForm,
icdList: this.selectedDiagList,
birthTime: this.patientInfoForm.birthTime ? `${this.patientInfoForm.birthTime} 00:00:00` : '',
}
})
}
});
},
// 实现自动生成生日,性别,年龄
go(val) {
let iden = this.patientInfoForm.idNo;
let sex = null;
let birth = null;
let myDate = new Date();
let month = myDate.getMonth() + 1;
let day = myDate.getDate();
let age = 0;
if(val===18){
age = myDate.getFullYear() - iden.substring(6, 10) - 1;
sex = iden.substring(16,17);
birth = iden.substring(6,10)+"-"+iden.substring(10,12)+"-"+iden.substring(12,14);
if (iden.substring(10, 12) < month || iden.substring(10, 12) == month && iden.substring(12, 14) <= day) age++;
}
if(val===15){
age = myDate.getFullYear() - iden.substring(6, 8) - 1901;
sex = iden.substring(13,14);
birth = "19"+iden.substring(6,8)+"-"+iden.substring(8,10)+"-"+iden.substring(10,12);
if (iden.substring(8, 10) < month || iden.substring(8, 10) == month && iden.substring(10, 12) <= day) age++;
}
if(sex%2 === 0)
sex = 2;
else
sex = 1;
this.patientInfoForm.sex = sex;
this.patientInfoForm.age = age;
this.patientInfoForm.birthTime = birth;
// this.baseInfo.birthplace = this.area[iden.substring(0,2)];
},
getAge(val) {
if(val) {
// let birthdays = new Date(this.patientInfoForm.birthTime.replace(/-/g, "/"));
let birthdays = new Date(val.replace(/-/g, "/"));
let d = new Date();
let age = d.getFullYear() - birthdays.getFullYear() - (d.getMonth() < birthdays.getMonth() || (d.getMonth() == birthdays.getMonth() && d.getDate() < birthdays.getDate()) ? 1 : 0);
this.patientInfoForm.age = age;
}else {
this.patientInfoForm.age = null;
}
},
handleItemChange (val) {
if (val.length === 1) { //获取市(二级)
this.getCity(val[0]);
} else if (val.length === 2) { //获取县区 (三级)
this.getCounty(val[0], val[1]);
} else if(val.length === 3) { //获取乡镇 (四级)
this.getTown(val[0], val[1], val[2]);
}
this.$forceUpdate();
},
async getProvinceLists() {
await getProvinceList({}).then((data) => {
if(data.code == '000000') {
this.provinceLists = data.data.provinceList;
this.provinceLists.map(item => {
this.$set(item, "id", item.provinceId);
this.$set(item, "name", item.provinceName);
this.$set(item, "children", []);
});
this.provinceList = this.provinceLists;
// this.$forceUpdate();
}
})
},
async getCity(provinceId) {
await getCityList({provinceId: provinceId}).then((data) => {
if(data.code == '000000') {
this.cityLists = data.data.cityList;
this.cityLists.map(item => {
this.$set(item, "id", item.cityId);
this.$set(item, "name", item.cityName);
this.$set(item, "children", []);
});
this.provinceList.map((item, index) => {
if(item.id == provinceId) {
item.children = this.cityLists;
}
})
// this.$forceUpdate();
}
})
},
async getCounty(provinceId, cityId) {
await getCountyList({cityId: cityId}).then((data) => {
if(data.code == '000000') {
this.countyLists = data.data.countyList;
this.countyLists.map(item => {
this.$set(item, "id", item.countyId);
this.$set(item, "name", item.countyName);
this.$set(item, "children", []);
});
this.provinceList.map((item, index) => {
if(item.id == provinceId) {
item.children.map((city, idx) => {
if(city.id == cityId) {
city.children = this.countyLists;
}
})
}
})
// this.$forceUpdate();
}
})
},
async getTown(provinceId, cityId, countyId) {
await getTownList({countyId: countyId}).then((data) => {
if(data.code == '000000') {
this.townLists = data.data.townList;
this.townLists.map(item => {
this.$set(item, "id", item.townId);
this.$set(item, "name", item.townName);
this.$set(item, "leaf", true);
// this.$set(item, "children", []);
});
this.provinceList.map((item, index) => {
if(item.id == provinceId) {
item.children.map((city, index2) => {
if(city.id == cityId) {
city.children.map((county, index3) => {
if(county.id == countyId) {
county.children = this.townLists;
}
})
}
})
}
})
}
// this.$forceUpdate();
})
},
toggleClick() {
if(this.isShowAll) {
this.tipsText = '展开录入完整信息';
this.isShowAll = false;
}else {
this.tipsText = '收起录入完整信息';
this.isShowAll = true;
}
},
getDate() {
let old = new Date('1900-01-01 00:00:00');
let n = new Date();
let s = n - old;
return Math.floor(s / (24 * 3600 * 1000));
// return s;
},
handleChange() {
setTimeout(function() {
let region = vm.$refs["cascaderRegion"].inputValue;
vm.region = region.split(" / ");
// console.log("vm.region",vm.region)
},20)
},
},
filters: {
emptyFilter: function(value) {
if (!value && value != 0) {
return '-';
} else {
return value;
}
},
},
}
</script>
<style lang="scss">
.screenSet{
overflow: visible!important;
}
.el-input{
width: 250px;
}
.form-warp{
margin-top: 30px;
.has-header{
padding: 15px 0;
margin-bottom: 20px;
border-bottom: 1px dashed #888;
}
.info{
font-size: 12px;
color: #999;
}
.text-count{
position: absolute;
right: 5px;
bottom: 0px;
line-height: 28px;
color: #999;
font-size: 12px;
}
.ml10{
margin-left: 10px;
}
.idNoTxt{
display: inline-flex;color:#C0C4CC;line-height:20px;vertical-align: middle;
}
.final-diagnose-list{
color: #BBB;
line-height: 20px;
margin-top: 15px;
overflow: hidden;
li{
float:left;
margin-right: 5px;
}
}
}
</style>
<template>
<router-view></router-view>
</template>
<script>
export default {
name: "layout"
}
</script>
<style scoped>
</style>
<template>
<div class="resident-list">
<bread-crumb
:curmbFirst="curmbFirst"
:curmbSecond="curmbSecond"
:curmbThird="curmbThird"
:jumPathThird="jumPathThird">
</bread-crumb>
<div class="f-main-content screenSet patient-detail-wrap">
<div>
<div class="right-btn-group" v-if="activeName == 'first'">
<el-button plain size="small" @click="deleteCurrentPatient">删除</el-button>
<el-button type="primary" size="small" @click="editPatient">编辑</el-button>
</div>
<el-tabs v-model="activeName" @tab-click="tabChangeHandler">
<el-tab-pane label="居民信息" name="first">
<div class="section">
<div class="has-header">
<p>基本信息</p>
<p class="right-p"><span>添加时间:{{patientInfo.addTime}}</span><span>最后修改时间:{{ patientInfo.lastModifiedTime ? patientInfo.lastModifiedTime : patientInfo.addTime}}</span></p>
</div>
<div class="item">
<div><p class="title">居民姓名:</p><p class="info">{{(patientInfo.nickname || patientInfo.wechatNickname) | emptyFilter}}</p></div>
<div><p class="title">身份证:</p><p class="info">{{patientInfo.idNo | emptyFilter}}</p></div>
</div>
<div class="item">
<div><p class="title">出生日期:</p><p class="info">{{birthTimeDisplay | emptyFilter}}{{(patientInfo.age || patientInfo.age == 0) ? `、${patientInfo.age}岁` : ''}}</p></div>
<div><p class="title">性别:</p><p class="info">{{patientInfo.sex | sexFileter}}</p></div>
</div>
<div class="item">
<div><p class="title">民族:</p><p class="info">{{nationalityDes}}</p></div>
<div><p class="title">常驻类型:</p><p class="info">{{patientInfo.permanentResidence | permanentFilter}}</p></div>
</div>
<!--<div class="item">-->
<!--<div><p class="title">健康档案编号:</p><p class="info">{{patientInfo.fileLocator | emptyFilter}}</p></div>-->
<!--<div><p class="title">医保号:</p><p class="info">{{patientInfo.socialCard | emptyFilter}}</p></div>-->
<!--</div>-->
<div class="item wrap-p">
<div><p class="title">诊断:</p><p class="info">{{showDiseaseName | emptyFilter}}</p></div>
<div><p class="title">分组:</p><p class="info">{{showLabelName | emptyFilter}}</p></div>
</div>
<!-- <div class="has-header">数据记录</div>
<div class="item wrap-p">
<div><p class="title">诊断:</p><p class="info">{{showDiseaseName | emptyFilter}}</p></div>
<div><p class="title">分组:</p><p class="info">{{showLabelName | emptyFilter}}</p></div>
</div>-->
<div class="has-header">联系方式</div>
<div class="item">
<div><p class="title">手机号:</p><p class="info">{{patientInfo.mobilePhone | emptyFilter}}</p></div>
<div><p class="title"></p><p class="info"></p></div>
</div>
<div class="item">
<div><p class="title">所在地区:</p><p class="info">{{patientInfo.patientAddress | emptyFilter}}</p></div>
<div><p class="title">详细地址:</p><p class="info">{{patientInfo.address | emptyFilter}}</p></div>
</div>
<div class="item">
<div><p class="title">工作单位:</p><p class="info">{{patientInfo.workplace | emptyFilter}}</p></div>
<div>
<p class="title">微信:</p>
<p class="info" v-if="patientInfo.isWechatBind == '1'">未绑定 <el-button type="text" class="ml10" @click="remindBind" style="color: #449284;" v-if="patientInfo.isRemind == '1'">提醒绑定</el-button><span class="ml10" v-if="patientInfo.isRemind == '2'">已提醒</span></p>
<!--<p class="info" v-else-if="patientInfo.isWechatBind == '2'">已绑定 <span class="ml10">(微信名:{{patientInfo.wechatNickname | emptyFilter}}</span></p>-->
<p class="info" v-else-if="patientInfo.isWechatBind == '2'">{{patientInfo.wechatNickname | emptyFilter}}</p>
<p class="info" v-else>-</p>
</div>
</div>
<div class="has-header">其他</div>
<div class="item">
<div>
<p class="title">备注:</p>
<p class="info">
<el-input
type="textarea"
:autosize="{ minRows: 3, maxRows: 7}"
placeholder="请输入内容"
v-model="patientInfo.remark"
maxlength="200"
>
</el-input>
</p>
</div>
<p class="btn-right"><el-button plain size="small" @click="saveRemark">保存备注</el-button></p>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="健康记录" name="second">
<div class="health-record-wrap" v-show="recordList.length">
<div class="health-record-list"
v-show="recordList.length"
v-infinite-scroll="loadMore"
:infinite-scroll-disabled="busy"
infinite-scroll-distance="5"
infinite-scroll-immediate-check="true">
<div class="item" v-for="(item, index) in recordList" :key="index">
<div class="record-date">{{item.finishedTime}}</div>
<div class="record-content">
<div class="record-title">
<p>{{item.name}}-{{item.seqNo}}次随访</p>
<span>{{item.fuTypeValue}}</span>
</div>
<div class="list-visit">
<span class="left-label">患教内容:</span>
<div class="right-item">{{item.sendContent | emptyFilter}}</div>
</div>
<div class="list-visit">
<span class="left-label">随访量表:</span>
<div class="right-item">
<p v-for="(item2, index2) in item.scaleSimpleDtos" :key="index2" v-if="item.scaleSimpleDtos.length">{{item2.name}}
<span class="check-btn" @click="openScaleDetail(item2)">查看量表</span>
</p>
<p v-if="!item.scaleSimpleDtos.length">暂无量表</p>
</div>
</div>
</div>
</div>
<p style="text-align: center;padding:10px 0;cursor: pointer" v-if="hasMore">加载中...</p>
<p style="text-align: center;padding:10px 0;cursor: pointer" v-if="!hasMore">没有更多了</p>
</div>
</div>
<div class="no-record-content" v-if="!recordList.length">
<div class="no-record-info">
<img src="../../../assets/image/no-content1.png"/>
<p>暂无随访记录或您没有权限访问</p>
</div>
</div>
</el-tab-pane>
</el-tabs>
</div>
</div>
</div>
</template>
<script>
import BreadCrumb from '@/components/breadcrumb'
import { mapGetters } from 'vuex'
import { getWorkDomain } from '@/utils/index'
import { getDiseasesList, getPatientDetail, getRemindPatient, deletePatient, savePatientInfo, getHealthRecordList, getNationsList } from '@/utils/patients/patientsapi'
export default {
name: "patientDetail",
components: {
BreadCrumb,
},
data() {
return {
/*面包屑配置*/
curmbFirst: '居民管理',
curmbSecond: '我的居民',
curmbThird: '居民详情',
jumPathThird: '/patients-manage/mypatients-manage/patients-list',
activeName: 'first',
patientId: '',
doctorId: '',
patientInfo: {
isWechatBind: 1,
remark: '',
},
nationalityDes: '',
showLabelName: '',
showDiseaseName: '',
birthTimeDisplay: '',
recordList: [],
hasMore: false,
busy: false,
pageNo: 1,
pageSize: 15,
}
},
created() {
this.patientId = this.$route.query.patientId;
this.init();
this.getRecordList();
},
mounted() {
},
computed: {
...mapGetters([
'_token',
])
},
methods: {
init() {
getPatientDetail(this.patientId).then((data) => {
if(data.code == '000000') {
this.patientInfo = data.data;
if(this.patientInfo){
this.doctorId = this.patientInfo.doctorId;
let customLabels = this.patientInfo.customLabels;
// let diseases = this.patientInfo.diseases;
let icdList = this.patientInfo.icdList;
let groupLabelNames = [];
let groupDiseaseNames = [];
//对出生日期的处理
if(this.patientInfo.birthTime){
let timeArr = this.patientInfo.birthTime.split('-');
let mm = parseInt(timeArr[1]) < 10 ? `0${parseInt(timeArr[1])}` : parseInt(timeArr[1]);
let dd = parseInt(timeArr[2]) < 10 ? `0${parseInt(timeArr[2])}` : parseInt(timeArr[2]);
this.birthTimeDisplay = `${timeArr[0]}-${mm}-${dd}`;
}else {
this.birthTimeDisplay = '';
}
// 对分组的处理
if(customLabels) {
customLabels.forEach(item => {
groupLabelNames.push(item.label)
});
this.showLabelName = groupLabelNames.join(';');
} else {
this.showLabelName = '';
}
// 对诊断疾病的处理(老版诊断)
// if(diseases) {
// diseases.forEach(item => {
// groupDiseaseNames.push(item.diseaseName)
// });
// this.showDiseaseName = groupDiseaseNames.join(';');
// } else {
// this.showDiseaseName = '';
// }
// 对诊断疾病的处理(新版诊断)
if(icdList) {
icdList.forEach(item => {
groupDiseaseNames.push(item.diseaseName)
});
this.showDiseaseName = groupDiseaseNames.join(';');
} else {
this.showDiseaseName = '';
}
// 对民族的处理
if(this.patientInfo.nationality) {
let nationsList = [];
getNationsList().then((data) => {
if(data.code == '000000') {
nationsList = data.data;
nationsList.forEach(item => {
if(String(this.patientInfo.nationality) == item.code ) {
this.nationalityDes = item.name;
}
})
}
})
}else {
this.nationalityDes = '-';
}
}
}
})
},
getRecordList() {
let reqPara = {
patientId: this.patientId,
// patientId: '99997701',
pageNo: this.pageNo,
pageSize: this.pageSize,
}
getHealthRecordList(reqPara).then((data) => {
if(data.code == '000000'){
// this.recordList = data.data.healthRecordDtos;
let healthRecordDtos = data.data.healthRecordDtos;
let count = data.data.count;
// if(flag) {
this.recordList = this.recordList.concat(healthRecordDtos);
if(count <= this.pageNo * this.pageSize) {
this.busy = true;
this.hasMore = false;
}else {
this.busy = false;
this.hasMore = true;
}
// }else {
// this.recordList = healthRecordDtos;
// this.busy = false;
// this.hasMore = false;
// }
}else {
this.$message.error(data.message)
}
})
},
tabChangeHandler(tab) {},
deleteCurrentPatient() {
// 把写的提示信息需要换行的地方分成数组 confirmText
const confirmText = ['您确定要删除此居民吗?', '删除后,您将无法对该居民发送患教和进行随访,重新添加该居民依旧可查看历史发送记录及随访记录'];
const newDatas = [];
const h = this.$createElement;
for (const i in confirmText) {
newDatas.push(h('p', null, confirmText[i]))
}
this.$confirm('删除居民', {
title: '删除居民',
message: h('div', null, newDatas),
confirmButtonText: '确认删除',
cancelButtonText: '取消',
closeOnClickModal: false,
closeOnPressEscape: false,
customClass: 'delete-patient',
type: 'warning'
}).then(() => {
let reqParam = {
patientIdList: [this.patientId],
token: this._token,
};
deletePatient(reqParam).then(data => {
if(data.code == '000000') {
this.$message({
type: 'success',
message: `${this.patientInfo.nickname}居民删除成功!`
});
setTimeout(()=>{
this.$router.push({
path: '/patients-manage/mypatients-manage/patients-list'
})
},2000)
}else {
this.$message({
type: 'error',
message: data.message
});
}
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
});
});
},
editPatient() {
this.$router.push({
path: '/patients-manage/mypatients-manage/basic-info',
query: {
patientId: this.patientId
}
})
},
//提醒绑定
remindBind() {
let remindMobileWechatPara = {
qrcodeType: 1,
patientId: this.patientId,
// deviceInfo: window.getDeviceInfo()
}
getRemindPatient({
...remindMobileWechatPara
}).then( data => {
if(data.code == '000000') {
this.$message.success(data.data.respMsg);
this.init();
}else {
this.$message.error(data.message);
}
})
},
//保存备注
saveRemark() {
savePatientInfo(this.patientInfo).then(data => {
if(data.code == '000000'){
this.$message.success('保存备注成功')
this.init();
}else {
this.$message.error(data.message);
}
})
},
//查看量表详情
openScaleDetail(item) {
// this.$router.push({path: '/followup/record-manage/form-template',
// query: {doctorId: this.enteringInfo.doctorId, scaleNo: val.scaleNo, planPatientsTimesId: this.enteringInfo.planPatientsTimesId,planTimesId : val.planTimesId, showBtn: 1}})
let scaleUrl = getWorkDomain(`/#/followup/record-manage/form-template?doctorId=${item.doctorId}&scaleNo=${item.scaleNo}&planPatientsTimesId=${item.planPatientsTimesId}&planTimesId=${item.planTimesId}&showBtn=1`);
window.open(scaleUrl)
},
loadMore() {
// console.log('触发加载页码',this.pageNo);
this.busy = true; //把busy置位true,这次请求结束前不再执行
setTimeout(() => {
this.pageNo++;
this.getRecordList()
//调用获取数据接口,并且传入一个true,让axios方法指导是否需要拼接数组。
}, 500)
},
},
filters: {
emptyFilter: function(value) {
if (!value) {
return '-';
} else {
return value;
}
},
sexFileter: function(value) {
if (!value && value != 0) {
return '-';
} else {
let hash = {
1: '男',
2: '女'
};
return hash[value];
}
},
permanentFilter: function (value) {
if (!value) {
return '-';
} else {
let hash = {
1: '户籍',
2: '非户籍'
};
return hash[value];
}
}
},
}
</script>
<style lang="scss">
.delete-patient{
.el-message-box__content {
position: relative;
padding: 10px 15px!important;
color: #606266;
font-size: 14px;
}
/*恢复messageBox默认样式*/
.el-message-box {
width: 360px;
height: 220px!important;
}
.el-message-box__status+.el-message-box__message{
padding-left: 20px;
padding-right: 20px;
}
}
</style>
<style lang="scss" scoped>
@import '../../../style/patients-style/element-reset.css';
.f-main-content{
background: #ffffff;
padding: 30px;
.right-btn-group{
position: absolute;
right: 60px;
z-index: 1800;
}
.section{
.item{
display: flex;
font-size: 14px;
div{
display: flex;
flex: 1;
line-height: 36px;
.title{
width: 150px;
text-align: right;
}
.info{
color: #999;
padding-left: 15px;
width: 100%;
}
}
&.wrap-p{
div{
line-height: 28px;
}
}
.btn-right{
width: 35%;
padding-left:10px;
}
}
.has-header{
display: flex;
justify-content: space-between;
padding: 15px 0;
margin-bottom: 15px;
border-bottom: 1px dashed #888;
.right-p{
display: inline-block;
text-align: right;
color: #999;
font-size: 14px;
span:last-child{
margin-left: 15px;
}
}
}
}
.health-record-wrap{
/*height: 300px;*/
overflow-y: auto;
@media screen and (min-width:1240px) and (max-width:1545px){
height: 350px;
}
@media screen and (min-width:1545px) and (max-width:1600px){
height: 580px;
}
@media screen and (min-width:1600px){
height: 670px;
}
&::-webkit-scrollbar{
width:5px;
}
&::-webkit-scrollbar-thumb {/*滚动条里面小方块*/
border-radius: 10px;
-webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2);
background: rgba(0,0,0,0.1);
}
}
.health-record-list{
.item{
width: 100%;
margin-bottom: 15px;
.record-date{
color: #999;
padding-bottom: 10px;
}
.record-content{
width: 100%;
border: 1px solid #E4E7ED;
border-radius: 5px;
padding: 10px 15px 13px;
.record-title{
display: flex;
justify-content: space-between;
padding: 5px 0;
span{
color: #999;
font-size: 14px;
}
}
.list-visit{
line-height: 28px;
padding: 6px 0 2px;
display: flex;
display: -webkit-flex;
align-items: flex-start;
font-size: 14px;
color: #999;
.left-label{
line-height: 28px;
}
.right-item{
flex: 1;
line-height: 28px;
p{
line-height: 28px;
.check-btn{
color: #449284;
cursor: pointer;
margin-left: 15px;
}
}
}
}
}
}
}
.no-record-content{
@media screen and (min-width:1240px) and (max-width:1545px){
height: 300px;
}
@media screen and (min-width:1545px) and (max-width:1600px){
height: 500px;
}
@media screen and (min-width:1600px){
height: 600px;
}
text-align: center;
padding: 50px 0 60px;
.no-record-info{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -60%);
}
img{
width: 120px;
}
p{
color: #B9B9C6;
font-size: 20px;
}
}
.ml10{
margin-left: 10px;
}
}
</style>
<template>
<section class="not-complete-wrap">
<bread-crumb
:curmbFirst="curmbFirst"
:curmbSecond="curmbSecond">
</bread-crumb>
<section class="not-complete-content screenSet">
<h1 class="page-title">我的居民:共{{pagination.totalRows ? pagination.totalRows : 0}}</h1>
<div class="search-div">
<div class="search-input">
<el-form :model="searchData" ref="searchData" :inline="true" label-width="100px">
<el-form-item label="性别:" prop="patientName">
<el-select v-model="searchData.sex" size="small" clearable :popper-append-to-body="false">
<el-option
v-for="item in sexList"
:key="item.no"
:label="item.value"
:value="item.no">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="年龄段:" prop="mobile">
<el-select v-model="searchData.age" size="small" clearable :popper-append-to-body="false">
<el-option
v-for="item in agesList"
:key="item.value"
:label="item.value"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="诊断:" prop="startDate" class="diagnose-select-style">
<!-- <el-select v-model="searchData.diseaseId" size="small" clearable :popper-append-to-body="false" placeholder="请选择或搜索诊断">
<el-option
v-for="item in diseaseList"
:key="item.diseaseId"
:label="item.diseaseName"
:value="item.diseaseId">
</el-option>
</el-select> -->
<!-- new Start -->
<el-select
v-model="searchData.icdCodeList"
multiple
filterable
remote
size="small"
collapse-tags
reserve-keyword
placeholder="请选择或搜索诊断"
:remote-method="getDiseaseData"
:loading="loading"
:popper-append-to-body="false"
>
<el-option
v-for="item in options"
:key="item.icdCode"
:label="item.diseaseName"
:value="item.icdCode">
</el-option>
</el-select>
<!-- new End -->
</el-form-item>
<el-form-item label="分组:" prop="labelId">
<el-select v-model="searchData.labelId" size="small" clearable :popper-append-to-body="false">
<el-option
v-for="item in groupList"
:key="item.labelId"
:label="item.labelName"
:value="item.labelId">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="关键词:" prop="searchCondition">
<el-input v-model="searchData.searchCondition" size="small" clearable placeholder="请输入患者姓名/手机号">
</el-input>
</el-form-item>
</el-form>
</div>
<div class="search-btn">
<el-button class="button-green" type="primary" size="small" @click="searchPatientList">查询</el-button>
<el-button class="button-white" plain size="small" @click="resetSearchData('searchData')">重置</el-button>
</div>
</div>
<el-table
:data="patientList"
style="width: 100%;">
<el-table-column
prop="nickname"
width="150"
label="姓名"
lign="center">
</el-table-column>
<el-table-column
prop="sex"
width="80"
label="性别"
align="center">
<template slot-scope="scope">
<span v-if="scope.row.sex==1"></span>
<span v-else-if="scope.row.sex==2"></span>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column
prop="age"
label="年龄"
width="80"
align="center">
<template slot-scope="scope">
<span v-if="scope.row.age || (scope.row.age==0)">{{scope.row.age}}</span>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column
prop="showLabelName"
:show-overflow-tooltip="true"
label="分组"
align="center">
</el-table-column>
<el-table-column
prop="showDiseaseNames"
:show-overflow-tooltip="true"
label="诊断"
align="center">
</el-table-column>
<el-table-column
width="120"
label="操作"
align="center">
<template slot-scope="scope">
<el-button type="text" @click="goToDetails(scope.row)">查看详情</el-button>
</template>
</el-table-column>
<div slot="empty">
<div class="table-empty">
<img src="../../../assets/image/no-content1.png">
<p>暂无任何居民,去添加居民</p>
</div>
</div>
</el-table>
<div class="pagination" v-if="patientList">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pagination.pageNo"
:page-sizes="[15, 30, 50, 100]"
:page-size="pagination.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="pagination.totalRows">
</el-pagination>
</div>
</section>
</section>
</template>
<script>
import BreadCrumb from '../../../components/breadcrumb.vue'
import { getConstants,
// getDiseasesList,
getIcdList,
getLabelList,
getPatientList} from '../../../utils/patients/patientsapi'
export default {
name: "not-complete",
components: {
BreadCrumb
},
data() {
return {
curmbFirst: '居民管理',
curmbSecond: '我的居民',
pagination: {
pageNo: 1,
pageSize: 15,
totalRows: 0,
},
searchData: {},
selectList: [],
sexList: [], //性别
agesList: [], //年龄
diseaseList: [],
groupList: [],
patientList: [],
options: [],
loading: false,
}
},
mounted() {
this.getConstantData(); //获取性别、年龄段常量
this.getDiseaseData(); //获取 搜索诊断
this.getGroupList(); //获取分组
this.getPatients({
...this.searchData
}); //获取居民列表
},
methods: {
getConstantData() {
getConstants({
numList: 'P006,P057',
}).then((data) => {
if(data.code == "000000") {
this.sexList = data.data.P006;
this.agesList = data.data.P057;
}
}).catch((error) => {
this.$message({
message: error,
type: 'error'
});
});
},
getDiseaseData(query) {
// getDiseasesList().then((data) => {
// if(data.code == "000000") {
// this.diseaseList = data.data;
// }
// }).catch((error) => {
// this.$message({
// message: error,
// type: 'error'
// });
// });
let params = {
diseaseName: query ? query : '',
pageNum: 1,
pageSize: 200,
};
this.loading = true;
getIcdList(params).then(data => {
this.loading = false;
if(data.code == "000000") {
this.options = data.data;
}
}).catch((error) => {
this.$message({
message: error,
type: 'error'
});
});
},
getGroupList() {
getLabelList({
type: 1,
token : localStorage.getItem("token")
}).then((data) => {
if(data.code == "000000") {
this.groupList = data.data.labelNameList;
}
}).catch((error) => {
this.$message({
message: error,
type: 'error'
});
});
},
getPatients(payload) {
const { pageNo, pageSize} = this.pagination;
let searchParams = {}
if(this.searchData.age) {
let ageBegin = '';
let ageEnd = '';
if(this.searchData.age == '84+') {
ageBegin = '84';
ageEnd = '200';
} else {
const ageItem = this.searchData.age.split('-');
ageBegin = ageItem[0];
ageEnd = ageItem[1];
}
searchParams = {
...payload,
ageBegin,
ageEnd
}
} else {
searchParams = payload
}
getPatientList({
pageNo,
pageSize,
...searchParams
}).then((data) => {
if(data.code == "000000") {
this.patientList = data.data.patientList;
this.pagination.totalRows = data.data.totalRows
if(this.patientList) {
this.patientList.forEach((item)=> {
item.disableNum = 1;
let diseaseNames = [];
let groupNames = []
//转化分组
if (item.labelModels) {
item.labelModels.forEach(item => {
groupNames.push(item.label)
});
item.showLabelName = groupNames.join('、');
} else {
item.showLabelName = '-';
}
//转化疾病
if (item.patientTypeModels) {
item.patientTypeModels.forEach(item => {
diseaseNames.push(item.diseaseName)
})
item.showDiseaseNames = diseaseNames.join('、');
} else {
item.showDiseaseNames = '-';
}
})
}
}
}).catch((error) => {
this.$message({
message: error,
type: 'error'
});
});
},
handleSizeChange(val) {
this.pagination.pageNo = 1;
this.pagination.pageSize = val
this.getPatients({
...this.searchData
})
},
handleCurrentChange(val) {
this.pagination.pageNo = val
this.getPatients({
...this.searchData
})
},
searchPatientList() {
this.pagination.pageNo = 1;
this.getPatients({
...this.searchData
})
},
resetSearchData() {
this.searchData = {}
this.pagination.pageNo = 1;
this.getPatients({
...this.searchData
})
},
goToDetails(item) {
this.$router.push({path: '/patients-manage/mypatients-manage/patient-detail', query: {patientId:item.patientId}})
}
},
}
</script>
<style lang="scss">
.not-complete-wrap {
.not-complete-content {
padding: 30px;
background: #ffffff;
.tip {
font-size: 12px;
padding: 30px 0;
line-height: 32px;
}
.page-title {
font-size: 20px;
color: #F1E2F3D;
padding-bottom: 20px;
border-bottom: 1px solid #efefef;
}
.search-div {
display: flex;
flex-direction: row;
justify-content: space-between;
padding: 30px 0 10px 0;
border-bottom: 1px solid #efefef;
.search-input{
flex: 1;
.diagnose-select-style{
.el-input__inner{
height: 32px !important;
}
.el-select__tags-text{
display: inline-block;
max-width: 75px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.el-tag__close.el-icon-close{
top: -6px;
}
}
}
.search-btn {
text-align: right;
width: 150px;
}
}
.blank-wrap {
@media screen and (min-width:1240px) and (max-width:1545px){
height: 300px;
}
@media screen and (min-width:1545px) and (max-width:1600px){
height: 500px;
}
@media screen and (min-width:1600px){
height: 600px;
}
.blank-content {
text-align: center;
img {
width: 100px;
}
p {
font-size: 20px;
color: #999;
}
}
}
.user-photo {
border-radius: 50%;
width: 40px;
}
.table-empty {
img {
width: 100px;
}
p {
margin-top: -50px;
}
}
}
/*重置输入框,选择框样式*/
.el-range-editor.is-active, .el-range-editor.is-active:hover, .el-select .el-input.is-focus .el-input__inner,.el-input__inner:focus{
border-color: #449284;
}
.el-select-dropdown__item.selected {
color: #449284;
}
.el-select .el-input__inner:focus {
border-color: #449284;
}
/*重置表格选择框*/
.el-checkbox__input.is-checked .el-checkbox__inner, .el-checkbox__input.is-indeterminate .el-checkbox__inner {
border-color: #449284;
background-color: #449284;
}
.el-checkbox__inner {
border-color: #DCDFE6!important;
}
.el-checkbox__input.is-focus,.el-checkbox__inner:hover,.el-checkbox__inner.is-focus {
border-color: #449284!important;
}
.el-button--text {
color: #449284;
}
.fontGreen {
color: #449284;
}
.el-pagination.is-background .el-pager li:not(.disabled).active {
background: #449284 !important;
}
}
</style>
<template>
<div class="batch-import-wrap">
<div class="step-guide">
<ul class="guide-list">
<li class="first">
<div class="procedure">
<i class="icon">1</i>
<p class="text">下载模板</p>
<p class="border"></p>
</div>
<div class="under-info">
<p class="step-tips">点击下方“下载模板”</p>
<el-button type="primary" size="small" @click="handleDownloadDemo">下载模板</el-button>
</div>
</li>
<li class="first second">
<div class="procedure">
<i class="icon">2</i>
<p class="text">填写居民信息</p>
<p class="border"></p>
</div>
<div class="under-info">
<p class="step-tips">按照模板编辑居民信息</p>
<ul class="fill-tips">
<li>
<i class="tips-title notice">填写要求:</i>
</li>
<li>
<i class="tips-title">居民姓名:</i>
<p>当前支持2~15个字符</p>
</li>
<li>
<i class="tips-title">出生年月:</i>
<p>"年-月-日",我们将优先识别身份证信息中的出生年月信息,若身份证未填,将识别此处信息。</p>
</li>
<li>
<i class="tips-title">居住地址:</i>
<p>≤50字</p>
</li>
<li>
<i class="tips-title">电话:</i>
<p>请输入11位手机号码</p>
</li>
<li>
<i class="tips-title">分组与诊断:</i>
<p>多个分组之间,用中文逗号“,”分割</p>
</li>
</ul>
</div>
</li>
<li class="first third">
<div class="procedure">
<i class="icon">3</i>
<p class="text">上传文件</p>
</div>
<div class="under-info">
<p class="step-tips">将填写好的居民信息文件在下方进行上传</p>
<el-upload
class="upload-file"
drag
action="#"
:before-upload="getPostData"
:http-request="notUseDefaultUpload">
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
</el-upload>
</div>
</li>
</ul>
</div>
<div class="component-content screenSet upload-history-wrap">
<p class="septal-line"></p>
<p class="upload-record">上传历史记录:{{searchData.totalCount}}</p>
<!-- :cell-style="aaa" -->
<el-table
:data="searchData.tableData"
class="upload-table"
empty-text="该用户暂无历史记录"
style="width: 100%">
<el-table-column
align="left"
prop="fileName"
label="文件名"
width="250">
</el-table-column>
<el-table-column
align="left"
prop="uploadTime"
label="上传时间"
width="180">
</el-table-column>
<el-table-column
align="left"
prop="insertCount"
label="新导入居民数">
</el-table-column>
<el-table-column
align="left"
prop="updateCount"
label="更新居民资料数">
</el-table-column>
<el-table-column
align="left"
prop="status"
label="处理状态">
</el-table-column>
<el-table-column
align="left"
prop="reason"
label="关闭理由">
</el-table-column>
</el-table>
<el-pagination
class="pagination-style"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:total="searchData.totalCount"
:current-page="1"
:page-sizes="[15, 30, 50, 100]"
:page-size="searchData.pageSize"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
</div>
<!-- 上传成功弹窗 -->
<el-dialog
class="upload-success-modal"
title="上传成功"
:visible.sync="showUploadSuccess"
width="400px"
:show-close="false"
:close-on-click-modal="false"
center>
<p class="tips">我们会在<i>3-5个工作日</i>内进行处理,届时您可以在上传历史记录列表查看处理结果</p>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleCloseUploadSuccess">我知道了</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import { getSaasDomain } from '@/utils/index';
import {
getUploadHistory,
uploadExcel,
} from "@/utils/patients/patientsapi";
export default {
data() {
return {
searchData: {
pageNo: 1, // 第几页
pageSize: 15, // 每页条数
tableData: [],
totalCount: 0,
},
files: [],
postData: {},
showUploadSuccess: false,
}
},
created() {
this.goToGetUploadHistory();
},
computed: {
...mapGetters([
'_token',
]),
},
methods: {
// aaa(obj){
// console.log('%c cell-style obj>>>>>>', 'color: red;', obj);
// if(obj.column.property == 'reason'){
// return 'red>>>'
// }else{
// return 'pink'
// }
// },
notUseDefaultUpload(){
// console.log('just console>>>>>>>>')
},
getPostData(file) {
let self = this;
let arr = file.type.split('/');
let ext = "." + arr[1];
let name = file.name;
let type = name.substring(name.lastIndexOf('.') + 1);
if (type !== 'xls' && type !== 'xlsx') {
self.$message({
message: '上传文件只能是 xls、xlsx格式!',
type: 'warning'
});
return;
}
let reader = new FileReader();
reader.onload = function (e) {
let fileJson = {
fileName: file.name,
file: e.target.result.substr(e.target.result.indexOf("base64,") + 7),
ext: ext
};
let fileArray = [{
type: 'patient',
base64: fileJson
}];
let req = {
fileArray: fileArray,
import_type: 2,
};
if( process.env.BUILD_ENV == "development" ){
req.token = '428006DCF6DD45FB9BAD640FEF6ACE4B'
}else{
// req.token = self._token;
req.token = localStorage.getItem('storageToken');
}
self.postData = JSON.stringify(req);
console.log('>>>>>> batch upload req', req)
uploadExcel(self.postData).then(res => {
if(typeof res.importFlag != 'undefined' && res.importFlag == true){
self.showUploadSuccess = true;
try{
self.goToGetUploadHistory();
}catch(err){
console.log('reload history list error');
}
}else{
self.$message({
message: '上传失败,请重新上传!',
type: 'success'
});
}
})
};
reader.readAsDataURL(file);
},
handleDownloadDemo(){
let src = 'https://file.yunqueyi.com/File/template/居民导入模板.xlsx';
// let newTab=window.open('about:blank');
// newTab.location = src;
window.location.href = src;
},
goToGetUploadHistory(){
// console.log('go get upload history>>>>>>')
let params = {
pageNo: this.searchData.pageNo,
pageSize: this.searchData.pageSize,
};
getUploadHistory(params).then(res => {
// console.log('获取上传历史记录:', res);
if(res.code == "000000"){
let data = res.data.importRecordsModelList;
if(data && data.length > 0){
data = data.map(item => {
if(!item.fileName){
item.fileName = '-';
}
if(!item.uploadTime) {
item.uploadTime = '-';
}
if(item.insertCount || item.insertCount == 0) {
// 直接显示
}else{
item.insertCount = '-';
}
if(item.updateCount || item.updateCount == 0) {
// 直接显示
}else{
item.updateCount = '-';
}
if(!item.status) {
item.status = '-';
}
if(!item.reason) {
item.reason = '-';
}
return item;
});
this.searchData.tableData = data;
this.searchData.totalCount = res.data.count;
}
}else{
// 获取失败
this.$message({
message: '接口返回失败,请重新再试',
type: 'warning'
});
}
})
},
handleCurrentChange(val) {
this.searchData.pageNo = val;
this.goToGetUploadHistory();
},
handleSizeChange(val) {
this.searchData.pageSize = val;
this.goToGetUploadHistory();
},
handleCloseUploadSuccess() {
this.showUploadSuccess = false;
},
},
}
</script>
<template>
<div>
<div class="qr-code-wrap">
<el-alert
class="top-tips"
title="提醒:选择分组后,会自动生成相应的分组二维码,居民扫码后直接进入该分组(若未选择分组,则自动生成未分组二维码,居民扫码后进入默认未分组)"
type="warning"
show-icon>
</el-alert>
<div class="qr-group">
<p class="label-name">二维码分组:</p>
<template v-for="(labelItem, index) in labelsInfoList">
<el-tag size="small" :key="index">{{labelItem.labelName}}</el-tag>
</template>
<el-tag size="small" class="choose-group" @click="handleChooseGroup">+ 选择分组</el-tag>
</div>
<div class="qr-pic-wrap">
<div class="qr-box">
<div class="pic">
<canvas id="msg"></canvas>
<el-button icon="el-icon-download" class="qr-download-btn" @click="handleQRDownloadModal">下载二维码</el-button>
</div>
<p class="time-limit">有效期:{{qrCodeInfo.beginTime}}-{{qrCodeInfo.endTime}} </p>
<el-button icon="el-icon-refresh" class="refresh-btn" size="small" @click="handleRefreshCode">刷新有效期</el-button>
</div>
</div>
<div class="border-space"></div>
<div class="increased-steps-wrap">
<div class="label-title">居民添加流程</div>
<img src="../../../../assets/image/patient-add-flow-path.png" alt="" class="flow-path">
</div>
</div>
<!-- 选择分组 弹窗 -->
<el-dialog
class="choose-label-wrap"
:title="showDownloadQRModal == false ? '选择分组' : '下载二维码'"
:visible.sync="showChooseLabelModal"
width="680px"
:close-on-click-modal="false"
center>
<p class="under-title-tips">选择分组后,会自动生成相应的分组二维码,居民扫码后直接进入该分组</p>
<el-row class="row-in-line">
<el-button size="small" class="clear-select" :disabled="choosedLabelList.length<1" @click="handleClearSelect">清空选择</el-button>
<template v-if="!showDownloadQRModal">
<el-button type="primary" class="right" size="small" @click="handleGoToLabelManage">分组管理</el-button>
<p class="tips">未找到分组可去分组管理新建分组</p>
</template>
</el-row>
<div class="list-wrap">
<el-checkbox-group v-model="choosedLabelList">
<template v-for="item in labelNameList" >
<el-checkbox v-if="item.labelId != 0" :label="item.labelId" border :key="item.labelId">
{{item.labelName}}
</el-checkbox>
</template>
</el-checkbox-group>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleCloseChooseLabelModal" size="small">取 消</el-button>
<el-button type="primary" @click="handleAfterChooseLabel" size="small">{{showDownloadQRModal == false ? '确 定' : '确定下载'}}</el-button>
<a :href="imgHref" ref="downLoadBtn" id="downLoadBtn" download="二维码.png"></a>
</span>
</el-dialog>
<!-- 重新加载当前分组列表 -->
<el-dialog
class="reload-label-modal"
:visible.sync="showReloadLabelModal"
width="320px"
:show-close="false"
:close-on-click-modal="false"
center>
<p class="tips">您刚才跳转到分组管理页面进行新建分组,请点击下方按钮刷新数据</p>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleReloadLabel">重新加载</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import QRCode from 'qrcode';
import {
getQRCode,
refreshCode,
getLabelList,
getLabelsInfo,
downloadQRCode,
} from "@/utils/patients/patientsapi";
export default {
name: "qrCodeImport",
data() {
return {
imgHref: '',
showChooseLabelModal: false,
showReloadLabelModal: false,
showDownloadQRModal: false, //下载二维码弹窗时, 是否隐藏“选择分组”里的分组管理部分
qrCodeInfo: {
qrcodeUrl: '',
beginTime: '',
endTime: '',
id: '',
labelIds: '',
},
labelsInfoList: [], // 二维码分组 列表信息
labelNameList: [], // 分组列表
currentLabelList: [], // 接口返回的二维码分组id列表
choosedLabelList: [], // 勾选的分组id列表
forDownloadInfo: {}, // 下载用的信息
}
},
created() {
this.goToGetQRCode({
labelIds: '',
id: '',
first: true,
});
},
watch: {
showChooseLabelModal: function(val) {
if(val == false){
// this.labelNameList = [];
this.choosedLabelList = [];
}
},
},
methods: {
handleCloseChooseLabelModal() {
this.showChooseLabelModal = false;
},
// 二维码录入
goToGetQRCode(params, cb){
let justDownload = false;
if(params.hasOwnProperty('justDownload')){
justDownload = true;
delete params.justDownload;
}
getQRCode(params).then(res => {
if(res.code == '000000'){
let data = res.data;
if( !justDownload ){ // 非下载二维码时
this.qrCodeInfo = data;
if(data.labelIds && (data.labelIds != '')){ // 存在labelIds,则去请求label信息列表
let temp = data.labelIds.split(',');
this.currentLabelList = this.formatList(temp);
this.handleGetLabelsInfo({
labelIds: data.labelIds,
});
}else{
this.labelsInfoList = [];
this.currentLabelList = [];
}
this.calculateQRCode(data.qrcodeUrl);
}else{ // 下载二维码时,不用更新页面中的二维码信息
// debugger;
this.forDownloadInfo = data;
let { id, beginTime, endTime, forever } = this.forDownloadInfo;
let obj = {
id,
beginTime,
endTime,
forever,
// labels: [], // ["高血压","糖尿病","脑卒中"]
labelList: []
};
let idArr = params.labelIds.split(','); // [1,3,55]
let checkArr = this.labelNameList;
for(let i=0; i<idArr.length; i++) {
for(let j=0; j<checkArr.length; j++) {
if( idArr[i] == checkArr[j].labelId ) {
// obj.labels.push( checkArr[j].labelName );
obj.labelList.push({
labelId: checkArr[j].labelId,
labelName: checkArr[j].labelName
})
}
}
}
// console.log('obj.labels: ', obj.labels);
cb && cb(obj);
}
}else{
this.$message({
message: '获取二维码失败,请重新再试',
type: 'warning'
});
}
})
},
formatList(arr) {
return arr.map((item, index) => {
return parseInt(item);
})
},
handleGetLabelsInfo(params) {
getLabelsInfo(params).then(res => {
if(res.code == '000000'){
this.labelsInfoList = res.data;
}else{
this.$message({
message: '获取标签信息失败',
type: 'warning'
});
}
})
},
calculateQRCode(val){
// 获取页面的canvas
var msg= document.getElementById('msg')
// 将获取到的数据(val)画到msg(canvas)上
QRCode.toCanvas(msg, val, function (error) {
// console.log(error)
})
},
handleChooseGroup() {
// debugger;
this.showDownloadQRModal = false;
// 回显已经选择的label
this.choosedLabelList = this.currentLabelList;
this.goToGetGroupList();
},
handleRefreshCode() {
let params = {
labelIds: this.qrCodeInfo.labelIds,
id: this.qrCodeInfo.id,
first: false,
}
refreshCode(params).then(res => {
if(res.code == '000000'){
let data = res.data;
this.qrCodeInfo = data;
if(data.labelIds && data.labelIds != ''){
let temp = data.labelIds.split(',');
this.currentLabelList = this.formatList(temp);
}
}else{
this.$message({
message: '获取二维码失败,请重新再试',
type: 'warning'
});
}
})
},
handleQRDownloadModal() {
this.showDownloadQRModal = true;
// 回显已经选择的label
this.choosedLabelList = this.currentLabelList;
this.goToGetGroupList();
},
handleAfterChooseLabel() {
// console.log('this.choosedLabelList ', this.choosedLabelList)
// console.log('this.choosedLabelList ', this.choosedLabelList.join(','))
if( this.showDownloadQRModal == false ){ // 选择分组时
this.showChooseLabelModal = false;
this.goToGetQRCode({
labelIds: this.choosedLabelList.join(','),
id: '',
first: false,
});
}else{ // 下载二维码时
// 获取最新二维码参数,但不影响之前的二维码参数
this.goToGetQRCode({
labelIds: this.choosedLabelList.join(','),
id: '',
first: false,
justDownload: true,
downloadQrcode:true,
}, this.goToDownloadQRCode);
}
},
goToDownloadQRCode(params) {
// 下载二维码
downloadQRCode(params).then(res => {
if(res.code == '000000'){
this.showChooseLabelModal = false;
this.downloadFile(res.data);
}else{
this.$message({
message: '下载二维码失败',
type: 'warning'
});
}
})
},
handleClearSelect() {
this.choosedLabelList = [];
},
goToGetGroupList() {
// 获取分组列表
let params = {
type: 1,
};
if(this.labelName){
params.labelName = this.labelName;
}
getLabelList(params).then(data => {
// console.log('获取分组列表>> ', data)
if(data.data && data.data.labelNameList){
this.labelNameList = data.data.labelNameList;
this.showChooseLabelModal = true;
}
}).catch(err => {
console.log('error: ', err)
});
},
handleGoToLabelManage(){
let routeUrl = this.$router.resolve({
path: '/patients-manage/labels-manage/labels-list',
});
window.open(routeUrl.href, '_blank');
this.showReloadLabelModal = true;
},
handleReloadLabel() {
this.showReloadLabelModal = false;
this.goToGetGroupList();
},
downloadFile(src) {
// console.log('准备下载',src)
this.downLoadHandle(src);
},
downLoadHandle(src){
let blobToDataURI = (blob, callback) => {
var reader = new FileReader();
reader.onload = (e) => {
callback(e.target.result);
}
reader.readAsDataURL(blob);
};
var xhr = new XMLHttpRequest();
xhr.open('GET', src, true);
xhr.responseType = "blob";
xhr.onload = () => {
if (xhr.status == 200) {
var blob = xhr.response;
var img = document.createElement("img");
img.onload = (e) => {
window.URL.revokeObjectURL(img.src);
};
img.src = window.URL.createObjectURL(blob);
blobToDataURI(blob, (data)=> {
// console.log(img)
// console.log(data)
document.getElementById('downLoadBtn').setAttribute('href',data);
this.imgHref = data;
if (this.myBrowser()==="IE" || this.myBrowser()==="Edge"){
// window.event.preventDefault();
window.event.returnValue = false;
window.download(this.imgHref,"二维码.png","image/png")
}
this.$refs.downLoadBtn.click();
// 如果是IE浏览器
})
}
}
xhr.send();
},
// 判断浏览器类型
myBrowser(){
var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
var isOpera = userAgent.indexOf("Opera") > -1;
if (isOpera) {
return "Opera"
}; //判断是否Opera浏览器
if (userAgent.indexOf("Firefox") > -1) {
return "FF";
} //判断是否Firefox浏览器
if (userAgent.indexOf("Chrome") > -1){
return "Chrome";
}
if (userAgent.indexOf("Safari") > -1) {
return "Safari";
} //判断是否Safari浏览器
if (userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera) {
return "IE";
}; //判断是否IE浏览器
if (userAgent.indexOf("Trident") > -1) {
return "Edge";
} //判断是否Edge浏览器
}
},
}
</script>
<template>
<router-view></router-view>
</template>
<script>
export default {
name: "layout"
}
</script>
<style scoped>
</style>
<template>
<div class="newly-increased-wrap">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond" ></bread-crumb>
<div class="component-content screenSet">
<el-tabs v-model="activeName2" @tab-click="handleTabClick" class="tab-list">
<el-tab-pane label="单个录入" name="first" class="single-input">
<el-row class="save-and-add">
<el-button type="primary" @click="saveEdit">保存并新增</el-button>
</el-row>
<edit-information
ref="newForm"
:patientInfoObj="patientInfo"
:checkForm="checkForm"
@addListenSave="addListenSave"
:patientId="patientId">
</edit-information>
</el-tab-pane>
<el-tab-pane label="二维码录入" name="second">
<QRCodeImport v-if="activeName2 == 'second'"></QRCodeImport>
</el-tab-pane>
<el-tab-pane label="批量导入" name="third">
<BatchImport v-if="activeName2 == 'third'"></BatchImport>
</el-tab-pane>
</el-tabs>
</div>
</div>
</template>
<script>
import BreadCrumb from "@/components/breadcrumb.vue";
import EditInformation from '../mypatients-manage/components/edit-information'
import QRCodeImport from './components/qr-code-import';
import BatchImport from './components/batch-import';
import {
savePatientInfo
} from "@/utils/patients/patientsapi";
export default {
name: 'newPatient',
data() {
return {
curmbFirst: "居民管理",
curmbSecond: "新增居民",
activeName2: 'first',
patientInfo: {},
checkForm: false,
patientId: '',
}
},
components: {
BreadCrumb,
EditInformation,
QRCodeImport,
BatchImport,
},
created() {
let tabIndex = this.$route.query.tab;
if((typeof tabIndex == 'undefined') || (tabIndex == '')){
return;
}
tabIndex = parseInt(tabIndex);
let numArr = [1, 2, 3];
let tabList = ['first', 'second', 'third'];
if( numArr.indexOf(tabIndex) > -1 ){
this.activeName2 = tabList[tabIndex-1];
}else{
this.activeName2 = 'first';
}
},
// 挂载到Dom完成时
mounted() {
// commonUtil.resizeHeight();
},
methods: {
handleTabClick(tab, event) {
// console.log(tab, event);
},
saveEdit() {
this.checkForm = true;
},
addListenSave(val) {
this.checkForm = false;
if(val.status) {
// this.patientInfo = val.patientInfoForm
// console.log('填写内容',val.patientInfoForm);
savePatientInfo({
...val.patientInfoForm,
addType: 6
}).then(data => {
if(data.code == '000000'){
this.$message.success('新增成功')
setTimeout(() => {
this.$refs.newForm.$refs.patientInfoForm.resetFields()
this.$refs.newForm.diseaseIdList = [];
this.$refs.newForm.labelIdList = [];
this.$refs.newForm.addressList = [];
// 清空已选的诊断列表
this.$store.dispatch('patientsDiagnose/changeDiagnoseList', []);
// this.$router.go(0);//体验不好
},500)
}else {
this.$message.error(data.message);
}
})
// 调用保存接口
}else {
this.$message.error('请正确填写信息');
}
},
}
}
</script>
<style lang="less">
@import "../../../style/patient-manager/new-patient/new-patient-wrap.less";
</style>
<style lang="less">
@import "../../../style/patient-manager/new-patient/new-patient.less";
</style>
<template>
<router-view></router-view>
</template>
<script>
export default {
name: "layout"
}
</script>
<style scoped>
</style>
<template>
<section class="not-complete-wrap">
<bread-crumb
:curmbFirst="curmbFirst"
:curmbSecond="curmbSecond">
</bread-crumb>
<section class="not-complete-content screenSet">
<h1 class="page-title">资料不全居民</h1>
<p class="tip" v-if="notCompleteList.length">
<span class="fontGreen">{{pagination.totalRows}}</span>居民仅通过微信扫码与您绑定,但未完善姓名、手机号等关键信息。提醒居民完善信息后,您将可以对居民进行消息推送和随访计划设置。
<el-button type="primary" style="float: right;" size="small" @click="sendCompleteMessageMultiple">批量提醒</el-button>
</p>
<el-table
v-if="notCompleteList.length"
:data="notCompleteList"
:row-key="getRowKeys"
@selection-change="handleSelectionChange"
style="width: 100%;">
<el-table-column
type="selection"
width="100">
</el-table-column>
<el-table-column
prop="headimgurl"
label="头像"
width="100"
lign="center">
<template slot-scope="scope">
<img v-if="scope.row.headimgurl" class="user-photo" :src="scope.row.headimgurl"/>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column
prop="wechatUsername"
width="200"
label="微信昵称"
align="center">
<template slot-scope="scope">
<span v-if="scope.row.wechatUsername">{{scope.row.wechatUsername}}</span>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column
prop="country"
label="地区"
align="center">
<template slot-scope="scope">
<span v-if="scope.row.country">{{scope.row.country}}</span>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column
prop="wechatCreatedTime"
label="添加时间"
align="center">
<template slot-scope="scope">
<span v-if="scope.row.wechatCreatedTime">{{scope.row.wechatCreatedTime}}</span>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column
label="操作"
align="center">
<template slot-scope="scope">
<el-button v-if="scope.row.isRemind==1" type="text" @click="sendMessageSingle(scope.row)">提醒完善信息</el-button>
<el-button v-else-if="scope.row.isRemind==2" type="text" style="color: #999">提醒已发送</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination" v-if="notCompleteList.length">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pagination.pageNo"
:page-sizes="[15, 30, 50, 100]"
:page-size="pagination.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="pagination.totalRows">
</el-pagination>
</div>
<div v-if="!notCompleteList.length" class="blank-wrap">
<div class="blank-content">
<img src="../../../assets/image/no-content1.png"/>
<p>暂无资料不全居民</p>
</div>
</div>
</section>
</section>
</template>
<script>
import BreadCrumb from '../../../components/breadcrumb.vue'
import { getNotCompleteList,
sendCompleteMessage,
getNotCompleteCount,
sendCompleteMessageList,
getRedNum} from '../../../utils/patients/patientsapi'
export default {
name: "not-complete",
components: {
BreadCrumb
},
data() {
return {
curmbFirst: '居民管理',
curmbSecond: '资料不全居民',
notCompleteList: [], //未完善列表
pagination: {
pageNo: 1,
pageSize: 15,
},
getRowKeys(row) {
return row.patientId;
},
selectList: []
}
},
mounted() {
this.getRedData();
this.getNotComplete()
this.getNotCompleteNum()
},
methods: {
getRedData() {
getRedNum({
openTime: (new Date()).getTime(),
type: 1,
}).then((data) => {
if(data.code == '000000') {
// vm.redNum = data.data
}
}).catch(error => {
vm.$message.error(error)
})
},
handleSelectionChange(val) {
this.selectList = val;
},
handleSizeChange(val) {
this.pagination.pageSize = val
this.getNotComplete()
},
handleCurrentChange(val) {
this.pagination.pageNo = val
this.getNotComplete()
},
getNotComplete() { //获取未完善居民列表
const { pageNo, pageSize} = this.pagination
getNotCompleteList({
pageNo,
pageSize,
}).then((data) => {
if(data.code == "000000") {
this.notCompleteList = data.data;
}
}).catch((error) => {
this.$message({
message: error,
type: 'error'
});
})
},
sendMessageSingle(item) { //发送单个提醒
sendCompleteMessage({
qrcodeType: 1,
patientId: item.patientId,
}).then((data) => {
if(data.code == "000000") {
this.$message({
message: '已向居民发送提醒',
type: 'success'
});
this.getNotComplete();
this.getNotCompleteNum();
}else {
this.$message({
message: data.message,
type: 'error'
});
}
}).catch((error) => {
this.$message({
message: error,
type: 'error'
});
})
},
sendCompleteMessageMultiple() {
if(!this.selectList.length) {
this.$message({
message: '请选择居民',
type: 'warning'
});
return;
}
let patientIdList = [];
this.selectList.forEach(item => {
patientIdList.push(item.patientId)
});
sendCompleteMessageList({
qrcodeType: 1,
patientIds: patientIdList,
}).then((data) => {
if(data.code == "000000") {
this.$message({
message: '已向居民发送提醒',
type: 'success'
});
this.getNotComplete();
this.getNotCompleteNum();
}else {
this.$message({
message: data.message,
type: 'error'
});
}
}).catch((error) => {
this.$message({
message: error,
type: 'error'
});
})
},
getNotCompleteNum() {
getNotCompleteCount().then((data) => {
if(data.code == "000000") {
this.pagination.totalRows = data.data;
}
}).catch((error) => {
this.$message({
message: error,
type: 'error'
});
})
}
}
}
</script>
<style lang="scss">
.not-complete-wrap {
.not-complete-content {
padding: 30px;
background: #ffffff;
.tip {
font-size: 12px;
padding: 30px 0;
line-height: 32px;
}
.page-title {
font-size: 20px;
color: #F1E2F3D;
padding-bottom: 20px;
border-bottom: 1px solid #efefef;
}
.blank-wrap {
position: relative;
@media screen and (min-width:1240px) and (max-width:1545px){
height: 300px;
}
@media screen and (min-width:1545px) and (max-width:1600px){
height: 500px;
}
@media screen and (min-width:1600px){
height: 600px;
}
.blank-content {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
text-align: center;
img {
width: 100px;
}
p {
font-size: 20px;
color: #999;
}
}
}
.user-photo {
border-radius: 50%;
width: 40px;
}
}
/*重置表格选择框*/
.el-checkbox__input.is-checked .el-checkbox__inner, .el-checkbox__input.is-indeterminate .el-checkbox__inner {
border-color: #449284;
background-color: #449284;
}
.el-checkbox__inner {
border-color: #DCDFE6!important;
}
.el-checkbox__input.is-focus,.el-checkbox__inner:hover,.el-checkbox__inner.is-focus {
border-color: #449284!important;
}
.el-button--text {
color: #449284;
}
.fontGreen {
color: #449284;
}
.el-pagination.is-background .el-pager li:not(.disabled).active {
background: #449284 !important;
}
}
</style>
...@@ -109,12 +109,22 @@ ...@@ -109,12 +109,22 @@
></el-pagination> ></el-pagination>
</div> </div>
<el-dialog title :visible.sync="dialog.show" width="30%" center> <el-dialog title :visible.sync="dialog.show" width="30%" center>
<p v-if="numL3 > 1" class="dialog-p"> <!-- <p v-if="numL3 > 1" class="dialog-p">
确认将{{ dialog.role }} 确认将{{ dialog.role }}
<span class="user-name">"{{ dialog.name }}"</span> <span class="user-name">"{{ dialog.name }}"</span>
{{ dialog.option }}吗?" {{ dialog.option }}吗?"
</p> </p>
<p v-else >该用户为此机构仅有的次级负责人,确认需要降级吗?</p> <p v-else >该用户为此机构仅有的次级负责人,确认需要降级吗?</p> -->
<p v-if="numL3 <= 1 && scopeRow.projeceRole == 'L3'" class="dialog-p">
该用户为此机构仅有的次级负责人,确认需要降级吗?
</p>
<p v-else>
确认将{{ dialog.role }}
<span class="user-name">"{{ dialog.name }}"</span>
{{ dialog.option }}吗?"
</p>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button type="default" size="small" @click="dialog.show = false">取消</el-button> <el-button type="default" size="small" @click="dialog.show = false">取消</el-button>
<el-button type="primary" size="small" @click="changeRole()">确定</el-button> <el-button type="primary" size="small" @click="changeRole()">确定</el-button>
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册