Selaa lähdekoodia

echarts、传感器

hrx 2 vuotta sitten
vanhempi
commit
8ef2e8616b
100 muutettua tiedostoa jossa 1661 lisäystä ja 1187 poistoa
  1. 5 0
      build/vite/plugin/index.ts
  2. 4 3
      build/vite/plugin/styleImport.ts
  3. 1 1
      build/vite/plugin/theme.ts
  4. 2 2
      mock/_createProductionServer.ts
  5. 20 21
      package.json
  6. BIN
      public/model/glft/cf/dscf.glb
  7. 6 6
      src/App.vue
  8. 2 2
      src/components/Container/src/Adaptive.vue
  9. 1 1
      src/components/Cropper/src/CropperAvatar.vue
  10. 34 4
      src/components/Form/src/BasicForm.vue
  11. 5 0
      src/components/Form/src/componentMap.ts
  12. 10 3
      src/components/Form/src/components/RadioButtonGroup.vue
  13. 8 0
      src/components/Form/src/hooks/useForm.ts
  14. 5 1
      src/components/Form/src/hooks/useFormEvents.ts
  15. 6 3
      src/components/Form/src/hooks/useLabelWidth.ts
  16. 1 2
      src/components/Form/src/jeecg/components/JAreaLinkage.vue
  17. 32 21
      src/components/Form/src/jeecg/components/JAreaSelect.vue
  18. 10 2
      src/components/Form/src/jeecg/components/JCategorySelect.vue
  19. 15 0
      src/components/Form/src/jeecg/components/JCodeEditor.vue
  20. 38 11
      src/components/Form/src/jeecg/components/JDictSelectTag.vue
  21. 5 0
      src/components/Form/src/jeecg/components/JEasyCron/easy.cron.inner.less
  22. 7 6
      src/components/Form/src/jeecg/components/JEasyCron/tabs/DayUI.vue
  23. 7 1
      src/components/Form/src/jeecg/components/JFormContainer.vue
  24. 4 1
      src/components/Form/src/jeecg/components/JImageUpload.vue
  25. 2 0
      src/components/Form/src/jeecg/components/JPopup.vue
  26. 13 10
      src/components/Form/src/jeecg/components/JRangeNumber.vue
  27. 11 1
      src/components/Form/src/jeecg/components/JSearchSelect.vue
  28. 1 1
      src/components/Form/src/jeecg/components/JSelectDept.vue
  29. 1 1
      src/components/Form/src/jeecg/components/JSelectMultiple.vue
  30. 1 1
      src/components/Form/src/jeecg/components/JSelectPosition.vue
  31. 1 1
      src/components/Form/src/jeecg/components/JSelectRole.vue
  32. 1 1
      src/components/Form/src/jeecg/components/JSelectUser.vue
  33. 1 1
      src/components/Form/src/jeecg/components/JSelectUserByDept.vue
  34. 3 3
      src/components/Form/src/jeecg/components/JSwitch.vue
  35. 84 10
      src/components/Form/src/jeecg/components/JTreeSelect.vue
  36. 3 1
      src/components/Form/src/jeecg/components/JUpload/JUpload.vue
  37. 1 1
      src/components/Form/src/jeecg/components/base/JSelectBiz.vue
  38. 1 1
      src/components/Form/src/jeecg/components/base/JTreeBiz.vue
  39. 8 1
      src/components/Form/src/jeecg/components/modal/DeptSelectModal.vue
  40. 2 2
      src/components/Form/src/jeecg/components/modal/UserSelectByDepModal.vue
  41. 11 7
      src/components/Form/src/jeecg/hooks/useSelectBiz.ts
  42. 2 1
      src/components/Form/src/jeecg/hooks/useTreeBiz.ts
  43. 3 0
      src/components/Form/src/types/index.ts
  44. 8 2
      src/components/Form/src/utils/formUtils.ts
  45. 791 793
      src/components/Icon/data/icons.data.ts
  46. 2 0
      src/components/JVxeCustom/index.ts
  47. 2 1
      src/components/JVxeCustom/src/components/JVxeSelectDictSearchCell.ts
  48. 3 0
      src/components/Menu/src/components/BasicSubMenuItem.vue
  49. 30 35
      src/components/Modal/src/BasicModal.vue
  50. 2 2
      src/components/SimpleMenu/src/SimpleMenu.vue
  51. 4 2
      src/components/SimpleMenu/src/SimpleSubMenu.vue
  52. 6 3
      src/components/Table/src/BasicTable.vue
  53. 4 1
      src/components/Table/src/components/TableAction.vue
  54. 7 2
      src/components/Table/src/components/TableHeader.vue
  55. 7 5
      src/components/Table/src/components/settings/ColumnSetting.vue
  56. 3 4
      src/components/Table/src/hooks/useDataSource.ts
  57. 4 0
      src/components/Table/src/hooks/useRowSelection.ts
  58. 9 0
      src/components/Table/src/hooks/useTable.ts
  59. 1 1
      src/components/Table/src/props.ts
  60. 2 0
      src/components/Table/src/types/table.ts
  61. 59 56
      src/components/chart/BarAndLine.vue
  62. 2 1
      src/components/jeecg/JVxeTable/src/components/JVxeToolbar.vue
  63. 1 1
      src/components/jeecg/JVxeTable/src/components/cells/JVxeProgressCell.vue
  64. 11 0
      src/components/jeecg/JVxeTable/src/hooks/useDragSort.ts
  65. 2 2
      src/components/jeecg/JVxeTable/src/hooks/useJVxeComponent.ts
  66. 4 0
      src/components/jeecg/JVxeTable/src/style/index.less
  67. 2 0
      src/components/jeecg/JVxeTable/src/types/JVxeTypes.ts
  68. 11 7
      src/components/jeecg/OnLine/JPopupOnlReport.vue
  69. 15 7
      src/components/jeecg/OnLine/SearchFormItem.vue
  70. 7 0
      src/components/jeecg/OnLine/hooks/usePopBiz.ts
  71. 12 9
      src/components/jeecg/comment/CommentList.vue
  72. 1 1
      src/components/jeecg/comment/CommentPanel.vue
  73. 9 9
      src/components/jeecg/comment/DataLogList.vue
  74. 4 5
      src/components/jeecg/comment/MyComment.vue
  75. 4 13
      src/components/jeecg/comment/useComment.ts
  76. 3 1
      src/design/ant/pagination.less
  77. 17 0
      src/design/theme.less
  78. 8 33
      src/design/vent/antCss.less
  79. 63 0
      src/design/vent/index.less
  80. 2 2
      src/design/vent/modal.less
  81. 1 1
      src/enums/CompTypeEnum.ts
  82. 1 1
      src/enums/pageEnum.ts
  83. 10 4
      src/hooks/component/useFormItem.ts
  84. 1 1
      src/hooks/core/threejs/useThree.ts
  85. 2 2
      src/hooks/setting/index.ts
  86. 4 0
      src/hooks/setting/useHeaderSetting.ts
  87. 8 2
      src/hooks/system/useJvxeMethods.ts
  88. 1 1
      src/hooks/system/useListPage.ts
  89. 5 5
      src/hooks/web/useMessage.ts
  90. 27 2
      src/hooks/web/usePage.ts
  91. 6 1
      src/hooks/web/useVentWebSocket.ts
  92. 3 0
      src/hooks/web/useWebColumns.ts
  93. 1 1
      src/layouts/default/header/components/notify/NoticeList.vue
  94. 14 26
      src/layouts/default/header/components/notify/index.vue
  95. 1 1
      src/layouts/default/header/components/user-dropdown/UpdatePassword.vue
  96. 46 1
      src/layouts/default/header/index.vue
  97. 25 0
      src/layouts/default/tabs/index.less
  98. 2 2
      src/locales/lang/en.ts
  99. 2 2
      src/locales/lang/zh_CN.ts
  100. 1 1
      src/logics/theme/dark.ts

+ 5 - 0
build/vite/plugin/index.ts

@@ -15,6 +15,8 @@ import { configVisualizerConfig } from './visualizer';
 import { configThemePlugin } from './theme';
 import { configImageminPlugin } from './imagemin';
 import { configSvgIconsPlugin } from './svgSprite';
+import OptimizationPersist from 'vite-plugin-optimize-persist';
+import PkgConfig from 'vite-plugin-package-config';
 
 export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) {
   const { VITE_USE_IMAGEMIN, VITE_USE_MOCK, VITE_LEGACY, VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv;
@@ -71,5 +73,8 @@ export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) {
     vitePlugins.push(configPwaConfig(viteEnv));
   }
 
+  //vite-plugin-theme【解决vite首次打开界面加载慢问题】
+  vitePlugins.push(PkgConfig());
+  vitePlugins.push(OptimizationPersist());
   return vitePlugins;
 }

+ 4 - 3
build/vite/plugin/styleImport.ts

@@ -5,9 +5,9 @@
 import { createStyleImportPlugin } from 'vite-plugin-style-import';
 
 export function configStyleImportPlugin(_isBuild: boolean) {
-  // if (!isBuild) {
-  //   return [];
-  // }
+  if (!_isBuild) {
+    return [];
+  }
   const styleImportPlugin = createStyleImportPlugin({
     libs: [
       {
@@ -66,6 +66,7 @@ export function configStyleImportPlugin(_isBuild: boolean) {
             'month-picker': 'date-picker',
             'range-picker': 'date-picker',
             'image-preview-group': 'image',
+            'time-range-picker': 'time-picker',
           };
 
           return ignoreList.includes(name)

+ 1 - 1
build/vite/plugin/theme.ts

@@ -4,7 +4,7 @@
  */
 import type { PluginOption } from 'vite';
 import path from 'path';
-import { viteThemePlugin, antdDarkThemePlugin, mixLighten, mixDarken, tinycolor } from 'vite-plugin-theme';
+import { viteThemePlugin, antdDarkThemePlugin, mixLighten, mixDarken, tinycolor } from '@rys-fe/vite-plugin-theme';
 import { getThemeColors, generateColors } from '../../config/themeConfig';
 import { generateModifyVars } from '../../generate/generateModifyVars';
 

+ 2 - 2
mock/_createProductionServer.ts

@@ -1,13 +1,13 @@
 import { createProdMockServer } from 'vite-plugin-mock/es/createProdMockServer';
 
-const modules = import.meta.globEager('./**/*.ts');
+const modules = import.meta.glob('./**/*.ts', { eager: true });
 
 const mockModules: any[] = [];
 Object.keys(modules).forEach((key) => {
   if (key.includes('/_')) {
     return;
   }
-  mockModules.push(...modules[key].default);
+  mockModules.push(...(modules as Recordable)[key].default);
 });
 
 /**

+ 20 - 21
package.json

@@ -1,25 +1,25 @@
 {
   "name": "jeecgboot-vue3",
-  "version": "3.4.2",
+  "version": "3.4.4",
   "author": {
     "name": "jeecg",
     "email": "jeecgos@163.com",
     "url": "https://github.com/jeecgboot/jeecgboot-vue3"
   },
   "scripts": {
-    "bootstrap": "yarn install",
+    "bootstrap": "pnpm install",
     "serve": "npm run dev",
     "dev": "vite",
     "clean:cache": "rimraf node_modules/.cache/ && rimraf node_modules/.vite",
+    "clean:lib": "rimraf node_modules",
     "build": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=8192 vite build && esno ./build/script/postBuild.ts",
-    "build:test": "cross-env vite build --mode test && esno ./build/script/postBuild.ts",
-    "build:no-cache": "yarn clean:cache && npm run build",
+    "build:test": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build --mode test && esno ./build/script/postBuild.ts",
+    "build:no-cache": "pnpm clean:cache && npm run build",
     "report": "cross-env REPORT=true npm run build",
     "type:check": "vue-tsc --noEmit --skipLibCheck",
     "preview": "npm run build && vite preview",
     "preview:dist": "vite preview",
     "log": "conventional-changelog -p angular -i CHANGELOG.md -s",
-    "clean:lib": "rimraf node_modules",
     "lint:eslint": "eslint --cache --max-warnings 0  \"{src,mock}/**/*.{vue,ts,tsx}\" --fix",
     "lint:prettier": "prettier --write  \"src/**/*.{js,json,tsx,css,less,scss,vue,html,md}\"",
     "lint:stylelint": "stylelint --cache --fix \"**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/",
@@ -29,7 +29,7 @@
     "test:unit-coverage": "jest --coverage",
     "test:gzip": "http-server dist --cors --gzip -c-1",
     "test:br": "http-server dist --cors --brotli -c-1",
-    "reinstall": "rimraf yarn.lock && rimraf package.lock.json && rimraf node_modules && npm run bootstrap",
+    "reinstall": "rimraf pnpm-lock.yaml && yarn.lock && rimraf package.lock.json && rimraf node_modules && npm run bootstrap",
     "prepare": "husky install",
     "gen:icon": "esno ./build/generate/icon/index.ts"
   },
@@ -37,7 +37,7 @@
     "@ant-design/colors": "^6.0.0",
     "@ant-design/icons-vue": "^6.1.0",
     "@iconify/iconify": "^2.2.1",
-    "@jeecg/online": "1.0.1",
+    "@jeecg/online": "3.4.4-RC",
     "@liveqing/liveplayer-v3": "^3.1.9",
     "@logicflow/core": "^1.1.13",
     "@logicflow/extension": "^1.1.13",
@@ -47,7 +47,7 @@
     "@vueuse/core": "^8.3.0",
     "@vueuse/shared": "^8.3.0",
     "@zxcvbn-ts/core": "^2.0.1",
-    "ant-design-vue": "3.2.12",
+    "ant-design-vue": "^3.2.14",
     "axios": "^0.26.1",
     "china-area-data": "^5.0.1",
     "clipboard": "^2.0.8",
@@ -63,12 +63,11 @@
     "enquire.js": "^2.1.6",
     "gsap": "^3.11.3",
     "intro.js": "^5.1.0",
-    "js-cookie": "^2.2.1",
     "lodash-es": "^4.17.21",
     "lodash.get": "^4.4.2",
-    "lodash.pick": "^4.4.0",
     "md5": "^2.3.0",
     "mockjs": "^1.1.0",
+    "moment": "^2.29.4",
     "nprogress": "^0.2.0",
     "path-to-regexp": "^6.2.0",
     "pinia": "2.0.12",
@@ -83,6 +82,7 @@
     "three": "^0.145.0",
     "tinymce": "^5.10.3",
     "vditor": "^3.8.13",
+    "vite-plugin-theme": "^0.8.6",
     "vue": "^3.2.33",
     "vue-cropper": "^0.5.6",
     "vue-cropperjs": "^5.0.0",
@@ -94,7 +94,7 @@
     "vue-types": "^4.1.1",
     "vuedraggable": "^4.1.0",
     "vxe-table": "4.1.0",
-    "vxe-table-plugin-antd": "^3.0.5",
+    "vxe-table-plugin-antd": "3.0.5",
     "xe-utils": "^3.3.1",
     "xss": "^1.0.13"
   },
@@ -103,6 +103,7 @@
     "@commitlint/config-conventional": "^16.2.1",
     "@iconify/json": "^2.1.30",
     "@purge-icons/generated": "^0.8.1",
+    "@rys-fe/vite-plugin-theme": "^0.8.6",
     "@types/codemirror": "^5.60.5",
     "@types/crypto-js": "^4.1.1",
     "@types/fs-extra": "^9.0.13",
@@ -119,8 +120,8 @@
     "@types/sortablejs": "^1.10.7",
     "@typescript-eslint/eslint-plugin": "^5.20.0",
     "@typescript-eslint/parser": "^5.20.0",
-    "@vitejs/plugin-legacy": "^1.8.1",
-    "@vitejs/plugin-vue": "^2.3.1",
+    "@vitejs/plugin-legacy": "^2.0.0",
+    "@vitejs/plugin-vue": "^3.0.1",
     "@vitejs/plugin-vue-jsx": "^1.3.10",
     "@vue/compiler-sfc": "^3.2.33",
     "@vue/test-utils": "^2.0.0-rc.21",
@@ -166,28 +167,26 @@
     "ts-jest": "^27.0.7",
     "ts-node": "^10.7.0",
     "typescript": "^4.6.3",
-    "vite": "^2.9.5",
+    "vite": "^3.0.2",
     "vite-plugin-compression": "^0.5.1",
     "vite-plugin-html": "^3.2.0",
     "vite-plugin-imagemin": "^0.6.1",
-    "vite-plugin-mkcert": "1.6.0",
+    "vite-plugin-mkcert": "^1.10.1",
     "vite-plugin-mock": "^2.9.6",
     "vite-plugin-optimize-persist": "^0.1.2",
     "vite-plugin-package-config": "^0.1.1",
-    "vite-plugin-purge-icons": "^0.8.1",
-    "vite-plugin-pwa": "^0.11.13",
+    "vite-plugin-purge-icons": "^0.8.2",
+    "vite-plugin-pwa": "^0.12.3",
     "vite-plugin-style-import": "^2.0.0",
     "vite-plugin-svg-icons": "^2.0.1",
-    "vite-plugin-theme": "^0.8.6",
     "vite-plugin-vue-setup-extend": "^0.4.0",
-    "vite-plugin-windicss": "^1.8.4",
+    "vite-plugin-windicss": "^1.8.7",
     "vue-eslint-parser": "^8.3.0",
     "vue-tsc": "^0.33.9"
   },
   "resolutions": {
-    "//": "Used to install imagemin dependencies, because imagemin may not be installed in China. If it is abroad, you can delete it",
     "bin-wrapper": "npm:bin-wrapper-china",
-    "rollup": "^2.56.3"
+    "rollup": "^2.72.0"
   },
   "repository": {
     "type": "git",

BIN
public/model/glft/cf/dscf.glb


+ 6 - 6
src/App.vue

@@ -19,12 +19,12 @@
   // 解决日期时间国际化问题
   import 'dayjs/locale/zh-cn';
 
-  ConfigProvider.config({
-    prefixCls: 'vent-base',
-    theme: {
-      primaryColor: '#1890ff',
-    },
-  });
+  // ConfigProvider.config({
+  //   prefixCls: 'vent-base',
+  //   theme: {
+  //     primaryColor: '#1890ff',
+  //   },
+  // });
 
   // support Multi-language
   const { getAntdLocale } = useLocale();

+ 2 - 2
src/components/Container/src/Adaptive.vue

@@ -154,11 +154,11 @@
 
 <style lang="less" scoped>
   #adaptive-container {
-    position: fixed;
+    position: relative;
     top: 0;
     left: 0;
     overflow: hidden;
     transform-origin: left top;
-    z-index: 999;
+    z-index: 0;
   }
 </style>

+ 1 - 1
src/components/Cropper/src/CropperAvatar.vue

@@ -120,7 +120,7 @@
       -webkit-transition: opacity 0.4s;
       transition: opacity 0.4s;
 
-      ::v-deep(svg) {
+      :deep(svg) {
         margin: auto;
       }
     }

+ 34 - 4
src/components/Form/src/BasicForm.vue

@@ -69,7 +69,7 @@
         hideAdvanceBtn: true,
         isLoad: false,
         actionSpan: 6,
-      });      
+      });
 
       const defaultValueRef = ref<Recordable>({});
       const isInitedDefaultRef = ref(false);
@@ -113,15 +113,28 @@
       const getSchema = computed((): FormSchema[] => {
         const schemas: FormSchema[] = unref(schemaRef) || (unref(getProps).schemas as any);
         for (const schema of schemas) {
-          const { defaultValue, component } = schema;
+          const { defaultValue, component, componentProps } = schema;
           // handle date type
           if (defaultValue && dateItemType.includes(component)) {
+            const { valueFormat } = componentProps;
             if (!Array.isArray(defaultValue)) {
-              schema.defaultValue = dateUtil(defaultValue);
+              //update-begin---author:wangshuai ---date:20221124  for:[issues/215]列表页查询框(日期选择框)设置初始时间,一进入页面时,后台报日期转换类型错误的------------
+              if (valueFormat) {
+                schema.defaultValue = dateUtil(defaultValue).format(valueFormat);
+              } else {
+                schema.defaultValue = dateUtil(defaultValue);
+              }
+              //update-end---author:wangshuai ---date:20221124  for:[issues/215]列表页查询框(日期选择框)设置初始时间,一进入页面时,后台报日期转换类型错误的------------
             } else {
               const def: dayjs.Dayjs[] = [];
               defaultValue.forEach((item) => {
-                def.push(dateUtil(item));
+                //update-begin---author:wangshuai ---date:20221124  for:[issues/215]列表页查询框(日期选择框)设置初始时间,一进入页面时,后台报日期转换类型错误的------------
+                if (valueFormat) {
+                  def.push(dateUtil(item).format(valueFormat));
+                } else {
+                  def.push(dateUtil(item));
+                }
+                //update-end---author:wangshuai ---date:20221124  for:[issues/215]列表页查询框(日期选择框)设置初始时间,一进入页面时,后台报日期转换类型错误的------------
               });
               schema.defaultValue = def;
             }
@@ -322,6 +335,23 @@
         }
       }
     }
+    /*【美化表单】form的字体改小一号*/
+    .ant-form-item-label > label {
+      font-size: 13px;
+    }
+    .ant-form-item .ant-select {
+      font-size: 13px;
+    }
+    .ant-select-item-option-selected {
+      font-size: 13px;
+    }
+    .ant-select-item-option-content {
+      font-size: 13px;
+    }
+    .ant-input {
+      font-size: 13px;
+    }
+    /*【美化表单】form的字体改小一号*/
 
     .ant-form-explain {
       font-size: 14px;

+ 5 - 0
src/components/Form/src/componentMap.ts

@@ -15,11 +15,13 @@ import {
   InputNumber,
   Switch,
   TimePicker,
+  TimeRangePicker,
   TreeSelect,
   Slider,
   Rate,
   Divider,
 } from 'ant-design-vue';
+
 import ApiRadioGroup from './components/ApiRadioGroup.vue';
 import RadioButtonGroup from './components/RadioButtonGroup.vue';
 import ApiSelect from './components/ApiSelect.vue';
@@ -59,6 +61,7 @@ import JSearchSelect from './jeecg/components/JSearchSelect.vue';
 import JAddInput from './jeecg/components/JAddInput.vue';
 import { Time } from '/@/components/Time';
 import JRangeNumber from './jeecg/components/JRangeNumber.vue';
+import JRangeDate from './jeecg/components/JRangeDate.vue';
 
 const componentMap = new Map<ComponentType, Component>();
 
@@ -90,6 +93,7 @@ componentMap.set('MonthPicker', DatePicker.MonthPicker);
 componentMap.set('RangePicker', DatePicker.RangePicker);
 componentMap.set('WeekPicker', DatePicker.WeekPicker);
 componentMap.set('TimePicker', TimePicker);
+componentMap.set('TimeRangePicker', TimeRangePicker);
 componentMap.set('StrengthMeter', StrengthMeter);
 componentMap.set('IconPicker', IconPicker);
 componentMap.set('InputCountDown', CountdownInput);
@@ -127,6 +131,7 @@ componentMap.set('JUpload', JUpload);
 componentMap.set('JSearchSelect', JSearchSelect);
 componentMap.set('JAddInput', JAddInput);
 componentMap.set('JRangeNumber', JRangeNumber);
+componentMap.set('RangeDate', JRangeDate);
 
 export function add(compName: ComponentType, component: Component) {
   componentMap.set(compName, component);

+ 10 - 3
src/components/Form/src/components/RadioButtonGroup.vue

@@ -5,7 +5,8 @@
   <RadioGroup v-bind="attrs" v-model:value="state" button-style="solid">
     <template v-for="item in getOptions" :key="`${item.value}`">
       <RadioButton :value="item.value" :disabled="item.disabled">
-        {{ item.label }}
+        <Icon v-if="item.icon" :icon="item.icon" />
+        {{ item.label ? item.label : '' }}
       </RadioButton>
     </template>
   </RadioGroup>
@@ -16,8 +17,13 @@
   import { isString } from '/@/utils/is';
   import { useRuleFormItem } from '/@/hooks/component/useFormItem';
   import { useAttrs } from '/@/hooks/core/useAttrs';
-
-  type OptionsItem = { label: string; value: string | number | boolean; disabled?: boolean };
+  import { Icon } from '/@/components/Icon';
+  type OptionsItem = {
+    icon?: string;
+    label?: string;
+    value: string | number | boolean;
+    disabled?: boolean;
+  };
   type RadioItem = string | OptionsItem;
 
   export default defineComponent({
@@ -25,6 +31,7 @@
     components: {
       RadioGroup: Radio.Group,
       RadioButton: Radio.Button,
+      Icon,
     },
     props: {
       value: {

+ 8 - 0
src/components/Form/src/hooks/useForm.ts

@@ -6,6 +6,9 @@ import { ref, onUnmounted, unref, nextTick, watch } from 'vue';
 import { isProdMode } from '/@/utils/env';
 import { error } from '/@/utils/log';
 import { getDynamicProps, getValueType } from '/@/utils';
+import { add } from "/@/components/Form/src/componentMap";
+//集成online专用控件
+import { OnlineSelectCascade, LinkTableCard, LinkTableSelect } from  '@jeecg/online';
 
 export declare type ValidateFields = (nameList?: NamePath[]) => Promise<Recordable>;
 
@@ -15,6 +18,11 @@ export function useForm(props?: Props): UseFormReturnType {
   const formRef = ref<Nullable<FormActionType>>(null);
   const loadedRef = ref<Nullable<boolean>>(false);
 
+  //集成online专用控件
+  add("OnlineSelectCascade", OnlineSelectCascade)
+  add("LinkTableCard", LinkTableCard)
+  add("LinkTableSelect", LinkTableSelect)
+  
   async function getForm() {
     const form = unref(formRef);
     if (!form) {

+ 5 - 1
src/components/Form/src/hooks/useFormEvents.ts

@@ -251,7 +251,11 @@ export function useFormEvents({
       const res = handleFormValues(values);
       emit('submit', res);
     } catch (error) {
-      throw new Error(error);
+      //update-begin-author:taoyan date:2022-11-4 for: 列表查询表单会触发校验错误导致重置失败,原因不明
+      emit('submit', {});
+      console.error('query form validate error, please ignore!', error)
+      //throw new Error(error);
+      //update-end-author:taoyan date:2022-11-4 for: 列表查询表单会触发校验错误导致重置失败,原因不明
     }
   }
 

+ 6 - 3
src/components/Form/src/hooks/useLabelWidth.ts

@@ -10,7 +10,7 @@ export function useItemLabelWidth(schemaItemRef: Ref<FormSchema>, propsRef: Ref<
     const { labelCol = {}, wrapperCol = {} } = schemaItem.itemProps || {};
     const { labelWidth, disabledLabelWidth } = schemaItem;
 
-    const { labelWidth: globalLabelWidth, labelCol: globalLabelCol, wrapperCol: globWrapperCol } = unref(propsRef);
+    const { labelWidth: globalLabelWidth, labelCol: globalLabelCol, wrapperCol: globWrapperCol,layout } = unref(propsRef);
 
     // update-begin--author:sunjianlei---date:20211104---for: 禁用全局 labelWidth,不自动设置 textAlign --------
     if (disabledLabelWidth) {
@@ -34,8 +34,11 @@ export function useItemLabelWidth(schemaItemRef: Ref<FormSchema>, propsRef: Ref<
     }
 
     return {
-      labelCol: { style: { width }, ...col },
-      wrapperCol: { style: { width: `calc(100% - ${width})` }, ...wrapCol },
+      labelCol: { style: { width: width ? width : '100%' }, ...col },
+      wrapperCol: {
+        style: { width: layout === 'vertical' ? '100%' : `calc(100% - ${width})` },
+        ...wrapCol,
+      },
     };
   });
 }

+ 1 - 2
src/components/Form/src/jeecg/components/JAreaLinkage.vue

@@ -58,8 +58,7 @@
       }
 
       function handleChange(array, ...args) {
-        emitData.value = args;
-        console.info(emitData);
+        // emitData.value = args;
         //update-begin-author:taoyan date:2022-6-27 for: VUEN-1424【vue3】树表、单表、jvxe、erp 、内嵌子表省市县 选择不上
         // 上面改的v-model:value导致选中数据没有显示
         state.value = array;

+ 32 - 21
src/components/Form/src/jeecg/components/JAreaSelect.vue

@@ -1,24 +1,26 @@
 <template>
-  <div class="area-select">
-    <!--省份-->
-    <a-select v-model:value="province" @change="proChange" allowClear :disabled="disabled">
-      <template v-for="item in provinceOptions" :key="`${item.value}`">
-        <a-select-option :value="item.value">{{ item.label }}</a-select-option>
-      </template>
-    </a-select>
-    <!--城市-->
-    <a-select v-if="level >= 2" v-model:value="city" @change="cityChange" :disabled="disabled">
-      <template v-for="item in cityOptions" :key="`${item.value}`">
-        <a-select-option :value="item.value">{{ item.label }}</a-select-option>
-      </template>
-    </a-select>
-    <!--地区-->
-    <a-select v-if="level >= 3" v-model:value="area" @change="areaChange" :disabled="disabled">
-      <template v-for="item in areaOptions" :key="`${item.value}`">
-        <a-select-option :value="item.value">{{ item.label }}</a-select-option>
-      </template>
-    </a-select>
-  </div>
+  <a-form-item-rest>
+    <div class="area-select">
+      <!--省份-->
+      <a-select v-model:value="province" @change="proChange" allowClear :disabled="disabled">
+        <template v-for="item in provinceOptions" :key="`${item.value}`">
+          <a-select-option :value="item.value">{{ item.label }}</a-select-option>
+        </template>
+      </a-select>
+      <!--城市-->
+      <a-select v-if="level >= 2" v-model:value="city" @change="cityChange" :disabled="disabled">
+        <template v-for="item in cityOptions" :key="`${item.value}`">
+          <a-select-option :value="item.value">{{ item.label }}</a-select-option>
+        </template>
+      </a-select>
+      <!--地区-->
+      <a-select v-if="level >= 3" v-model:value="area" @change="areaChange" :disabled="disabled">
+        <template v-for="item in areaOptions" :key="`${item.value}`">
+          <a-select-option :value="item.value">{{ item.label }}</a-select-option>
+        </template>
+      </a-select>
+    </div>
+  </a-form-item-rest>
 </template>
 <script lang="ts">
   import { defineComponent, PropType, ref, reactive, watchEffect, computed, unref, watch, onMounted, onUnmounted, toRefs } from 'vue';
@@ -35,8 +37,17 @@
       area: [String],
       level: propTypes.number.def(3),
       disabled: propTypes.bool.def(false),
+      codeField: propTypes.string,
+      size: propTypes.string,
+      placeholder: propTypes.string,
+      formValues: propTypes.any,
+      allowClear: propTypes.bool.def(false),
+      getPopupContainer: {
+        type: Function,
+        default: (node) => node.parentNode,
+      },
     },
-    emits: ['change', 'update:value'],
+    emits: ['change', 'update:value','update:area','update:city','update:province'],
     setup(props, { emit, refs }) {
       const emitData = ref<any[]>([]);
       //下拉框的选择值

+ 10 - 2
src/components/Form/src/jeecg/components/JCategorySelect.vue

@@ -76,7 +76,8 @@
       console.info(props);
       const emitData = ref<any[]>([]);
       const treeData = ref<any[]>([]);
-      const treeValue = ref('');
+      const treeValue = ref();
+      treeValue.value = '';
       const attrs = useAttrs();
       const [state] = useRuleFormItem(props, 'value', 'change', emitData);
       watch(
@@ -118,7 +119,11 @@
 
       function loadItemByCode() {
         if (!props.value || props.value == '0') {
-          treeValue.value = [];
+          if(props.multiple){
+            treeValue.value = [];
+          }else{
+            treeValue.value = '';
+          }
         } else {
           loadDictItem({ ids: props.value }).then((res) => {
             let values = props.value.split(',');
@@ -127,6 +132,9 @@
               value: values[index],
               label: item,
             }));
+            if(!props.multiple){
+              treeValue.value = treeValue.value[0];
+            }
             onLoadTriggleChange(res[0]);
           });
         }

+ 15 - 0
src/components/Form/src/jeecg/components/JCodeEditor.vue

@@ -200,6 +200,15 @@
       );
 
       const getBindValue = Object.assign({}, unref(props), unref(attrs));
+
+      //update-begin-author:taoyan date:2022-10-18 for: VUEN-2480【严重bug】online vue3测试的问题 8、online js增强样式问题
+      function refresh(){
+        if(coder){
+          coder.refresh();
+        }
+      }
+      //update-end-author:taoyan date:2022-10-18 for: VUEN-2480【严重bug】online vue3测试的问题 8、online js增强样式问题
+      
       return {
         state,
         textarea,
@@ -209,6 +218,7 @@
         isFullScreen,
         fullScreenIcon,
         onToggleFullScreen,
+        refresh
       };
     },
   });
@@ -282,5 +292,10 @@
         height: 100%;
       }
     }
+    
+    /** VUEN-2344【vue3】这个样式有问题,是不是加个边框 */
+    .CodeMirror{
+      border: 1px solid #ddd;
+    }
   }
 </style>

+ 38 - 11
src/components/Form/src/jeecg/components/JDictSelectTag.vue

@@ -1,5 +1,5 @@
 <template>
-  <a-radio-group v-if="compType === CompTypeEnum.Radio" v-bind="attrs" v-model:value="state" @change="handleChange">
+  <a-radio-group v-if="compType === CompTypeEnum.Radio" v-bind="attrs" v-model:value="state" @change="handleChangeRadio">
     <template v-for="item in dictOptions" :key="`${item.value}`">
       <a-radio :value="item.value">
         {{ item.label }}
@@ -7,7 +7,13 @@
     </template>
   </a-radio-group>
 
-  <a-radio-group v-else-if="compType === CompTypeEnum.RadioButton" v-bind="attrs" v-model:value="state" buttonStyle="solid" @change="handleChange">
+  <a-radio-group
+    v-else-if="compType === CompTypeEnum.RadioButton"
+    v-bind="attrs"
+    v-model:value="state"
+    buttonStyle="solid"
+    @change="handleChangeRadio"
+  >
     <template v-for="item in dictOptions" :key="`${item.value}`">
       <a-radio-button :value="item.value">
         {{ item.label }}
@@ -44,7 +50,6 @@
 </template>
 <script lang="ts">
   import { defineComponent, PropType, ref, reactive, watchEffect, computed, unref, watch, onMounted, nextTick } from 'vue';
-  import { Form } from 'ant-design-vue';
   import { propTypes } from '/@/utils/propTypes';
   import { useAttrs } from '/@/hooks/core/useAttrs';
   import { initDictOptions } from '/@/utils/dict';
@@ -55,8 +60,8 @@
 
   export default defineComponent({
     name: 'JDictSelectTag',
-    inheritAttrs: false,
     components: { LoadingOutlined },
+    inheritAttrs: false,
     props: {
       value: propTypes.oneOfType([propTypes.string, propTypes.number, propTypes.array]),
       dictCode: propTypes.string,
@@ -78,11 +83,9 @@
     },
     emits: ['options-change', 'change'],
     setup(props, { emit, refs }) {
-      const { onFieldChange } = Form.useInjectFormItemContext();
-      const emitData = ref<any[]>([]);
       const dictOptions = ref<any[]>([]);
       const attrs = useAttrs();
-      const [state] = useRuleFormItem(props, 'value', 'change', emitData);
+      const [state, , , formItemContext] = useRuleFormItem(props, 'value', 'change');
       const getBindValue = Object.assign({}, unref(props), unref(attrs));
       // 是否正在加载回显数据
       const loadingEcho = ref<boolean>(false);
@@ -118,7 +121,7 @@
         () => {
           if (props.value === '') {
             emit('change', '');
-            nextTick(() => onFieldChange());
+            nextTick(() => formItemContext.onFieldChange());
           }
         }
       );
@@ -142,14 +145,37 @@
       }
 
       function handleChange(e) {
-        emitData.value = [e?.target?.value || e];
-        nextTick(() => onFieldChange());
+        const { mode } = unref<Recordable>(getBindValue);
+        // 兼容多选模式
+        if (mode === 'multiple') {
+          state.value = e?.target?.value ?? e;
+        } else {
+          state.value = [e?.target?.value ?? e];
+        }
+        // 过滤掉空值
+        if (state.value == null || state.value === '') {
+          state.value = [];
+        }
+        if (Array.isArray(state.value)) {
+          state.value = state.value.filter((item) => item != null && item !== '');
+        }
+        //update-begin---author:wangshuai ---date:20221123  for:单选模式要改成字符串------------
+        if (mode !== 'multiple' && state.value && state.value.length > 0) {
+          state.value = state.value[0];
+        }
+        //update-end---author:wangshuai ---date:20221123  for:单选模式要改成字符串--------------
+        // nextTick(() => formItemContext.onFieldChange());
+      }
+
+      /** 单选radio的值变化事件 */
+      function handleChangeRadio(e) {
+        state.value = e?.target?.value ?? e;
       }
 
       /** 用于搜索下拉框中的内容 */
       function handleFilterOption(input, option) {
         // 在 label 中搜索
-        let labelIf = option?.children[0]?.children.toLowerCase().indexOf(input.toLowerCase()) >= 0;
+        let labelIf = option.children()[0]?.children.toLowerCase().indexOf(input.toLowerCase()) >= 0;
         if (labelIf) {
           return true;
         }
@@ -166,6 +192,7 @@
         dictOptions,
         CompTypeEnum,
         handleChange,
+        handleChangeRadio,
         handleFilterOption,
       };
     },

+ 5 - 0
src/components/Form/src/jeecg/components/JEasyCron/easy.cron.inner.less

@@ -14,6 +14,11 @@
 
     .item {
       margin-top: 5px;
+      font-size: 14px;
+
+      span {
+        padding: 0 2px;
+      }
     }
 
     .choice {

+ 7 - 6
src/components/Form/src/jeecg/components/JEasyCron/tabs/DayUI.vue

@@ -24,12 +24,13 @@
         <InputNumber v-model:value="valueLoop.interval" v-bind="typeLoopAttrs" />
         <span> 日 </span>
       </div>
-      <div class="item">
-        <a-radio :value="TypeEnum.work" v-bind="beforeRadioAttrs">工作日</a-radio>
-        <span> 本月 </span>
-        <InputNumber v-model:value="valueWork" v-bind="typeWorkAttrs" />
-        <span> 日,最近的工作日 </span>
-      </div>
+<!--       工作日暂不支持,会报错,先隐藏了 -->
+<!--      <div class="item">-->
+<!--        <a-radio :value="TypeEnum.work" v-bind="beforeRadioAttrs">工作日</a-radio>-->
+<!--        <span> 本月 </span>-->
+<!--        <InputNumber v-model:value="valueWork" v-bind="typeWorkAttrs" />-->
+<!--        <span> 日,最近的工作日 </span>-->
+<!--      </div>-->
       <div class="item">
         <a-radio :value="TypeEnum.last" v-bind="beforeRadioAttrs">最后一日</a-radio>
       </div>

+ 7 - 1
src/components/Form/src/jeecg/components/JFormContainer.vue

@@ -21,7 +21,7 @@
   });
 </script>
 
-<style lang="less" scoped>
+<style lang="less">
   .jeecg-form-container-disabled {
     cursor: not-allowed;
 
@@ -42,6 +42,12 @@
     .ant-upload-list {
       cursor: grabbing;
     }
+
+    fieldset[disabled]{
+      .anticon-delete{
+        display: none !important;
+      }
+    }
   }
 
   .jeecg-form-container-disabled fieldset[disabled] .ant-upload-list {

+ 4 - 1
src/components/Form/src/jeecg/components/JImageUpload.vue

@@ -182,6 +182,9 @@
         if (file.status != 'uploading') {
           fileList.forEach((file) => {
             if (file.status === 'done') {
+              //update-begin---author:wangshuai ---date:20221121  for:[issues/248]原生表单内使用图片组件,关闭弹窗图片组件值不会被清空------------
+              initTag.value = true;
+              //update-end---author:wangshuai ---date:20221121  for:[issues/248]原生表单内使用图片组件,关闭弹窗图片组件值不会被清空------------
               fileUrls.push(file.response.message);
             }
           });
@@ -189,7 +192,7 @@
             handleDelete(file);
           }
         }
-        emitData.value = fileUrls.join(',');
+        // emitData.value = fileUrls.join(',');
         state.value = fileUrls.join(',');
         emit('update:value', fileUrls.join(','));
       }

+ 2 - 0
src/components/Form/src/jeecg/components/JPopup.vue

@@ -21,6 +21,7 @@
       :groupId="uniqGroupId"
       :param="param"
       @ok="callBack"
+      :getContainer="getContainer"
     ></JPopupOnlReportModal>
   </div>
 </template>
@@ -50,6 +51,7 @@
       groupId: propTypes.string.def(''),
       formElRef: propTypes.object,
       setFieldsValue: propTypes.func,
+      getContainer: propTypes.func,
       fieldConfig: {
         type: Array,
         default: () => [],

+ 13 - 10
src/components/Form/src/jeecg/components/JRangeNumber.vue

@@ -1,8 +1,8 @@
 <template>
   <a-input-group>
-    <a-input :value="beginValue" style="width: calc(50% - 15px)" placeholder="请输入最小值" @change="handleChangeBegin" />
+    <a-input :value="beginValue" style="width: calc(50% - 15px)" placeholder="最小值" @change="handleChangeBegin" />
     <a-input style="width: 30px; border-left: 0; pointer-events: none; background-color: #fff" placeholder="~" disabled />
-    <a-input :value="endValue" style="width: calc(50% - 15px); border-left: 0" placeholder="请输入最大值" @change="handleChangeEnd" />
+    <a-input :value="endValue" style="width: calc(50% - 15px); border-left: 0" placeholder="最大值" @change="handleChangeEnd" />
   </a-input-group>
 </template>
 
@@ -11,19 +11,20 @@
    * 查询条件用-数值范围查询
    */
   import { ref, watch } from 'vue';
+  import { Form } from 'ant-design-vue';
+  import { propTypes } from '/@/utils/propTypes';
+  
   export default {
     name: 'JRangeNumber',
     props: {
-      value: {
-        type: Array,
-        default: ['', ''],
-      },
+      value: propTypes.oneOfType([propTypes.string, propTypes.array]),
     },
-    emits: ['change'],
+    emits: ['change', 'update:value'],
     setup(props, { emit }) {
       const beginValue = ref('');
       const endValue = ref('');
-
+      const formItemContext = Form.useInjectFormItemContext();
+      
       function handleChangeBegin(e) {
         beginValue.value = e.target.value;
         emitArray();
@@ -41,19 +42,21 @@
         arr.push(begin);
         arr.push(end);
         emit('change', arr);
+        emit('update:value', arr);
+        formItemContext.onFieldChange();
       }
 
       watch(
         () => props.value,
         (val) => {
-          if (val.length == 2) {
+          if (val && val.length == 2) {
             beginValue.value = val[0];
             endValue.value = val[1];
           } else {
             beginValue.value = '';
             endValue.value = '';
           }
-        }
+        }, {immediate: true}
       );
 
       return {

+ 11 - 1
src/components/Form/src/jeecg/components/JSearchSelect.vue

@@ -260,7 +260,17 @@
        * 过滤选中option
        */
       function filterOption(input, option) {
-        return option?.children[0]?.children.toLowerCase().indexOf(input.toLowerCase()) >= 0;
+        //update-begin-author:taoyan date:2022-11-8 for: issues/218 所有功能表单的下拉搜索框搜索无效
+        let value = '', label = '';
+        try {
+          value = option.value;
+          label = option.children()[0].children;
+        }catch (e) {
+          console.log('获取下拉项失败', e)
+        }
+        let str = input.toLowerCase();
+        return value.toLowerCase().indexOf(str) >= 0 || label.toLowerCase().indexOf(str) >= 0;
+        //update-end-author:taoyan date:2022-11-8 for: issues/218 所有功能表单的下拉搜索框搜索无效
       }
 
       function getParentContainer(node) {

+ 1 - 1
src/components/Form/src/jeecg/components/JSelectDept.vue

@@ -150,7 +150,7 @@
       width: 100%;
     }
 
-    ::v-deep(.ant-select-search__field) {
+    :deep(.ant-select-search__field) {
       display: none !important;
     }
   }

+ 1 - 1
src/components/Form/src/jeecg/components/JSelectMultiple.vue

@@ -146,7 +146,7 @@
 
       //update-begin-author:taoyan date:2022-5-31 for: VUEN-1145 下拉多选,搜索时,查不到数据
       function filterOption(input, option) {
-        return option.children[0].el.data.toLowerCase().indexOf(input.toLowerCase()) >= 0;
+        return option.children()[0].children.toLowerCase().indexOf(input.toLowerCase()) >= 0;
       }
       //update-end-author:taoyan date:2022-5-31 for: VUEN-1145 下拉多选,搜索时,查不到数据
 

+ 1 - 1
src/components/Form/src/jeecg/components/JSelectPosition.vue

@@ -142,7 +142,7 @@
       width: 100%;
     }
 
-    ::v-deep(.ant-select-search__field) {
+    :deep(.ant-select-search__field) {
       display: none !important;
     }
   }

+ 1 - 1
src/components/Form/src/jeecg/components/JSelectRole.vue

@@ -147,7 +147,7 @@
       width: 100%;
     }
 
-    ::v-deep(.ant-select-search__field) {
+    :deep(.ant-select-search__field) {
       display: none !important;
     }
   }

+ 1 - 1
src/components/Form/src/jeecg/components/JSelectUser.vue

@@ -150,7 +150,7 @@
       width: 100%;
     }
 
-    ::v-deep(.ant-select-search__field) {
+    :deep(.ant-select-search__field) {
       display: none !important;
     }
   }

+ 1 - 1
src/components/Form/src/jeecg/components/JSelectUserByDept.vue

@@ -146,7 +146,7 @@
       width: 100%;
     }
 
-    ::v-deep(.ant-select-search__field) {
+    :deep(.ant-select-search__field) {
       display: none !important;
     }
   }

+ 3 - 3
src/components/Form/src/jeecg/components/JSwitch.vue

@@ -2,7 +2,7 @@
   <div :class="prefixCls">
     <a-select
       v-if="query"
-      v-model:value="value"
+      v-model:value="state"
       :options="selectOptions"
       :disabled="disabled"
       style="width: 100%"
@@ -18,7 +18,7 @@
   import { propTypes } from '/@/utils/propTypes';
   import { useAttrs } from '/@/hooks/core/useAttrs';
   import { useDesign } from '/@/hooks/web/useDesign';
-
+  import { useRuleFormItem } from '/@/hooks/component/useFormItem';
   const { prefixCls } = useDesign('j-switch');
   const props = defineProps({
     // v-model:value
@@ -36,7 +36,7 @@
   const emit = defineEmits(['change', 'update:value']);
 
   const checked = ref<boolean>(false);
-
+  const [state] = useRuleFormItem(props, 'value', 'change');
   watch(
     () => props.value,
     (val) => {

+ 84 - 10
src/components/Form/src/jeecg/components/JTreeSelect.vue

@@ -47,6 +47,10 @@
     multiple: propTypes.bool.def(false),
     loadTriggleChange: propTypes.bool.def(false),
     reload: propTypes.number.def(1),
+    //update-begin-author:taoyan date:2022-11-8 for: issues/4173 Online JTreeSelect控件changeOptions方法未生效
+    url: propTypes.string.def(''),
+    params: propTypes.object.def({})
+    //update-end-author:taoyan date:2022-11-8 for: issues/4173 Online JTreeSelect控件changeOptions方法未生效
   });
   const attrs = useAttrs();
   const emit = defineEmits(['change', 'update:value']);
@@ -102,17 +106,23 @@
         treeValue.value = null;
       }
     } else {
-      let params = { key: props.value };
-      let result = await defHttp.get({ url: `${Api.view}${props.dict}`, params }, { isTransformResponse: false });
-      if (result.success) {
-        let values = props.value.split(',');
-        treeValue.value = result.result.map((item, index) => ({
-          key: values[index],
-          value: values[index],
-          label: item,
-        }));
-        onLoadTriggleChange(result.result[0]);
+      //update-begin-author:taoyan date:2022-11-8 for: issues/4173 Online JTreeSelect控件changeOptions方法未生效
+      if(props.url){
+        getItemFromTreeData();
+      }else{
+        let params = { key: props.value };
+        let result = await defHttp.get({ url: `${Api.view}${props.dict}`, params }, { isTransformResponse: false });
+        if (result.success) {
+          let values = props.value.split(',');
+          treeValue.value = result.result.map((item, index) => ({
+            key: values[index],
+            value: values[index],
+            label: item,
+          }));
+          onLoadTriggleChange(result.result[0]);
+        }
       }
+      //update-end-author:taoyan date:2022-11-8 for: issues/4173 Online JTreeSelect控件changeOptions方法未生效
     }
   }
 
@@ -166,6 +176,9 @@
     if (treeNode.dataRef.children) {
       return Promise.resolve();
     }
+    if(props.url){
+      return Promise.resolve();
+    }
     let pid = treeNode.dataRef.key;
     let params = {
       pid: pid,
@@ -261,6 +274,67 @@
     });
   }
 
+  //update-begin-author:taoyan date:2022-11-8 for: issues/4173 Online JTreeSelect控件changeOptions方法未生效
+  watch(()=>props.url, async (val)=>{
+    if(val){
+      await loadRootByUrl();
+    }
+  });
+
+  /**
+   * 根据自定义的请求地址加载数据
+   */
+  async function loadRootByUrl(){
+    let url = props.url;
+    let params = props.params;
+    let res = await defHttp.get({ url, params }, { isTransformResponse: false });
+    if (res.success && res.result) {
+      for (let i of res.result) {
+        i.key = i.value;
+        i.isLeaf = !!i.leaf;
+      }
+      treeData.value = [...res.result];
+    } else {
+      console.log('数根节点查询结果异常', res);
+    }
+  }
+
+  /**
+   * 根据已有的树数据 翻译选项
+   */
+  function getItemFromTreeData(){
+    let data = treeData.value;
+    let arr = []
+    findChildrenNode(data, arr);
+    if(arr.length>0){
+      treeValue.value = arr
+      onLoadTriggleChange(arr[0]);
+    }
+  }
+
+  /**
+   * 递归找子节点
+   * @param data
+   * @param arr
+   */
+  function findChildrenNode(data, arr){
+    let val = props.value;
+    if(data && data.length){
+      for(let item of data){
+        if(val===item.value){
+          arr.push({
+            key: item.key,
+            value: item.value,
+            label: item.label||item.title
+          })
+        }else{
+          findChildrenNode(item.children, arr)
+        }
+      }
+    }
+  }
+  //update-end-author:taoyan date:2022-11-8 for: issues/4173 Online JTreeSelect控件changeOptions方法未生效
+
   // onCreated
   validateProp().then(() => {
     initDictInfo();

+ 3 - 1
src/components/Form/src/jeecg/components/JUpload/JUpload.vue

@@ -6,8 +6,8 @@
       :action="uploadUrl"
       :fileList="fileList"
       :disabled="disabled"
-      :remove="onRemove"
       v-bind="bindProps"
+      @remove="onRemove"
       @change="onFileChange"
       @preview="onFilePreview"
     >
@@ -291,6 +291,8 @@
               fileSize: item.size,
             };
             newFileList.push(fileJson);
+          } else {
+            return;
           }
         }
         emitValue(newFileList);

+ 1 - 1
src/components/Form/src/jeecg/components/base/JSelectBiz.vue

@@ -115,7 +115,7 @@
       width: 100%;
     }
 
-    ::v-deep(.ant-select-search__field) {
+    :deep(.ant-select-search__field) {
       display: none !important;
     }
   }

+ 1 - 1
src/components/Form/src/jeecg/components/base/JTreeBiz.vue

@@ -84,7 +84,7 @@
       width: 100%;
     }
 
-    ::v-deep(.ant-select-search__field) {
+    :deep(.ant-select-search__field) {
       display: none !important;
     }
   }

+ 8 - 1
src/components/Form/src/jeecg/components/modal/DeptSelectModal.vue

@@ -38,6 +38,7 @@
   import { treeProps } from '/@/components/Form/src/jeecg/props/props';
   import { BasicTree, TreeActionType } from '/@/components/Tree';
   import { useTreeBiz } from '/@/components/Form/src/jeecg/hooks/useTreeBiz';
+  import {propTypes} from "/@/utils/propTypes";
 
   export default defineComponent({
     name: 'DeptSelectModal',
@@ -52,6 +53,7 @@
         type: String,
         default: '部门选择',
       },
+      value: propTypes.oneOfType([propTypes.string, propTypes.array])
     },
     emits: ['register', 'getSelectResult'],
     setup(props, { emit, refs }) {
@@ -59,7 +61,12 @@
       const [register, { closeModal }] = useModalInner();
       const attrs = useAttrs();
       const treeRef = ref<Nullable<TreeActionType>>(null);
-      const getBindValue = Object.assign({}, unref(props), unref(attrs));
+      
+      //update-begin-author:taoyan date:2022-10-28 for: 部门选择警告类型不匹配
+      let propValue = props.value === ''?[]:props.value;
+      const getBindValue = Object.assign({}, unref(props), unref(attrs), {value: propValue});
+      //update-end-author:taoyan date:2022-10-28 for: 部门选择警告类型不匹配
+      
       const queryUrl = getQueryUrl();
       const [{ visibleChange, checkedKeys, getCheckStrictly, getSelectTreeData, onCheck, onLoadData, treeData, checkALL, expandAll, onSelect }] =
         useTreeBiz(treeRef, queryUrl, getBindValue);

+ 2 - 2
src/components/Form/src/jeecg/components/modal/UserSelectByDepModal.vue

@@ -15,13 +15,13 @@
             :selectedKeys="selectedDepIds"
             :expandedKeys="expandedKeys"
             :clickRowToExpand="false"
-          ></BasicTree>
+          />
         </a-card>
       </a-col>
       <a-col :md="17" :sm="24">
         <a-card :style="{ minHeight: '613px', overflow: 'auto' }">
           <!--用户列表-->
-          <BasicTable ref="tableRef" v-bind="getBindValue" :searchInfo="searchInfo" :api="getTableList" :rowSelection="rowSelection"></BasicTable>
+          <BasicTable ref="tableRef" v-bind="getBindValue" :searchInfo="searchInfo" :api="getTableList" :rowSelection="rowSelection" />
         </a-card>
       </a-col>
     </a-row>

+ 11 - 7
src/components/Form/src/jeecg/hooks/useSelectBiz.ts

@@ -27,7 +27,7 @@ export function useSelectBiz(getList, props) {
     () => {
       if (selectValues['change'] == false) {
         //update-begin---author:wangshuai ---date:20220412  for:[VUEN-672]发文草稿箱编辑时拟稿人显示用户名------------
-        let params = {};
+        const params = {};
         params[props.rowKey] = selectValues['value'].join(',');
         //update-end---author:wangshuai ---date:20220412  for:[VUEN-672]发文草稿箱编辑时拟稿人显示用户名--------------
         loadingEcho.value = isFirstLoadEcho;
@@ -48,7 +48,7 @@ export function useSelectBiz(getList, props) {
     checkedKeys.value = selectedRowKeys;
     //判断全选的问题checkedKeys和selectRows必须一致
     if (props.showSelected && unref(checkedKeys).length !== unref(selectRow).length) {
-      let { records } = await getList({
+      const { records } = await getList({
         code: unref(checkedKeys).join(','),
         pageSize: unref(checkedKeys).length,
       });
@@ -68,6 +68,10 @@ export function useSelectBiz(getList, props) {
     columnWidth: 20,
     selectedRowKeys: checkedKeys,
     onChange: onSelectChange,
+    //update-begin-author:wangshuai---date:20221102--for: [VUEN-2562]用户选择,跨页选择后,只有当前页人员 ---
+    //table4.4.0新增属性选中之后是否清空上一页下一页的数据,默认false
+    preserveSelectedRowKeys: true,
+    //update-end-author:wangshuai---date:20221102--for: [VUEN-2562]用户选择,跨页选择后,只有当前页人员 ---
   };
 
   /**
@@ -84,10 +88,10 @@ export function useSelectBiz(getList, props) {
    * @param flag 是否是默认回显模式加载
    */
   async function getDataSource(params, flag) {
-    let { records } = await getList(params);
+    const { records } = await getList(params);
     dataSource.value = records;
     if (flag) {
-      let options = <any[]>[];
+      const options = <any[]>[];
       records.forEach((item) => {
         options.push({ label: item[props.labelKey], value: item[props.rowKey] });
       });
@@ -95,7 +99,7 @@ export function useSelectBiz(getList, props) {
     }
   }
   async function initSelectRows() {
-    let { records } = await getList({
+    const { records } = await getList({
       code: selectValues['value'].join(','),
       pageSize: selectValues['value'].length,
     });
@@ -117,8 +121,8 @@ export function useSelectBiz(getList, props) {
    * 确定选择
    */
   function getSelectResult(success) {
-    let options = <any[]>[];
-    let values = <any[]>[];
+    const options = <any[]>[];
+    const values = <any[]>[];
     selectRows.value.forEach((item) => {
       options.push({ label: item[props.labelKey], value: item[props.rowKey] });
     });

+ 2 - 1
src/components/Form/src/jeecg/hooks/useTreeBiz.ts

@@ -89,7 +89,8 @@ export function useTreeBiz(treeRef, getList, props) {
         if (info.checked) {
           //update-begin-author:taoyan date:20220408 for: 单选模式下,设定rowKey,无法选中数据-
           checkedKeys.value = [info.node.eventKey];
-          let temp = info.checkedNodes.find((n) => n.key === info.node.eventKey);
+          let rowKey = props.rowKey;
+          let temp = info.checkedNodes.find((n) => n[rowKey] === info.node.eventKey);
           selectRows.value = [temp];
           //update-end-author:taoyan date:20220408 for: 单选模式下,设定rowKey,无法选中数据-
         } else {

+ 3 - 0
src/components/Form/src/types/index.ts

@@ -105,6 +105,7 @@ export type ComponentType =
   | 'RangePicker'
   | 'WeekPicker'
   | 'TimePicker'
+  | 'TimeRangePicker'
   | 'Switch'
   | 'StrengthMeter'
   | 'Upload'
@@ -142,4 +143,6 @@ export type ComponentType =
   | 'JSearchSelect'
   | 'JAddInput'
   | 'Time'
+  | 'RangeDate'
+  | 'RangeNumber'
   | 'JRangeNumber';

+ 8 - 2
src/components/Form/src/utils/formUtils.ts

@@ -36,8 +36,14 @@ export function handleRangeTimeValue(props, values) {
       timeValue = timeValue.split(',');
     }
     const [startTime, endTime]: string[] = timeValue;
-    values[startTimeKey] = dateUtil(startTime).format(format);
-    values[endTimeKey] = dateUtil(endTime).format(format);
+    if (format !== '') {
+      values[startTimeKey] = dateUtil(startTime).format(format);
+      values[endTimeKey] = dateUtil(endTime).format(format);
+    } else {
+      values[startTimeKey] = startTime;
+      values[endTimeKey] = endTime;
+    }
+
     Reflect.deleteProperty(values, field);
   }
   return values;

+ 791 - 793
src/components/Icon/data/icons.data.ts

@@ -1,793 +1,791 @@
-export default {
-  prefix: 'ant-design',
-  icons: [
-    'account-book-filled',
-    'account-book-outlined',
-    'account-book-twotone',
-    'aim-outlined',
-    'alert-filled',
-    'alert-outlined',
-    'alert-twotone',
-    'alibaba-outlined',
-    'align-center-outlined',
-    'align-left-outlined',
-    'align-right-outlined',
-    'alipay-circle-filled',
-    'alipay-circle-outlined',
-    'alipay-outlined',
-    'alipay-square-filled',
-    'aliwangwang-filled',
-    'aliwangwang-outlined',
-    'aliyun-outlined',
-    'amazon-circle-filled',
-    'amazon-outlined',
-    'amazon-square-filled',
-    'android-filled',
-    'android-outlined',
-    'ant-cloud-outlined',
-    'ant-design-outlined',
-    'apartment-outlined',
-    'api-filled',
-    'api-outlined',
-    'api-twotone',
-    'apple-filled',
-    'apple-outlined',
-    'appstore-add-outlined',
-    'appstore-filled',
-    'appstore-outlined',
-    'appstore-twotone',
-    'area-chart-outlined',
-    'arrow-down-outlined',
-    'arrow-left-outlined',
-    'arrow-right-outlined',
-    'arrow-up-outlined',
-    'arrows-alt-outlined',
-    'audio-filled',
-    'audio-muted-outlined',
-    'audio-outlined',
-    'audio-twotone',
-    'audit-outlined',
-    'backward-filled',
-    'backward-outlined',
-    'bank-filled',
-    'bank-outlined',
-    'bank-twotone',
-    'bar-chart-outlined',
-    'barcode-outlined',
-    'bars-outlined',
-    'behance-circle-filled',
-    'behance-outlined',
-    'behance-square-filled',
-    'behance-square-outlined',
-    'bell-filled',
-    'bell-outlined',
-    'bell-twotone',
-    'bg-colors-outlined',
-    'block-outlined',
-    'bold-outlined',
-    'book-filled',
-    'book-outlined',
-    'book-twotone',
-    'border-bottom-outlined',
-    'border-horizontal-outlined',
-    'border-inner-outlined',
-    'border-left-outlined',
-    'border-outer-outlined',
-    'border-outlined',
-    'border-right-outlined',
-    'border-top-outlined',
-    'border-verticle-outlined',
-    'borderless-table-outlined',
-    'box-plot-filled',
-    'box-plot-outlined',
-    'box-plot-twotone',
-    'branches-outlined',
-    'bug-filled',
-    'bug-outlined',
-    'bug-twotone',
-    'build-filled',
-    'build-outlined',
-    'build-twotone',
-    'bulb-filled',
-    'bulb-outlined',
-    'bulb-twotone',
-    'calculator-filled',
-    'calculator-outlined',
-    'calculator-twotone',
-    'calendar-filled',
-    'calendar-outlined',
-    'calendar-twotone',
-    'camera-filled',
-    'camera-outlined',
-    'camera-twotone',
-    'car-filled',
-    'car-outlined',
-    'car-twotone',
-    'caret-down-filled',
-    'caret-down-outlined',
-    'caret-left-filled',
-    'caret-left-outlined',
-    'caret-right-filled',
-    'caret-right-outlined',
-    'caret-up-filled',
-    'caret-up-outlined',
-    'carry-out-filled',
-    'carry-out-outlined',
-    'carry-out-twotone',
-    'check-circle-filled',
-    'check-circle-outlined',
-    'check-circle-twotone',
-    'check-outlined',
-    'check-square-filled',
-    'check-square-outlined',
-    'check-square-twotone',
-    'chrome-filled',
-    'chrome-outlined',
-    'ci-circle-filled',
-    'ci-circle-outlined',
-    'ci-circle-twotone',
-    'ci-outlined',
-    'ci-twotone',
-    'clear-outlined',
-    'clock-circle-filled',
-    'clock-circle-outlined',
-    'clock-circle-twotone',
-    'close-circle-filled',
-    'close-circle-outlined',
-    'close-circle-twotone',
-    'close-outlined',
-    'close-square-filled',
-    'close-square-outlined',
-    'close-square-twotone',
-    'cloud-download-outlined',
-    'cloud-filled',
-    'cloud-outlined',
-    'cloud-server-outlined',
-    'cloud-sync-outlined',
-    'cloud-twotone',
-    'cloud-upload-outlined',
-    'cluster-outlined',
-    'code-filled',
-    'code-outlined',
-    'code-sandbox-circle-filled',
-    'code-sandbox-outlined',
-    'code-sandbox-square-filled',
-    'code-twotone',
-    'codepen-circle-filled',
-    'codepen-circle-outlined',
-    'codepen-outlined',
-    'codepen-square-filled',
-    'coffee-outlined',
-    'column-height-outlined',
-    'column-width-outlined',
-    'comment-outlined',
-    'compass-filled',
-    'compass-outlined',
-    'compass-twotone',
-    'compress-outlined',
-    'console-sql-outlined',
-    'contacts-filled',
-    'contacts-outlined',
-    'contacts-twotone',
-    'container-filled',
-    'container-outlined',
-    'container-twotone',
-    'control-filled',
-    'control-outlined',
-    'control-twotone',
-    'copy-filled',
-    'copy-outlined',
-    'copy-twotone',
-    'copyright-circle-filled',
-    'copyright-circle-outlined',
-    'copyright-circle-twotone',
-    'copyright-outlined',
-    'copyright-twotone',
-    'credit-card-filled',
-    'credit-card-outlined',
-    'credit-card-twotone',
-    'crown-filled',
-    'crown-outlined',
-    'crown-twotone',
-    'customer-service-filled',
-    'customer-service-outlined',
-    'customer-service-twotone',
-    'dash-outlined',
-    'dashboard-filled',
-    'dashboard-outlined',
-    'dashboard-twotone',
-    'database-filled',
-    'database-outlined',
-    'database-twotone',
-    'delete-column-outlined',
-    'delete-filled',
-    'delete-outlined',
-    'delete-row-outlined',
-    'delete-twotone',
-    'delivered-procedure-outlined',
-    'deployment-unit-outlined',
-    'desktop-outlined',
-    'diff-filled',
-    'diff-outlined',
-    'diff-twotone',
-    'dingding-outlined',
-    'dingtalk-circle-filled',
-    'dingtalk-outlined',
-    'dingtalk-square-filled',
-    'disconnect-outlined',
-    'dislike-filled',
-    'dislike-outlined',
-    'dislike-twotone',
-    'dollar-circle-filled',
-    'dollar-circle-outlined',
-    'dollar-circle-twotone',
-    'dollar-outlined',
-    'dollar-twotone',
-    'dot-chart-outlined',
-    'double-left-outlined',
-    'double-right-outlined',
-    'down-circle-filled',
-    'down-circle-outlined',
-    'down-circle-twotone',
-    'down-outlined',
-    'down-square-filled',
-    'down-square-outlined',
-    'down-square-twotone',
-    'download-outlined',
-    'drag-outlined',
-    'dribbble-circle-filled',
-    'dribbble-outlined',
-    'dribbble-square-filled',
-    'dribbble-square-outlined',
-    'dropbox-circle-filled',
-    'dropbox-outlined',
-    'dropbox-square-filled',
-    'edit-filled',
-    'edit-outlined',
-    'edit-twotone',
-    'ellipsis-outlined',
-    'enter-outlined',
-    'environment-filled',
-    'environment-outlined',
-    'environment-twotone',
-    'euro-circle-filled',
-    'euro-circle-outlined',
-    'euro-circle-twotone',
-    'euro-outlined',
-    'euro-twotone',
-    'exception-outlined',
-    'exclamation-circle-filled',
-    'exclamation-circle-outlined',
-    'exclamation-circle-twotone',
-    'exclamation-outlined',
-    'expand-alt-outlined',
-    'expand-outlined',
-    'experiment-filled',
-    'experiment-outlined',
-    'experiment-twotone',
-    'export-outlined',
-    'eye-filled',
-    'eye-invisible-filled',
-    'eye-invisible-outlined',
-    'eye-invisible-twotone',
-    'eye-outlined',
-    'eye-twotone',
-    'facebook-filled',
-    'facebook-outlined',
-    'fall-outlined',
-    'fast-backward-filled',
-    'fast-backward-outlined',
-    'fast-forward-filled',
-    'fast-forward-outlined',
-    'field-binary-outlined',
-    'field-number-outlined',
-    'field-string-outlined',
-    'field-time-outlined',
-    'file-add-filled',
-    'file-add-outlined',
-    'file-add-twotone',
-    'file-done-outlined',
-    'file-excel-filled',
-    'file-excel-outlined',
-    'file-excel-twotone',
-    'file-exclamation-filled',
-    'file-exclamation-outlined',
-    'file-exclamation-twotone',
-    'file-filled',
-    'file-gif-outlined',
-    'file-image-filled',
-    'file-image-outlined',
-    'file-image-twotone',
-    'file-jpg-outlined',
-    'file-markdown-filled',
-    'file-markdown-outlined',
-    'file-markdown-twotone',
-    'file-outlined',
-    'file-pdf-filled',
-    'file-pdf-outlined',
-    'file-pdf-twotone',
-    'file-ppt-filled',
-    'file-ppt-outlined',
-    'file-ppt-twotone',
-    'file-protect-outlined',
-    'file-search-outlined',
-    'file-sync-outlined',
-    'file-text-filled',
-    'file-text-outlined',
-    'file-text-twotone',
-    'file-twotone',
-    'file-unknown-filled',
-    'file-unknown-outlined',
-    'file-unknown-twotone',
-    'file-word-filled',
-    'file-word-outlined',
-    'file-word-twotone',
-    'file-zip-filled',
-    'file-zip-outlined',
-    'file-zip-twotone',
-    'filter-filled',
-    'filter-outlined',
-    'filter-twotone',
-    'fire-filled',
-    'fire-outlined',
-    'fire-twotone',
-    'flag-filled',
-    'flag-outlined',
-    'flag-twotone',
-    'folder-add-filled',
-    'folder-add-outlined',
-    'folder-add-twotone',
-    'folder-filled',
-    'folder-open-filled',
-    'folder-open-outlined',
-    'folder-open-twotone',
-    'folder-outlined',
-    'folder-twotone',
-    'folder-view-outlined',
-    'font-colors-outlined',
-    'font-size-outlined',
-    'fork-outlined',
-    'form-outlined',
-    'format-painter-filled',
-    'format-painter-outlined',
-    'forward-filled',
-    'forward-outlined',
-    'frown-filled',
-    'frown-outlined',
-    'frown-twotone',
-    'fullscreen-exit-outlined',
-    'fullscreen-outlined',
-    'function-outlined',
-    'fund-filled',
-    'fund-outlined',
-    'fund-projection-screen-outlined',
-    'fund-twotone',
-    'fund-view-outlined',
-    'funnel-plot-filled',
-    'funnel-plot-outlined',
-    'funnel-plot-twotone',
-    'gateway-outlined',
-    'gif-outlined',
-    'gift-filled',
-    'gift-outlined',
-    'gift-twotone',
-    'github-filled',
-    'github-outlined',
-    'gitlab-filled',
-    'gitlab-outlined',
-    'global-outlined',
-    'gold-filled',
-    'gold-outlined',
-    'gold-twotone',
-    'golden-filled',
-    'google-circle-filled',
-    'google-outlined',
-    'google-plus-circle-filled',
-    'google-plus-outlined',
-    'google-plus-square-filled',
-    'google-square-filled',
-    'group-outlined',
-    'hdd-filled',
-    'hdd-outlined',
-    'hdd-twotone',
-    'heart-filled',
-    'heart-outlined',
-    'heart-twotone',
-    'heat-map-outlined',
-    'highlight-filled',
-    'highlight-outlined',
-    'highlight-twotone',
-    'history-outlined',
-    'home-filled',
-    'home-outlined',
-    'home-twotone',
-    'hourglass-filled',
-    'hourglass-outlined',
-    'hourglass-twotone',
-    'html5-filled',
-    'html5-outlined',
-    'html5-twotone',
-    'idcard-filled',
-    'idcard-outlined',
-    'idcard-twotone',
-    'ie-circle-filled',
-    'ie-outlined',
-    'ie-square-filled',
-    'import-outlined',
-    'inbox-outlined',
-    'info-circle-filled',
-    'info-circle-outlined',
-    'info-circle-twotone',
-    'info-outlined',
-    'insert-row-above-outlined',
-    'insert-row-below-outlined',
-    'insert-row-left-outlined',
-    'insert-row-right-outlined',
-    'instagram-filled',
-    'instagram-outlined',
-    'insurance-filled',
-    'insurance-outlined',
-    'insurance-twotone',
-    'interaction-filled',
-    'interaction-outlined',
-    'interaction-twotone',
-    'issues-close-outlined',
-    'italic-outlined',
-    'key-outlined',
-    'laptop-outlined',
-    'layout-filled',
-    'layout-outlined',
-    'layout-twotone',
-    'left-circle-filled',
-    'left-circle-outlined',
-    'left-circle-twotone',
-    'left-outlined',
-    'left-square-filled',
-    'left-square-outlined',
-    'left-square-twotone',
-    'like-filled',
-    'like-outlined',
-    'like-twotone',
-    'line-chart-outlined',
-    'line-height-outlined',
-    'line-outlined',
-    'link-outlined',
-    'linkedin-filled',
-    'linkedin-outlined',
-    'loading-3-quarters-outlined',
-    'loading-outlined',
-    'lock-filled',
-    'lock-outlined',
-    'lock-twotone',
-    'login-outlined',
-    'logout-outlined',
-    'mac-command-filled',
-    'mac-command-outlined',
-    'mail-filled',
-    'mail-outlined',
-    'mail-twotone',
-    'man-outlined',
-    'medicine-box-filled',
-    'medicine-box-outlined',
-    'medicine-box-twotone',
-    'medium-circle-filled',
-    'medium-outlined',
-    'medium-square-filled',
-    'medium-workmark-outlined',
-    'meh-filled',
-    'meh-outlined',
-    'meh-twotone',
-    'menu-fold-outlined',
-    'menu-outlined',
-    'menu-unfold-outlined',
-    'merge-cells-outlined',
-    'message-filled',
-    'message-outlined',
-    'message-twotone',
-    'minus-circle-filled',
-    'minus-circle-outlined',
-    'minus-circle-twotone',
-    'minus-outlined',
-    'minus-square-filled',
-    'minus-square-outlined',
-    'minus-square-twotone',
-    'mobile-filled',
-    'mobile-outlined',
-    'mobile-twotone',
-    'money-collect-filled',
-    'money-collect-outlined',
-    'money-collect-twotone',
-    'monitor-outlined',
-    'more-outlined',
-    'node-collapse-outlined',
-    'node-expand-outlined',
-    'node-index-outlined',
-    'notification-filled',
-    'notification-outlined',
-    'notification-twotone',
-    'number-outlined',
-    'one-to-one-outlined',
-    'ordered-list-outlined',
-    'paper-clip-outlined',
-    'partition-outlined',
-    'pause-circle-filled',
-    'pause-circle-outlined',
-    'pause-circle-twotone',
-    'pause-outlined',
-    'pay-circle-filled',
-    'pay-circle-outlined',
-    'percentage-outlined',
-    'phone-filled',
-    'phone-outlined',
-    'phone-twotone',
-    'pic-center-outlined',
-    'pic-left-outlined',
-    'pic-right-outlined',
-    'picture-filled',
-    'picture-outlined',
-    'picture-twotone',
-    'pie-chart-filled',
-    'pie-chart-outlined',
-    'pie-chart-twotone',
-    'play-circle-filled',
-    'play-circle-outlined',
-    'play-circle-twotone',
-    'play-square-filled',
-    'play-square-outlined',
-    'play-square-twotone',
-    'plus-circle-filled',
-    'plus-circle-outlined',
-    'plus-circle-twotone',
-    'plus-outlined',
-    'plus-square-filled',
-    'plus-square-outlined',
-    'plus-square-twotone',
-    'pound-circle-filled',
-    'pound-circle-outlined',
-    'pound-circle-twotone',
-    'pound-outlined',
-    'poweroff-outlined',
-    'printer-filled',
-    'printer-outlined',
-    'printer-twotone',
-    'profile-filled',
-    'profile-outlined',
-    'profile-twotone',
-    'project-filled',
-    'project-outlined',
-    'project-twotone',
-    'property-safety-filled',
-    'property-safety-outlined',
-    'property-safety-twotone',
-    'pull-request-outlined',
-    'pushpin-filled',
-    'pushpin-outlined',
-    'pushpin-twotone',
-    'qq-circle-filled',
-    'qq-outlined',
-    'qq-square-filled',
-    'qrcode-outlined',
-    'question-circle-filled',
-    'question-circle-outlined',
-    'question-circle-twotone',
-    'question-outlined',
-    'radar-chart-outlined',
-    'radius-bottomleft-outlined',
-    'radius-bottomright-outlined',
-    'radius-setting-outlined',
-    'radius-upleft-outlined',
-    'radius-upright-outlined',
-    'read-filled',
-    'read-outlined',
-    'reconciliation-filled',
-    'reconciliation-outlined',
-    'reconciliation-twotone',
-    'red-envelope-filled',
-    'red-envelope-outlined',
-    'red-envelope-twotone',
-    'reddit-circle-filled',
-    'reddit-outlined',
-    'reddit-square-filled',
-    'redo-outlined',
-    'reload-outlined',
-    'rest-filled',
-    'rest-outlined',
-    'rest-twotone',
-    'retweet-outlined',
-    'right-circle-filled',
-    'right-circle-outlined',
-    'right-circle-twotone',
-    'right-outlined',
-    'right-square-filled',
-    'right-square-outlined',
-    'right-square-twotone',
-    'rise-outlined',
-    'robot-filled',
-    'robot-outlined',
-    'rocket-filled',
-    'rocket-outlined',
-    'rocket-twotone',
-    'rollback-outlined',
-    'rotate-left-outlined',
-    'rotate-right-outlined',
-    'safety-certificate-filled',
-    'safety-certificate-outlined',
-    'safety-certificate-twotone',
-    'safety-outlined',
-    'save-filled',
-    'save-outlined',
-    'save-twotone',
-    'scan-outlined',
-    'schedule-filled',
-    'schedule-outlined',
-    'schedule-twotone',
-    'scissor-outlined',
-    'search-outlined',
-    'security-scan-filled',
-    'security-scan-outlined',
-    'security-scan-twotone',
-    'select-outlined',
-    'send-outlined',
-    'setting-filled',
-    'setting-outlined',
-    'setting-twotone',
-    'shake-outlined',
-    'share-alt-outlined',
-    'shop-filled',
-    'shop-outlined',
-    'shop-twotone',
-    'shopping-cart-outlined',
-    'shopping-filled',
-    'shopping-outlined',
-    'shopping-twotone',
-    'shrink-outlined',
-    'signal-filled',
-    'sisternode-outlined',
-    'sketch-circle-filled',
-    'sketch-outlined',
-    'sketch-square-filled',
-    'skin-filled',
-    'skin-outlined',
-    'skin-twotone',
-    'skype-filled',
-    'skype-outlined',
-    'slack-circle-filled',
-    'slack-outlined',
-    'slack-square-filled',
-    'slack-square-outlined',
-    'sliders-filled',
-    'sliders-outlined',
-    'sliders-twotone',
-    'small-dash-outlined',
-    'smile-filled',
-    'smile-outlined',
-    'smile-twotone',
-    'snippets-filled',
-    'snippets-outlined',
-    'snippets-twotone',
-    'solution-outlined',
-    'sort-ascending-outlined',
-    'sort-descending-outlined',
-    'sound-filled',
-    'sound-outlined',
-    'sound-twotone',
-    'split-cells-outlined',
-    'star-filled',
-    'star-outlined',
-    'star-twotone',
-    'step-backward-filled',
-    'step-backward-outlined',
-    'step-forward-filled',
-    'step-forward-outlined',
-    'stock-outlined',
-    'stop-filled',
-    'stop-outlined',
-    'stop-twotone',
-    'strikethrough-outlined',
-    'subnode-outlined',
-    'swap-left-outlined',
-    'swap-outlined',
-    'swap-right-outlined',
-    'switcher-filled',
-    'switcher-outlined',
-    'switcher-twotone',
-    'sync-outlined',
-    'table-outlined',
-    'tablet-filled',
-    'tablet-outlined',
-    'tablet-twotone',
-    'tag-filled',
-    'tag-outlined',
-    'tag-twotone',
-    'tags-filled',
-    'tags-outlined',
-    'tags-twotone',
-    'taobao-circle-filled',
-    'taobao-circle-outlined',
-    'taobao-outlined',
-    'taobao-square-filled',
-    'team-outlined',
-    'thunderbolt-filled',
-    'thunderbolt-outlined',
-    'thunderbolt-twotone',
-    'to-top-outlined',
-    'tool-filled',
-    'tool-outlined',
-    'tool-twotone',
-    'trademark-circle-filled',
-    'trademark-circle-outlined',
-    'trademark-circle-twotone',
-    'trademark-outlined',
-    'transaction-outlined',
-    'translation-outlined',
-    'trophy-filled',
-    'trophy-outlined',
-    'trophy-twotone',
-    'twitter-circle-filled',
-    'twitter-outlined',
-    'twitter-square-filled',
-    'underline-outlined',
-    'undo-outlined',
-    'ungroup-outlined',
-    'unlock-filled',
-    'unlock-outlined',
-    'unlock-twotone',
-    'unordered-list-outlined',
-    'up-circle-filled',
-    'up-circle-outlined',
-    'up-circle-twotone',
-    'up-outlined',
-    'up-square-filled',
-    'up-square-outlined',
-    'up-square-twotone',
-    'upload-outlined',
-    'usb-filled',
-    'usb-outlined',
-    'usb-twotone',
-    'user-add-outlined',
-    'user-delete-outlined',
-    'user-outlined',
-    'user-switch-outlined',
-    'usergroup-add-outlined',
-    'usergroup-delete-outlined',
-    'verified-outlined',
-    'vertical-align-bottom-outlined',
-    'vertical-align-middle-outlined',
-    'vertical-align-top-outlined',
-    'vertical-left-outlined',
-    'vertical-right-outlined',
-    'video-camera-add-outlined',
-    'video-camera-filled',
-    'video-camera-outlined',
-    'video-camera-twotone',
-    'wallet-filled',
-    'wallet-outlined',
-    'wallet-twotone',
-    'warning-filled',
-    'warning-outlined',
-    'warning-twotone',
-    'wechat-filled',
-    'wechat-outlined',
-    'weibo-circle-filled',
-    'weibo-circle-outlined',
-    'weibo-outlined',
-    'weibo-square-filled',
-    'weibo-square-outlined',
-    'whats-app-outlined',
-    'wifi-outlined',
-    'windows-filled',
-    'windows-outlined',
-    'woman-outlined',
-    'yahoo-filled',
-    'yahoo-outlined',
-    'youtube-filled',
-    'youtube-outlined',
-    'yuque-filled',
-    'yuque-outlined',
-    'zhihu-circle-filled',
-    'zhihu-outlined',
-    'zhihu-square-filled',
-    'zoom-in-outlined',
-    'zoom-out-outlined',
-  ],
-};
+export default [
+  'ant-design:account-book-filled',
+  'ant-design:account-book-outlined',
+  'ant-design:account-book-twotone',
+  'ant-design:aim-outlined',
+  'ant-design:alert-filled',
+  'ant-design:alert-outlined',
+  'ant-design:alert-twotone',
+  'ant-design:alibaba-outlined',
+  'ant-design:align-center-outlined',
+  'ant-design:align-left-outlined',
+  'ant-design:align-right-outlined',
+  'ant-design:alipay-circle-filled',
+  'ant-design:alipay-circle-outlined',
+  'ant-design:alipay-outlined',
+  'ant-design:alipay-square-filled',
+  'ant-design:aliwangwang-filled',
+  'ant-design:aliwangwang-outlined',
+  'ant-design:aliyun-outlined',
+  'ant-design:amazon-circle-filled',
+  'ant-design:amazon-outlined',
+  'ant-design:amazon-square-filled',
+  'ant-design:android-filled',
+  'ant-design:android-outlined',
+  'ant-design:ant-cloud-outlined',
+  'ant-design:ant-design-outlined',
+  'ant-design:apartment-outlined',
+  'ant-design:api-filled',
+  'ant-design:api-outlined',
+  'ant-design:api-twotone',
+  'ant-design:apple-filled',
+  'ant-design:apple-outlined',
+  'ant-design:appstore-add-outlined',
+  'ant-design:appstore-filled',
+  'ant-design:appstore-outlined',
+  'ant-design:appstore-twotone',
+  'ant-design:area-chart-outlined',
+  'ant-design:arrow-down-outlined',
+  'ant-design:arrow-left-outlined',
+  'ant-design:arrow-right-outlined',
+  'ant-design:arrow-up-outlined',
+  'ant-design:arrows-alt-outlined',
+  'ant-design:audio-filled',
+  'ant-design:audio-muted-outlined',
+  'ant-design:audio-outlined',
+  'ant-design:audio-twotone',
+  'ant-design:audit-outlined',
+  'ant-design:backward-filled',
+  'ant-design:backward-outlined',
+  'ant-design:bank-filled',
+  'ant-design:bank-outlined',
+  'ant-design:bank-twotone',
+  'ant-design:bar-chart-outlined',
+  'ant-design:barcode-outlined',
+  'ant-design:bars-outlined',
+  'ant-design:behance-circle-filled',
+  'ant-design:behance-outlined',
+  'ant-design:behance-square-filled',
+  'ant-design:behance-square-outlined',
+  'ant-design:bell-filled',
+  'ant-design:bell-outlined',
+  'ant-design:bell-twotone',
+  'ant-design:bg-colors-outlined',
+  'ant-design:block-outlined',
+  'ant-design:bold-outlined',
+  'ant-design:book-filled',
+  'ant-design:book-outlined',
+  'ant-design:book-twotone',
+  'ant-design:border-bottom-outlined',
+  'ant-design:border-horizontal-outlined',
+  'ant-design:border-inner-outlined',
+  'ant-design:border-left-outlined',
+  'ant-design:border-outer-outlined',
+  'ant-design:border-outlined',
+  'ant-design:border-right-outlined',
+  'ant-design:border-top-outlined',
+  'ant-design:border-verticle-outlined',
+  'ant-design:borderless-table-outlined',
+  'ant-design:box-plot-filled',
+  'ant-design:box-plot-outlined',
+  'ant-design:box-plot-twotone',
+  'ant-design:branches-outlined',
+  'ant-design:bug-filled',
+  'ant-design:bug-outlined',
+  'ant-design:bug-twotone',
+  'ant-design:build-filled',
+  'ant-design:build-outlined',
+  'ant-design:build-twotone',
+  'ant-design:bulb-filled',
+  'ant-design:bulb-outlined',
+  'ant-design:bulb-twotone',
+  'ant-design:calculator-filled',
+  'ant-design:calculator-outlined',
+  'ant-design:calculator-twotone',
+  'ant-design:calendar-filled',
+  'ant-design:calendar-outlined',
+  'ant-design:calendar-twotone',
+  'ant-design:camera-filled',
+  'ant-design:camera-outlined',
+  'ant-design:camera-twotone',
+  'ant-design:car-filled',
+  'ant-design:car-outlined',
+  'ant-design:car-twotone',
+  'ant-design:caret-down-filled',
+  'ant-design:caret-down-outlined',
+  'ant-design:caret-left-filled',
+  'ant-design:caret-left-outlined',
+  'ant-design:caret-right-filled',
+  'ant-design:caret-right-outlined',
+  'ant-design:caret-up-filled',
+  'ant-design:caret-up-outlined',
+  'ant-design:carry-out-filled',
+  'ant-design:carry-out-outlined',
+  'ant-design:carry-out-twotone',
+  'ant-design:check-circle-filled',
+  'ant-design:check-circle-outlined',
+  'ant-design:check-circle-twotone',
+  'ant-design:check-outlined',
+  'ant-design:check-square-filled',
+  'ant-design:check-square-outlined',
+  'ant-design:check-square-twotone',
+  'ant-design:chrome-filled',
+  'ant-design:chrome-outlined',
+  'ant-design:ci-circle-filled',
+  'ant-design:ci-circle-outlined',
+  'ant-design:ci-circle-twotone',
+  'ant-design:ci-outlined',
+  'ant-design:ci-twotone',
+  'ant-design:clear-outlined',
+  'ant-design:clock-circle-filled',
+  'ant-design:clock-circle-outlined',
+  'ant-design:clock-circle-twotone',
+  'ant-design:close-circle-filled',
+  'ant-design:close-circle-outlined',
+  'ant-design:close-circle-twotone',
+  'ant-design:close-outlined',
+  'ant-design:close-square-filled',
+  'ant-design:close-square-outlined',
+  'ant-design:close-square-twotone',
+  'ant-design:cloud-download-outlined',
+  'ant-design:cloud-filled',
+  'ant-design:cloud-outlined',
+  'ant-design:cloud-server-outlined',
+  'ant-design:cloud-sync-outlined',
+  'ant-design:cloud-twotone',
+  'ant-design:cloud-upload-outlined',
+  'ant-design:cluster-outlined',
+  'ant-design:code-filled',
+  'ant-design:code-outlined',
+  'ant-design:code-sandbox-circle-filled',
+  'ant-design:code-sandbox-outlined',
+  'ant-design:code-sandbox-square-filled',
+  'ant-design:code-twotone',
+  'ant-design:codepen-circle-filled',
+  'ant-design:codepen-circle-outlined',
+  'ant-design:codepen-outlined',
+  'ant-design:codepen-square-filled',
+  'ant-design:coffee-outlined',
+  'ant-design:column-height-outlined',
+  'ant-design:column-width-outlined',
+  'ant-design:comment-outlined',
+  'ant-design:compass-filled',
+  'ant-design:compass-outlined',
+  'ant-design:compass-twotone',
+  'ant-design:compress-outlined',
+  'ant-design:console-sql-outlined',
+  'ant-design:contacts-filled',
+  'ant-design:contacts-outlined',
+  'ant-design:contacts-twotone',
+  'ant-design:container-filled',
+  'ant-design:container-outlined',
+  'ant-design:container-twotone',
+  'ant-design:control-filled',
+  'ant-design:control-outlined',
+  'ant-design:control-twotone',
+  'ant-design:copy-filled',
+  'ant-design:copy-outlined',
+  'ant-design:copy-twotone',
+  'ant-design:copyright-circle-filled',
+  'ant-design:copyright-circle-outlined',
+  'ant-design:copyright-circle-twotone',
+  'ant-design:copyright-outlined',
+  'ant-design:copyright-twotone',
+  'ant-design:credit-card-filled',
+  'ant-design:credit-card-outlined',
+  'ant-design:credit-card-twotone',
+  'ant-design:crown-filled',
+  'ant-design:crown-outlined',
+  'ant-design:crown-twotone',
+  'ant-design:customer-service-filled',
+  'ant-design:customer-service-outlined',
+  'ant-design:customer-service-twotone',
+  'ant-design:dash-outlined',
+  'ant-design:dashboard-filled',
+  'ant-design:dashboard-outlined',
+  'ant-design:dashboard-twotone',
+  'ant-design:database-filled',
+  'ant-design:database-outlined',
+  'ant-design:database-twotone',
+  'ant-design:delete-column-outlined',
+  'ant-design:delete-filled',
+  'ant-design:delete-outlined',
+  'ant-design:delete-row-outlined',
+  'ant-design:delete-twotone',
+  'ant-design:delivered-procedure-outlined',
+  'ant-design:deployment-unit-outlined',
+  'ant-design:desktop-outlined',
+  'ant-design:diff-filled',
+  'ant-design:diff-outlined',
+  'ant-design:diff-twotone',
+  'ant-design:dingding-outlined',
+  'ant-design:dingtalk-circle-filled',
+  'ant-design:dingtalk-outlined',
+  'ant-design:dingtalk-square-filled',
+  'ant-design:disconnect-outlined',
+  'ant-design:dislike-filled',
+  'ant-design:dislike-outlined',
+  'ant-design:dislike-twotone',
+  'ant-design:dollar-circle-filled',
+  'ant-design:dollar-circle-outlined',
+  'ant-design:dollar-circle-twotone',
+  'ant-design:dollar-outlined',
+  'ant-design:dollar-twotone',
+  'ant-design:dot-chart-outlined',
+  'ant-design:double-left-outlined',
+  'ant-design:double-right-outlined',
+  'ant-design:down-circle-filled',
+  'ant-design:down-circle-outlined',
+  'ant-design:down-circle-twotone',
+  'ant-design:down-outlined',
+  'ant-design:down-square-filled',
+  'ant-design:down-square-outlined',
+  'ant-design:down-square-twotone',
+  'ant-design:download-outlined',
+  'ant-design:drag-outlined',
+  'ant-design:dribbble-circle-filled',
+  'ant-design:dribbble-outlined',
+  'ant-design:dribbble-square-filled',
+  'ant-design:dribbble-square-outlined',
+  'ant-design:dropbox-circle-filled',
+  'ant-design:dropbox-outlined',
+  'ant-design:dropbox-square-filled',
+  'ant-design:edit-filled',
+  'ant-design:edit-outlined',
+  'ant-design:edit-twotone',
+  'ant-design:ellipsis-outlined',
+  'ant-design:enter-outlined',
+  'ant-design:environment-filled',
+  'ant-design:environment-outlined',
+  'ant-design:environment-twotone',
+  'ant-design:euro-circle-filled',
+  'ant-design:euro-circle-outlined',
+  'ant-design:euro-circle-twotone',
+  'ant-design:euro-outlined',
+  'ant-design:euro-twotone',
+  'ant-design:exception-outlined',
+  'ant-design:exclamation-circle-filled',
+  'ant-design:exclamation-circle-outlined',
+  'ant-design:exclamation-circle-twotone',
+  'ant-design:exclamation-outlined',
+  'ant-design:expand-alt-outlined',
+  'ant-design:expand-outlined',
+  'ant-design:experiment-filled',
+  'ant-design:experiment-outlined',
+  'ant-design:experiment-twotone',
+  'ant-design:export-outlined',
+  'ant-design:eye-filled',
+  'ant-design:eye-invisible-filled',
+  'ant-design:eye-invisible-outlined',
+  'ant-design:eye-invisible-twotone',
+  'ant-design:eye-outlined',
+  'ant-design:eye-twotone',
+  'ant-design:facebook-filled',
+  'ant-design:facebook-outlined',
+  'ant-design:fall-outlined',
+  'ant-design:fast-backward-filled',
+  'ant-design:fast-backward-outlined',
+  'ant-design:fast-forward-filled',
+  'ant-design:fast-forward-outlined',
+  'ant-design:field-binary-outlined',
+  'ant-design:field-number-outlined',
+  'ant-design:field-string-outlined',
+  'ant-design:field-time-outlined',
+  'ant-design:file-add-filled',
+  'ant-design:file-add-outlined',
+  'ant-design:file-add-twotone',
+  'ant-design:file-done-outlined',
+  'ant-design:file-excel-filled',
+  'ant-design:file-excel-outlined',
+  'ant-design:file-excel-twotone',
+  'ant-design:file-exclamation-filled',
+  'ant-design:file-exclamation-outlined',
+  'ant-design:file-exclamation-twotone',
+  'ant-design:file-filled',
+  'ant-design:file-gif-outlined',
+  'ant-design:file-image-filled',
+  'ant-design:file-image-outlined',
+  'ant-design:file-image-twotone',
+  'ant-design:file-jpg-outlined',
+  'ant-design:file-markdown-filled',
+  'ant-design:file-markdown-outlined',
+  'ant-design:file-markdown-twotone',
+  'ant-design:file-outlined',
+  'ant-design:file-pdf-filled',
+  'ant-design:file-pdf-outlined',
+  'ant-design:file-pdf-twotone',
+  'ant-design:file-ppt-filled',
+  'ant-design:file-ppt-outlined',
+  'ant-design:file-ppt-twotone',
+  'ant-design:file-protect-outlined',
+  'ant-design:file-search-outlined',
+  'ant-design:file-sync-outlined',
+  'ant-design:file-text-filled',
+  'ant-design:file-text-outlined',
+  'ant-design:file-text-twotone',
+  'ant-design:file-twotone',
+  'ant-design:file-unknown-filled',
+  'ant-design:file-unknown-outlined',
+  'ant-design:file-unknown-twotone',
+  'ant-design:file-word-filled',
+  'ant-design:file-word-outlined',
+  'ant-design:file-word-twotone',
+  'ant-design:file-zip-filled',
+  'ant-design:file-zip-outlined',
+  'ant-design:file-zip-twotone',
+  'ant-design:filter-filled',
+  'ant-design:filter-outlined',
+  'ant-design:filter-twotone',
+  'ant-design:fire-filled',
+  'ant-design:fire-outlined',
+  'ant-design:fire-twotone',
+  'ant-design:flag-filled',
+  'ant-design:flag-outlined',
+  'ant-design:flag-twotone',
+  'ant-design:folder-add-filled',
+  'ant-design:folder-add-outlined',
+  'ant-design:folder-add-twotone',
+  'ant-design:folder-filled',
+  'ant-design:folder-open-filled',
+  'ant-design:folder-open-outlined',
+  'ant-design:folder-open-twotone',
+  'ant-design:folder-outlined',
+  'ant-design:folder-twotone',
+  'ant-design:folder-view-outlined',
+  'ant-design:font-colors-outlined',
+  'ant-design:font-size-outlined',
+  'ant-design:fork-outlined',
+  'ant-design:form-outlined',
+  'ant-design:format-painter-filled',
+  'ant-design:format-painter-outlined',
+  'ant-design:forward-filled',
+  'ant-design:forward-outlined',
+  'ant-design:frown-filled',
+  'ant-design:frown-outlined',
+  'ant-design:frown-twotone',
+  'ant-design:fullscreen-exit-outlined',
+  'ant-design:fullscreen-outlined',
+  'ant-design:function-outlined',
+  'ant-design:fund-filled',
+  'ant-design:fund-outlined',
+  'ant-design:fund-projection-screen-outlined',
+  'ant-design:fund-twotone',
+  'ant-design:fund-view-outlined',
+  'ant-design:funnel-plot-filled',
+  'ant-design:funnel-plot-outlined',
+  'ant-design:funnel-plot-twotone',
+  'ant-design:gateway-outlined',
+  'ant-design:gif-outlined',
+  'ant-design:gift-filled',
+  'ant-design:gift-outlined',
+  'ant-design:gift-twotone',
+  'ant-design:github-filled',
+  'ant-design:github-outlined',
+  'ant-design:gitlab-filled',
+  'ant-design:gitlab-outlined',
+  'ant-design:global-outlined',
+  'ant-design:gold-filled',
+  'ant-design:gold-outlined',
+  'ant-design:gold-twotone',
+  'ant-design:golden-filled',
+  'ant-design:google-circle-filled',
+  'ant-design:google-outlined',
+  'ant-design:google-plus-circle-filled',
+  'ant-design:google-plus-outlined',
+  'ant-design:google-plus-square-filled',
+  'ant-design:google-square-filled',
+  'ant-design:group-outlined',
+  'ant-design:hdd-filled',
+  'ant-design:hdd-outlined',
+  'ant-design:hdd-twotone',
+  'ant-design:heart-filled',
+  'ant-design:heart-outlined',
+  'ant-design:heart-twotone',
+  'ant-design:heat-map-outlined',
+  'ant-design:highlight-filled',
+  'ant-design:highlight-outlined',
+  'ant-design:highlight-twotone',
+  'ant-design:history-outlined',
+  'ant-design:holder-outlined',
+  'ant-design:home-filled',
+  'ant-design:home-outlined',
+  'ant-design:home-twotone',
+  'ant-design:hourglass-filled',
+  'ant-design:hourglass-outlined',
+  'ant-design:hourglass-twotone',
+  'ant-design:html5-filled',
+  'ant-design:html5-outlined',
+  'ant-design:html5-twotone',
+  'ant-design:idcard-filled',
+  'ant-design:idcard-outlined',
+  'ant-design:idcard-twotone',
+  'ant-design:ie-circle-filled',
+  'ant-design:ie-outlined',
+  'ant-design:ie-square-filled',
+  'ant-design:import-outlined',
+  'ant-design:inbox-outlined',
+  'ant-design:info-circle-filled',
+  'ant-design:info-circle-outlined',
+  'ant-design:info-circle-twotone',
+  'ant-design:info-outlined',
+  'ant-design:insert-row-above-outlined',
+  'ant-design:insert-row-below-outlined',
+  'ant-design:insert-row-left-outlined',
+  'ant-design:insert-row-right-outlined',
+  'ant-design:instagram-filled',
+  'ant-design:instagram-outlined',
+  'ant-design:insurance-filled',
+  'ant-design:insurance-outlined',
+  'ant-design:insurance-twotone',
+  'ant-design:interaction-filled',
+  'ant-design:interaction-outlined',
+  'ant-design:interaction-twotone',
+  'ant-design:issues-close-outlined',
+  'ant-design:italic-outlined',
+  'ant-design:key-outlined',
+  'ant-design:laptop-outlined',
+  'ant-design:layout-filled',
+  'ant-design:layout-outlined',
+  'ant-design:layout-twotone',
+  'ant-design:left-circle-filled',
+  'ant-design:left-circle-outlined',
+  'ant-design:left-circle-twotone',
+  'ant-design:left-outlined',
+  'ant-design:left-square-filled',
+  'ant-design:left-square-outlined',
+  'ant-design:left-square-twotone',
+  'ant-design:like-filled',
+  'ant-design:like-outlined',
+  'ant-design:like-twotone',
+  'ant-design:line-chart-outlined',
+  'ant-design:line-height-outlined',
+  'ant-design:line-outlined',
+  'ant-design:link-outlined',
+  'ant-design:linkedin-filled',
+  'ant-design:linkedin-outlined',
+  'ant-design:loading-3-quarters-outlined',
+  'ant-design:loading-outlined',
+  'ant-design:lock-filled',
+  'ant-design:lock-outlined',
+  'ant-design:lock-twotone',
+  'ant-design:login-outlined',
+  'ant-design:logout-outlined',
+  'ant-design:mac-command-filled',
+  'ant-design:mac-command-outlined',
+  'ant-design:mail-filled',
+  'ant-design:mail-outlined',
+  'ant-design:mail-twotone',
+  'ant-design:man-outlined',
+  'ant-design:medicine-box-filled',
+  'ant-design:medicine-box-outlined',
+  'ant-design:medicine-box-twotone',
+  'ant-design:medium-circle-filled',
+  'ant-design:medium-outlined',
+  'ant-design:medium-square-filled',
+  'ant-design:medium-workmark-outlined',
+  'ant-design:meh-filled',
+  'ant-design:meh-outlined',
+  'ant-design:meh-twotone',
+  'ant-design:menu-fold-outlined',
+  'ant-design:menu-outlined',
+  'ant-design:menu-unfold-outlined',
+  'ant-design:merge-cells-outlined',
+  'ant-design:message-filled',
+  'ant-design:message-outlined',
+  'ant-design:message-twotone',
+  'ant-design:minus-circle-filled',
+  'ant-design:minus-circle-outlined',
+  'ant-design:minus-circle-twotone',
+  'ant-design:minus-outlined',
+  'ant-design:minus-square-filled',
+  'ant-design:minus-square-outlined',
+  'ant-design:minus-square-twotone',
+  'ant-design:mobile-filled',
+  'ant-design:mobile-outlined',
+  'ant-design:mobile-twotone',
+  'ant-design:money-collect-filled',
+  'ant-design:money-collect-outlined',
+  'ant-design:money-collect-twotone',
+  'ant-design:monitor-outlined',
+  'ant-design:more-outlined',
+  'ant-design:node-collapse-outlined',
+  'ant-design:node-expand-outlined',
+  'ant-design:node-index-outlined',
+  'ant-design:notification-filled',
+  'ant-design:notification-outlined',
+  'ant-design:notification-twotone',
+  'ant-design:number-outlined',
+  'ant-design:one-to-one-outlined',
+  'ant-design:ordered-list-outlined',
+  'ant-design:paper-clip-outlined',
+  'ant-design:partition-outlined',
+  'ant-design:pause-circle-filled',
+  'ant-design:pause-circle-outlined',
+  'ant-design:pause-circle-twotone',
+  'ant-design:pause-outlined',
+  'ant-design:pay-circle-filled',
+  'ant-design:pay-circle-outlined',
+  'ant-design:percentage-outlined',
+  'ant-design:phone-filled',
+  'ant-design:phone-outlined',
+  'ant-design:phone-twotone',
+  'ant-design:pic-center-outlined',
+  'ant-design:pic-left-outlined',
+  'ant-design:pic-right-outlined',
+  'ant-design:picture-filled',
+  'ant-design:picture-outlined',
+  'ant-design:picture-twotone',
+  'ant-design:pie-chart-filled',
+  'ant-design:pie-chart-outlined',
+  'ant-design:pie-chart-twotone',
+  'ant-design:play-circle-filled',
+  'ant-design:play-circle-outlined',
+  'ant-design:play-circle-twotone',
+  'ant-design:play-square-filled',
+  'ant-design:play-square-outlined',
+  'ant-design:play-square-twotone',
+  'ant-design:plus-circle-filled',
+  'ant-design:plus-circle-outlined',
+  'ant-design:plus-circle-twotone',
+  'ant-design:plus-outlined',
+  'ant-design:plus-square-filled',
+  'ant-design:plus-square-outlined',
+  'ant-design:plus-square-twotone',
+  'ant-design:pound-circle-filled',
+  'ant-design:pound-circle-outlined',
+  'ant-design:pound-circle-twotone',
+  'ant-design:pound-outlined',
+  'ant-design:poweroff-outlined',
+  'ant-design:printer-filled',
+  'ant-design:printer-outlined',
+  'ant-design:printer-twotone',
+  'ant-design:profile-filled',
+  'ant-design:profile-outlined',
+  'ant-design:profile-twotone',
+  'ant-design:project-filled',
+  'ant-design:project-outlined',
+  'ant-design:project-twotone',
+  'ant-design:property-safety-filled',
+  'ant-design:property-safety-outlined',
+  'ant-design:property-safety-twotone',
+  'ant-design:pull-request-outlined',
+  'ant-design:pushpin-filled',
+  'ant-design:pushpin-outlined',
+  'ant-design:pushpin-twotone',
+  'ant-design:qq-circle-filled',
+  'ant-design:qq-outlined',
+  'ant-design:qq-square-filled',
+  'ant-design:qrcode-outlined',
+  'ant-design:question-circle-filled',
+  'ant-design:question-circle-outlined',
+  'ant-design:question-circle-twotone',
+  'ant-design:question-outlined',
+  'ant-design:radar-chart-outlined',
+  'ant-design:radius-bottomleft-outlined',
+  'ant-design:radius-bottomright-outlined',
+  'ant-design:radius-setting-outlined',
+  'ant-design:radius-upleft-outlined',
+  'ant-design:radius-upright-outlined',
+  'ant-design:read-filled',
+  'ant-design:read-outlined',
+  'ant-design:reconciliation-filled',
+  'ant-design:reconciliation-outlined',
+  'ant-design:reconciliation-twotone',
+  'ant-design:red-envelope-filled',
+  'ant-design:red-envelope-outlined',
+  'ant-design:red-envelope-twotone',
+  'ant-design:reddit-circle-filled',
+  'ant-design:reddit-outlined',
+  'ant-design:reddit-square-filled',
+  'ant-design:redo-outlined',
+  'ant-design:reload-outlined',
+  'ant-design:rest-filled',
+  'ant-design:rest-outlined',
+  'ant-design:rest-twotone',
+  'ant-design:retweet-outlined',
+  'ant-design:right-circle-filled',
+  'ant-design:right-circle-outlined',
+  'ant-design:right-circle-twotone',
+  'ant-design:right-outlined',
+  'ant-design:right-square-filled',
+  'ant-design:right-square-outlined',
+  'ant-design:right-square-twotone',
+  'ant-design:rise-outlined',
+  'ant-design:robot-filled',
+  'ant-design:robot-outlined',
+  'ant-design:rocket-filled',
+  'ant-design:rocket-outlined',
+  'ant-design:rocket-twotone',
+  'ant-design:rollback-outlined',
+  'ant-design:rotate-left-outlined',
+  'ant-design:rotate-right-outlined',
+  'ant-design:safety-certificate-filled',
+  'ant-design:safety-certificate-outlined',
+  'ant-design:safety-certificate-twotone',
+  'ant-design:safety-outlined',
+  'ant-design:save-filled',
+  'ant-design:save-outlined',
+  'ant-design:save-twotone',
+  'ant-design:scan-outlined',
+  'ant-design:schedule-filled',
+  'ant-design:schedule-outlined',
+  'ant-design:schedule-twotone',
+  'ant-design:scissor-outlined',
+  'ant-design:search-outlined',
+  'ant-design:security-scan-filled',
+  'ant-design:security-scan-outlined',
+  'ant-design:security-scan-twotone',
+  'ant-design:select-outlined',
+  'ant-design:send-outlined',
+  'ant-design:setting-filled',
+  'ant-design:setting-outlined',
+  'ant-design:setting-twotone',
+  'ant-design:shake-outlined',
+  'ant-design:share-alt-outlined',
+  'ant-design:shop-filled',
+  'ant-design:shop-outlined',
+  'ant-design:shop-twotone',
+  'ant-design:shopping-cart-outlined',
+  'ant-design:shopping-filled',
+  'ant-design:shopping-outlined',
+  'ant-design:shopping-twotone',
+  'ant-design:shrink-outlined',
+  'ant-design:signal-filled',
+  'ant-design:sisternode-outlined',
+  'ant-design:sketch-circle-filled',
+  'ant-design:sketch-outlined',
+  'ant-design:sketch-square-filled',
+  'ant-design:skin-filled',
+  'ant-design:skin-outlined',
+  'ant-design:skin-twotone',
+  'ant-design:skype-filled',
+  'ant-design:skype-outlined',
+  'ant-design:slack-circle-filled',
+  'ant-design:slack-outlined',
+  'ant-design:slack-square-filled',
+  'ant-design:slack-square-outlined',
+  'ant-design:sliders-filled',
+  'ant-design:sliders-outlined',
+  'ant-design:sliders-twotone',
+  'ant-design:small-dash-outlined',
+  'ant-design:smile-filled',
+  'ant-design:smile-outlined',
+  'ant-design:smile-twotone',
+  'ant-design:snippets-filled',
+  'ant-design:snippets-outlined',
+  'ant-design:snippets-twotone',
+  'ant-design:solution-outlined',
+  'ant-design:sort-ascending-outlined',
+  'ant-design:sort-descending-outlined',
+  'ant-design:sound-filled',
+  'ant-design:sound-outlined',
+  'ant-design:sound-twotone',
+  'ant-design:split-cells-outlined',
+  'ant-design:star-filled',
+  'ant-design:star-outlined',
+  'ant-design:star-twotone',
+  'ant-design:step-backward-filled',
+  'ant-design:step-backward-outlined',
+  'ant-design:step-forward-filled',
+  'ant-design:step-forward-outlined',
+  'ant-design:stock-outlined',
+  'ant-design:stop-filled',
+  'ant-design:stop-outlined',
+  'ant-design:stop-twotone',
+  'ant-design:strikethrough-outlined',
+  'ant-design:subnode-outlined',
+  'ant-design:swap-left-outlined',
+  'ant-design:swap-outlined',
+  'ant-design:swap-right-outlined',
+  'ant-design:switcher-filled',
+  'ant-design:switcher-outlined',
+  'ant-design:switcher-twotone',
+  'ant-design:sync-outlined',
+  'ant-design:table-outlined',
+  'ant-design:tablet-filled',
+  'ant-design:tablet-outlined',
+  'ant-design:tablet-twotone',
+  'ant-design:tag-filled',
+  'ant-design:tag-outlined',
+  'ant-design:tag-twotone',
+  'ant-design:tags-filled',
+  'ant-design:tags-outlined',
+  'ant-design:tags-twotone',
+  'ant-design:taobao-circle-filled',
+  'ant-design:taobao-circle-outlined',
+  'ant-design:taobao-outlined',
+  'ant-design:taobao-square-filled',
+  'ant-design:team-outlined',
+  'ant-design:thunderbolt-filled',
+  'ant-design:thunderbolt-outlined',
+  'ant-design:thunderbolt-twotone',
+  'ant-design:to-top-outlined',
+  'ant-design:tool-filled',
+  'ant-design:tool-outlined',
+  'ant-design:tool-twotone',
+  'ant-design:trademark-circle-filled',
+  'ant-design:trademark-circle-outlined',
+  'ant-design:trademark-circle-twotone',
+  'ant-design:trademark-outlined',
+  'ant-design:transaction-outlined',
+  'ant-design:translation-outlined',
+  'ant-design:trophy-filled',
+  'ant-design:trophy-outlined',
+  'ant-design:trophy-twotone',
+  'ant-design:twitter-circle-filled',
+  'ant-design:twitter-outlined',
+  'ant-design:twitter-square-filled',
+  'ant-design:underline-outlined',
+  'ant-design:undo-outlined',
+  'ant-design:ungroup-outlined',
+  'ant-design:unlock-filled',
+  'ant-design:unlock-outlined',
+  'ant-design:unlock-twotone',
+  'ant-design:unordered-list-outlined',
+  'ant-design:up-circle-filled',
+  'ant-design:up-circle-outlined',
+  'ant-design:up-circle-twotone',
+  'ant-design:up-outlined',
+  'ant-design:up-square-filled',
+  'ant-design:up-square-outlined',
+  'ant-design:up-square-twotone',
+  'ant-design:upload-outlined',
+  'ant-design:usb-filled',
+  'ant-design:usb-outlined',
+  'ant-design:usb-twotone',
+  'ant-design:user-add-outlined',
+  'ant-design:user-delete-outlined',
+  'ant-design:user-outlined',
+  'ant-design:user-switch-outlined',
+  'ant-design:usergroup-add-outlined',
+  'ant-design:usergroup-delete-outlined',
+  'ant-design:verified-outlined',
+  'ant-design:vertical-align-bottom-outlined',
+  'ant-design:vertical-align-middle-outlined',
+  'ant-design:vertical-align-top-outlined',
+  'ant-design:vertical-left-outlined',
+  'ant-design:vertical-right-outlined',
+  'ant-design:video-camera-add-outlined',
+  'ant-design:video-camera-filled',
+  'ant-design:video-camera-outlined',
+  'ant-design:video-camera-twotone',
+  'ant-design:wallet-filled',
+  'ant-design:wallet-outlined',
+  'ant-design:wallet-twotone',
+  'ant-design:warning-filled',
+  'ant-design:warning-outlined',
+  'ant-design:warning-twotone',
+  'ant-design:wechat-filled',
+  'ant-design:wechat-outlined',
+  'ant-design:weibo-circle-filled',
+  'ant-design:weibo-circle-outlined',
+  'ant-design:weibo-outlined',
+  'ant-design:weibo-square-filled',
+  'ant-design:weibo-square-outlined',
+  'ant-design:whats-app-outlined',
+  'ant-design:wifi-outlined',
+  'ant-design:windows-filled',
+  'ant-design:windows-outlined',
+  'ant-design:woman-outlined',
+  'ant-design:yahoo-filled',
+  'ant-design:yahoo-outlined',
+  'ant-design:youtube-filled',
+  'ant-design:youtube-outlined',
+  'ant-design:yuque-filled',
+  'ant-design:yuque-outlined',
+  'ant-design:zhihu-circle-filled',
+  'ant-design:zhihu-outlined',
+  'ant-design:zhihu-square-filled',
+  'ant-design:zoom-in-outlined',
+  'ant-design:zoom-out-outlined',
+];

+ 2 - 0
src/components/JVxeCustom/index.ts

@@ -22,4 +22,6 @@ export async function registerJVxeCustom() {
   await registerAsyncComponent(JVxeTypes.userSelect, import('./src/components/JVxeUserSelectCell.vue'));
   // 注册【部门选择】组件
   await registerAsyncComponent(JVxeTypes.departSelect, import('./src/components/JVxeDepartSelectCell.vue'));
+  // 注册【省市区选择】组件
+  await registerAsyncComponent(JVxeTypes.pca, import('./src/components/JVxePcaCell.vue'));
 }

+ 2 - 1
src/components/JVxeCustom/src/components/JVxeSelectDictSearchCell.ts

@@ -42,7 +42,8 @@ export const DictSearchInputCell = defineComponent({
     // 筛选函数
     const filterOption = computed(() => {
       if (isAsync.value) {
-        return null;
+        //【jeecgboot-vue3/issues/I5QRT8】JVxeTypes.selectDictSearch sync问题
+        return ()=>true;
       }
       return (input, option) => option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0;
     });

+ 3 - 0
src/components/Menu/src/components/BasicSubMenuItem.vue

@@ -15,6 +15,7 @@
   import { defineComponent, computed } from 'vue';
   import { Menu } from 'ant-design-vue';
   import { useDesign } from '/@/hooks/web/useDesign';
+  import { checkChildrenHidden } from '/@/utils/common/compUtils';
   import { itemProps } from '../props';
   import BasicMenuItem from './BasicMenuItem.vue';
   import MenuItemContent from './MenuItemContent.vue';
@@ -38,11 +39,13 @@
           Reflect.has(menuTreeItem, 'children') &&
           !!menuTreeItem.children &&
           menuTreeItem.children.length > 0
+          &&checkChildrenHidden(menuTreeItem)
         );
       }
       return {
         prefixCls,
         menuHasChildren,
+        checkChildrenHidden,
         getShowMenu,
       };
     },

+ 30 - 35
src/components/Modal/src/BasicModal.vue

@@ -1,7 +1,15 @@
 <template>
   <Modal v-bind="getBindValue" @cancel="handleCancel">
     <template #closeIcon v-if="!$slots.closeIcon">
-      <ModalClose :canFullscreen="getProps.canFullscreen" :fullScreen="fullScreenRef" :commentSpan="commentSpan" :enableComment="getProps.enableComment" @comment="handleComment" @cancel="handleCancel" @fullscreen="handleFullScreen" />
+      <ModalClose
+        :canFullscreen="getProps.canFullscreen"
+        :fullScreen="fullScreenRef"
+        :commentSpan="commentSpan"
+        :enableComment="getProps.enableComment"
+        @comment="handleComment"
+        @cancel="handleCancel"
+        @fullscreen="handleFullScreen"
+      />
     </template>
 
     <template #title v-if="!$slots.title">
@@ -17,8 +25,8 @@
     </template>
 
     <!-- update-begin-author:taoyan date:2022-7-18 for:  modal弹窗 支持评论 slot -->
-    <a-row v-if="getProps.enableComment" class="jeecg-modal-wrapper">
-      <a-col :span="24-commentSpan" class="jeecg-modal-content">
+    <a-row class="jeecg-modal-wrapper">
+      <a-col :span="24 - commentSpan" class="jeecg-modal-content">
         <ModalWrapper
           :useWrapper="getProps.useWrapper"
           :footerOffset="wrapperFooterOffset"
@@ -32,7 +40,8 @@
           :modalFooterHeight="footer !== undefined && !footer ? 0 : undefined"
           v-bind="omit(getProps.wrapperProps, 'visible', 'height', 'modalFooterHeight')"
           @ext-height="handleExtHeight"
-          @height-change="handleHeightChange">
+          @height-change="handleHeightChange"
+        >
           <slot></slot>
         </ModalWrapper>
       </a-col>
@@ -40,25 +49,7 @@
       <a-col :span="commentSpan" class="jeecg-comment-outer">
         <slot name="comment"></slot>
       </a-col>
-
     </a-row>
-    <ModalWrapper
-      v-else
-      :useWrapper="getProps.useWrapper"
-      :footerOffset="wrapperFooterOffset"
-      :fullScreen="fullScreenRef"
-      ref="modalWrapperRef"
-      :loading="getProps.loading"
-      :loading-tip="getProps.loadingTip"
-      :minHeight="getProps.minHeight"
-      :height="getWrapperHeight"
-      :visible="visibleRef"
-      :modalFooterHeight="footer !== undefined && !footer ? 0 : undefined"
-      v-bind="omit(getProps.wrapperProps, 'visible', 'height', 'modalFooterHeight')"
-      @ext-height="handleExtHeight"
-      @height-change="handleHeightChange">
-      <slot></slot>
-    </ModalWrapper>
     <!-- update-end-author:taoyan date:2022-7-18 for:  modal弹窗 支持评论 slot -->
 
     <template #[item]="data" v-for="item in Object.keys(omit($slots, 'default'))">
@@ -229,14 +220,18 @@
 
       //update-begin-author:taoyan date:2022-7-18 for: modal支持评论 slot
       const commentSpan = ref(0);
-      watch(()=>props.enableComment, (flag)=>{
-        handleComment(flag)
-      }, {immediate:true});
-      function handleComment(flag){
-        if(flag=== true){
-          commentSpan.value = 6
-        }else{
-          commentSpan.value = 0
+      watch(
+        () => props.enableComment,
+        (flag) => {
+          handleComment(flag);
+        },
+        { immediate: true }
+      );
+      function handleComment(flag) {
+        if (flag === true) {
+          commentSpan.value = 6;
+        } else {
+          commentSpan.value = 0;
         }
       }
       //update-end-author:taoyan date:2022-7-18 for: modal支持评论 slot
@@ -257,7 +252,7 @@
         handleTitleDbClick,
         getWrapperHeight,
         commentSpan,
-        handleComment
+        handleComment,
       };
     },
   });
@@ -266,12 +261,12 @@
   /*update-begin-author:taoyan date:2022-7-27 for:modal评论区域样式*/
   .jeecg-comment-outer {
     border-left: 1px solid #f0f0f0;
-    .ant-tabs-nav-wrap{
-    /*  text-align: center;*/
+    .ant-tabs-nav-wrap {
+      /*  text-align: center;*/
     }
   }
-  .jeecg-modal-content{
-    >.scroll-container{
+  .jeecg-modal-content {
+    > .scroll-container {
       padding: 14px;
     }
   }

+ 2 - 2
src/components/SimpleMenu/src/SimpleMenu.vue

@@ -122,8 +122,8 @@
         if (isUrl(key)) {
           // update-begin--author:sunjianlei---date:20220408---for: 【VUEN-656】配置外部网址打不开,原因是带了#号,需要替换一下
           let url = key.replace(URL_HASH_TAB, '#');
-          openWindow(url);
-          // openWindow(key);
+          window.open(url)
+          //openWindow(url);
           // update-begin--author:sunjianlei---date:20220408---for: 【VUEN-656】配置外部网址打不开,原因是带了#号,需要替换一下
           return;
         }

+ 4 - 2
src/components/SimpleMenu/src/SimpleSubMenu.vue

@@ -36,7 +36,7 @@
   import { defineComponent, computed } from 'vue';
   import { useDesign } from '/@/hooks/web/useDesign';
   import Icon from '/@/components/Icon/index';
-
+  import { checkChildrenHidden } from '/@/utils/common/compUtils';
   import MenuItem from './components/MenuItem.vue';
   import SubMenu from './components/SubMenuItem.vue';
   import { propTypes } from '/@/utils/propTypes';
@@ -79,18 +79,20 @@
         ];
       });
 
-      function menuHasChildren(menuTreeItem: Menu): boolean {
+      function menuHasChildren(menuTreeItem): boolean {
         return (
           !menuTreeItem.meta?.hideChildrenInMenu &&
           Reflect.has(menuTreeItem, 'children') &&
           !!menuTreeItem.children &&
           menuTreeItem.children.length > 0
+          &&checkChildrenHidden(menuTreeItem)
         );
       }
 
       return {
         prefixCls,
         menuHasChildren,
+        checkChildrenHidden,
         getShowMenu,
         getIcon,
         getI18nName,

+ 6 - 3
src/components/Table/src/BasicTable.vue

@@ -17,7 +17,7 @@
     <!-- antd v3 升级兼容,阻止数据的收集,防止控制台报错 -->
     <!-- https://antdv.com/docs/vue/migration-v3-cn -->
     <a-form-item-rest>
-      <Table ref="tableElRef" v-bind="getBindValues" :rowClassName="getRowClassName" v-show="getEmptyDataIsShowTable" @change="handleTableChange">
+      <Table ref="tableElRef" v-bind="getBindValues" :rowClassName="getRowClassName" v-show="getEmptyDataIsShowTable" @resizeColumn="handleResizeColumn" @change="handleTableChange">
         <template #[item]="data" v-for="item in Object.keys($slots)" :key="item">
           <slot :name="item" v-bind="data || {}"></slot>
         </template>
@@ -291,6 +291,9 @@
         wrapRef,
         tableAction,
         redoHeight,
+        handleResizeColumn: (w, col) => {
+          col.width = w;
+        },
         getFormProps: getFormProps as any,
         replaceFormSlotKey,
         getFormSlotKeys,
@@ -410,8 +413,8 @@
     //表格选择工具栏样式
     .alert {
       height: 38px;
-      background-color: #f3f3f3;
-      border-color: #e3e3e3;
+      background-color: #e6f7ff;
+      border-color: #91d5ff;
     }
     &--inset {
       .ant-table-wrapper {

+ 4 - 1
src/components/Table/src/components/TableAction.vue

@@ -149,7 +149,10 @@
   .@{prefix-cls} {
     display: flex;
     align-items: center;
-
+    /* update-begin-author:taoyan date:2022-11-18 for: 表格默认行高比官方示例多出2px*/
+    height: 22px;
+    /* update-end-author:taoyan date:2022-11-18 for: 表格默认行高比官方示例多出2px*/
+    
     .action-divider {
       display: table;
     }

+ 7 - 2
src/components/Table/src/components/TableHeader.vue

@@ -28,7 +28,10 @@
         <a-alert type="info" show-icon class="alert" v-if="openRowSelection != null">
           <template #message>
             <template v-if="selectRowKeys.length > 0">
-              <span>已选中 {{ selectRowKeys.length }} 条记录(可跨页)</span>
+              <span>
+                <span>已选中 {{ selectRowKeys.length }} 条记录</span>
+                <span v-if="isAcrossPage">(可跨页)</span>
+              </span>
               <a-divider type="vertical" />
               <a @click="setSelectedRowKeys([])">清空</a>
               <slot name="alertAfter" />
@@ -86,8 +89,10 @@
       const { getSelectRowKeys, setSelectedRowKeys, getRowSelection } = useTableContext();
       const selectRowKeys = computed(() => getSelectRowKeys());
       const openRowSelection = computed(() => getRowSelection());
+      // 是否允许跨页选择
+      const isAcrossPage = computed(() => openRowSelection.value?.preserveSelectedRowKeys === true);
 
-      return { prefixCls, handleColumnChange, selectRowKeys, setSelectedRowKeys, openRowSelection };
+      return { prefixCls, handleColumnChange, selectRowKeys, setSelectedRowKeys, openRowSelection, isAcrossPage };
     },
   });
 </script>

+ 7 - 5
src/components/Table/src/components/settings/ColumnSetting.vue

@@ -123,9 +123,6 @@
 
   export default defineComponent({
     name: 'ColumnSetting',
-    props: {
-      isMobile: Boolean,
-    },
     components: {
       SettingOutlined,
       Popover,
@@ -137,13 +134,18 @@
       Divider,
       Icon,
     },
+    props: {
+      isMobile: Boolean,
+    },
     emits: ['columns-change'],
 
     setup(props, { emit, attrs }) {
       const { t } = useI18n();
       const table = useTableContext();
-      const popoverVisible = ref(false);
-
+      const popoverVisible = ref(true);
+      // update-begin--author:sunjianlei---date:20221101---for: 修复第一次进入时列表配置不能拖拽
+      nextTick(() => (popoverVisible.value = false));
+      // update-end--author:sunjianlei---date:20221101---for: 修复第一次进入时列表配置不能拖拽
       const defaultRowSelection = omit(table.getRowSelection(), 'selectedRowKeys');
       let inited = false;
 

+ 3 - 4
src/components/Table/src/hooks/useDataSource.ts

@@ -172,11 +172,11 @@ export function useDataSource(
   }
 
   function insertTableDataRecord(record: Recordable, index: number): Recordable | undefined {
-    if (!dataSourceRef.value || dataSourceRef.value.length == 0) return;
+    //【issues/136】同步Vben:BasicTable 调用插入函数异常插入两条记录]
+    // if (!dataSourceRef.value || dataSourceRef.value.length == 0) return;
     index = index ?? dataSourceRef.value?.length;
     unref(dataSourceRef).splice(index, 0, record);
-    unref(propsRef).dataSource?.splice(index, 0, record);
-    return unref(propsRef).dataSource;
+    return unref(dataSourceRef);
   }
   function findTableDataRecord(rowKey: string | number) {
     if (!dataSourceRef.value || dataSourceRef.value.length == 0) return;
@@ -268,7 +268,6 @@ export function useDataSource(
           return await fetch(opt);
         }
       }
-
       if (afterFetch && isFunction(afterFetch)) {
         resultItems = (await afterFetch(resultItems)) || resultItems;
       }

+ 4 - 0
src/components/Table/src/hooks/useRowSelection.ts

@@ -16,6 +16,10 @@ export function useRowSelection(propsRef: ComputedRef<BasicTableProps>, tableDat
     }
 
     return {
+      // AntDV3.0 之后使用远程加载数据进行分页时,
+      // 默认会清空上一页选择的行数据(导致无法跨页选择),
+      // 将此属性设置为 true 即可解决。
+      preserveSelectedRowKeys: true,
       selectedRowKeys: unref(selectedRowKeysRef),
       onChange: (selectedRowKeys: string[]) => {
         setSelectedRowKeys(selectedRowKeys);

+ 9 - 0
src/components/Table/src/hooks/useTable.ts

@@ -61,9 +61,15 @@ export function useTable(tableProps?: Props): [
     }
     return table as TableActionType;
   }
+  
+  function getTableRef(){
+    return tableRef;
+  }
 
   const methods: TableActionType & {
     getForm: () => FormActionType;
+  } & {
+    getTableRef: () => any;
   } = {
     reload: async (opt?: FetchParams) => {
       return await getTableInstance().reload(opt);
@@ -153,6 +159,9 @@ export function useTable(tableProps?: Props): [
     collapseAll: () => {
       getTableInstance().collapseAll();
     },
+    getTableRef: () => {
+      return getTableRef();
+    }
   };
 
   return [register, methods];

+ 1 - 1
src/components/Table/src/props.ts

@@ -20,7 +20,7 @@ export const basicProps = {
   },
   showTableSetting: propTypes.bool,
   autoCreateKey: propTypes.bool.def(true),
-  striped: propTypes.bool.def(true),
+  striped: propTypes.bool.def(false),
   showSummary: propTypes.bool,
   summaryFunc: {
     type: [Function, Array] as PropType<(...arg: any[]) => any[]>,

+ 2 - 0
src/components/Table/src/types/table.ts

@@ -447,6 +447,8 @@ export interface BasicColumn extends ColumnProps {
   auth?: RoleEnum | RoleEnum[] | string | string[];
   // 业务控制是否显示
   ifShow?: boolean | ((column: BasicColumn) => boolean);
+  //compType-用于记录类型
+  compType?: string;
 }
 
 export type ColumnChangeParam = {

+ 59 - 56
src/components/chart/BarAndLine.vue

@@ -2,13 +2,28 @@
   <div ref="chartRef" :style="{ height, width }"></div>
 </template>
 <script lang="ts">
-  import { defineComponent, PropType, ref, Ref, reactive, watchEffect } from 'vue';
+  import { defineComponent, PropType, ref, Ref, reactive, watchEffect, watch } from 'vue';
   import { useECharts } from '/@/hooks/web/useECharts';
+  import { toEchartsData } from '/@/utils/ventutil';
+  import { getTableHeaderColumns } from '/@/hooks/web/useWebColumns';
+  import EchartsUtil from '/@/utils/echartsUtil';
 
   export default defineComponent({
     name: 'BarAndLine',
     props: {
-      chartData: {
+      chartsColumns: {
+        type: Array,
+        default: () => [],
+      },
+      chartsColumnsType: {
+        type: String,
+        required: true,
+      },
+      chartsType: {
+        type: String,
+        default: 'listMonitor',
+      },
+      dataSource: {
         type: Array,
         default: () => [],
       },
@@ -20,11 +35,6 @@
         type: String,
         required: true,
       },
-      propTypeArr: {
-        type: Array,
-        default: () => [],
-        required: true,
-      },
       width: {
         type: String as PropType<string>,
         default: '100%',
@@ -37,67 +47,60 @@
     setup(props) {
       const chartRef = ref<HTMLDivElement | null>(null);
       const { setOptions, echarts } = useECharts(chartRef as Ref<HTMLDivElement>);
+      const chartData = getTableHeaderColumns(props.chartsColumnsType) || [];
+      let chartsColumns = props.chartsColumns.length > 0 ? props.chartsColumns : chartData;
       const option = reactive({
-        tooltip: {
-          trigger: 'axis',
-          axisPointer: {
-            type: 'shadow',
-            label: {
+        name: '',
+        color: ['#7B68EE', '#0000CD', '#6495ED', '#00BFFF', '#AFEEEE', '#008080', '#00FA9A', '#2E8B57', '#FAFAD2', '#DAA520'],
+        tooltip: null,
+        grid: null,
+        toolbox: {
+          feature: {
+            saveAsImage: {
+              iconStyle: {
+                normal: {
+                  borderColor: '#ffffff',
+                },
+              },
               show: true,
-              backgroundColor: '#333',
             },
           },
         },
-        legend: {
-          top: 10,
-          textStyle: {
-            color: '#ffffffee',
-          },
-        },
-        xAxis: {
-          type: 'category',
-          data: [],
-        },
-        yAxis: {
-          type: 'value',
-        },
-        series: [
-          {
-            name: 'bar',
-            type: 'bar',
-            data: [],
-          },
-        ],
+        dataZoom: null,
+        legend: null,
+        timeline: null,
+        xAxis: null,
+        yAxis: null,
+        series: null,
       });
+      let optionUtil;
 
       watchEffect(() => {
-        props.chartData && initCharts();
+        props.dataSource && props.dataSource.length > 0 && option.series && initCharts();
+      });
+
+      watch([() => props.chartsType, () => props.chartsColumns], ([newChartsType, newChartsColumns]) => {
+        console.log('[ 1111 ] >', 1111, chartsColumns);
+        chartsColumns = newChartsColumns;
+        optionUtil.initChartOption(props.chartsType, chartsColumns);
       });
 
+      function initChartsOption() {
+        optionUtil = new EchartsUtil(option);
+        optionUtil.initChartOption(props.chartsType, chartsColumns);
+      }
+      initChartsOption();
+
       function initCharts() {
-        if (props.option) {
-          Object.assign(option, props.option);
-        }
-        //图例类型
-        // let typeArr = Array.from(new Set(props.chartData.map((item) => item.type)));
         //轴数据
-        let xAxisData = Array.from(new Set(props.chartData.map((item) => item[props.xAxisPropType])));
-        // let xAxisData = Array.from(new Set(props.chartData.map((item) => item.name)));
-        let seriesData = [];
-        [...props.propTypeArr].forEach((propType: any) => {
-          let obj = { name: propType.name, type: propType.type };
-          // let obj = { name: type };
-          // let chartArr = props.chartData.filter((item) => item === propType.name);
-          //data数据
-          obj['data'] = props.chartData.map((item) => item[propType.filed]);
-          // obj['type'] = chartArr[0].seriesType;
-          seriesData.push(obj);
-        });
-        console.log('seriesData------------>', seriesData);
-
-        option.series = seriesData;
-        option.xAxis.data = xAxisData;
-        setOptions(option, false);
+        if (option.series && option.series.length === chartsColumns.length) {
+          let xAxisData = props.dataSource.map((item) => item[props.xAxisPropType]);
+          [...chartsColumns].forEach((propType: any, index) => {
+            option.series[index].data = props.dataSource.map((item) => item[propType.dataIndex] || 0);
+          });
+          option.xAxis[0].data = xAxisData;
+          setOptions(option, false);
+        }
       }
       return { chartRef };
     },

+ 2 - 1
src/components/jeecg/JVxeTable/src/components/JVxeToolbar.vue

@@ -59,7 +59,8 @@
   const collapsed = ref(true);
   // 配置的按钮
   const btns = computed(() => {
-    let btns = props.toolbarConfig?.btn || ['add', 'remove', 'clearSelection'];
+    let { btn, btns } = props.toolbarConfig || {};
+    btns = btn || btns || ['add', 'remove', 'clearSelection'];
     // 排除掉没有授权的按钮
     return btns.filter((btn) => {
       // 系统默认的批量删除编码配置为 batch_delete 此处需要兼容一下

+ 1 - 1
src/components/jeecg/JVxeTable/src/components/cells/JVxeProgressCell.vue

@@ -45,7 +45,7 @@
 <style scoped lang="less">
   // 关闭进度条的动画,防止滚动时动态赋值出现问题
   .j-vxe-progress.no-animation {
-    ::v-deep(.ant-progress-bg) {
+    :deep(.ant-progress-bg) {
       transition: none !important;
     }
   }

+ 11 - 0
src/components/jeecg/JVxeTable/src/hooks/useDragSort.ts

@@ -39,6 +39,11 @@ export function useDragSort(props: JVxeTableProps, methods: JVxeTableMethods) {
           if (oldIndex === newIndex) {
             return;
           }
+          // 【VUEN-2505】获取当前行数据
+          let rowNode = xTable.getRowNode(e.item);
+          if (!rowNode) {
+            return;
+          }
           let from = e.from;
           let element = startChildren[oldIndex];
           let target = null;
@@ -54,6 +59,12 @@ export function useDragSort(props: JVxeTableProps, methods: JVxeTableMethods) {
           from.removeChild(element);
           from.insertBefore(element, target);
           nextTick(() => {
+            // 【VUEN-2505】算出因虚拟滚动导致的偏移量
+            let diffIndex = rowNode!.index - oldIndex;
+            if (diffIndex > 0) {
+              oldIndex = oldIndex + diffIndex;
+              newIndex = newIndex + diffIndex;
+            }
             methods.doSort(oldIndex, newIndex);
             methods.trigger('dragged', { oldIndex, newIndex });
           });

+ 2 - 2
src/components/jeecg/JVxeTable/src/hooks/useJVxeComponent.ts

@@ -28,8 +28,8 @@ export function useJVxeComponent(props: JVxeComponent.Props) {
   const column = computed(() => props.params.column);
   // 用户配置的原始 column
   const originColumn = computed(() => column.value.params);
-  const rowIndex = computed(() => props.params.$rowIndex);
-  const columnIndex = computed(() => props.params.columnIndex);
+  const rowIndex = computed(() => props.params._rowIndex);
+  const columnIndex = computed(() => props.params._columnIndex);
   // 表格数据长度
   const fullDataLength = computed(() => props.params.$table.internalData.tableFullData.length);
   // 是否正在滚动中

+ 4 - 0
src/components/jeecg/JVxeTable/src/style/index.less

@@ -94,4 +94,8 @@
     width: 17px;
     height: 17px;
   }
+  // /*【美化表单】行编辑table的title字体改小一号*/
+  //   .vxe-header--column.col--ellipsis>.vxe-cell .vxe-cell--title{
+  //     font-size: 13px;
+  //   }
 }

+ 2 - 0
src/components/jeecg/JVxeTable/src/types/JVxeTypes.ts

@@ -44,6 +44,8 @@ export enum JVxeTypes {
   radio = 'radio',
   image = 'image',
   file = 'file',
+  // 省市区
+  pca = 'pca',
 }
 
 // 为了防止和 vxe 内置的类型冲突,所以加上一个前缀

+ 11 - 7
src/components/jeecg/OnLine/JPopupOnlReport.vue

@@ -5,22 +5,22 @@
         <a-row :gutter="24">
           <template v-for="(item, index) in queryInfo">
             <template v-if="item.hidden === '1'">
-              <a-col :md="8" :sm="24" :key="'query' + index" v-show="toggleSearchStatus">
+              <a-col :md="6" :sm="24" :key="'query' + index" v-show="toggleSearchStatus">
                 <SearchFormItem :formElRef="formRef" :queryParam="queryParam" :item="item" :dictOptions="dictOptions"></SearchFormItem>
               </a-col>
             </template>
             <template v-else>
-              <a-col :md="8" :sm="24" :key="'query' + index">
+              <a-col :md="6" :sm="24" :key="'query' + index">
                 <SearchFormItem :formElRef="formRef" :queryParam="queryParam" :item="item" :dictOptions="dictOptions"></SearchFormItem>
               </a-col>
             </template>
           </template>
 
-          <a-col :md="8" :sm="8">
+          <a-col :md="6" :sm="8">
             <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
               <a-col :lg="6">
-                <a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset">重置</a-button>
-                <a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery" style="margin-left: 8px">查询</a-button>
+                <a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">查询</a-button>
+                <a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset" style="margin-left: 8px">重置</a-button>
                 <a @click="handleToggleSearch" style="margin-left: 8px">
                   {{ toggleSearchStatus ? '收起' : '展开' }}
                   <Icon :icon="toggleSearchStatus ? 'ant-design:up-outlined' : 'ant-design:down-outlined'" />
@@ -63,7 +63,8 @@
   import { useAttrs } from '/@/hooks/core/useAttrs';
   import { usePopBiz } from '/@/components/jeecg/OnLine/hooks/usePopBiz';
   import { useMessage } from '/@/hooks/web/useMessage';
-
+  import { useRoute } from 'vue-router';
+  
   export default defineComponent({
     name: 'JPopupOnlReport',
     components: {
@@ -89,7 +90,10 @@
       const toggleSearchStatus = ref(false);
       const attrs = useAttrs();
       const tableScroll = ref({ x: true });
-      const getBindValue = Object.assign({}, unref(props), unref(attrs));
+      const route = useRoute();
+      console.log('route.query = ',route.query)
+      const getBindValue = Object.assign({}, {routeQuery: route.query}, unref(props), unref(attrs));
+      
       const [
         {
           visibleChange,

+ 15 - 7
src/components/jeecg/OnLine/SearchFormItem.vue

@@ -39,7 +39,7 @@
     </template>
     <template v-else>
       <a-date-picker
-        placeholder="1选择开始时间"
+        placeholder="选择开始时间"
         :show-time="true"
         valueFormat="YYYY-MM-DD HH:mm:ss"
         v-model:value="queryParam[item.field + '_begin']"
@@ -47,7 +47,7 @@
       />
       <span class="group-query-strig" style="width: auto; padding: 0 4px">~</span>
       <a-date-picker
-        placeholder="2选择结束时间"
+        placeholder="选择结束时间"
         :show-time="true"
         valueFormat="YYYY-MM-DD HH:mm:ss"
         v-model:value="queryParam[item.field + '_end']"
@@ -139,6 +139,7 @@
                 :placeholder=" '请选择'+item.label "
                 :sql="getSqlByDictCode(item)">
         </j-online-search-select>-->
+    <JOnlineSearchSelect v-model:value="queryParam[item.field]" :placeholder="'请选择' + item.label" :sql="item.sql" />
   </a-form-item>
 
   <a-form-item v-else-if="item.view === CompTypeEnum.SelUser" :labelCol="labelCol" :class="'jeecg-online-search'">
@@ -200,7 +201,10 @@
     <template #label>
       <span :title="item.label" class="label-text">{{ item.label }}</span>
     </template>
-    <template v-if="single_mode === item.mode">
+    <template v-if="single_mode === item.mode && 'string' == item.view">
+      <j-input :placeholder="'请输入' + item.label" v-model:value="queryParam[item.field]" />
+    </template>
+    <template v-else-if="single_mode === item.mode">
       <a-input :placeholder="'请输入' + item.label" v-model:value="queryParam[item.field]" />
     </template>
     <template v-else>
@@ -219,12 +223,14 @@
   import {
     JDictSelectTag,
     JTreeSelect,
-    MTreeSelect,
     JCategorySelect,
     JSelectUserByDept,
     JSelectDept,
     JPopup,
     JAreaLinkage,
+    JInput,
+    JSearchSelect,
+    MTreeSelect,
   } from '/@/components/Form';
   export default defineComponent({
     name: 'JPopupOnlReport',
@@ -238,6 +244,8 @@
       JSelectDept,
       JPopup,
       JAreaLinkage,
+      JInput,
+      JSearchSelect,
     },
     props: {
       formElRef: {
@@ -321,16 +329,16 @@
   }
 
   /* 查询条件左对齐样式设置 */
-  .jeecg-online-search ::v-deep .ant-form-item-label {
+  .jeecg-online-search :deep(.ant-form-item-label) {
     flex: 0 0 auto !important;
     width: auto;
   }
-  .jeecg-online-search ::v-deep .ant-form-item-control {
+  .jeecg-online-search :deep(.ant-form-item-control) {
     max-width: 100%;
   }
 
   /* label显示宽度 超出显示... */
-  .jeecg-online-search ::v-deep .label-text {
+  .jeecg-online-search :deep(.label-text) {
     max-width: v-bind(labelTextMaxWidth);
     overflow: hidden;
     white-space: nowrap;

+ 7 - 0
src/components/jeecg/OnLine/hooks/usePopBiz.ts

@@ -512,6 +512,8 @@ export function usePopBiz(props, tableRef?) {
         //查询条件加载后再请求数据
         if (data) {
           setDataSource(data);
+          //传递路由参数和动态参数,不生效,
+          loadData(1);
         } else {
           //没有传递data时查询数据
           loadData(1);
@@ -531,6 +533,7 @@ export function usePopBiz(props, tableRef?) {
       pagination.current = 1;
     }
     const params = getQueryParams(); //查询条件
+    console.log('params', params);
     loading.value = true;
     const url = `${configUrl.getData}${unref(cgRpConfigId)}`;
     //缓存key
@@ -596,7 +599,11 @@ export function usePopBiz(props, tableRef?) {
         }
       }
       queryParam.value = { ...queryTemp };
+    } // 合并路由参数
+    if (props.routeQuery) {
+      queryParam.value = Object.assign(queryParam.value, props.routeQuery);
     }
+
     const dynamicTemp = {};
     if (props.param) {
       Object.keys(props.param).map((key) => {

+ 12 - 9
src/components/jeecg/comment/CommentList.vue

@@ -75,15 +75,15 @@
   /**
    * 评论列表
    */
-  import { defineComponent, ref, onMounted, watch, watchEffect } from 'vue';
+  import { defineComponent, ref, onMounted, watch, watchEffect ,inject } from 'vue';
   import { propTypes } from '/@/utils/propTypes';
-  import dayjs from 'dayjs';
-  import 'dayjs/locale/zh.js';
-  import relativeTime from 'dayjs/plugin/relativeTime';
-  import customParseFormat from 'dayjs/plugin/customParseFormat';
-  dayjs.locale('zh');
-  dayjs.extend(relativeTime);
-  dayjs.extend(customParseFormat);
+  // import dayjs from 'dayjs';
+  // import relativeTime from 'dayjs/plugin/relativeTime';
+  // import customParseFormat from 'dayjs/plugin/customParseFormat';
+  // dayjs.locale('zh');
+  // dayjs.extend(relativeTime);
+  // dayjs.extend(customParseFormat);
+  
   import { MessageOutlined } from '@ant-design/icons-vue';
   import { Comment, Tooltip } from 'ant-design-vue';
   import { useUserStore } from '/@/store/modules/user';
@@ -113,6 +113,8 @@
       const { createMessage } = useMessage();
       const dataList = ref([]);
       const { userInfo } = useUserStore();
+      const dayjs = inject('$dayjs')
+      
       /**
        * 获取当前用户名称
        */
@@ -245,7 +247,8 @@
         }
       });
 
-      const { getHtml } = useEmojiHtml();
+      const storageEmojiIndex = inject('$globalEmojiIndex')
+      const { getHtml } = useEmojiHtml(storageEmojiIndex);
       const bottomCommentRef = ref()
       function handleClickItem(){
         bottomCommentRef.value.changeActive()

+ 1 - 1
src/components/jeecg/comment/CommentPanel.vue

@@ -87,7 +87,7 @@
     }
   }
   //antd3升级后,表单右侧讨论样式调整
-  ::v-deep(.ant-tabs-top  .ant-tabs-nav, .ant-tabs-bottom  .ant-tabs-nav, .ant-tabs-top  div  .ant-tabs-nav, .ant-tabs-bottom  div  .ant-tabs-nav) {
+  :deep(.ant-tabs-top  .ant-tabs-nav, .ant-tabs-bottom  .ant-tabs-nav, .ant-tabs-top  div  .ant-tabs-nav, .ant-tabs-bottom  div  .ant-tabs-nav) {
     margin: 0 16px 0;
   }
 </style>

+ 9 - 9
src/components/jeecg/comment/DataLogList.vue

@@ -28,16 +28,15 @@
 <script>
   import { PlusOutlined, EditOutlined } from '@ant-design/icons-vue';
   import { getModalHeight, getLogList } from './useComment'
-  import {ref, watchEffect} from 'vue'
+  import {inject, ref, watchEffect} from 'vue'
   import { propTypes } from '/@/utils/propTypes';
   import { Tooltip } from 'ant-design-vue';
-  import dayjs from 'dayjs';
-  import 'dayjs/locale/zh.js';
-  import relativeTime from 'dayjs/plugin/relativeTime';
-  import customParseFormat from 'dayjs/plugin/customParseFormat';
-  dayjs.locale('zh');
-  dayjs.extend(relativeTime);
-  dayjs.extend(customParseFormat);
+  // import dayjs from 'dayjs';
+  // import relativeTime from 'dayjs/plugin/relativeTime';
+  // import customParseFormat from 'dayjs/plugin/customParseFormat';
+  // dayjs.locale('zh');
+  // dayjs.extend(relativeTime);
+  // dayjs.extend(customParseFormat);
   
   export default {
     name: "DataLogList",
@@ -52,6 +51,7 @@
       datetime:  propTypes.number.def(1),
     },
     setup(props){
+      const dayjs = inject('$dayjs')
       const winHeight = getModalHeight();
       const height = ref(300);
       height.value = winHeight - 46 - 57 -53 - 30;
@@ -174,4 +174,4 @@
     }
 
 }
-</style>
+</style>

+ 4 - 5
src/components/jeecg/comment/MyComment.vue

@@ -45,14 +45,13 @@
 </template>
 
 <script lang="ts">
-  import { ref, watch, computed } from 'vue';
+  import {ref, watch, computed, inject} from 'vue';
   import { propTypes } from '/@/utils/propTypes';
   import { UserAddOutlined, PaperClipOutlined, SmileOutlined } from '@ant-design/icons-vue';
   import { Tooltip } from 'ant-design-vue';
   import UserSelectModal from '/@/components/Form/src/jeecg/components/modal/UserSelectModal.vue';
   import { useModal } from '/@/components/Modal';
   import UploadChunk from './UploadChunk.vue';
-  import { Picker } from 'emoji-mart-vue-fast/src';
   import 'emoji-mart-vue-fast/css/emoji-mart.css';
   import { useEmojiHtml } from './useComment';
 
@@ -79,7 +78,6 @@
       PaperClipOutlined,
       UploadChunk,
       SmileOutlined,
-      Picker,
     },
     props: {
       inner: propTypes.bool.def(false),
@@ -221,8 +219,9 @@
         e.stopPropagation();
         visibleEmoji.value = !visibleEmoji.value;
       }
-
-      const { emojiIndex, getHtml } = useEmojiHtml();
+      
+      const emojiIndex = inject('$globalEmojiIndex')
+      const { getHtml } = useEmojiHtml(emojiIndex);
 
       const commentHtml = computed(() => {
         let temp = myComment.value;

+ 4 - 13
src/components/jeecg/comment/useComment.ts

@@ -13,8 +13,6 @@ import txt from '/@/assets/svg/fileType/txt.svg';
 import word from '/@/assets/svg/fileType/word.svg';
 import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
 import { createImgPreview } from '/@/components/Preview';
-import {EmojiIndex} from "emoji-mart-vue-fast/src";
-import data from "emoji-mart-vue-fast/data/apple.json";
 
 enum Api {
   list = '/sys/comment/listByForm',
@@ -365,16 +363,9 @@ export function useFileList() {
 /**
  * 用于emoji渲染
  */
-export function useEmojiHtml(){
+export function useEmojiHtml(globalEmojiIndex){
   const COLONS_REGEX = new RegExp('([^:]+)?(:[a-zA-Z0-9-_+]+:(:skin-tone-[2-6]:)?)','g');
-  let emojisToShowFilter = function() {
-    return true;
-  }
-  let emojiIndex = new EmojiIndex(data, {
-    emojisToShowFilter,
-    exclude:['recent','people','nature','foods','activity','places','objects','symbols','flags']
-  });
-  
+
   function getHtml(text) {
     if(!text){
       return ''
@@ -384,7 +375,7 @@ export function useEmojiHtml(){
       if (endsWith(before, 'alt="') || endsWith(before, 'data-text="')) {
         return match
       }
-      let emoji = emojiIndex.findEmoji(p2)
+      let emoji = globalEmojiIndex.findEmoji(p2)
       if (!emoji) {
         return match
       }
@@ -403,7 +394,7 @@ export function useEmojiHtml(){
   }
   
   return {
-    emojiIndex,
+    globalEmojiIndex,
     getHtml
   }
 }

+ 3 - 1
src/design/ant/pagination.less

@@ -50,7 +50,9 @@ html[data-theme='dark'] {
     .ant-pagination-next,
     .ant-pagination-item {
       margin: 0 4px !important;
-      background-color: #f4f4f5 !important;
+      //update-begin---author:scott ---date:2022-09-30  for:【美化】Table分页页面默认背景色丑,去掉-----------
+      //background-color: #f4f4f5 !important;
+      //update-end---author:scott ---date::2022-09-30  for:【美化】Table分页页面默认背景色丑,去掉------------
       border: none;
       border-radius: none !important;
 

+ 17 - 0
src/design/theme.less

@@ -6,6 +6,23 @@ html[data-theme='light'] {
   .text-secondary {
     color: rgba(0, 0, 0, 0.45);
   }
+  /*【美化】自定义table字体颜色*/
+  .ant-table {
+    color: rgba(0, 0, 0, 0.65);
+  }
+  /*【美化】自定义table字体颜色*/
+  /*【美化】自定义form字体颜色*/
+  .ant-select-multiple .ant-select-selection-item-content {
+    color: rgba(0, 0, 0, 0.65);
+  }
+  .ant-input-affix-wrapper > input.ant-input {
+    color: rgba(0, 0, 0, 0.65);
+  }
+  .ant-select-single.ant-select-show-arrow .ant-select-selection-item,
+  .ant-select-single.ant-select-show-arrow .ant-select-selection-placeholder {
+    color: rgba(0, 0, 0, 0.65);
+  }
+  /*【美化】自定义form字体颜色*/
 
   .ant-alert-success {
     background-color: #f6ffed;

+ 8 - 33
src/design/vent/antCss.less

@@ -160,6 +160,9 @@ tr.ant-table-expanded-row:hover > td {
   .j-box-bottom-button-float {
     background-color: #ffffff00 !important;
   }
+  .ant-modal-confirm-title {
+    color: #fff !important;
+  }
   .ant-form {
     label {
       color: #fff;
@@ -180,16 +183,20 @@ tr.ant-table-expanded-row:hover > td {
         color: #fff;
         background-color: #ffffff00 !important;
       }
+      .ant-select-single.ant-select-show-arrow .ant-select-selection-item,
+      .ant-select-single.ant-select-show-arrow .ant-select-selection-placeholder {
+        color: #fff;
+      }
     }
   }
 }
-
 .ant-modal-close {
   color: #ffffff !important;
 }
 .ant-modal-footer {
   border-color: #ffffff22 !important;
 }
+
 /* 加载 */
 ant-spin-container:hover {
   background-color: #00000033 !important;
@@ -198,38 +205,6 @@ ant-spin-container:hover {
 .ant-pagination {
   color: @vent-font-color !important;
 }
-.vent-form {
-  .ant-form {
-    label {
-      color: #fff;
-    }
-    .anticon.ant-input-clear-icon,
-    .anticon {
-      color: #fff !important;
-    }
-    .ant-select-selector {
-      color: #fff;
-      background-color: #ffffff00 !important;
-    }
-    .ant-form-item-control-input-content {
-      .ant-input-affix-wrapper {
-        background-color: #ffffff00 !important;
-      }
-      .ant-input {
-        color: #fff;
-        background-color: #ffffff00 !important;
-      }
-    }
-    .ant-input-number {
-      width: 100% !important;
-      background: #ffffff00;
-      color: #fff;
-    }
-    .ant-form-item {
-      margin-right: 20px;
-    }
-  }
-}
 
 .ant-drawer {
   background: #080a2c11 !important;

+ 63 - 0
src/design/vent/index.less

@@ -6,13 +6,76 @@
 .vent {
   background-color: #03114c !important;
 }
+/* 表单 */
+.vent-form {
+  .ant-form {
+    label {
+      color: #fff;
+    }
+    .anticon.ant-input-clear-icon,
+    .anticon {
+      color: #fff !important;
+    }
+    .ant-select-selector {
+      color: #fff;
+      background-color: #ffffff00 !important;
+    }
+    .ant-form-item-control-input-content {
+      .ant-input-affix-wrapper {
+        background-color: #ffffff00 !important;
+      }
+      .ant-input,
+      .ant-form-item-control-input {
+        color: #fff;
+        background-color: #ffffff00 !important;
+      }
+    }
+    .ant-input-number {
+      width: 100% !important;
+      background: #ffffff00;
+      color: #fff;
+    }
+    .ant-form-item {
+      margin-right: 20px;
+    }
+  }
+}
 .jeecg-basic-table-form-container .ant-form {
   background-color: @vent-transparent !important;
   color: @vent-font-color !important;
   border: 1px solid #ffffff22;
+
   .ant-form-item-label > label {
     color: @vent-font-color !important;
   }
+  .ant-input-affix-wrapper,
+  .ant-input-number-handler-wrap {
+    color: #fff;
+    background-color: #ffffff17 !important;
+    border: 1px solid #b7b7b74f !important;
+  }
+  .ant-picker,
+  .ant-select-selector {
+    color: #fff !important;
+    background: #ffffff17 !important;
+    border: 1px solid #b7b7b74f !important;
+  }
+  .anticon,
+  input,
+  .ant-input-number,
+  .ant-select-selection-item,
+  .ant-picker-suffix {
+    color: #fff !important;
+    background: #ffffff00 !important;
+    border: none;
+  }
+  .ant-select-selection-placeholder {
+    color: #b7b7b7 !important;
+  }
+  .ant-select-arrow,
+  .ant-picker-separator {
+    color: #fff !important;
+  }
 }
 
 .jeecg-basic-table {

+ 2 - 2
src/design/vent/modal.less

@@ -31,8 +31,8 @@
         position: absolute;
         width: 21px;
         height: 21px;
-        border: 4px solid #f2a811;
-        background: rgb(127 177 255 / 75%);
+        border: 4px solid #755cf8;
+        background: rgba(173, 204, 253, 0.75);
         bottom: -55px;
         right: -85px;
         border-radius: 50%;

+ 1 - 1
src/enums/CompTypeEnum.ts

@@ -17,7 +17,7 @@ export enum CompTypeEnum {
   //分类字典树
   CatTree = 'cat_tree',
   //下拉搜索
-  SelSearch = 'sel_search',
+  SelSearch = 'search',
   //用户现在框
   SelUser = 'sel_user',
   //复选框

+ 1 - 1
src/enums/pageEnum.ts

@@ -5,7 +5,7 @@ export enum PageEnum {
   // 暂时修改
   // BASE_LOGIN = '/monitor/monitor-fan-main',
   // basic home path
-  BASE_HOME = '/dashboard/analysis',
+  BASE_HOME = '/micro-vent-3dModal/dashboard/analysis',
   // error page path
   ERROR_PAGE = '/exception',
   // error log page path

+ 10 - 4
src/hooks/component/useFormItem.ts

@@ -1,5 +1,7 @@
 import type { UnwrapRef, Ref, WritableComputedRef, DeepReadonly } from 'vue';
 import { reactive, readonly, computed, getCurrentInstance, watchEffect, unref, nextTick, toRaw } from 'vue';
+import { Form } from 'ant-design-vue';
+import { FormItemContext } from 'ant-design-vue/es/form/FormItemContext';
 
 import { isEqual } from 'lodash-es';
 export function useRuleFormItem<T extends Recordable, K extends keyof T, V = UnwrapRef<T[K]>>(
@@ -7,10 +9,11 @@ export function useRuleFormItem<T extends Recordable, K extends keyof T, V = Unw
   key?: K,
   changeEvent?,
   emitData?: Ref<any[] | undefined>
-): [WritableComputedRef<V>, (val: V) => void, DeepReadonly<V>];
+): [WritableComputedRef<V>, (val: V) => void, DeepReadonly<V>, FormItemContext];
 export function useRuleFormItem<T extends Recordable>(props: T, key: keyof T = 'value', changeEvent = 'change', emitData?: Ref<any[]>) {
   const instance = getCurrentInstance();
   const emit = instance?.emit;
+  const formItemContext = Form.useInjectFormItemContext();
 
   const innerState = reactive({
     value: props[key],
@@ -28,8 +31,8 @@ export function useRuleFormItem<T extends Recordable>(props: T, key: keyof T = '
 
   const state: any = computed({
     get() {
-      //修复多选时空值显示问题
-      return innerState.value === '' ? [] : innerState.value;
+      //修复多选时空值显示问题(兼容值为0的情况)
+      return innerState.value == null || innerState.value === '' ? [] : innerState.value;
     },
     set(value) {
       if (isEqual(value, defaultState.value)) return;
@@ -37,9 +40,12 @@ export function useRuleFormItem<T extends Recordable>(props: T, key: keyof T = '
       innerState.value = value as T[keyof T];
       nextTick(() => {
         emit?.(changeEvent, value, ...(toRaw(unref(emitData)) || []));
+        // https://antdv.com/docs/vue/migration-v3-cn
+        // antDv3升级后需要调用这个方法更新校验的值
+        nextTick(() => formItemContext.onFieldChange());
       });
     },
   });
 
-  return [state, setState, defaultState];
+  return [state, setState, defaultState, formItemContext];
 }

+ 1 - 1
src/hooks/core/threejs/useThree.ts

@@ -71,7 +71,7 @@ class UseThree {
     }
     // this.setTestPlane();
     this.rayCaster = new THREE.Raycaster();
-    this.createStats();
+    // this.createStats();
     // this.removeSawtooth();
   }
 

+ 2 - 2
src/hooks/setting/index.ts

@@ -13,7 +13,7 @@ export const useGlobSetting = (): Readonly<GlobConfig> => {
     VITE_GLOB_APP_OPEN_QIANKUN,
     VITE_GLOB_DOMAIN_URL,
     VITE_GLOB_ONLINE_VIEW_URL,
-    VITE_3D_MODAL_ARR
+    VITE_3D_MODAL_ARR,
   } = getAppEnvConfig();
 
   if (!/[a-zA-Z\_]*/.test(VITE_GLOB_APP_SHORT_NAME)) {
@@ -34,7 +34,7 @@ export const useGlobSetting = (): Readonly<GlobConfig> => {
     urlPrefix: VITE_GLOB_API_URL_PREFIX,
     uploadUrl: VITE_GLOB_DOMAIN_URL,
     viewUrl: VITE_GLOB_ONLINE_VIEW_URL,
-    modalUrlArr: VITE_3D_MODAL_ARR
+    modalUrlArr: VITE_3D_MODAL_ARR,
   };
   window._CONFIG['domianURL'] = VITE_GLOB_DOMAIN_URL;
   return glob as Readonly<GlobConfig>;

+ 4 - 0
src/hooks/setting/useHeaderSetting.ts

@@ -50,6 +50,9 @@ export function useHeaderSetting() {
   const getShowBread = computed(() => {
     return unref(getMenuMode) !== MenuModeEnum.HORIZONTAL && unref(getShowBreadCrumb) && !unref(getSplit);
   });
+  const getShowBreadTitle = computed(() => {
+    return unref(getMenuMode) !== MenuModeEnum.HORIZONTAL && !unref(getShowBreadCrumb) && !unref(getSplit);
+  });
 
   const getShowHeaderLogo = computed(() => {
     return unref(getShowLogo) && !unref(getIsSidebarType) && !unref(getIsMixSidebar);
@@ -82,5 +85,6 @@ export function useHeaderSetting() {
     getShowInsetHeaderRef,
     getUnFixedAndFull,
     getHeaderBgColor,
+    getShowBreadTitle
   };
 }

+ 8 - 2
src/hooks/system/useJvxeMethods.ts

@@ -44,7 +44,7 @@ export function useJvxeMethod(requestAddOrEdit, classifyIntoFormData, tableRefs,
     getAllTable()
       .then((tables) => {
         let values = formRef.value.getFieldsValue();
-        return validateFormModelAndTables(formRef.value.validate, values, tables, formRef.value.getProps);
+        return validateFormModelAndTables(formRef.value.validate, values, tables, formRef.value.getProps, false);
       })
       .then((allValues) => {
         /** 一次性验证一对一的所有子表 */
@@ -61,7 +61,13 @@ export function useJvxeMethod(requestAddOrEdit, classifyIntoFormData, tableRefs,
       .catch((e) => {
         if (e.error === VALIDATE_FAILED) {
           // 如果有未通过表单验证的子表,就自动跳转到它所在的tab
-          activeKey.value = e.index == null ? unref(activeKey) : refKeys.value[e.index];
+          //update-begin-author:taoyan date:2022-11-22 for: VUEN-2866【代码生成】Tab风格 一对多子表校验不通过时,点击提交表单空白了,流程附加页面也有此问题
+          if(e.paneKey){
+            activeKey.value = e.paneKey
+          }else{
+            activeKey.value = e.index == null ? unref(activeKey) : refKeys.value[e.index];
+          }
+          //update-end-author:taoyan date:2022-11-22 for: VUEN-2866【代码生成】Tab风格 一对多子表校验不通过时,点击提交表单空白了,流程附加页面也有此问题
         } else {
           console.error(e);
         }

+ 1 - 1
src/hooks/system/useListPage.ts

@@ -235,7 +235,7 @@ export function useListTable(tableProps: TableProps): [
       },
     },
     // 斑马纹
-    striped: true,
+    striped: false,
     // 是否可以自适应高度
     canResize: true,
     // 表格最小高度

+ 5 - 5
src/hooks/web/useMessage.ts

@@ -38,13 +38,13 @@ interface ConfirmOptions {
 function getIcon(iconType: string) {
   try {
     if (iconType === 'warning') {
-      return  h(InfoCircleFilled,{"class":"modal-icon-warning"})
+      return h(InfoCircleFilled, { class: 'modal-icon-warning' });
     } else if (iconType === 'success') {
-      return h(CheckCircleFilled,{"class": "modal-icon-success"});
+      return h(CheckCircleFilled, { class: 'modal-icon-success' });
     } else if (iconType === 'info') {
-      return h(InfoCircleFilled,{"class": "modal-icon-info"});
+      return h(InfoCircleFilled, { class: 'modal-icon-info' });
     } else {
-      return h(CloseCircleFilled,{"class":"modal-icon-error"});
+      return h(CloseCircleFilled, { class: 'modal-icon-error' });
     }
   } catch (e) {
     console.log(e);
@@ -54,7 +54,7 @@ function getIcon(iconType: string) {
 function renderContent({ content }: Pick<ModalOptionsEx, 'content'>) {
   try {
     if (isString(content)) {
-      return h('div', h('div', {'innerHTML':content as string}));
+      return h('div', h('div', { innerHTML: content as string }));
     } else {
       return content;
     }

+ 27 - 2
src/hooks/web/usePage.ts

@@ -47,8 +47,15 @@ export const useRedo = (_router?: Router) => {
         return;
       }
       if (name && Object.keys(params).length > 0) {
-        params['_redirect_type'] = 'name';
-        params['path'] = String(name);
+        //update-begin-author:taoyan date:2022-10-19 for: VUEN-2356 【vue3】online表单、表单设计器 功能测试 右键刷新时 404
+        if(isDynamicRoute(params, name)){
+          params['_redirect_type'] = 'path';
+          params['path'] = fullPath;
+        }else{
+          params['_redirect_type'] = 'name';
+          params['path'] = String(name);
+        }
+        //update-end-author:taoyan date:2022-10-19 for: VUEN-2356 【vue3】online表单、表单设计器 功能测试 右键刷新时 404
       } else {
         params['_redirect_type'] = 'path';
         params['path'] = fullPath;
@@ -58,3 +65,21 @@ export const useRedo = (_router?: Router) => {
   }
   return redo;
 };
+
+/**
+ * 判断是不是动态路由的跳转
+ * @param params
+ * @param name
+ */
+function isDynamicRoute(params, name){
+  let arr = Object.keys(params);
+  let flag = false; 
+  for(let i=0;i<arr.length;i++){
+    let key = '@'+arr[i];
+    if((name as string).indexOf(key)>0){
+      flag = true;
+      break;
+    }
+  }
+  return flag;
+}

+ 6 - 1
src/hooks/web/useVentWebSocket.ts

@@ -8,7 +8,12 @@ import { getToken } from '/@/utils/auth';
 const glob = useGlobSetting();
 const userStore = useUserStore();
 const state = reactive({
-  server: glob.domainUrl?.replace('https://', 'wss://').replace('http://', 'ws://') + '/deviceSocket/' + unref(userStore.getUserInfo).username + '?token=' + getToken(),
+  server:
+    glob.domainUrl?.replace('https://', 'wss://').replace('http://', 'ws://') +
+    '/deviceSocket/' +
+    unref(userStore.getUserInfo).username +
+    '?token=' +
+    getToken(),
   sendValue: '',
   recordList: [] as { id: number; time: number; res: string }[],
 });

+ 3 - 0
src/hooks/web/useWebColumns.ts

@@ -27,6 +27,9 @@ export const getTableHeaderColumns = (webColumnsKey) => {
   const allTableHeaderColumnArr = ventStore.getAllTableHeaderColumns;
   if (allTableHeaderColumnArr) {
     const tabelHeaderColumns = allTableHeaderColumnArr[key];
+    if (key && key.includes('_chart')) {
+      return tabelHeaderColumns;
+    }
     return arrToColumns(tabelHeaderColumns);
   }
   return [];

+ 1 - 1
src/layouts/default/header/components/notify/NoticeList.vue

@@ -162,7 +162,7 @@
       display: none;
     }
 
-    ::v-deep(.ant-pagination-disabled) {
+    :deep(.ant-pagination-disabled) {
       display: inline-block !important;
     }
 

+ 14 - 26
src/layouts/default/header/components/notify/index.vue

@@ -7,7 +7,7 @@
     <DynamicNotice ref="dynamicNoticeRef" v-bind="dynamicNoticeProps" />
     <DetailModal @register="registerDetail" />
 
-    <sys-message-modal @register="registerMessageModal" @refresh="reloadCount"></sys-message-modal>
+    <sys-message-modal @register="registerMessageModal" @refresh="reloadCount" />
   </div>
 </template>
 <script lang="ts">
@@ -28,8 +28,8 @@
   import { getToken } from '/@/utils/auth';
   import md5 from 'crypto-js/md5';
 
-  import SysMessageModal from '/@/views/system/message/components/SysMessageModal.vue'
-  
+  import SysMessageModal from '/@/views/system/message/components/SysMessageModal.vue';
+
   export default defineComponent({
     components: {
       Popover,
@@ -57,23 +57,22 @@
         }
         return count;
       });
-      const chatRef = ref();
 
       const [registerMessageModal, { openModal: openMessageModal }] = useModal();
-      function clickBadge(){
+      function clickBadge() {
         //消息列表弹窗前去除角标
         for (let i = 0; i < listData.value.length; i++) {
           listData.value[i].count = 0;
         }
-        openMessageModal(true, {})
+        openMessageModal(true, {});
       }
 
       const popoverVisible = ref<boolean>(false);
       onMounted(() => {
-       initWebSocket();
+        initWebSocket();
       });
 
-      const messageCount = ref<number>(0)
+      const messageCount = ref<number>(0);
       function mapAnnouncement(item) {
         return {
           ...item,
@@ -94,10 +93,9 @@
           listData.value[0].count = anntMsgTotal;
           listData.value[1].count = sysMsgTotal;
           //update-begin-author:taoyan date:2022-8-30 for: 消息数量改变触发chat组件事件
-          let msgCount = anntMsgTotal+sysMsgTotal;
+          let msgCount = anntMsgTotal + sysMsgTotal;
           //update-begin-author:wangshuai date:2022-09-02 for: 消息未读数为0也需要传递,因为聊天需要计算总数
-          chatRef.value.updateMessageCount(msgCount);
-          messageCount.value = msgCount
+          messageCount.value = msgCount;
           //update-end-author:wangshuai date:2022-09-02 for: 消息未读数为0也需要传递,因为聊天需要计算总数
           //update-end-author:taoyan date:2022-8-30 for: 消息数量改变触发chat组件事件
         } catch (e) {
@@ -132,7 +130,7 @@
         let token = getToken();
         //将登录token生成一个短的标识
         let wsClientId = md5(token);
-        let userId = unref(userStore.getUserInfo).id + "_" + wsClientId;
+        let userId = unref(userStore.getUserInfo).id + '_' + wsClientId;
         // WebSocket与普通的请求所用协议有所不同,ws等同于http,wss等同于https
         let url = glob.domainUrl?.replace('https://', 'wss://').replace('http://', 'ws://') + '/websocket/' + userId;
         connectWebSocket(url);
@@ -143,9 +141,9 @@
         if (data.cmd === 'topic' || data.cmd === 'user') {
           //update-begin-author:taoyan date:2022-7-13 for: VUEN-1674【严重bug】系统通知,为什么必须刷新右上角才提示
           //后台保存数据太慢 前端延迟刷新消息
-          setTimeout(()=>{
+          setTimeout(() => {
             loadData();
-          }, 1000)
+          }, 1000);
           //update-end-author:taoyan date:2022-7-13 for: VUEN-1674【严重bug】系统通知,为什么必须刷新右上角才提示
         }
       }
@@ -155,7 +153,7 @@
         popoverVisible.value = false;
         readAllMsg({}, loadData);
       }
-      async function reloadCount(id){
+      async function reloadCount(id) {
         try {
           await editCementSend(id);
           await loadData();
@@ -164,13 +162,6 @@
         }
       }
 
-      /**
-       * 获取消息未读数
-       */
-      function getSystemUnreadNum() {
-        chatRef.value.updateMessageCount(messageCount.value);
-      }
-
       return {
         prefixCls,
         listData,
@@ -184,8 +175,6 @@
         popoverVisible,
         registerDetail,
         dynamicNoticeProps,
-        chatRef,
-        getSystemUnreadNum
       };
     },
   });
@@ -196,6 +185,7 @@
 
   .@{prefix-cls} {
     padding-top: 2px;
+    position: absolute;
 
     &__overlay {
       max-width: 340px;
@@ -211,7 +201,6 @@
       .ant-list-item {
         padding: 12px 24px;
         transition: background-color 300ms;
-
       }
 
       .bottom-buttons {
@@ -282,5 +271,4 @@
       }
     }
   }
-
 </style>

+ 1 - 1
src/layouts/default/header/components/user-dropdown/UpdatePassword.vue

@@ -57,7 +57,7 @@
       setModalProps({ confirmLoading: true });
       //提交表单
       let params = Object.assign({ username: unref(username) }, values);
-      defHttp.put({ url: 'sys/user/updatePassword', params }, { isTransformResponse: false }).then((res) => {
+      defHttp.put({ url: '/sys/user/updatePassword', params }, { isTransformResponse: false }).then((res) => {
         if (res.success) {
           $message.createMessage.success(res.message);
           //关闭弹窗

+ 46 - 1
src/layouts/default/header/index.vue

@@ -4,6 +4,15 @@
     <div :class="`${prefixCls}-left`">
       <!-- logo -->
       <AppLogo v-if="getShowHeaderLogo || getIsMobile" :class="`${prefixCls}-logo`" :theme="getHeaderTheme" :style="getLogoWidth" />
+      <!-- <LayoutTrigger
+        v-if="(getShowContent && getShowHeaderTrigger && !getSplit && !getIsMixSidebar) || getIsMobile"
+        :theme="getHeaderTheme"
+        :sider="false"
+      />
+      <LayoutBreadcrumb v-if="getShowContent && getShowBread" :theme="getHeaderTheme" />
+      <span v-if="getShowContent && getShowBreadTitle" :class="[prefixCls, `${prefixCls}--${getHeaderTheme}`, 'headerIntroductionClass']">
+        欢迎进入 {{ title }}
+      </span> -->
     </div>
     <!-- left end -->
 
@@ -28,7 +37,7 @@
 </template>
 <script lang="ts">
   import { defineComponent, unref, computed, ref, onMounted, toRaw } from 'vue';
-
+  import { useGlobSetting } from '/@/hooks/setting';
   import { propTypes } from '/@/utils/propTypes';
 
   import { Layout } from 'ant-design-vue';
@@ -88,6 +97,7 @@
 
       const { getShowTopMenu, getShowHeaderTrigger, getSplit, getIsMixMode, getMenuWidth, getIsMixSidebar } = useMenuSetting();
       const { getUseErrorHandle, getShowSettingButton, getSettingButtonPosition } = useRootSetting();
+      const { title } = useGlobSetting();
 
       const {
         getHeaderTheme,
@@ -99,6 +109,7 @@
         getShowHeader,
         getShowSearch,
         getUseLockPage,
+        getShowBreadTitle,
       } = useHeaderSetting();
 
       const { getShowLocalePicker } = useLocale();
@@ -175,6 +186,7 @@
         getHeaderTheme,
         getShowHeaderTrigger,
         getIsMobile,
+        getShowBreadTitle,
         getShowBread,
         getShowContent,
         getSplitType,
@@ -194,10 +206,43 @@
         loginSelectOk,
         loginSelectRef,
         currentRoute,
+        title,
       };
     },
   });
 </script>
 <style lang="less">
   @import './index.less';
+  //update-begin---author:scott ---date:2022-09-30  for:默认隐藏顶部菜单面包屑-----------
+  //顶部欢迎语展示样式
+  @prefix-cls: ~'@{namespace}-layout-header';
+
+  .@{prefix-cls} {
+    display: flex;
+    padding: 0 8px;
+    // align-items: center;
+
+    .headerIntroductionClass {
+      margin-right: 4px;
+      margin-bottom: 2px;
+      border-bottom: 0px;
+      border-left: 0px;
+    }
+
+    &--light {
+      .headerIntroductionClass {
+        color: @breadcrumb-item-normal-color;
+      }
+    }
+
+    &--dark {
+      .headerIntroductionClass {
+        color: rgba(255, 255, 255, 0.6);
+      }
+      .anticon {
+        color: rgba(255, 255, 255, 0.8);
+      }
+    }
+    //update-end---author:scott ---date::2022-09-30  for:默认隐藏顶部菜单面包屑--------------
+  }
 </style>

+ 25 - 0
src/layouts/default/tabs/index.less

@@ -201,3 +201,28 @@ html[data-theme='light'] {
     }
   }
 }
+
+.ant-tabs-dropdown-menu {
+  &-title-content {
+    display: flex;
+    align-items: center;
+
+    .@{prefix-cls} {
+      &-content__info {
+        width: auto;
+        margin-left: 0;
+        line-height: 28px;
+      }
+    }
+  }
+
+  &-item-remove {
+    margin-left: auto;
+  }
+}
+
+.multiple-tabs__dropdown {
+  .ant-dropdown-content {
+    width: 172px;
+  }
+}

+ 2 - 2
src/locales/lang/en.ts

@@ -2,10 +2,10 @@ import { genMessage } from '../helper';
 import antdLocale from 'ant-design-vue/es/locale/en_US';
 //import momentLocale from 'moment/dist/locale/eu';
 
-const modules = import.meta.globEager('./en/**/*.ts');
+const modules = import.meta.glob('./en/**/*.ts', { eager: true });
 export default {
   message: {
-    ...genMessage(modules, 'en'),
+    ...genMessage(modules as Recordable<Recordable>, 'en'),
     antdLocale,
   },
   dateLocale: null,

+ 2 - 2
src/locales/lang/zh_CN.ts

@@ -1,10 +1,10 @@
 import { genMessage } from '../helper';
 import antdLocale from 'ant-design-vue/es/locale/zh_CN';
 
-const modules = import.meta.globEager('./zh-CN/**/*.ts');
+const modules = import.meta.glob('./zh-CN/**/*.ts', { eager: true });
 export default {
   message: {
-    ...genMessage(modules, 'zh-CN'),
+    ...genMessage(modules as Recordable<Recordable>, 'zh-CN'),
     antdLocale,
   },
 };

+ 1 - 1
src/logics/theme/dark.ts

@@ -1,4 +1,4 @@
-import { darkCssIsReady, loadDarkThemeCss } from 'vite-plugin-theme/es/client';
+import { darkCssIsReady, loadDarkThemeCss } from '@rys-fe/vite-plugin-theme/es/client';
 import { addClass, hasClass, removeClass } from '/@/utils/domUtils';
 
 export async function updateDarkTheme(mode: string | null = 'light') {

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä