vue2-client 1.19.64 → 1.19.66

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 (90) hide show
  1. package/.claude/settings.local.json +30 -30
  2. package/.env.message +19 -19
  3. package/.eslintrc.js +74 -74
  4. package/Components.md +60 -60
  5. package/docs/index.md +30 -30
  6. package/docs//350/257/267/346/261/202/345/267/245/345/205/267/344/275/277/347/224/250/350/257/264/346/230/216.md +20 -2
  7. package/index.js +31 -31
  8. package/jest-transform-stub.js +8 -8
  9. package/jest.setup.js +7 -7
  10. package/package.json +114 -114
  11. package/src/assets/img/querySlotDemo.svg +15 -15
  12. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  13. package/src/base-client/components/common/CitySelect/index.js +3 -3
  14. package/src/base-client/components/common/CitySelect/index.md +109 -109
  15. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  16. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  17. package/src/base-client/components/common/ImagePreviewModal/ImagePreviewModal.vue +480 -480
  18. package/src/base-client/components/common/ImagePreviewModal/index.js +3 -3
  19. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  20. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  21. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  22. package/src/base-client/components/common/Tree/index.js +2 -2
  23. package/src/base-client/components/common/Upload/index.js +3 -3
  24. package/src/base-client/components/common/XAddNativeForm/demo.vue +3 -2
  25. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  26. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  27. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  28. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  29. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  30. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  31. package/src/base-client/components/common/XForm/XFormItem.vue +1554 -1554
  32. package/src/base-client/components/common/XForm/index.md +178 -178
  33. package/src/base-client/components/common/XFormTable/demo.vue +113 -34
  34. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  35. package/src/base-client/components/common/XStepView/index.js +3 -3
  36. package/src/base-client/components/common/XStepView/index.md +31 -31
  37. package/src/base-client/components/common/XTable/index.md +255 -255
  38. package/src/base-client/components/his/XList/XList.vue +4 -2
  39. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  40. package/src/base-client/plugins/Config.js +19 -19
  41. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  42. package/src/components/Charts/Bar.vue +62 -62
  43. package/src/components/Charts/ChartCard.vue +134 -134
  44. package/src/components/Charts/Liquid.vue +67 -67
  45. package/src/components/Charts/MiniArea.vue +39 -39
  46. package/src/components/Charts/MiniBar.vue +39 -39
  47. package/src/components/Charts/MiniProgress.vue +75 -75
  48. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  49. package/src/components/Charts/Radar.vue +68 -68
  50. package/src/components/Charts/RankList.vue +77 -77
  51. package/src/components/Charts/TagCloud.vue +113 -113
  52. package/src/components/Charts/TransferBar.vue +64 -64
  53. package/src/components/Charts/Trend.vue +82 -82
  54. package/src/components/Charts/chart.less +12 -12
  55. package/src/components/Charts/smooth.area.less +13 -13
  56. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  57. package/src/components/NumberInfo/index.js +3 -3
  58. package/src/components/NumberInfo/index.less +54 -54
  59. package/src/components/NumberInfo/index.md +43 -43
  60. package/src/components/card/ChartCard.vue +79 -79
  61. package/src/components/chart/Bar.vue +60 -60
  62. package/src/components/chart/MiniArea.vue +67 -67
  63. package/src/components/chart/MiniBar.vue +59 -59
  64. package/src/components/chart/MiniProgress.vue +57 -57
  65. package/src/components/chart/Radar.vue +80 -80
  66. package/src/components/chart/RankingList.vue +60 -60
  67. package/src/components/chart/Trend.vue +79 -79
  68. package/src/components/chart/index.less +9 -9
  69. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  70. package/src/components/input/IInput.vue +66 -66
  71. package/src/components/menu/SideMenu.vue +75 -75
  72. package/src/components/menu/menu.js +273 -273
  73. package/src/components/tool/AStepItem.vue +60 -60
  74. package/src/components/xScrollBox/index.vue +6 -25
  75. package/src/layouts/CommonLayout.vue +56 -56
  76. package/src/lib.js +1 -1
  77. package/src/mock/extend/index.js +84 -84
  78. package/src/mock/goods/index.js +108 -108
  79. package/src/pages/LayoutTest/index.vue +19 -0
  80. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  81. package/src/pages/system/dictionary/index.vue +44 -44
  82. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  83. package/src/pages/system/monitor/operLog/index.vue +37 -37
  84. package/src/router/async/router.map.js +135 -134
  85. package/src/services/api/cas.js +79 -79
  86. package/src/store/modules/setting.js +119 -119
  87. package/src/utils/authority-utils.js +85 -85
  88. package/src/utils/errorCode.js +6 -6
  89. package/src/utils/requestDedupe.js +24 -8
  90. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
@@ -1,30 +1,30 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "WebSearch",
5
- "WebFetch(domain:context7.com)",
6
- "Bash(npm run lint)",
7
- "mcp__context7__resolve-library-id",
8
- "mcp__context7__get-library-docs",
9
- "WebFetch(domain:github.com)",
10
- "Bash(npm run serve:*)",
11
- "mcp__serena__get_current_config",
12
- "mcp__serena__activate_project",
13
- "mcp__serena__get_symbols_overview",
14
- "mcp__serena__list_dir",
15
- "mcp__serena__find_file",
16
- "mcp__serena__list_memories",
17
- "mcp__serena__check_onboarding_performed",
18
- "mcp__serena__read_memory",
19
- "mcp__serena__think_about_collected_information",
20
- "mcp__sequential-thinking__sequentialthinking",
21
- "Bash(npm run lint:*)",
22
- "mcp__serena__find_symbol",
23
- "mcp__serena__search_for_pattern",
24
- "Bash(node -c:*)"
25
- ],
26
- "deny": [],
27
- "ask": [],
28
- "defaultMode": "acceptEdits"
29
- }
30
- }
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "WebSearch",
5
+ "WebFetch(domain:context7.com)",
6
+ "Bash(npm run lint)",
7
+ "mcp__context7__resolve-library-id",
8
+ "mcp__context7__get-library-docs",
9
+ "WebFetch(domain:github.com)",
10
+ "Bash(npm run serve:*)",
11
+ "mcp__serena__get_current_config",
12
+ "mcp__serena__activate_project",
13
+ "mcp__serena__get_symbols_overview",
14
+ "mcp__serena__list_dir",
15
+ "mcp__serena__find_file",
16
+ "mcp__serena__list_memories",
17
+ "mcp__serena__check_onboarding_performed",
18
+ "mcp__serena__read_memory",
19
+ "mcp__serena__think_about_collected_information",
20
+ "mcp__sequential-thinking__sequentialthinking",
21
+ "Bash(npm run lint:*)",
22
+ "mcp__serena__find_symbol",
23
+ "mcp__serena__search_for_pattern",
24
+ "Bash(node -c:*)"
25
+ ],
26
+ "deny": [],
27
+ "ask": [],
28
+ "defaultMode": "acceptEdits"
29
+ }
30
+ }
package/.env.message CHANGED
@@ -1,19 +1,19 @@
1
- VUE_APP_PUBLIC_PATH=/
2
- VUE_APP_NAME=Admin
3
- VUE_APP_ROUTES_KEY=admin.routes
4
- VUE_APP_PERMISSIONS_KEY=admin.permissions
5
- VUE_APP_ROLES_KEY=admin.roles
6
- VUE_APP_USER_KEY=admin.user
7
- VUE_APP_LOGIN_KEY=admin.login
8
- VUE_APP_SETTING_KEY=admin.setting
9
- VUE_APP_TBAS_KEY=admin.tabs
10
- VUE_APP_TBAS_TITLES_KEY=admin.tabs.titles
11
- VUE_APP_DICTIONARY_KEY=admin.dictionary
12
- VUE_APP_BADGE_KEY=admin.badge
13
- VUE_APP_SINGLEVALUE_KEY=admin.singlevalue
14
- VUE_APP_DIVISIONSOHCHINA=admin.divisionsohchina
15
- VUE_APP_WEB_CONFIG_KEY=admin.webconfig
16
- VUE_APP_API_BASE_URL=http://123.60.214.109:8405
17
- VUE_APP_SYSTEM_NAME=af-message
18
- VUE_APP_LOGIN_VERSION=V4
19
-
1
+ VUE_APP_PUBLIC_PATH=/
2
+ VUE_APP_NAME=Admin
3
+ VUE_APP_ROUTES_KEY=admin.routes
4
+ VUE_APP_PERMISSIONS_KEY=admin.permissions
5
+ VUE_APP_ROLES_KEY=admin.roles
6
+ VUE_APP_USER_KEY=admin.user
7
+ VUE_APP_LOGIN_KEY=admin.login
8
+ VUE_APP_SETTING_KEY=admin.setting
9
+ VUE_APP_TBAS_KEY=admin.tabs
10
+ VUE_APP_TBAS_TITLES_KEY=admin.tabs.titles
11
+ VUE_APP_DICTIONARY_KEY=admin.dictionary
12
+ VUE_APP_BADGE_KEY=admin.badge
13
+ VUE_APP_SINGLEVALUE_KEY=admin.singlevalue
14
+ VUE_APP_DIVISIONSOHCHINA=admin.divisionsohchina
15
+ VUE_APP_WEB_CONFIG_KEY=admin.webconfig
16
+ VUE_APP_API_BASE_URL=http://123.60.214.109:8405
17
+ VUE_APP_SYSTEM_NAME=af-message
18
+ VUE_APP_LOGIN_VERSION=V4
19
+
package/.eslintrc.js CHANGED
@@ -1,74 +1,74 @@
1
- module.exports = {
2
- root: true,
3
- env: {
4
- node: true
5
- },
6
- // prettier 放最后,自动关闭所有与 Prettier 冲突的格式规则
7
- extends: ['plugin:vue/essential', 'plugin:vue/strongly-recommended', '@vue/standard', 'prettier'],
8
- rules: {
9
- camelcase: 'off',
10
- 'comma-dangle': 'off',
11
- 'no-console': 'off',
12
- 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
13
- 'generator-star-spacing': 'off',
14
- 'no-mixed-operators': 0,
15
- 'vue/max-attributes-per-line': 'off',
16
- 'vue/attribute-hyphenation': 0,
17
- 'vue/html-self-closing': 0,
18
- 'vue/component-name-in-template-casing': 0,
19
- 'vue/html-closing-bracket-spacing': 0,
20
- 'vue/singleline-html-element-content-newline': 0,
21
- 'vue/no-unused-components': 0,
22
- 'vue/multiline-html-element-content-newline': 0,
23
- 'vue/no-use-v-if-with-v-for': 0,
24
- 'vue/html-closing-bracket-newline': 0,
25
- 'vue/no-parsing-error': 0,
26
- 'vue/name-property-casing': 0,
27
- 'vue/multi-word-component-names': 0,
28
- 'vue/no-mutating-props': 0,
29
- 'no-tabs': 0,
30
- 'multiline-ternary': 0,
31
- 'object-shorthand': 0,
32
- quotes: [
33
- 2,
34
- 'single',
35
- {
36
- avoidEscape: true,
37
- allowTemplateLiterals: true
38
- }
39
- ],
40
- semi: [
41
- 2,
42
- 'never',
43
- {
44
- beforeStatementContinuationChars: 'never'
45
- }
46
- ],
47
- 'no-delete-var': 2,
48
- 'prefer-const': [
49
- 2,
50
- {
51
- ignoreReadBeforeAssign: false
52
- }
53
- ],
54
- 'template-curly-spacing': 'off',
55
- indent: 'off',
56
- // 必须使用全等: false
57
- eqeqeq: 0,
58
- // 可以使用!! 双重否定
59
- 'no-extra-boolean-cast': 'off',
60
- // 关闭函数名后空格检查,跟随 Prettier 默认风格 function foo()
61
- 'space-before-function-paren': 'off'
62
- },
63
- parserOptions: {
64
- parser: '@babel/eslint-parser'
65
- },
66
- overrides: [
67
- {
68
- files: ['**/__tests__/*.{j,t}s?(x)', '**/tests/unit/**/*.spec.{j,t}s?(x)'],
69
- env: {
70
- jest: true
71
- }
72
- }
73
- ]
74
- }
1
+ module.exports = {
2
+ root: true,
3
+ env: {
4
+ node: true
5
+ },
6
+ // prettier 放最后,自动关闭所有与 Prettier 冲突的格式规则
7
+ extends: ['plugin:vue/essential', 'plugin:vue/strongly-recommended', '@vue/standard', 'prettier'],
8
+ rules: {
9
+ camelcase: 'off',
10
+ 'comma-dangle': 'off',
11
+ 'no-console': 'off',
12
+ 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
13
+ 'generator-star-spacing': 'off',
14
+ 'no-mixed-operators': 0,
15
+ 'vue/max-attributes-per-line': 'off',
16
+ 'vue/attribute-hyphenation': 0,
17
+ 'vue/html-self-closing': 0,
18
+ 'vue/component-name-in-template-casing': 0,
19
+ 'vue/html-closing-bracket-spacing': 0,
20
+ 'vue/singleline-html-element-content-newline': 0,
21
+ 'vue/no-unused-components': 0,
22
+ 'vue/multiline-html-element-content-newline': 0,
23
+ 'vue/no-use-v-if-with-v-for': 0,
24
+ 'vue/html-closing-bracket-newline': 0,
25
+ 'vue/no-parsing-error': 0,
26
+ 'vue/name-property-casing': 0,
27
+ 'vue/multi-word-component-names': 0,
28
+ 'vue/no-mutating-props': 0,
29
+ 'no-tabs': 0,
30
+ 'multiline-ternary': 0,
31
+ 'object-shorthand': 0,
32
+ quotes: [
33
+ 2,
34
+ 'single',
35
+ {
36
+ avoidEscape: true,
37
+ allowTemplateLiterals: true
38
+ }
39
+ ],
40
+ semi: [
41
+ 2,
42
+ 'never',
43
+ {
44
+ beforeStatementContinuationChars: 'never'
45
+ }
46
+ ],
47
+ 'no-delete-var': 2,
48
+ 'prefer-const': [
49
+ 2,
50
+ {
51
+ ignoreReadBeforeAssign: false
52
+ }
53
+ ],
54
+ 'template-curly-spacing': 'off',
55
+ indent: 'off',
56
+ // 必须使用全等: false
57
+ eqeqeq: 0,
58
+ // 可以使用!! 双重否定
59
+ 'no-extra-boolean-cast': 'off',
60
+ // 关闭函数名后空格检查,跟随 Prettier 默认风格 function foo()
61
+ 'space-before-function-paren': 'off'
62
+ },
63
+ parserOptions: {
64
+ parser: '@babel/eslint-parser'
65
+ },
66
+ overrides: [
67
+ {
68
+ files: ['**/__tests__/*.{j,t}s?(x)', '**/tests/unit/**/*.spec.{j,t}s?(x)'],
69
+ env: {
70
+ jest: true
71
+ }
72
+ }
73
+ ]
74
+ }
package/Components.md CHANGED
@@ -1,60 +1,60 @@
1
- # vue2基础组件库组件介绍
2
-
3
- ## XAddForm
4
-
5
- 基于XAddNativeForm二次封装的动态表单的Modal形式
6
-
7
- [使用文档](src/base-client/components/common/XAddForm/index.md)
8
-
9
- ## XAddNativeForm
10
-
11
- 通过JSON配置动态生成的数据保存表单
12
-
13
- [使用文档](src/base-client/components/common/XAddNativeForm/index.md)
14
-
15
- ## XBadge
16
-
17
- 对antdv的badge组件进行重封装
18
-
19
- [使用文档](src/base-client/components/common/XBadge/index.md)
20
-
21
- ## XCard
22
-
23
- 通用数据加载状态管理容器
24
-
25
- 提供一个可以根据数据加载状态显示不同内容的通用容器
26
- 当loadState为loading时,显示骨架屏(加载界面)
27
- 当loadState为success时,显示容器内容
28
- 当loadState为error时,显示点击重新加载数据的提示界面
29
-
30
- [使用文档](src/base-client/components/common/XCard/index.md)
31
-
32
- ## XForm
33
-
34
- 通过JSON配置动态生成的数据筛选查询表单
35
-
36
- [使用文档](src/base-client/components/common/XForm/index.md)
37
-
38
- ## XTable
39
-
40
- 通过JSON配置动态生成的数据表格
41
-
42
- [使用文档](src/base-client/components/common/XTable/index.md)
43
-
44
- ## XFormCol
45
-
46
- 适用于动态表单的可以自适应各种分辨率设备的栅格组件封装
47
-
48
- [使用文档](src/base-client/components/common/XFormCol/index.md)
49
-
50
- ## XFormTable
51
-
52
- 对XAddForm,XForm和XTable组件的二次封装,实现通过JSON配置动态生成一个完整的实体操作页面
53
-
54
- [使用文档](src/base-client/components/common/XFormTable/index.md)
55
-
56
- ## XImportExcel
57
-
58
- 通用的导入excel组件
59
-
60
- [使用文档](src/base-client/components/common/XImportExcel/index.md)
1
+ # vue2基础组件库组件介绍
2
+
3
+ ## XAddForm
4
+
5
+ 基于XAddNativeForm二次封装的动态表单的Modal形式
6
+
7
+ [使用文档](src/base-client/components/common/XAddForm/index.md)
8
+
9
+ ## XAddNativeForm
10
+
11
+ 通过JSON配置动态生成的数据保存表单
12
+
13
+ [使用文档](src/base-client/components/common/XAddNativeForm/index.md)
14
+
15
+ ## XBadge
16
+
17
+ 对antdv的badge组件进行重封装
18
+
19
+ [使用文档](src/base-client/components/common/XBadge/index.md)
20
+
21
+ ## XCard
22
+
23
+ 通用数据加载状态管理容器
24
+
25
+ 提供一个可以根据数据加载状态显示不同内容的通用容器
26
+ 当loadState为loading时,显示骨架屏(加载界面)
27
+ 当loadState为success时,显示容器内容
28
+ 当loadState为error时,显示点击重新加载数据的提示界面
29
+
30
+ [使用文档](src/base-client/components/common/XCard/index.md)
31
+
32
+ ## XForm
33
+
34
+ 通过JSON配置动态生成的数据筛选查询表单
35
+
36
+ [使用文档](src/base-client/components/common/XForm/index.md)
37
+
38
+ ## XTable
39
+
40
+ 通过JSON配置动态生成的数据表格
41
+
42
+ [使用文档](src/base-client/components/common/XTable/index.md)
43
+
44
+ ## XFormCol
45
+
46
+ 适用于动态表单的可以自适应各种分辨率设备的栅格组件封装
47
+
48
+ [使用文档](src/base-client/components/common/XFormCol/index.md)
49
+
50
+ ## XFormTable
51
+
52
+ 对XAddForm,XForm和XTable组件的二次封装,实现通过JSON配置动态生成一个完整的实体操作页面
53
+
54
+ [使用文档](src/base-client/components/common/XFormTable/index.md)
55
+
56
+ ## XImportExcel
57
+
58
+ 通用的导入excel组件
59
+
60
+ [使用文档](src/base-client/components/common/XImportExcel/index.md)
package/docs/index.md CHANGED
@@ -1,30 +1,30 @@
1
- ## 文档列表
2
- ### common
3
- * [CreateQuery 完整查询配置生成](../src/base-client/components/common/CreateQuery/index.md)
4
- * [CreateSimpleFormQuery 基础表单配置生成](../src/base-client/components/common/CreateSimpleFormQuery/index.md)
5
- * [CustomColumnsDrawer 自定义表格列](../src/base-client/components/common/CustomColumnsDrawer/index.md)
6
- * [FormGroupEdit 表单参数组配置编辑](../src/base-client/components/common/FormGroupEdit/index.md)
7
- * [FormGroupQuery 表单参数组配置生成](../src/base-client/components/common/FormGroupQuery/index.md)
8
- * [XAddForm 动态新增/修改表单控件,根据JSON配置生成一个完整的可供新增/修改数据的动态表单](../src/base-client/components/common/XAddForm/index.md)
9
- * [XBadge 重封装徽标](../src/base-client/components/common/XBadge/index.md)
10
- * [XCard 通用数据加载状态管理容器](../src/base-client/components/common/XCard/index.md)
11
- * [XForm 动态表单控件,根据JSON配置生成一个完整的动态表单](../src/base-client/components/common/XForm/index.md)
12
- * [XFormCol 适用于表单的通用响应式栅格a-col封装](../src/base-client/components/common/XFormCol/index.md)
13
- * [XFormTable 动态查询控件,进一步整合了XTable和XForm](../src/base-client/components/common/XFormTable/index.md)
14
- * [XTable 动态表格控件,根据JSON配置生成一个完整的动态表格](../src/base-client/components/common/XTable/index.md)
15
- * [XTable 动态表格控件,根据JSON配置生成一个完整的动态表格](../src/base-client/components/common/XTable/index.md)
16
- *
17
- ### iot
18
- * [CustomerDetailsView 客户详情页](../src/base-client/components/iot/CustomerDetailsView/index.md)
19
- * [DeviceDetailsView 档案详情页](../src/base-client/components/iot/DeviceDetailsView/index.md)
20
- * [InstructDetailsView 指令详情页](../src/base-client/components/iot/InstructDetailsView/index.md)
21
- * [LogDetailsView 日志详情页](../src/base-client/components/iot/LogDetailsView/index.md)
22
- * [MeterDetailsView 单个表具档案](../src/base-client/components/iot/MeterDetailsView/index.md)
23
-
24
- ### system
25
- * [DictionaryDetailsView 字典详情页](../src/base-client/components/system/DictionaryDetailsView/index.md)
26
-
27
- ### ticket
28
- * [EmployeeDetailsView 员工详情页](../src/base-client/components/ticket/EmployeeDetailsView/index.md)
29
- * [TicketDetailsView 工单详情页](../src/base-client/components/ticket/TicketDetailsView/index.md)
30
- * [TicketSubmitSuccessView 单个工单详情页](../src/base-client/components/ticket/TicketSubmitSuccessView/index.md)
1
+ ## 文档列表
2
+ ### common
3
+ * [CreateQuery 完整查询配置生成](../src/base-client/components/common/CreateQuery/index.md)
4
+ * [CreateSimpleFormQuery 基础表单配置生成](../src/base-client/components/common/CreateSimpleFormQuery/index.md)
5
+ * [CustomColumnsDrawer 自定义表格列](../src/base-client/components/common/CustomColumnsDrawer/index.md)
6
+ * [FormGroupEdit 表单参数组配置编辑](../src/base-client/components/common/FormGroupEdit/index.md)
7
+ * [FormGroupQuery 表单参数组配置生成](../src/base-client/components/common/FormGroupQuery/index.md)
8
+ * [XAddForm 动态新增/修改表单控件,根据JSON配置生成一个完整的可供新增/修改数据的动态表单](../src/base-client/components/common/XAddForm/index.md)
9
+ * [XBadge 重封装徽标](../src/base-client/components/common/XBadge/index.md)
10
+ * [XCard 通用数据加载状态管理容器](../src/base-client/components/common/XCard/index.md)
11
+ * [XForm 动态表单控件,根据JSON配置生成一个完整的动态表单](../src/base-client/components/common/XForm/index.md)
12
+ * [XFormCol 适用于表单的通用响应式栅格a-col封装](../src/base-client/components/common/XFormCol/index.md)
13
+ * [XFormTable 动态查询控件,进一步整合了XTable和XForm](../src/base-client/components/common/XFormTable/index.md)
14
+ * [XTable 动态表格控件,根据JSON配置生成一个完整的动态表格](../src/base-client/components/common/XTable/index.md)
15
+ * [XTable 动态表格控件,根据JSON配置生成一个完整的动态表格](../src/base-client/components/common/XTable/index.md)
16
+ *
17
+ ### iot
18
+ * [CustomerDetailsView 客户详情页](../src/base-client/components/iot/CustomerDetailsView/index.md)
19
+ * [DeviceDetailsView 档案详情页](../src/base-client/components/iot/DeviceDetailsView/index.md)
20
+ * [InstructDetailsView 指令详情页](../src/base-client/components/iot/InstructDetailsView/index.md)
21
+ * [LogDetailsView 日志详情页](../src/base-client/components/iot/LogDetailsView/index.md)
22
+ * [MeterDetailsView 单个表具档案](../src/base-client/components/iot/MeterDetailsView/index.md)
23
+
24
+ ### system
25
+ * [DictionaryDetailsView 字典详情页](../src/base-client/components/system/DictionaryDetailsView/index.md)
26
+
27
+ ### ticket
28
+ * [EmployeeDetailsView 员工详情页](../src/base-client/components/ticket/EmployeeDetailsView/index.md)
29
+ * [TicketDetailsView 工单详情页](../src/base-client/components/ticket/TicketDetailsView/index.md)
30
+ * [TicketSubmitSuccessView 单个工单详情页](../src/base-client/components/ticket/TicketSubmitSuccessView/index.md)
@@ -193,17 +193,35 @@ POST 请求默认开启去重,防止用户快速重复点击导致的重复提
193
193
 
194
194
  **工作原理:**
195
195
  - 相同的 URL + 参数 组合视为重复请求
196
- - 重复请求会被直接拒绝(不发起网络请求),控制台输出警告
196
+ - **开发环境**:默认使用 `reuse` 策略,复用请求结果,避免热更新(HMR)触发重复请求
197
+ - **生产环境**:默认使用 `reject` 策略,拒绝重复请求,严格防止重复提交
197
198
  - 请求完成后自动清理记录
198
199
 
200
+ **去重策略:**
201
+
202
+ | 策略 | 行为 | 默认环境 | 适用场景 |
203
+ |------|------|---------|---------|
204
+ | `reuse` | 复用第一个请求的结果 | 开发环境 | 下拉框数据、热更新场景 |
205
+ | `reject` | 拒绝后续重复请求 | 生产环境 | 表单提交、数据保存 |
206
+
199
207
  **关闭去重:**
200
208
 
201
209
  ```javascript
202
210
  post('/api/save', data, { dedupe: false })
203
211
  ```
204
212
 
213
+ **显式指定策略:**
214
+
215
+ ```javascript
216
+ // 强制使用拒绝策略(即使在开发环境)
217
+ post('/api/submit', data, { dedupeStrategy: 'reject' })
218
+
219
+ // 强制使用复用策略(即使在生产环境)
220
+ post('/api/options', params, { dedupeStrategy: 'reuse' })
221
+ ```
222
+
205
223
  **错误码:**
206
- - 重复请求被拦截时,error.code 为 `ERR_DUPLICATE_REQUEST`
224
+ - 重复请求被拦截时,error.code 为 `ERR_DUPLICATE_REQUEST`(仅 reject 策略)
207
225
 
208
226
  ### 2. 全局 Loading
209
227
 
package/index.js CHANGED
@@ -1,31 +1,31 @@
1
- import Vue from 'vue'
2
- import { initRouter } from '@vue2-client/router/index.js'
3
- import { initI18n } from '@vue2-client/utils/i18n'
4
- import bootstrap from '@vue2-client/bootstrap'
5
- import { modules } from '@vue2-client/store'
6
- import '@vue2-client/theme/index.less'
7
- import '@vue2-client/utils/filter'
8
- import 'animate.css/source/animate.css'
9
- import 'moment/locale/zh-cn'
10
- import Antd from 'ant-design-vue'
11
- import Viser from 'viser-vue'
12
- // 插件
13
- import Plugins from '@vue2-client/base-client/plugins'
14
-
15
- const routerOptions = initRouter()
16
- const i18n = initI18n('CN', 'US')
17
-
18
- Vue.use(Antd)
19
- Vue.use(Viser)
20
- Vue.use(Plugins)
21
-
22
- Vue.config.productionTip = false
23
- const message = Vue.prototype.$message
24
-
25
- export {
26
- routerOptions,
27
- modules,
28
- i18n,
29
- message,
30
- bootstrap
31
- }
1
+ import Vue from 'vue'
2
+ import { initRouter } from '@vue2-client/router/index.js'
3
+ import { initI18n } from '@vue2-client/utils/i18n'
4
+ import bootstrap from '@vue2-client/bootstrap'
5
+ import { modules } from '@vue2-client/store'
6
+ import '@vue2-client/theme/index.less'
7
+ import '@vue2-client/utils/filter'
8
+ import 'animate.css/source/animate.css'
9
+ import 'moment/locale/zh-cn'
10
+ import Antd from 'ant-design-vue'
11
+ import Viser from 'viser-vue'
12
+ // 插件
13
+ import Plugins from '@vue2-client/base-client/plugins'
14
+
15
+ const routerOptions = initRouter()
16
+ const i18n = initI18n('CN', 'US')
17
+
18
+ Vue.use(Antd)
19
+ Vue.use(Viser)
20
+ Vue.use(Plugins)
21
+
22
+ Vue.config.productionTip = false
23
+ const message = Vue.prototype.$message
24
+
25
+ export {
26
+ routerOptions,
27
+ modules,
28
+ i18n,
29
+ message,
30
+ bootstrap
31
+ }
@@ -1,8 +1,8 @@
1
- module.exports = {
2
- process () {
3
- return 'module.exports = {};'
4
- },
5
- getCacheKey () {
6
- return 'lessTransform'
7
- },
8
- }
1
+ module.exports = {
2
+ process () {
3
+ return 'module.exports = {};'
4
+ },
5
+ getCacheKey () {
6
+ return 'lessTransform'
7
+ },
8
+ }
package/jest.setup.js CHANGED
@@ -1,7 +1,7 @@
1
- global.matchMedia = global.matchMedia || function () {
2
- return {
3
- matches: false,
4
- addListener: function () {},
5
- removeListener: function () {}
6
- }
7
- }
1
+ global.matchMedia = global.matchMedia || function () {
2
+ return {
3
+ matches: false,
4
+ addListener: function () {},
5
+ removeListener: function () {}
6
+ }
7
+ }