vue2-client 1.18.47 → 1.18.51

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 (107) hide show
  1. package/.claude/settings.local.json +28 -21
  2. package/.eslintrc.js +84 -84
  3. package/Components.md +60 -60
  4. package/docs/image.png +0 -0
  5. package/docs/index.md +30 -30
  6. package/index.js +31 -31
  7. package/jest-transform-stub.js +8 -8
  8. package/jest.setup.js +7 -7
  9. package/package.json +1 -1
  10. package/src/assets/img/querySlotDemo.svg +15 -15
  11. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  12. package/src/base-client/components/common/CitySelect/index.js +3 -3
  13. package/src/base-client/components/common/CitySelect/index.md +109 -109
  14. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  15. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  16. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  17. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  18. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  19. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  20. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  21. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  22. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  23. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  24. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  25. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  26. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  27. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  28. package/src/base-client/components/common/Tree/index.js +2 -2
  29. package/src/base-client/components/common/Upload/index.js +3 -3
  30. package/src/base-client/components/common/XAddNativeForm/demo.vue +20 -24
  31. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  32. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  33. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  34. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  35. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  36. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  37. package/src/base-client/components/common/XDescriptions/index.md +322 -322
  38. package/src/base-client/components/common/XForm/XForm.vue +121 -64
  39. package/src/base-client/components/common/XForm/XFormItem.vue +464 -407
  40. package/src/base-client/components/common/XForm/index.md +178 -178
  41. package/src/base-client/components/common/XFormCol/XFormCol.vue +43 -36
  42. package/src/base-client/components/common/XFormTable/XFormTable.vue +4 -1
  43. package/src/base-client/components/common/XFormTable/demo.vue +24 -35
  44. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  45. package/src/base-client/components/common/XStepView/index.js +3 -3
  46. package/src/base-client/components/common/XStepView/index.md +31 -31
  47. package/src/base-client/components/common/XTable/XTable.vue +1715 -1715
  48. package/src/base-client/components/common/XTable/XTableWrapper.vue +786 -786
  49. package/src/base-client/components/common/XTable/index.md +255 -255
  50. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  51. package/src/base-client/plugins/Config.js +19 -19
  52. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  53. package/src/components/Charts/Bar.vue +62 -62
  54. package/src/components/Charts/ChartCard.vue +134 -134
  55. package/src/components/Charts/Liquid.vue +67 -67
  56. package/src/components/Charts/MiniArea.vue +39 -39
  57. package/src/components/Charts/MiniBar.vue +39 -39
  58. package/src/components/Charts/MiniProgress.vue +75 -75
  59. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  60. package/src/components/Charts/Radar.vue +68 -68
  61. package/src/components/Charts/RankList.vue +77 -77
  62. package/src/components/Charts/TagCloud.vue +113 -113
  63. package/src/components/Charts/TransferBar.vue +64 -64
  64. package/src/components/Charts/Trend.vue +82 -82
  65. package/src/components/Charts/chart.less +12 -12
  66. package/src/components/Charts/smooth.area.less +13 -13
  67. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  68. package/src/components/NumberInfo/index.js +3 -3
  69. package/src/components/NumberInfo/index.less +54 -54
  70. package/src/components/NumberInfo/index.md +43 -43
  71. package/src/components/card/ChartCard.vue +79 -79
  72. package/src/components/chart/Bar.vue +60 -60
  73. package/src/components/chart/MiniArea.vue +67 -67
  74. package/src/components/chart/MiniBar.vue +59 -59
  75. package/src/components/chart/MiniProgress.vue +57 -57
  76. package/src/components/chart/Radar.vue +80 -80
  77. package/src/components/chart/RankingList.vue +60 -60
  78. package/src/components/chart/Trend.vue +79 -79
  79. package/src/components/chart/index.less +9 -9
  80. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  81. package/src/components/input/IInput.vue +66 -66
  82. package/src/components/menu/SideMenu.vue +75 -75
  83. package/src/components/menu/menu.js +273 -273
  84. package/src/components/tool/AStepItem.vue +60 -60
  85. package/src/layouts/CommonLayout.vue +56 -56
  86. package/src/layouts/header/HeaderNotice.vue +177 -177
  87. package/src/lib.js +1 -1
  88. package/src/mock/extend/index.js +84 -84
  89. package/src/mock/goods/index.js +108 -108
  90. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  91. package/src/pages/system/dictionary/index.vue +44 -44
  92. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  93. package/src/pages/system/monitor/operLog/index.vue +37 -37
  94. package/src/router/async/router.map.js +10 -15
  95. package/src/services/api/cas.js +79 -79
  96. package/src/services/api/common.js +10 -2
  97. package/src/services/api/restTools.js +11 -0
  98. package/src/services/v3Api.js +25 -17
  99. package/src/store/modules/setting.js +119 -119
  100. package/src/utils/authority-utils.js +85 -85
  101. package/src/utils/errorCode.js +6 -6
  102. package/src/utils/request.js +68 -80
  103. package/src/utils/requestDedupe.js +245 -0
  104. package/vue.config.js +40 -42
  105. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
  106. package/assets/c__Users_QXLL_AppData_Roaming_Cursor_User_workspaceStorage_4fb3d7e3441d32bc6f2c7358b4188b48_images_e8c132e6dde513250d7f9721712df1f8-f1522a08-1aa0-4866-b4e5-b34cf2e21109.png +0 -0
  107. package/docs/HChart/351/205/215/347/275/256/346/226/207/346/241/243.md +0 -960
@@ -1,12 +1,7 @@
1
1
  <template>
2
- <div :style="{marginBottom: !visible ? '12px':''}">
2
+ <div :style="{ marginBottom: !visible ? '12px' : '' }">
3
3
  <div v-if="visible && realJsonData.length > 0" class="table-page-search-wrapper">
4
- <a-form-model
5
- v-if="loaded"
6
- ref="form"
7
- :model="form"
8
- :rules="rules"
9
- layout="inline">
4
+ <a-form-model v-if="loaded" ref="form" :model="form" :rules="rules" layout="inline">
10
5
  <a-row :gutter="24" type="flex">
11
6
  <x-form-item
12
7
  v-for="item in visibleItems"
@@ -38,25 +33,25 @@
38
33
  <a-col style="margin-left: auto">
39
34
  <span
40
35
  :style="advanced ? { float: 'right', overflow: 'hidden' } : {}"
41
- class="table-page-search-submitButtons">
36
+ class="table-page-search-submitButtons"
37
+ >
42
38
  <template v-if="hiddenItems.length > 0">
43
39
  <a @click="toggleAdvanced">
44
- <span v-if="!advanced" style="display: inline-flex; align-items: center;">
45
- <a-icon type="eye" :style="iconStyle" class="form-expand-icon"></a-icon>&nbsp;更多条件
40
+ <span v-if="!advanced" style="display: inline-flex; align-items: center">
41
+ <a-icon type="eye" :style="iconStyle" class="form-expand-icon"></a-icon>
42
+ &nbsp;更多条件
46
43
  </span>
47
- <span v-else style="display: inline-flex; align-items: center;">
48
- <a-icon type="eye-invisible" :style="iconStyle" class="form-expand-icon rotated"></a-icon>&nbsp;收起更多
44
+ <span v-else style="display: inline-flex; align-items: center">
45
+ <a-icon type="eye-invisible" :style="iconStyle" class="form-expand-icon rotated"></a-icon>
46
+ &nbsp;收起更多
49
47
  </span>
50
48
  </a>
51
- <a-divider type="vertical"/>
49
+ <a-divider type="vertical" />
52
50
  </template>
53
51
  <a-space>
54
- <a-button
55
- v-if="!simpleMode"
56
- htmlType="submit"
57
- type="primary"
58
- @click="onSubmit">
59
- <a-icon :style="iconStyle" type="search"></a-icon>查询
52
+ <a-button v-if="!simpleMode" htmlType="submit" type="primary" @click="onSubmit">
53
+ <a-icon :style="iconStyle" type="search"></a-icon>
54
+ 查询
60
55
  </a-button>
61
56
  <a-button v-if="!simpleMode" @click="resetForm">重置</a-button>
62
57
  <slot></slot>
@@ -84,7 +79,7 @@ export default {
84
79
  XFormItem
85
80
  },
86
81
  mixins: [formValidationMixin],
87
- data () {
82
+ data() {
88
83
  return {
89
84
  // 内容加载是否完成
90
85
  loaded: false,
@@ -124,21 +119,28 @@ export default {
124
119
  ...mapState('account', { currUser: 'user' }),
125
120
  // 过滤掉仅用于新增/修改场景的表单项
126
121
  realJsonData: function () {
127
- return this.formItems.filter(item => (!item.isOnlyAddOrEdit && item.type !== 'group') || (item.type === 'group' && item.groupItems.some(groupItem => !groupItem.isOnlyAddOrEdit)))
122
+ return this.formItems.filter(
123
+ item =>
124
+ (!item.isOnlyAddOrEdit && item.type !== 'group') ||
125
+ (item.type === 'group' && item.groupItems.some(groupItem => !groupItem.isOnlyAddOrEdit))
126
+ )
128
127
  },
129
128
  // 过滤出用于新增/修改场景的表单项
130
129
  groupJsonData: function () {
131
- return this.formItems.filter((item) => {
132
- return item.type === 'group'
133
- }).map((item) => {
134
- item.groupItems = item.groupItems.filter(item => !item.isOnlyAddOrEdit).map((groupItem) => {
135
- // 只保留第一个下划线后面的内容
136
- // groupItem.model = groupItem.model.substring(groupItem.model.indexOf('_') + 1)
137
- return groupItem
138
- })
130
+ return this.formItems
131
+ .filter(item => {
132
+ return item.type === 'group'
133
+ })
134
+ .map(item => {
135
+ item.groupItems = item.groupItems
136
+ .filter(item => !item.isOnlyAddOrEdit)
137
+ .map(groupItem => {
138
+ // 只保留第一个下划线后面的内容
139
+ // groupItem.model = groupItem.model.substring(groupItem.model.indexOf('_') + 1)
140
+ return groupItem
141
+ })
139
142
  return item
140
- }
141
- )
143
+ })
142
144
  },
143
145
  // 合并所有来源的表单项
144
146
  allFormItems: function () {
@@ -170,20 +172,22 @@ export default {
170
172
  ...item,
171
173
  _originalIndex: this.visibleItemCount + index
172
174
  }))
173
- },
175
+ }
174
176
  },
175
- provide () {
177
+ provide() {
176
178
  return {
177
179
  XFormContext: this,
178
180
  // 移除必填项
179
181
  removeRequired: this.removeRequired,
180
182
  // 设置必填项
181
183
  setRequired: this.setRequired,
184
+ // 全局 label 宽度,确保所有表单项的 label 宽度一致
185
+ globalLabelWidth: this.globalLabelWidth
182
186
  }
183
187
  },
184
188
  methods: {
185
189
  // 根据flex值计算可见表单项数量
186
- updateVisibleItemCount (flex) {
190
+ updateVisibleItemCount(flex) {
187
191
  // flex值与显示数量的映射关系
188
192
  const flexToCountMap = {
189
193
  24: 2, // 小屏:1个/行,显示2个(2行)
@@ -201,7 +205,7 @@ export default {
201
205
  },
202
206
 
203
207
  // 递归查找第一个XFormCol实例
204
- findFirstXFormCol (components = this.$children) {
208
+ findFirstXFormCol(components = this.$children) {
205
209
  for (const component of components) {
206
210
  if (component.$options.name === 'XFormCol') {
207
211
  return component
@@ -214,7 +218,7 @@ export default {
214
218
  },
215
219
 
216
220
  // 设置flex监听
217
- setupFlexWatcher () {
221
+ setupFlexWatcher() {
218
222
  this.$nextTick(() => {
219
223
  const firstXFormCol = this.findFirstXFormCol()
220
224
  if (firstXFormCol) {
@@ -224,7 +228,7 @@ export default {
224
228
  // 设置监听
225
229
  this._flexWatcher = this.$watch(
226
230
  () => firstXFormCol.computedFlex,
227
- (newFlex) => {
231
+ newFlex => {
228
232
  this.updateVisibleItemCount(newFlex)
229
233
  }
230
234
  )
@@ -235,10 +239,16 @@ export default {
235
239
  })
236
240
  },
237
241
 
238
- init (params) {
242
+ init(params) {
239
243
  const {
240
- formItems, serviceName, getDataParams = {}, env = 'prod', simpleMode = false, funcData = {},
241
- queryParamsName = 'localConfig', defaultQueryForm = {}
244
+ formItems,
245
+ serviceName,
246
+ getDataParams = {},
247
+ env = 'prod',
248
+ simpleMode = false,
249
+ funcData = {},
250
+ queryParamsName = 'localConfig',
251
+ defaultQueryForm = {}
242
252
  } = params
243
253
  this.mountedCount = 0
244
254
  this.queryParamsName = queryParamsName
@@ -276,9 +286,11 @@ export default {
276
286
  if (!funcData.queryFormInit.startsWith('async')) {
277
287
  funcData.queryFormInit = `async ${funcData.queryFormInit}`
278
288
  }
279
- executeStrFunctionByContext(this, funcData.queryFormInit, [util, runLogic, getConfigByNameAsync]).then(res => {
280
- this.form = Object.assign({}, this.form, res)
281
- })
289
+ executeStrFunctionByContext(this, funcData.queryFormInit, [util, runLogic, getConfigByNameAsync]).then(
290
+ res => {
291
+ this.form = Object.assign({}, this.form, res)
292
+ }
293
+ )
282
294
  }
283
295
  } catch (e) {
284
296
  console.error('queryFormInit error', e)
@@ -286,7 +298,7 @@ export default {
286
298
  this.getDataParams = getDataParams
287
299
  this.loaded = true
288
300
  },
289
- onItemMounted (_h) {
301
+ onItemMounted(_h) {
290
302
  this.mountedCount += 1
291
303
  if (this.mountedCount === this.allFormItems.length) {
292
304
  // 所有 x-from-item 挂载完成,触发父组件中的 xTable.init
@@ -294,7 +306,7 @@ export default {
294
306
  }
295
307
  },
296
308
  // 时间组件赋默认值
297
- getDateRange ({ type, queryFormDefault: defaultValue, queryType, queryValueFormat: defaultFormat, name }) {
309
+ getDateRange({ type, queryFormDefault: defaultValue, queryType, queryValueFormat: defaultFormat, name }) {
298
310
  const formatMap = {
299
311
  yearPicker: 'YYYY',
300
312
  yearRangePicker: 'YYYY',
@@ -303,7 +315,7 @@ export default {
303
315
  datePicker: 'YYYY-MM-DD',
304
316
  rangePicker: 'YYYY-MM-DD HH:mm:ss',
305
317
  timePicker: 'HH:mm:ss',
306
- timeRangePicker: 'HH:mm:ss',
318
+ timeRangePicker: 'HH:mm:ss'
307
319
  }
308
320
  let format = formatMap[type]
309
321
 
@@ -347,12 +359,26 @@ export default {
347
359
  }
348
360
  return [start, end]
349
361
  },
350
- setFormProps (formData, item) {
362
+ setFormProps(formData, item) {
351
363
  formData[item.model] = undefined
352
364
  if (item.queryFormDefault) {
353
- if (['datePicker', 'rangePicker', 'yearPicker', 'monthPicker', 'yearRangePicker', 'monthRangePicker', 'timePicker', 'timeRangePicker'].includes(item.type)) {
365
+ if (
366
+ [
367
+ 'datePicker',
368
+ 'rangePicker',
369
+ 'yearPicker',
370
+ 'monthPicker',
371
+ 'yearRangePicker',
372
+ 'monthRangePicker',
373
+ 'timePicker',
374
+ 'timeRangePicker'
375
+ ].includes(item.type)
376
+ ) {
354
377
  formData[item.model] = this.getDateRange(item)
355
- } else if (['treeSelect', 'select', 'checkbox'].includes(item.type) && ['curOrgId', 'curDepId', 'curUserId'].includes(item.queryFormDefault)) {
378
+ } else if (
379
+ ['treeSelect', 'select', 'checkbox'].includes(item.type) &&
380
+ ['curOrgId', 'curDepId', 'curUserId'].includes(item.queryFormDefault)
381
+ ) {
356
382
  if (item.queryFormDefault === 'curOrgId') {
357
383
  formData[item.model] = item.type === 'select' ? this.currUser.orgid : [this.currUser.orgid]
358
384
  }
@@ -369,7 +395,11 @@ export default {
369
395
  this.defaultMap[item.model] = formData[item.model]
370
396
  }
371
397
  } else {
372
- if (['datePicker', 'rangePicker', 'yearPicker', 'monthPicker', 'yearRangePicker', 'monthRangePicker'].includes(item.type)) {
398
+ if (
399
+ ['datePicker', 'rangePicker', 'yearPicker', 'monthPicker', 'yearRangePicker', 'monthRangePicker'].includes(
400
+ item.type
401
+ )
402
+ ) {
373
403
  if (item.queryType === 'BETWEEN') {
374
404
  formData[item.model] = []
375
405
  }
@@ -377,7 +407,9 @@ export default {
377
407
  }
378
408
  if (item.rule) {
379
409
  this.rules[item.model] = []
380
- const required = item.rule.queryRequired ? item.rule.queryRequired === true || item.rule.queryRequired === 'true' : false
410
+ const required = item.rule.queryRequired
411
+ ? item.rule.queryRequired === true || item.rule.queryRequired === 'true'
412
+ : false
381
413
  let trigger
382
414
  let message
383
415
  if (required) {
@@ -422,36 +454,48 @@ export default {
422
454
  }
423
455
  }
424
456
  },
425
- customJsValidate (rule, value, callback, item) {
457
+ customJsValidate(rule, value, callback, item) {
426
458
  if (item.rule.customQueryValidatorFunc) {
427
- executeStrFunctionByContext(this, item.rule.customQueryValidatorFunc, [rule, value, callback, this.form, item, util, runLogic, getConfigByNameAsync])
459
+ executeStrFunctionByContext(this, item.rule.customQueryValidatorFunc, [
460
+ rule,
461
+ value,
462
+ callback,
463
+ this.form,
464
+ item,
465
+ util,
466
+ runLogic,
467
+ getConfigByNameAsync
468
+ ])
428
469
  } else {
429
470
  callback()
430
471
  }
431
472
  },
432
- toggleAdvanced () {
473
+ toggleAdvanced() {
433
474
  this.advanced = !this.advanced
434
475
  this.$emit('toggleAdvanced')
435
476
  },
436
- toggleVisible () {
477
+ toggleVisible() {
437
478
  this.visible = !this.visible
438
479
  return this.visible
439
480
  },
440
- resetForm () {
481
+ resetForm() {
441
482
  this.$refs.form.resetFields()
442
483
  },
443
- emitFunc (func, data, value) {
484
+ emitFunc(func, data, value) {
444
485
  this.$emit(func, data, value)
445
486
  this.$emit('x-form-item-emit-func', func, data, value)
446
487
  },
447
- onSubmit () {
488
+ onSubmit() {
448
489
  this.$refs.form.validate(valid => {
449
490
  for (const key of Object.keys(this.form)) {
450
491
  if (this.form[key] === null || this.form[key] === '') {
451
492
  this.form[key] = undefined
452
493
  }
453
494
  // 树形选择框重置后会重置为[undefined],查询时为[null]
454
- if (Array.isArray(this.form[key]) && (this.form[key].length === 0 || this.form[key][0] === null || this.form[key][0] === undefined)) {
495
+ if (
496
+ Array.isArray(this.form[key]) &&
497
+ (this.form[key].length === 0 || this.form[key][0] === null || this.form[key][0] === undefined)
498
+ ) {
455
499
  this.form[key] = undefined
456
500
  }
457
501
  // 如果 form 中没有值,但是有默认值
@@ -467,23 +511,36 @@ export default {
467
511
  this.$emit('onSubmit', data)
468
512
  })
469
513
  },
470
- exports () {
514
+ exports() {
471
515
  this.$emit('exports', this.form)
472
516
  },
473
- setForm (obj) {
517
+ setForm(obj) {
474
518
  this.form = Object.assign(this.form, obj)
475
519
  },
520
+ /**
521
+ * 主动触发表单提交
522
+ * 用于 queryTable 等场景,确保走相同的数据处理流程
523
+ * @param {Object} conditionParams - 额外的查询条件参数
524
+ */
525
+ submitForm(conditionParams = {}) {
526
+ // 将外部参数合并到表单中
527
+ if (Object.keys(conditionParams).length > 0) {
528
+ this.form = Object.assign({}, this.form, conditionParams)
529
+ }
530
+ // 调用现有的 onSubmit 方法,触发 emit
531
+ this.onSubmit()
532
+ }
476
533
  },
477
- mounted () {
534
+ mounted() {
478
535
  console.log('XForm mounted, setting up flex watcher')
479
536
  this.setupFlexWatcher()
480
537
  },
481
- beforeDestroy () {
538
+ beforeDestroy() {
482
539
  // 清理watcher
483
540
  if (this._flexWatcher) {
484
541
  this._flexWatcher()
485
542
  }
486
- },
543
+ }
487
544
  }
488
545
  </script>
489
546
  <style lang="less" scoped>