Browse Source

用户详情

xiuli.gao 2 years ago
parent
commit
53723e1e11

BIN
.DS_Store


+ 31 - 28
project/src/assets/config/interface_api.js

@@ -165,35 +165,38 @@ var api = {
165 165
   warn_djuserList: "/api/warn/djuserList",
166 166
   warn_groupEableOp: "/api/warn/groupEableOp",
167 167
 
168
-  channel_groupList:'/api/sq/sqGroupList',
169
-  channel_addGroup:'/api/sq/addSqgroup',
170
-  channel_editGroup:'/api/sq/editSqgroup',
171
-  channel_sortGroup:'/api/sq/editGroupSort',
172
-  channel_deleGroup:'/api/sq/delSqGroup',
173
-  channel_createCode:'/api/sq/addSourceQrcode',
174
-  channel_codeList:'/api/sq/sourceQrcodeList',
175
-  channel_codeDetial:'/api/sq/sourceQrcodeDetail',
176
-  channel_codeEdit:'/api/sq/editSourceQrcode',
177
-  channel_code_forbidden:'/api/sq/delSourceQrcode',
178
-  channel_dataView:'/api/sq/dataView',
179
-  channel_dataTrend:'/api/sq/dataTrend',
180
-  channel_trend_customerList:'/api/sq/customerList',
181
-  channel_trend_staffList:'/api/sq/staffList',
168
+  channel_groupList: '/api/sq/sqGroupList',
169
+  channel_addGroup: '/api/sq/addSqgroup',
170
+  channel_editGroup: '/api/sq/editSqgroup',
171
+  channel_sortGroup: '/api/sq/editGroupSort',
172
+  channel_deleGroup: '/api/sq/delSqGroup',
173
+  channel_createCode: '/api/sq/addSourceQrcode',
174
+  channel_codeList: '/api/sq/sourceQrcodeList',
175
+  channel_codeDetial: '/api/sq/sourceQrcodeDetail',
176
+  channel_codeEdit: '/api/sq/editSourceQrcode',
177
+  channel_code_forbidden: '/api/sq/delSourceQrcode',
178
+  channel_dataView: '/api/sq/dataView',
179
+  channel_dataTrend: '/api/sq/dataTrend',
180
+  channel_trend_customerList: '/api/sq/customerList',
181
+  channel_trend_staffList: '/api/sq/staffList',
182 182
 
183
-  radar_addGroup:'/api/radar/radarGroupCreate',
184
-  radar_groupList:'/api/radar/radarGroupList',
185
-  radar_editGroup:'/api/radar/radarGroupUpdate',
186
-  radar_sortGroup:'/api/radar/radarGroupSortUpdate',
187
-  radar_deleGroup:'/api/radar/radarGroupDelete',
188
-  radar_addRadar:'/api/radar/radarCreate',
189
-  radar_radarList:'/api/radar/radarList',
190
-  radar_radarDetail:'/api/radar/radarDetail',
191
-  radar_radarEdit:'/api/radar/radarUpdate',
192
-  radar_radarSort:'/api/radar/radarSortUpdate',
193
-  radar_radarDele:'/api/radar/radarDelete',
194
-  radar_uploadFileToOss:'/api/material/uploadFileToOss',
195
-  radar_dataView:'/api/radar/dataStatisticsTotal',
196
-  radar_dataView_list:'/api/radar/dataStatisticsList',
183
+  radar_addGroup: '/api/radar/radarGroupCreate',
184
+  radar_groupList: '/api/radar/radarGroupList',
185
+  radar_editGroup: '/api/radar/radarGroupUpdate',
186
+  radar_sortGroup: '/api/radar/radarGroupSortUpdate',
187
+  radar_deleGroup: '/api/radar/radarGroupDelete',
188
+  radar_addRadar: '/api/radar/radarCreate',
189
+  radar_radarList: '/api/radar/radarList',
190
+  radar_radarDetail: '/api/radar/radarDetail',
191
+  radar_radarEdit: '/api/radar/radarUpdate',
192
+  radar_radarSort: '/api/radar/radarSortUpdate',
193
+  radar_radarDele: '/api/radar/radarDelete',
194
+  radar_uploadFileToOss: '/api/material/uploadFileToOss',
195
+  radar_dataView: '/api/radar/dataStatisticsTotal',
196
+  radar_dataView_list: '/api/radar/dataStatisticsList',
197
+  portrait_confList: '/api/portrait/confList',
198
+  portrait_confOperate: '/api/portrait/confOperate',
199
+  portrait_confAdd: "/api/portrait/confAdd",
197 200
 
198 201
 };
199 202
 

+ 2 - 1
project/src/components/customOperate/sideTool/index.vue

@@ -24,7 +24,8 @@ export default {
24 24
   methods: {
25 25
     changeType (type) {
26 26
       this.type = type
27
-    }
27
+    },
28
+    
28 29
   }
29 30
 }
30 31
 </script>

File diff suppressed because it is too large
+ 112 - 18
project/src/components/customOperate/sideTool/userPortrait.vue


File diff suppressed because it is too large
+ 0 - 1
qwh5/dist/css/app.5ebce7c5.css


File diff suppressed because it is too large
+ 1 - 0
qwh5/dist/css/app.e99fee3e.css


File diff suppressed because it is too large
+ 1 - 1
qwh5/dist/css/chunk-vendors.01b3e040.css


File diff suppressed because it is too large
+ 1 - 0
qwh5/dist/css/userPortrait.569078c9.css


BIN
qwh5/dist/img/dpNoData.572b0f6d.png


File diff suppressed because it is too large
+ 1 - 1
qwh5/dist/index.html


qwh5/dist/js/about.8f3dac29.js → qwh5/dist/js/about.57d7f600.js


File diff suppressed because it is too large
+ 1 - 0
qwh5/dist/js/app.6a55cdfe.js


File diff suppressed because it is too large
+ 0 - 1
qwh5/dist/js/app.7cdff7c6.js


File diff suppressed because it is too large
+ 48 - 0
qwh5/dist/js/chunk-vendors.b4602760.js


File diff suppressed because it is too large
+ 0 - 41
qwh5/dist/js/chunk-vendors.eb81d30b.js


File diff suppressed because it is too large
+ 1 - 0
qwh5/dist/js/demo.853f5d45.js


File diff suppressed because it is too large
+ 1 - 0
qwh5/dist/js/userPortrait.6cd5ccc5.js


+ 131 - 1
qwh5/package-lock.json

@@ -8,13 +8,14 @@
8 8
       "name": "qwh5",
9 9
       "version": "0.1.0",
10 10
       "dependencies": {
11
-        "@element-plus/icons-vue": "^2.0.6",
12 11
         "axios": "^0.27.2",
13 12
         "core-js": "^3.8.3",
14 13
         "element-plus": "^2.2.5",
14
+        "md5": "^2.3.0",
15 15
         "sass": "^1.52.3",
16 16
         "sass-loader": "^13.0.0",
17 17
         "save": "^2.5.0",
18
+        "vant": "^3.5.2",
18 19
         "vue": "^3.2.13",
19 20
         "vue-class-component": "^8.0.0-0",
20 21
         "vue-router": "^4.0.3",
@@ -1865,6 +1866,15 @@
1865 1866
       "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==",
1866 1867
       "dev": true
1867 1868
     },
1869
+    "node_modules/@popperjs/core": {
1870
+      "version": "2.11.5",
1871
+      "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz",
1872
+      "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==",
1873
+      "funding": {
1874
+        "type": "opencollective",
1875
+        "url": "https://opencollective.com/popperjs"
1876
+      }
1877
+    },
1868 1878
     "node_modules/@sideway/address": {
1869 1879
       "version": "4.1.4",
1870 1880
       "resolved": "https://registry.npmmirror.com/@sideway/address/-/address-4.1.4.tgz",
@@ -2193,6 +2203,24 @@
2193 2203
         "@types/node": "*"
2194 2204
       }
2195 2205
     },
2206
+    "node_modules/@vant/icons": {
2207
+      "version": "1.8.0",
2208
+      "resolved": "https://registry.npmjs.org/@vant/icons/-/icons-1.8.0.tgz",
2209
+      "integrity": "sha512-sKfEUo2/CkQFuERxvkuF6mGQZDKu3IQdj5rV9Fm0weJXtchDSSQ+zt8qPCNUEhh9Y8shy5PzxbvAfOOkCwlCXg=="
2210
+    },
2211
+    "node_modules/@vant/popperjs": {
2212
+      "version": "1.2.1",
2213
+      "resolved": "https://registry.npmjs.org/@vant/popperjs/-/popperjs-1.2.1.tgz",
2214
+      "integrity": "sha512-qzQlrPE4aOsBzfrktDVwzQy/QICCTKifmjrruhY58+Q2fobUYp/T9QINluIafzsD3VJwgP8+HFVLBsyDmy3VZQ==",
2215
+      "dependencies": {
2216
+        "@popperjs/core": "^2.9.2"
2217
+      }
2218
+    },
2219
+    "node_modules/@vant/use": {
2220
+      "version": "1.4.1",
2221
+      "resolved": "https://registry.npmjs.org/@vant/use/-/use-1.4.1.tgz",
2222
+      "integrity": "sha512-YonNN0SuJLEJuqdoMcVAJm2JUZWkHNrW81QzeF6FLyG5HFUGlmTM5Sby7gdS3Z/8UDMlkWRQpJxBWbmVzmUWxQ=="
2223
+    },
2196 2224
     "node_modules/@vue/babel-helper-vue-jsx-merge-props": {
2197 2225
       "version": "1.2.1",
2198 2226
       "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz",
@@ -3792,6 +3820,14 @@
3792 3820
         "node": ">=6"
3793 3821
       }
3794 3822
     },
3823
+    "node_modules/charenc": {
3824
+      "version": "0.0.2",
3825
+      "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
3826
+      "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==",
3827
+      "engines": {
3828
+        "node": "*"
3829
+      }
3830
+    },
3795 3831
     "node_modules/chokidar": {
3796 3832
       "version": "3.5.3",
3797 3833
       "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz",
@@ -4327,6 +4363,14 @@
4327 4363
         "semver": "bin/semver"
4328 4364
       }
4329 4365
     },
4366
+    "node_modules/crypt": {
4367
+      "version": "0.0.2",
4368
+      "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
4369
+      "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==",
4370
+      "engines": {
4371
+        "node": "*"
4372
+      }
4373
+    },
4330 4374
     "node_modules/css-declaration-sorter": {
4331 4375
       "version": "6.2.2",
4332 4376
       "resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz",
@@ -6244,6 +6288,11 @@
6244 6288
         "node": ">=8"
6245 6289
       }
6246 6290
     },
6291
+    "node_modules/is-buffer": {
6292
+      "version": "1.1.6",
6293
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
6294
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
6295
+    },
6247 6296
     "node_modules/is-ci": {
6248 6297
       "version": "1.2.1",
6249 6298
       "resolved": "https://registry.npmmirror.com/is-ci/-/is-ci-1.2.1.tgz",
@@ -6933,6 +6982,16 @@
6933 6982
       "resolved": "https://registry.npmmirror.com/map-stream/-/map-stream-0.0.7.tgz",
6934 6983
       "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ=="
6935 6984
     },
6985
+    "node_modules/md5": {
6986
+      "version": "2.3.0",
6987
+      "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
6988
+      "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
6989
+      "dependencies": {
6990
+        "charenc": "0.0.2",
6991
+        "crypt": "0.0.2",
6992
+        "is-buffer": "~1.1.6"
6993
+      }
6994
+    },
6936 6995
     "node_modules/mdn-data": {
6937 6996
       "version": "2.0.14",
6938 6997
       "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz",
@@ -9972,6 +10031,19 @@
9972 10031
         "spdx-expression-parse": "^3.0.0"
9973 10032
       }
9974 10033
     },
10034
+    "node_modules/vant": {
10035
+      "version": "3.5.2",
10036
+      "resolved": "https://registry.npmjs.org/vant/-/vant-3.5.2.tgz",
10037
+      "integrity": "sha512-RR2SEE/ZHH30Z7a9iLBxskvSzs8rwaU2vDhR7HtBjgXreADzGjU75XxV2ogwrtaj2YU1IaBYC8xXjn3VXRxREw==",
10038
+      "dependencies": {
10039
+        "@vant/icons": "^1.8.0",
10040
+        "@vant/popperjs": "^1.2.1",
10041
+        "@vant/use": "^1.4.1"
10042
+      },
10043
+      "peerDependencies": {
10044
+        "vue": "^3.0.0"
10045
+      }
10046
+    },
9975 10047
     "node_modules/vary": {
9976 10048
       "version": "1.1.2",
9977 10049
       "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz",
@@ -12206,6 +12278,11 @@
12206 12278
       "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==",
12207 12279
       "dev": true
12208 12280
     },
12281
+    "@popperjs/core": {
12282
+      "version": "2.11.5",
12283
+      "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz",
12284
+      "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw=="
12285
+    },
12209 12286
     "@sideway/address": {
12210 12287
       "version": "4.1.4",
12211 12288
       "resolved": "https://registry.npmmirror.com/@sideway/address/-/address-4.1.4.tgz",
@@ -12509,6 +12586,24 @@
12509 12586
         "@types/node": "*"
12510 12587
       }
12511 12588
     },
12589
+    "@vant/icons": {
12590
+      "version": "1.8.0",
12591
+      "resolved": "https://registry.npmjs.org/@vant/icons/-/icons-1.8.0.tgz",
12592
+      "integrity": "sha512-sKfEUo2/CkQFuERxvkuF6mGQZDKu3IQdj5rV9Fm0weJXtchDSSQ+zt8qPCNUEhh9Y8shy5PzxbvAfOOkCwlCXg=="
12593
+    },
12594
+    "@vant/popperjs": {
12595
+      "version": "1.2.1",
12596
+      "resolved": "https://registry.npmjs.org/@vant/popperjs/-/popperjs-1.2.1.tgz",
12597
+      "integrity": "sha512-qzQlrPE4aOsBzfrktDVwzQy/QICCTKifmjrruhY58+Q2fobUYp/T9QINluIafzsD3VJwgP8+HFVLBsyDmy3VZQ==",
12598
+      "requires": {
12599
+        "@popperjs/core": "^2.9.2"
12600
+      }
12601
+    },
12602
+    "@vant/use": {
12603
+      "version": "1.4.1",
12604
+      "resolved": "https://registry.npmjs.org/@vant/use/-/use-1.4.1.tgz",
12605
+      "integrity": "sha512-YonNN0SuJLEJuqdoMcVAJm2JUZWkHNrW81QzeF6FLyG5HFUGlmTM5Sby7gdS3Z/8UDMlkWRQpJxBWbmVzmUWxQ=="
12606
+    },
12512 12607
     "@vue/babel-helper-vue-jsx-merge-props": {
12513 12608
       "version": "1.2.1",
12514 12609
       "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz",
@@ -13733,6 +13828,11 @@
13733 13828
       "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==",
13734 13829
       "dev": true
13735 13830
     },
13831
+    "charenc": {
13832
+      "version": "0.0.2",
13833
+      "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
13834
+      "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA=="
13835
+    },
13736 13836
     "chokidar": {
13737 13837
       "version": "3.5.3",
13738 13838
       "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz",
@@ -14138,6 +14238,11 @@
14138 14238
         }
14139 14239
       }
14140 14240
     },
14241
+    "crypt": {
14242
+      "version": "0.0.2",
14243
+      "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
14244
+      "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow=="
14245
+    },
14141 14246
     "css-declaration-sorter": {
14142 14247
       "version": "6.2.2",
14143 14248
       "resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz",
@@ -15541,6 +15646,11 @@
15541 15646
         "binary-extensions": "^2.0.0"
15542 15647
       }
15543 15648
     },
15649
+    "is-buffer": {
15650
+      "version": "1.1.6",
15651
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
15652
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
15653
+    },
15544 15654
     "is-ci": {
15545 15655
       "version": "1.2.1",
15546 15656
       "resolved": "https://registry.npmmirror.com/is-ci/-/is-ci-1.2.1.tgz",
@@ -16065,6 +16175,16 @@
16065 16175
       "resolved": "https://registry.npmmirror.com/map-stream/-/map-stream-0.0.7.tgz",
16066 16176
       "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ=="
16067 16177
     },
16178
+    "md5": {
16179
+      "version": "2.3.0",
16180
+      "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
16181
+      "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
16182
+      "requires": {
16183
+        "charenc": "0.0.2",
16184
+        "crypt": "0.0.2",
16185
+        "is-buffer": "~1.1.6"
16186
+      }
16187
+    },
16068 16188
     "mdn-data": {
16069 16189
       "version": "2.0.14",
16070 16190
       "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz",
@@ -18273,6 +18393,16 @@
18273 18393
         "spdx-expression-parse": "^3.0.0"
18274 18394
       }
18275 18395
     },
18396
+    "vant": {
18397
+      "version": "3.5.2",
18398
+      "resolved": "https://registry.npmjs.org/vant/-/vant-3.5.2.tgz",
18399
+      "integrity": "sha512-RR2SEE/ZHH30Z7a9iLBxskvSzs8rwaU2vDhR7HtBjgXreADzGjU75XxV2ogwrtaj2YU1IaBYC8xXjn3VXRxREw==",
18400
+      "requires": {
18401
+        "@vant/icons": "^1.8.0",
18402
+        "@vant/popperjs": "^1.2.1",
18403
+        "@vant/use": "^1.4.1"
18404
+      }
18405
+    },
18276 18406
     "vary": {
18277 18407
       "version": "1.1.2",
18278 18408
       "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz",

+ 2 - 1
qwh5/package.json

@@ -7,13 +7,14 @@
7 7
     "build": "vue-cli-service build"
8 8
   },
9 9
   "dependencies": {
10
-    "@element-plus/icons-vue": "^2.0.6",
11 10
     "axios": "^0.27.2",
12 11
     "core-js": "^3.8.3",
13 12
     "element-plus": "^2.2.5",
13
+    "md5": "^2.3.0",
14 14
     "sass": "^1.52.3",
15 15
     "sass-loader": "^13.0.0",
16 16
     "save": "^2.5.0",
17
+    "vant": "^3.5.2",
17 18
     "vue": "^3.2.13",
18 19
     "vue-class-component": "^8.0.0-0",
19 20
     "vue-router": "^4.0.3",

BIN
qwh5/src/assets/img/dpNoData.png


+ 20 - 0
qwh5/src/components/noData.vue

@@ -0,0 +1,20 @@
1
+<template>
2
+  <div>
3
+    <img src="@/assets/img/dpNoData.png" class="dpNoData" alt="">
4
+    <p class="hint">暂无数据</p>
5
+  </div>
6
+</template>
7
+<style lang="scss" scoped>
8
+.dpNoData{
9
+  width:50%;
10
+  margin:auto;
11
+  display: block;
12
+}
13
+.hint{
14
+  font-size: 13px;
15
+  color:#888;
16
+  line-height: 20px;
17
+  text-align: center;
18
+  margin-top:20px;
19
+}
20
+</style>

+ 80 - 44
qwh5/src/components/tag.vue

@@ -1,59 +1,95 @@
1 1
 <template>
2
-  <div>
3
-    zujian 
2
+  <div class="tag_cantiner">
3
+    <div v-for="(item,index) in tagList" :key="index+'tag'" class="tagBox">
4
+      <h3 class="tagName">{{item.group_name}}</h3>
5
+      <div class="tagItemBox">
6
+        <div :class="['tagItem',(selectedTag.filter((v)=>{return v.tag_md5 == tag.tag_md5})).length>0?'active':'']" v-for="(tag) in item.tag_list" :key="tag.tag_id" @click="tagEvent(tag)">{{tag.tag_name}}</div>
7
+      </div>
8
+    </div>
4 9
   </div>
5 10
 </template>
6 11
 <script lang="ts" setup>
7
-  import { onBeforeMount, ref, reactive, getCurrentInstance } from 'vue';
8
-  // import service from '@/utils/axios'
12
+  import { json } from 'stream/consumers';
13
+import { onBeforeMount, ref, reactive, getCurrentInstance } from 'vue';
14
+  const emits= defineEmits<{///*ts专有*/
15
+    (e: 'closeTag', num: number): void
16
+  }>()
17
+  const props = defineProps({
18
+    labelList :{
19
+      type: Array,
20
+      default: []
21
+    }
22
+  })
9 23
   const { proxy } = getCurrentInstance(); //来获取全局 globalProperties 中配置的信息
24
+  const tagList = ref([])
25
+  const selectedTag = ref([]);//选中的标签
26
+  selectedTag.value = JSON.parse(JSON.stringify(props.labelList));
27
+  
10 28
     //dom挂载后
11
-// console.log(service);
12 29
   onBeforeMount(() => {//组件挂载之前
13 30
     get_tag()
14 31
   });
15
-
16
-  function get_tag(){
17
-    proxy.$axios.get("/api/customer/customerDetailTagList", {
18
-      admin_id:1,
19
-      ttl:'1656039803',
20
-      sign:'c98c263c5dd590750a6ec3894d283bc7',
21
-      view_type:'helper',
22
-      sys_group_id:2,
23
-      corpid:'ww27940915d8fbfbe6',
24
-      customer_id:'72675',
25
-      user_id:'if'
26
-    })
32
+  function tagEvent(data){//点击标签选择
33
+    let arr:any = selectedTag.value;
34
+    if(arr.filter((v)=>{
35
+      return v.tag_md5 == data.tag_md5
36
+    }).length>0){
37
+      arr = arr.filter((v)=>{
38
+        return v.tag_md5 != data.tag_md5
39
+      })
40
+    }else{
41
+      arr.push(data)
42
+    }
43
+    selectedTag.value = arr;
44
+    emits('closeTag',arr)
45
+  }
46
+  function get_tag(){//获取所有标签
47
+    (proxy as any).$axios.post({url:"/api/h5/portrait/tagList", data:{
48
+      sign:'64daf0d070a2fc5fdf7de45d8566cc4d',
49
+      corpid:'wwc8d3e33f8e096671',
50
+      external_userid:'wmezvKNwAAF17OWc13Hg6X0ob31ijZmg',
51
+      user_id:'bc85094e2cfd56a8bd6cd726bd98b14b'
52
+    },errToast:true})
27 53
     .then((res) => {
28 54
       //请求成功
29
-      console.log(res)
55
+      tagList.value = res.rst;
30 56
     })
31 57
     .catch( err => {
32
-      console.log(err)
33 58
     })
34
-
35
-    // service.get('',{
36
-     
37
-    // },{toastFlag:false}).then((res)=>{
38
-    //   console.log(res,'res11111');
39
-      
40
-    // })
41
-    // request({
42
-    //   url: '/api/customer/customerDetailTagList',
43
-    //   method: 'get',
44
-    //   data:{
45
-    //     admin_id:1,
46
-    //     ttl:'1656039803',
47
-    //     sign:'c98c263c5dd590750a6ec3894d283bc7',
48
-    //     view_type:'helper',
49
-    //     sys_group_id:2,
50
-    //     corpid:'ww27940915d8fbfbe6',
51
-    //     customer_id:'72675',
52
-    //     user_id:'if'
53
-    //   }
54
-    // }).then((res)=>{
55
-    //   console.log(res,'res11111');
56
-      
57
-    // })
58 59
   }
59
-</script>
60
+</script>
61
+<style lang="scss" scoped>
62
+.tag_cantiner{
63
+  padding:20px;
64
+  max-height: 60vh;
65
+  overflow-y: auto;
66
+}
67
+.tagBox{
68
+  .tagName{
69
+    font-size: 14px;
70
+    font-weight: bold;
71
+    color: #444;
72
+  }
73
+  .tagItemBox{
74
+    display: flex;
75
+    align-items: center;
76
+    flex-wrap: wrap;
77
+    margin-bottom: 20px;
78
+    .tagItem{
79
+      padding: 2px 10px;
80
+      line-height: 20px;
81
+      text-align: center;
82
+      border: 1px solid #d2d2d2;
83
+      margin-right: 8px;
84
+      margin-top: 10px;
85
+      font-size: 12px;
86
+      border-radius: 3px;
87
+      &.active{
88
+        background-color: rgba(0,179,138,.2);
89
+        border: 1px solid rgba(0,179,138,.4);
90
+        color: #00b38a;
91
+      }
92
+    }
93
+  }
94
+}
95
+</style>

+ 10 - 7
qwh5/src/main.ts

@@ -4,16 +4,19 @@ import router from './router'
4 4
 import store from './store'
5 5
 import ElementPlus from 'element-plus'
6 6
 import 'element-plus/dist/index.css'
7
-import * as ElementPlusIconsVue from '@element-plus/icons-vue'
7
+// import * as ElementPlusIconsVue from '@element-plus/icons-vue'
8
+import { Icon } from 'vant';
9
+import 'vant/lib/index.css';
8 10
 import './styles/index.scss'
9 11
 import axios from './utils/axios';
12
+import getWxConfig from './utils/getWxConfig';
10 13
 const app = createApp(App)
11 14
 
15
+// for (const [key, component] of Object.entries(ElementPlusIconsVue)) {//引入elemenet全部图标
16
+//   app.component(key, component)
17
+// }
12 18
 
13
-for (const [key, component] of Object.entries(ElementPlusIconsVue)) {//引入elemenet全部图标
14
-  app.component(key, component)
15
-}
19
+app.use(Icon).use(ElementPlus).use(store).use(router).mount('#app')
16 20
 
17
-app.use(ElementPlus).use(store).use(router).mount('#app')
18
-
19
-app.config.globalProperties.$axios = axios;//全局挂载方法
21
+app.config.globalProperties.$axios = axios;//全局挂载方法
22
+app.config.globalProperties.$getWxConfig = getWxConfig;//全局挂载方法

+ 1 - 2
qwh5/src/shims-vue.d.ts

@@ -1,8 +1,7 @@
1 1
 /* eslint-disable */
2 2
 // import {DefineComponent} from "vue";
3
-
4 3
 declare module '*.vue' {
5
-  import  { DefineComponent } from 'vue'
4
+  import { DefineComponent } from 'vue'
6 5
   const component: DefineComponent<{}, {}, any>
7 6
   export default component
8 7
 }

+ 4 - 0
qwh5/src/styles/index.scss

@@ -5,3 +5,7 @@
5 5
 html {
6 6
   touch-action: manipulation;
7 7
 }
8
+
9
+.van-popup-background-color{
10
+  background-color: red;
11
+}

+ 62 - 27
qwh5/src/utils/axios.ts

@@ -2,10 +2,11 @@ import axios, { AxiosInstance } from 'axios'
2 2
 // eslint-disable-next-line
3 3
 // import { getToken, getCsrfToken } from '@/utils/auth'
4 4
 // import store from '@/store'
5
+import { Toast } from 'vant'
6
+import md5 from 'md5';
5 7
 
6 8
 // eslint-disable-next-line
7 9
 const config = require('../../config')
8
-console.log('process.env.NODE_ENV', process.env.NODE_ENV);
9 10
 
10 11
 const { baseURL } = config[process.env.NODE_ENV]
11 12
 
@@ -19,11 +20,15 @@ const service: AxiosInstance = axios.create({
19 20
 // 请求拦截器
20 21
 service.interceptors.request.use(
21 22
   config => {
22
-    console.log(config, '99999')
23 23
     // if (store.state.user.token) {
24 24
     //   config.headers.Authorization = `Bearer ${getToken()}`
25 25
     // }
26 26
     // config.headers['x-csrf-token'] = getCsrfToken()
27
+    if (config.method == "post") {
28
+      config.data = Object.assign((config.data ? config.data : {}))
29
+    } else {
30
+      config.params = Object.assign((config.params ? config.params : {}))
31
+    }
27 32
     return config
28 33
   },
29 34
   error => {
@@ -35,12 +40,7 @@ service.interceptors.request.use(
35 40
 // 响应拦截器
36 41
 service.interceptors.response.use(
37 42
   response => {
38
-    const res = response.data
39
-    if (res.errno !== 0) {
40
-      return Promise.reject(res)
41
-    } else {
42
-      return response
43
-    }
43
+    return response
44 44
   },
45 45
   error => {
46 46
     //这里是返回状态码不为200时候的错误处理
@@ -107,35 +107,70 @@ export default {
107 107
    * @param {Object} data 
108 108
    * @returns Promise
109 109
    */
110
-  post(url, data) {
110
+  post(url, data, errToast?: any) {
111
+    let ksort_data: any = ksort(data);
112
+    let str = '';
113
+    for (let i in ksort_data) {
114
+      str = str + i + '=' + ksort_data[i];
115
+    }
116
+    let sign = md5(md5(str) + 'ur904wtr5pfctaw9')
117
+    let params = Object.assign({ sign: sign }, ksort_data)
111 118
     return new Promise((resolve, reject) => {
112 119
       service({
113 120
         method: 'post',
114 121
         url,
115
-        data: data,
116
-      })
117
-        .then(res => {
122
+        data: params,
123
+      }).then(res => {
124
+        if (res.data.errno == 0) {
125
+          resolve(res.data)
126
+        } else {
118 127
           resolve(res.data)
119
-        })
120
-        .catch(err => {
121
-          reject(err)
122
-        });
128
+          if (errToast) {
129
+            Toast(res.data.err)
130
+          }
131
+        }
132
+      }).catch(err => {
133
+        console.log(err.message, 'err');
134
+        Toast(err.message)
135
+        reject(err)
136
+      });
123 137
     })
124 138
   },
125 139
 
126
-  get(url, data) {
140
+  get(url, data, errToast?: any) {
141
+    let ksort_data: any = ksort(data);
142
+    let str = '';
143
+    for (let i in ksort_data) {
144
+      str = str + i + '=' + ksort_data[i];
145
+    }
146
+    let sign = md5(md5(str) + 'ur904wtr5pfctaw9')
147
+    let params = Object.assign({ sign: sign }, ksort_data)
127 148
     return new Promise((resolve, reject) => {
128
-      service({
129
-        method: 'get',
130
-        url,
131
-        params: data,
132
-      })
133
-        .then(res => {
149
+      service.get(url, {
150
+        params: params,
151
+      }).then(res => {
152
+        if (res.data.errno == 0) {
134 153
           resolve(res.data)
135
-        })
136
-        .catch(err => {
137
-          reject(err)
138
-        })
154
+        } else {
155
+          resolve(res.data)
156
+          if (errToast) {
157
+            Toast(res.data.err)
158
+          }
159
+        }
160
+      }).catch(err => {
161
+        Toast(err.message)
162
+        reject(err)
163
+      })
139 164
     })
140 165
   }
141 166
 };
167
+
168
+function ksort(o) {//使用js代码实现类似php的ksort方法 ---- 按键排序
169
+  let sorted = {},
170
+    keys = Object.keys(o);
171
+  keys.sort();
172
+  keys.forEach((key) => {
173
+    sorted[key] = o[key];
174
+  })
175
+  return sorted;
176
+}

+ 78 - 0
qwh5/src/utils/getWxConfig.ts

@@ -0,0 +1,78 @@
1
+import axios from './axios';
2
+function getAuthInfo(cb) {//jsapi通用授权数据
3
+  console.log('0000', 'corpid', getQueryString('corpid'));
4
+
5
+  axios.post('/api/h5/auth/commonAuthData', {
6
+    corpid: getQueryString('corpid'),
7
+    url: location.href.split('#')[0],
8
+  }).then((res: any) => {
9
+    initQYConfig(res.rst, cb);
10
+  }).catch((err) => {
11
+    console.log(err, 'err')
12
+  })
13
+}
14
+
15
+function initQYConfig(authInfo, cb) { // 企业
16
+  console.log('11111');
17
+  wx.config({
18
+    beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
19
+    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
20
+    appId: authInfo.corpid, // 必填,企业微信的corpID
21
+    timestamp: authInfo.timestamp, // 必填,生成签名的时间戳
22
+    nonceStr: authInfo.nonce_str, // 必填,生成签名的随机串
23
+    signature: authInfo.signature, // 必填,签名,见 附录-JS-SDK使用权限签名算法 企业签名
24
+    jsApiList: ['getCurExternalContact'] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
25
+  })
26
+  wx.ready(function () {
27
+    initYYConfig(authInfo, cb)
28
+  })
29
+  wx.error(function (res) {
30
+    // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
31
+    console.log(res, 'QYerror')
32
+  })
33
+}
34
+
35
+function initYYConfig(authInfo, cb) { // 应用
36
+  console.log('222');
37
+  wx.agentConfig({
38
+    corpid: authInfo.corpid, // 必填,企业微信的corpid,必须与当前登录的企业一致
39
+    agentid: authInfo.agent_id, // 必填,企业微信的应用id (e.g. 1000247)
40
+    timestamp: authInfo.timestamp, // 必填,生成签名的时间戳
41
+    nonceStr: authInfo.nonce_str, // 必填,生成签名的随机串
42
+    signature: authInfo.app_signature, // 必填,签名,见附录-JS-SDK使用权限签名算法  应用签名
43
+    jsApiList: ['getCurExternalContact'], // 必填,传入需要使用的接口名称
44
+    success: function (res) {
45
+      console.log('333')
46
+      cb ? cb() : ''
47
+    },
48
+    fail: function (res) {
49
+      console.log(res);
50
+
51
+      if (res.errMsg.indexOf('function not exist') > -1) {
52
+        alert('版本过低请升级')
53
+      }
54
+    }
55
+  })
56
+}
57
+
58
+
59
+export default getAuthInfo
60
+// return;
61
+
62
+
63
+//获取地址栏参数,name:参数名称
64
+function getQueryString(name?: string) {
65
+  const url = window.location.href
66
+  const theRequest: any = {}
67
+  if (url.indexOf('?') != -1) {
68
+    const str = url.split('?')[1]
69
+    const strs = str.split('&')
70
+    for (let i = 0; i < strs.length; i++) {
71
+      theRequest[strs[i].split('=')[0]] = decodeURIComponent(strs[i].split('=')[1])
72
+    }
73
+  }
74
+  if (!name) {
75
+    return theRequest
76
+  }
77
+  return theRequest[name] ? theRequest[name] : ''
78
+}

+ 0 - 3
qwh5/src/utils/request.ts

@@ -1,3 +0,0 @@
1
-import axios from "./axios";
2
-// https://www.jianshu.com/p/8ec5b1dfed8a
3
-

File diff suppressed because it is too large
+ 145 - 42
qwh5/src/views/userPortrait.vue


+ 14 - 0
qwh5/vue.config.js

@@ -1,4 +1,9 @@
1 1
 const { defineConfig } = require('@vue/cli-service')
2
+const path = require('path')
3
+
4
+function resolve (dir) {
5
+  return path.join(__dirname, dir)
6
+}
2 7
 module.exports = defineConfig({
3 8
   transpileDependencies: true,
4 9
   devServer: {
@@ -16,4 +21,13 @@ module.exports = defineConfig({
16 21
   publicPath: process.env.NODE_ENV === 'production' ? './' : '/',
17 22
   outputDir: 'dist',
18 23
   productionSourceMap: false,//打包不到.map文件
24
+  configureWebpack: {
25
+    // provide the app's title in webpack's name field, so that
26
+    // it can be accessed in index.html to inject the correct title.
27
+    resolve: {
28
+      alias: {
29
+        '@': resolve('src')
30
+      }
31
+    }
32
+  },
19 33
 })