vue2-client 1.8.45 → 1.8.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/package.json +1 -1
  3. package/public/img/dynamicStatistics/dynamicStatisticsBack.jpg +0 -0
  4. package/public/img/service/sendword.png +0 -0
  5. package/src/App.vue +1 -0
  6. package/src/assets/img/logo.png +0 -0
  7. package/src/assets/img/querySlotDemo.svg +15 -15
  8. package/src/base-client/components/common/CitySelect/index.js +3 -3
  9. package/src/base-client/components/common/CitySelect/index.md +109 -109
  10. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  11. package/src/base-client/components/common/Upload/index.js +3 -3
  12. package/src/font-style/PingFang.ttf +0 -0
  13. package/src/font-style/font.css +6 -0
  14. package/src/pages/DynamicStatistics/ChartSelector.vue +155 -0
  15. package/src/pages/DynamicStatistics/DataTabs.vue +112 -0
  16. package/src/pages/DynamicStatistics/DynamicTable.vue +76 -0
  17. package/src/pages/DynamicStatistics/EvaluationArea.vue +54 -0
  18. package/src/pages/DynamicStatistics/FavoriteList.vue +51 -0
  19. package/src/pages/DynamicStatistics/SearchBar.vue +130 -0
  20. package/src/pages/DynamicStatistics/index.vue +201 -0
  21. package/src/pages/ServiceReview/index.vue +284 -0
  22. package/src/pages/login/Login.vue +11 -2
  23. package/src/router/async/config.async.js +2 -0
  24. package/src/router/async/router.map.js +4 -0
  25. package/src/router/index.js +1 -1
  26. package/src/router.js +1 -0
  27. package/src/services/api/restTools.js +24 -24
  28. package/src/utils/indexedDB.js +16 -0
  29. package/src/utils/map-utils.js +1 -1
  30. package/src/utils/routerUtil.js +3 -3
  31. package/src/utils/waterMark.js +31 -31
  32. package/vue.config.js +6 -1
@@ -0,0 +1,284 @@
1
+ <template>
2
+ <div :class="isWidth800? 'ServiceReviewPhone':'ServiceReviewPc'">
3
+ <div id="ServiceWarp" :class="!isWidth800?'ServiceWarpPC':''">
4
+ <div id="ServiceHeader" v-if="!isWidth800">
5
+ 服务评价
6
+ </div>
7
+ <div id="ServiceContext" :class="!isWidth800?'ServiceContext':''" v-if="!submittedStatus">
8
+ <a-row id="ServiceContextTitle" v-if="!isWidth800">
9
+ <a-col :span="8">
10
+ <span class="ServiceContextLabel">业务名称</span>
11
+ <span>入户安检</span>
12
+ </a-col>
13
+ <a-col :span="8" style="text-align: center">
14
+ <span class="ServiceContextLabel">办理时间</span>
15
+ <span>2023-12-12</span>
16
+ </a-col>
17
+ <a-col :span="8" style="text-align: right">
18
+ <span class="ServiceContextLabel">办理人员</span>
19
+ <span>某某某</span>
20
+ </a-col>
21
+ </a-row>
22
+ <a-row id="ServiceContextTitle" v-if="isWidth800">
23
+ <a-col :span="24" style="margin: 15px auto">
24
+ <span class="ServiceContextLabelPhone">业务名称</span>
25
+ <span>入户安检</span>
26
+ </a-col>
27
+ <a-col :span="24" style="margin: 15px auto">
28
+ <span class="ServiceContextLabelPhone">办理时间</span>
29
+ <span>2023-12-12</span>
30
+ </a-col>
31
+ <a-col :span="24" style="margin: 15px auto">
32
+ <span class="ServiceContextLabelPhone ">办理人员</span>
33
+ <span>某某某</span>
34
+ </a-col>
35
+ </a-row>
36
+ <a-row id="Context">
37
+ <span id="ContextTitle">服务评价内容</span>
38
+ </a-row>
39
+ <a-row class="Satisfaction">
40
+ <a-col :span="isWidth800?7:6"><span>人员服务满意度</span></a-col>
41
+ <a-col :span="isWidth800?17:18">
42
+ <a-radio-group style="width:100%" v-model="model.personSatisfaction">
43
+ <a-space style="display: flex;justify-content: space-between;">
44
+ <a-radio value="满意">满意</a-radio>
45
+ <a-radio value="一般">一般</a-radio>
46
+ <a-radio value="不满意">不满意</a-radio>
47
+ </a-space>
48
+ </a-radio-group>
49
+ </a-col>
50
+ </a-row>
51
+ <a-row class="Satisfaction">
52
+ <a-col :span="isWidth800?7:6"><span>业务办理满意度</span></a-col>
53
+ <a-col :span="isWidth800?17:18">
54
+ <a-radio-group style="width:100%" v-model="model.personSatisfaction">
55
+ <a-space style="display: flex;justify-content: space-between;">
56
+ <a-radio value="满意">满意</a-radio>
57
+ <a-radio value="一般">一般</a-radio>
58
+ <a-radio value="不满意">不满意</a-radio>
59
+ </a-space>
60
+ </a-radio-group>
61
+ </a-col>
62
+ </a-row>
63
+ <a-row class="Satisfaction">
64
+ <a-col :span="isWidth800?7:6"><span>整体满意度</span></a-col>
65
+ <a-col :span="isWidth800?17:18">
66
+ <a-radio-group style="width:100%" v-model="model.personSatisfaction">
67
+ <a-space style="display: flex;justify-content: space-between;">
68
+ <a-radio value="满意">满意</a-radio>
69
+ <a-radio value="一般">一般</a-radio>
70
+ <a-radio value="不满意">不满意</a-radio>
71
+ </a-space>
72
+ </a-radio-group>
73
+ </a-col>
74
+ </a-row>
75
+ <a-row class="Satisfaction">
76
+ <a-textarea
77
+ class="textarea"
78
+ :showCount="true"
79
+ v-model="model.content"
80
+ placeholder="请填写对我们的建议..."
81
+ :auto-size="{ minRows: 4, maxRows: 5 }"
82
+ />
83
+ </a-row>
84
+ <a-row class="Satisfaction">
85
+ <a-col :span="isWidth800?7:6"><span>是否匿名</span></a-col>
86
+ <a-col :span="isWidth800?17:18">
87
+ <a-radio-group style="width:100%" v-model="model.personSatisfaction">
88
+ <a-space style="display: flex;justify-content: space-between;">
89
+ <a-radio value="是">是&emsp;</a-radio>
90
+ <a-radio value="否">否&emsp;</a-radio>
91
+ <div>&emsp;&emsp;&emsp;&emsp;&emsp;</div>
92
+ </a-space>
93
+ </a-radio-group>
94
+ </a-col>
95
+ </a-row>
96
+ <a-row class="Satisfaction_onsubmit">
97
+ <a-button class="submit" @click="submit" type="primary" shape="round">
98
+ 提交
99
+ </a-button>
100
+ </a-row>
101
+ </div>
102
+ <div id="submitResult" v-if="submittedStatus">
103
+ <a-row style="text-align: center;margin-top: 8%;margin-bottom:5%">
104
+ <img src="../../../public/img/service/sendword.png" alt="" style="zoom:1.2">
105
+ </a-row>
106
+ <a-row style="text-align: center">
107
+ <span style="width:100%;font-weight: 600" >提交成功!感谢您提出的宝贵建议我们会继续改进我们的服务. . .</span>
108
+ </a-row>
109
+ </div>
110
+ </div>
111
+ </div>
112
+ </template>
113
+
114
+ <script>
115
+
116
+ export default {
117
+ name: 'ServiceReview',
118
+ data () {
119
+ return {
120
+ model: {
121
+ // 人员满意度
122
+ personSatisfaction: '',
123
+ // 业务办理满意度
124
+ businessSatisfaction: '',
125
+ // 整体满意度
126
+ overallSatisfaction: '',
127
+ // 评价内容
128
+ content: '',
129
+ // 是否匿名
130
+ isAnonymous: false
131
+ },
132
+ plainOptions: [{ label: '满意', value: '满意' },
133
+ { label: '一般', value: '一般' },
134
+ { label: '不满意', value: '不满意' },],
135
+ submittedStatus: false,
136
+ windowWidth: window.innerWidth,
137
+ isWidth800: false,
138
+ }
139
+ },
140
+ created () {
141
+ // TODO 接受 url 的参数并且查询 服务信息 然后给 model 赋值展示
142
+ },
143
+ mounted () {
144
+ this.checkWidth()
145
+ window.addEventListener('resize', this.checkWidth)
146
+ },
147
+ updated () {
148
+ this.checkWidth()
149
+ },
150
+ beforeDestroy () {
151
+ window.removeEventListener('resize', this.checkWidth)
152
+ },
153
+ methods: {
154
+ checkWidth () {
155
+ this.windowWidth = window.innerWidth
156
+ this.isWidth800 = this.windowWidth <= 800
157
+ },
158
+ submit () {
159
+ // TODO 提交评价
160
+ this.submittedStatus = true
161
+ }
162
+ }
163
+ }
164
+ </script>
165
+ <style lang="less" scoped>
166
+ .ServiceReviewPc {
167
+ background-image: url('/public/img/login/background.webp');
168
+ background-size: cover;
169
+ background-position: center;
170
+ height: 100%;
171
+ width: 100%;
172
+ display: flex;
173
+ justify-content: center;
174
+ align-items: center;
175
+ }
176
+
177
+ .ServiceWarpPC {
178
+ width: 70%;
179
+ height: 80%;
180
+ }
181
+
182
+ #ServiceWarp {
183
+ background-color: white;
184
+ border-radius: 20px;
185
+ overflow: hidden;
186
+
187
+ #ServiceHeader {
188
+ height: 18%;
189
+ background-color: #ECF6FF;
190
+ display: flex;
191
+ justify-content: center;
192
+ align-items: center;
193
+ color: #5290FF;
194
+ font-size: 2rem;
195
+ letter-spacing: 0.4em;
196
+ }
197
+
198
+ #submitResult {
199
+ }
200
+
201
+ .ServiceContext {
202
+ padding: 10px 40px;
203
+ }
204
+
205
+ #ServiceContext {
206
+ height: 82%;
207
+ overflow: auto;
208
+
209
+ #ServiceContextTitle {
210
+
211
+ // 底部边框灰色虚线
212
+ border-bottom: 1px dashed #eee;
213
+ padding-bottom: 20px;
214
+
215
+ .ServiceContextLabel {
216
+ font-size: 1.1rem;
217
+ font-weight: 500;
218
+ color: #555;
219
+ margin: 0 20px;
220
+ white-space: nowrap;
221
+ }
222
+
223
+ .ServiceContextLabel + span {
224
+ font-size: 1rem;
225
+ font-weight: 400;
226
+ color: #555;
227
+ margin: 0 20px;
228
+ white-space: nowrap;
229
+ }
230
+ }
231
+
232
+ .ServiceContextLabelPhone {
233
+ font-size: 1.1rem;
234
+ font-weight: 500;
235
+ color: #555;
236
+ margin: 20px;
237
+ white-space: nowrap;
238
+ }
239
+
240
+ .ServiceContextLabelPhone + span {
241
+ font-size: 1rem;
242
+ font-weight: 400;
243
+ color: #555;
244
+ margin: 0 20px;
245
+ white-space: nowrap;
246
+ }
247
+
248
+ #Context {
249
+ padding-top: 20px;
250
+ padding-left: 20px;
251
+
252
+ #ContextTitle {
253
+ font-size: 1.1rem;
254
+ font-weight: 600;
255
+ color: #5290FF;
256
+ }
257
+ }
258
+
259
+ .Satisfaction {
260
+ padding-top: 20px;
261
+ padding-left: 20px;
262
+
263
+ textarea {
264
+ resize: none;
265
+ height: 30%;
266
+ background-color: #F5F6F8;
267
+ border: 0
268
+ }
269
+ }
270
+
271
+ .Satisfaction_onsubmit{
272
+ padding-top: 20px;
273
+ padding-left: 20px;
274
+ display: flex;
275
+ justify-content: center;
276
+ align-items: center;
277
+ .submit {
278
+ width : 40%;
279
+ background: linear-gradient(90deg, #60B5EC 0%, #4F90EA 100%);
280
+ }
281
+ }
282
+ }
283
+ }
284
+ </style>
@@ -56,7 +56,7 @@
56
56
  import CommonLayout from '@vue2-client/layouts/CommonLayout'
57
57
  import { getRoutesConfig, login, V4Login } from '@vue2-client/services/user'
58
58
  import { setAuthorization } from '@vue2-client/utils/request'
59
- import { loadRoutes, funcToRouterOA } from '@vue2-client/utils/routerUtil'
59
+ import { loadRoutes, funcToRouterOA, funcToRouter } from '@vue2-client/utils/routerUtil'
60
60
  import { mapMutations, mapState } from 'vuex'
61
61
  import JSEncrypt from 'jsencrypt'
62
62
  import { ACCESS_TOKEN } from '@vue2-client/store/mutation-types'
@@ -200,7 +200,16 @@ export default {
200
200
  this.setUser(user)
201
201
  this.setPermissions([{ id: 'queryForm', operation: ['add', 'edit'] }])
202
202
  this.setRoles([{ id: 'admin', operation: ['add', 'edit', 'delete'] }])
203
- loadRoutes(funcToRouterOA(user.functions))
203
+ let func
204
+ switch (this.compatible) {
205
+ case 'OA' :
206
+ func = funcToRouterOA(user.functions)
207
+ break
208
+ default:
209
+ func = funcToRouter(user.functions)
210
+ break
211
+ }
212
+ loadRoutes(func)
204
213
  // 每次重新登录时,清除indexedDB缓存
205
214
  indexedDB.clear()
206
215
  this.$message.success(timeFix().CN + `,${result.name} 欢迎回来`, 3)
@@ -5,6 +5,8 @@ import { parseRoutes } from '@vue2-client/utils/routerUtil'
5
5
  const routesConfig = [
6
6
  'login',
7
7
  'submitTicket',
8
+ 'ServiceReview',
9
+ 'dynamicStatistics',
8
10
  'settings',
9
11
  'createQuery',
10
12
  'root',
@@ -29,12 +29,16 @@ routerResource.loginInfor = () => import('@vue2-client/pages/system/monitor/logi
29
29
  routerResource.operLog = () => import('@vue2-client/pages/system/monitor/operLog')
30
30
  // 系统问题反馈工单
31
31
  routerResource.submitTicket = () => import('@vue2-client/pages/system/ticket')
32
+ // 通用服务评价
33
+ routerResource.ServiceReview = () => import('@vue2-client/pages/ServiceReview')
32
34
  // 系统设置
33
35
  routerResource.settings = () => import('@vue2-client/pages/system/settings')
34
36
  // 查询配置生成工具
35
37
  routerResource.createQuery = () => import('@vue2-client/pages/CreateQueryPage')
36
38
  // AMIS示例页面
37
39
  routerResource.amisDemo = () => import('@vue2-client/pages/AMisDemo/AMisDemo')
40
+ // 数据检索
41
+ routerResource.dynamicStatistics = () => import('@vue2-client/pages/DynamicStatistics')
38
42
 
39
43
  // 基础路由组件注册
40
44
  const routerMap = {
@@ -3,7 +3,7 @@ import { formatRoutes } from '@vue2-client/utils/routerUtil'
3
3
  // 不需要登录拦截的路由配置
4
4
  const loginIgnore = {
5
5
  names: ['404', '403'], // 根据路由名称匹配
6
- paths: ['/login', '/submitTicket'], // 根据路由fullPath匹配
6
+ paths: ['/login', '/submitTicket', '/ServiceReview', '/DynamicStatistics'], // 根据路由fullPath匹配
7
7
  /**
8
8
  * 判断路由是否包含在该配置中
9
9
  * @param route vue-router 的 route 对象
package/src/router.js CHANGED
@@ -10,6 +10,7 @@ const routes = [
10
10
  { path: '/XStepView', component: loadView('XStepView') },
11
11
  { path: '/Amis', component: () => import('@vue2-client/pages/AMisDemo/AMisDemo') },
12
12
  { path: '/Amis2', component: () => import('@vue2-client/pages/AMisDemo/AMisDemo2') },
13
+ { path: '/DynamicStatistics', component: () => import('@vue2-client/pages/DynamicStatistics/index') },
13
14
  // ... 其他路由
14
15
  ]
15
16
  export default routes
@@ -1,24 +1,24 @@
1
- import { METHOD, request } from '@vue2-client/utils/request'
2
-
3
- /**
4
- * GET请求
5
- * @param url 请求地址
6
- * @param parameter 路径参数
7
- * @returns {Promise<AxiosResponse<T>>}
8
- */
9
- function get (url, parameter) {
10
- return request(url, METHOD.GET, parameter)
11
- }
12
-
13
- /**
14
- * POST请求
15
- * @param url 请求地址
16
- * @param parameter 请求参数
17
- * @param config
18
- * @returns {Promise<AxiosResponse<T>>}
19
- */
20
- function post (url, parameter, config = {}) {
21
- return request(url, METHOD.POST, parameter, config)
22
- }
23
-
24
- export { get, post }
1
+ import { METHOD, request } from '@vue2-client/utils/request'
2
+
3
+ /**
4
+ * GET请求
5
+ * @param url 请求地址
6
+ * @param parameter 路径参数
7
+ * @returns {Promise<AxiosResponse<T>>}
8
+ */
9
+ function get (url, parameter) {
10
+ return request(url, METHOD.GET, parameter)
11
+ }
12
+
13
+ /**
14
+ * POST请求
15
+ * @param url 请求地址
16
+ * @param parameter 请求参数
17
+ * @param config
18
+ * @returns {Promise<AxiosResponse<T>>}
19
+ */
20
+ function post (url, parameter, config = {}) {
21
+ return request(url, METHOD.POST, parameter, config)
22
+ }
23
+
24
+ export { get, post }
@@ -92,6 +92,22 @@ export const indexedDB = {
92
92
  }
93
93
  })
94
94
  },
95
+ getAll: function (callback) {
96
+ const self = this
97
+ self.openDB((res) => {
98
+ const store = res.transaction('metaCache', 'readwrite').objectStore('metaCache')
99
+ const request = store.getAll()
100
+ request.onerror = function () {
101
+ console.log('读取数据失败')
102
+ }
103
+ request.onsuccess = function (e) {
104
+ const result = e.target.result
105
+ if (typeof (callback) === 'function') {
106
+ callback(result)
107
+ }
108
+ }
109
+ })
110
+ },
95
111
  getByWeb: function (key, url, params, callback, processFun) {
96
112
  const self = this
97
113
  self.openDB((res) => {
@@ -11,7 +11,7 @@ async function GetGDMap (secretKey, key) {
11
11
  key: key, // 申请好的Web端开发者Key,首次调用 load 时必填
12
12
  version: '2.0', // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
13
13
  plugins: ['AMap.IndexCluster', 'AMP.MarkerCluster', 'AMap.InfoWindow', 'AMap.HeatMap', 'AMap.HawkEye', 'AMap.DistrictSearch',
14
- 'AMap.ToolBar', 'AMap.Geolocation',
14
+ 'AMap.ToolBar', 'AMap.Geolocation', 'AMap.MouseTool',
15
15
  'AMap.Geocoder', 'AMap.MarkerClusterer', 'AMap.AutoComplete'], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
16
16
  AMapUI: {
17
17
  version: '1.1', // AMapUI 缺省 1.1
@@ -383,14 +383,14 @@ function positionRouter (r) {
383
383
  return router
384
384
  }
385
385
 
386
- function funcToRouterOA(func) {
386
+ function funcToRouterOA (func) {
387
387
  return [{
388
388
  router: 'root',
389
389
  children: positionRouterOA(parsefuncOA(func))
390
390
  }]
391
391
  }
392
392
 
393
- function positionRouterOA(r) {
393
+ function positionRouterOA (r) {
394
394
  let router = []
395
395
  for (const row of r) {
396
396
  router[row.position] = row
@@ -399,7 +399,7 @@ function positionRouterOA(r) {
399
399
  return router
400
400
  }
401
401
 
402
- function parsefuncOA(func) {
402
+ function parsefuncOA (func) {
403
403
  const router = []
404
404
  for (const row of func) {
405
405
  const route = {
@@ -1,31 +1,31 @@
1
- /**
2
- * @description: createWaterMark.js 加水印功能
3
- */
4
- let waterMarkDOM
5
-
6
- const clearWaterMark = () => {
7
- if (waterMarkDOM) waterMarkDOM.remove()
8
- }
9
- /**
10
- * @description: 创建水印
11
- * @param waterMarkName 水印内容
12
- */
13
- export default function createWaterMark (waterMarkName) {
14
- clearWaterMark()
15
- if (!waterMarkName) {
16
- return
17
- }
18
- const width = window.parseInt(document.body.clientWidth)
19
- const canvasWidth = width / window.parseInt(width / 320)
20
- const fontFamily = window.getComputedStyle(document.body)['font-family']
21
- const fragment = document.createDocumentFragment()
22
- waterMarkDOM = document.createElement('div')
23
- waterMarkDOM.className = 'water-mark-wrap'
24
- let spanStr = ''
25
- for (let i = 0; i < 100; i++) {
26
- spanStr += `<span class="water-word" style=width:${canvasWidth}px;height:200px;font: ${fontFamily}>${waterMarkName}</span>`
27
- }
28
- waterMarkDOM.innerHTML = spanStr
29
- fragment.appendChild(waterMarkDOM)
30
- document.body.appendChild(fragment)
31
- }
1
+ /**
2
+ * @description: createWaterMark.js 加水印功能
3
+ */
4
+ let waterMarkDOM
5
+
6
+ const clearWaterMark = () => {
7
+ if (waterMarkDOM) waterMarkDOM.remove()
8
+ }
9
+ /**
10
+ * @description: 创建水印
11
+ * @param waterMarkName 水印内容
12
+ */
13
+ export default function createWaterMark (waterMarkName) {
14
+ clearWaterMark()
15
+ if (!waterMarkName) {
16
+ return
17
+ }
18
+ const width = window.parseInt(document.body.clientWidth)
19
+ const canvasWidth = width / window.parseInt(width / 320)
20
+ const fontFamily = window.getComputedStyle(document.body)['font-family']
21
+ const fragment = document.createDocumentFragment()
22
+ waterMarkDOM = document.createElement('div')
23
+ waterMarkDOM.className = 'water-mark-wrap'
24
+ let spanStr = ''
25
+ for (let i = 0; i < 100; i++) {
26
+ spanStr += `<span class="water-word" style=width:${canvasWidth}px;height:200px;font: ${fontFamily}>${waterMarkName}</span>`
27
+ }
28
+ waterMarkDOM.innerHTML = spanStr
29
+ fragment.appendChild(waterMarkDOM)
30
+ document.body.appendChild(fragment)
31
+ }
package/vue.config.js CHANGED
@@ -43,7 +43,12 @@ module.exports = {
43
43
  pathRewrite: { '^/resource': '/' },
44
44
  target: 'http://127.0.0.1:4789',
45
45
  changeOrigin: true
46
- }
46
+ },
47
+ '/ai': {
48
+ target: 'http://192.168.50.67:31761',
49
+ pathRewrite: { '^/ai': '/' },
50
+ changeOrigin: true
51
+ },
47
52
  },
48
53
  client: {
49
54
  overlay: false