From eab709f94ff80fd47a256173d440cfbbb29cde09 Mon Sep 17 00:00:00 2001 From: wangxuefeng Date: Wed, 19 Feb 2025 13:42:56 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=82=A6=E7=A0=81=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 8 + .gitattributes | 11 + .gitignore | 41 +- .npmrc | 24 +- .vscode/extensions.json | 7 - apps/designer/.editorconfig | 9 + apps/designer/.gitignore | 33 + apps/designer/.npmrc | 15 + apps/designer/.prettierrc | 20 + apps/designer/.vscode/extensions.json | 5 + apps/designer/.vtj/files/45t7j3xqi.json | 19 + .../.vtj/materials/@sy/low-code-designer.json | 13288 ++++++++ .../.vtj/projects/@sy/low-code-designer.json | 176 + apps/designer/env.json | 4 + apps/designer/env.local.json | 1 + apps/designer/env.sit.json | 1 + apps/designer/env.uat.json | 1 + apps/designer/index.html | 18 + apps/designer/package.json | 35 + apps/designer/proxy.config.ts | 7 + apps/designer/public/favicon.ico | Bin 0 -> 16958 bytes apps/designer/public/logo.png | Bin 0 -> 11965 bytes apps/designer/public/logo.svg | 1 + apps/designer/src/App.vue | 51 + apps/designer/src/assets/logo.png | Bin 0 -> 11965 bytes apps/designer/src/assets/logo.svg | 1 + apps/designer/src/components/HelloWorld.vue | 38 + apps/designer/src/env.d.ts | 28 + apps/designer/src/main.ts | 48 + apps/designer/src/router/index.ts | 19 + apps/designer/src/style/index.scss | 11 + apps/designer/src/views/not-found.vue | 10 + apps/designer/src/views/unauthorized.vue | 10 + apps/designer/tsconfig.json | 27 + apps/designer/tsconfig.node.json | 13 + apps/designer/vite.config.ts | 19 + apps/platform/.browserslistrc | 5 + apps/platform/.dockerignore | 19 + apps/platform/.env | 8 + apps/platform/.env.development | 8 + apps/platform/.env.production | 8 + apps/platform/.gitattributes | 11 + apps/platform/.gitignore | 35 + apps/platform/.npmrc | 22 + apps/platform/CHANGELOG.md | 81 + apps/platform/Dockerfile | 29 + apps/platform/README.md | 42 + apps/platform/commitlint.config.mjs | 34 + apps/platform/docker-compose.yml | 15 + apps/platform/eslint.config.mjs | 206 + apps/platform/index.html | 17 + apps/platform/lint-staged.config.mjs | 8 + apps/platform/openapi.config.ts | 104 + apps/platform/package.json | 120 + apps/platform/prettier.config.mjs | 11 + {public => apps/platform/public}/favicon.ico | Bin apps/platform/public/iconfont.js | 1 + apps/platform/src/App.vue | 30 + apps/platform/src/api/backend/api/account.ts | 64 + apps/platform/src/api/backend/api/auth.ts | 32 + .../platform/src/api/backend/api/authEmail.ts | 20 + .../src/api/backend/api/businessTodo.ts | 82 + apps/platform/src/api/backend/api/captcha.ts | 23 + apps/platform/src/api/backend/api/health.ts | 73 + apps/platform/src/api/backend/api/index.ts | 54 + .../src/api/backend/api/netDiskManage.ts | 133 + .../src/api/backend/api/netDiskOverview.ts | 16 + .../src/api/backend/api/systemDept.ts | 82 + .../src/api/backend/api/systemDictItem.ts | 91 + .../src/api/backend/api/systemDictType.ts | 99 + .../src/api/backend/api/systemEmail.ts | 20 + .../platform/src/api/backend/api/systemLog.ts | 80 + .../src/api/backend/api/systemMenu.ts | 90 + .../src/api/backend/api/systemOnline.ts | 28 + .../src/api/backend/api/systemParamConfig.ts | 91 + .../src/api/backend/api/systemRole.ts | 91 + .../src/api/backend/api/systemServe.ts | 16 + .../platform/src/api/backend/api/systemSse.ts | 22 + .../src/api/backend/api/systemTask.ts | 133 + .../src/api/backend/api/systemUser.ts | 110 + .../src/api/backend/api/toolsStorage.ts | 44 + .../src/api/backend/api/toolsUpload.ts | 40 + .../platform/src/api/backend/api/typings.d.ts | 1284 + apps/platform/src/api/backend/api/user.ts | 29 + apps/platform/src/api/demo/dict.ts | 11 + apps/platform/src/api/demo/hero.ts | 33 + apps/platform/src/api/demo/select.ts | 14 + apps/platform/src/api/demo/user.ts | 26 + apps/platform/src/api/index.ts | 5 + apps/platform/src/api/typings.d.ts | 36 + apps/platform/src/assets/404.gif | Bin 0 -> 164227 bytes apps/platform/src/assets/analysis.svg | 1 + apps/platform/src/assets/icons/dark.svg | 39 + .../src/assets/icons/file-type-code.svg | 1 + .../src/assets/icons/file-type-dir.svg | 1 + .../src/assets/icons/file-type-docx.svg | 1 + .../src/assets/icons/file-type-excel.svg | 1 + .../src/assets/icons/file-type-img.svg | 1 + .../src/assets/icons/file-type-music.svg | 1 + .../src/assets/icons/file-type-office.svg | 1 + .../src/assets/icons/file-type-pdf.svg | 1 + .../src/assets/icons/file-type-ppt.svg | 1 + .../src/assets/icons/file-type-psd.svg | 1 + .../src/assets/icons/file-type-txt.svg | 1 + .../src/assets/icons/file-type-unknown.svg | 1 + .../src/assets/icons/file-type-video.svg | 1 + .../src/assets/icons/file-type-zip.svg | 1 + apps/platform/src/assets/icons/light.svg | 39 + apps/platform/src/assets/icons/locale.svg | 14 + apps/platform/src/assets/icons/login.svg | 68 + apps/platform/src/assets/icons/logo.svg | 48 + apps/platform/src/assets/icons/moon.svg | 1 + apps/platform/src/assets/icons/realDark.svg | 39 + apps/platform/src/assets/icons/sidemenu.svg | 39 + apps/platform/src/assets/icons/sun.svg | 1 + apps/platform/src/assets/icons/topmenu.svg | 39 + apps/platform/src/assets/images/logo.png | Bin 0 -> 60745 bytes .../platform/src/assets/images/no-preview.png | Bin 0 -> 1530 bytes apps/platform/src/assets/images/tool.png | Bin 0 -> 2629 bytes apps/platform/src/assets/login.svg | 68 + apps/platform/src/components/basic/README.md | 6 + .../src/components/basic/basic-arrow/index.ts | 1 + .../components/basic/basic-arrow/index.vue | 24 + .../src/components/basic/basic-help/index.vue | 94 + .../src/components/basic/button/button.ts | 22 + .../src/components/basic/button/button.vue | 55 + .../src/components/basic/button/index.ts | 9 + .../src/components/basic/check-box/index.vue | 54 + .../components/basic/context-menu/index.ts | 3 + .../basic/context-menu/src/ContextMenu.vue | 136 + .../context-menu/src/createContextMenu.ts | 80 + .../basic/context-menu/src/typing.ts | 38 + .../src/components/basic/excel/index.ts | 8 + .../basic/excel/src/Export2Excel.ts | 59 + .../basic/excel/src/ExportExcelModal.tsx | 78 + .../basic/excel/src/ImportExcel.vue | 159 + .../src/components/basic/excel/src/typing.ts | 27 + .../src/components/basic/icon/Icon.vue | 57 + .../src/components/basic/icon/index.ts | 8 + .../components/basic/icon/src/IconPicker.vue | 120 + .../src/components/basic/icon/src/SvgIcon.vue | 33 + .../components/basic/icon/src/icon-font.tsx | 74 + .../components/basic/icon/src/icons.data.ts | 14 + .../src/components/basic/icon/src/props.ts | 30 + .../src/components/basic/iframe-page/index.ts | 3 + .../components/basic/iframe-page/index.vue | 37 + .../components/basic/locale-picker/index.ts | 1 + .../components/basic/locale-picker/index.vue | 60 + .../basic/lockscreen/huawei-charge.vue | 194 + .../src/components/basic/lockscreen/index.ts | 3 + .../src/components/basic/lockscreen/index.vue | 42 + .../basic/lockscreen/lockscreen-page.vue | 261 + .../basic/lockscreen/xiaomi-charge.vue | 272 + .../basic/preview-resource/index.vue | 37 + .../basic/pro-config-provider/index.vue | 27 + .../src/components/basic/progress/index.vue | 34 + .../src/components/basic/split-panel/index.ts | 3 + .../components/basic/split-panel/index.vue | 104 + .../src/components/basic/title-i18n/index.ts | 1 + .../src/components/basic/title-i18n/index.vue | 26 + .../src/components/business/README.md | 3 + apps/platform/src/components/core/README.md | 7 + .../components/core/draggable-modal/index.ts | 1 + .../components/core/draggable-modal/index.vue | 365 + .../components/core/dynamic-table/index.ts | 5 + .../src/components/editable-cell/index.vue | 163 + .../dynamic-table/src/components/index.ts | 3 + .../src/components/table-action.vue | 131 + .../table-settings/column-setting.vue | 195 + .../components/table-settings/fullscreen.vue | 37 + .../src/components/table-settings/index.vue | 18 + .../table-settings/refresh-setting.vue | 21 + .../table-settings/search-setting.vue | 23 + .../table-settings/size-setting.vue | 47 + .../src/components/tool-bar/index.vue | 71 + .../dynamic-table/src/dynamic-table.config.ts | 40 + .../core/dynamic-table/src/dynamic-table.ts | 141 + .../core/dynamic-table/src/dynamic-table.vue | 160 + .../core/dynamic-table/src/hooks/index.ts | 9 + .../dynamic-table/src/hooks/useColumns.ts | 155 + .../dynamic-table/src/hooks/useEditable.ts | 179 + .../src/hooks/useExportData2Excel.ts | 56 + .../core/dynamic-table/src/hooks/useScroll.ts | 66 + .../core/dynamic-table/src/hooks/useTable.tsx | 66 + .../src/hooks/useTableContext.ts | 30 + .../dynamic-table/src/hooks/useTableExpand.ts | 70 + .../dynamic-table/src/hooks/useTableForm.ts | 80 + .../src/hooks/useTableMethods.ts | 245 + .../dynamic-table/src/hooks/useTableState.ts | 133 + .../core/dynamic-table/src/types/column.ts | 69 + .../core/dynamic-table/src/types/index.ts | 3 + .../core/dynamic-table/src/types/table.ts | 41 + .../dynamic-table/src/types/tableAction.ts | 73 + .../src/components/core/schema-form/index.ts | 8 + .../core/schema-form/src/componentMap.ts | 66 + .../schema-form/src/components/ApiSelect.vue | 142 + .../src/components/form-action.vue | 137 + .../core/schema-form/src/components/index.ts | 1 + .../components/core/schema-form/src/helper.ts | 70 + .../core/schema-form/src/hooks/index.ts | 6 + .../core/schema-form/src/hooks/useAdvanced.ts | 159 + .../core/schema-form/src/hooks/useForm.tsx | 62 + .../schema-form/src/hooks/useFormContext.ts | 15 + .../schema-form/src/hooks/useFormMethods.ts | 420 + .../schema-form/src/hooks/useFormState.ts | 87 + .../schema-form/src/hooks/useLabelWidth.ts | 43 + .../core/schema-form/src/schema-form-item.ts | 23 + .../core/schema-form/src/schema-form-item.vue | 470 + .../core/schema-form/src/schema-form.ts | 127 + .../core/schema-form/src/schema-form.vue | 87 + .../core/schema-form/src/types/component.ts | 112 + .../core/schema-form/src/types/form.ts | 167 + .../core/schema-form/src/types/hooks.ts | 6 + .../core/schema-form/src/types/index.ts | 3 + .../src/components/micro-container/index.vue | 17 + apps/platform/src/constants/env.ts | 7 + apps/platform/src/enums/breakpointEnum.ts | 28 + apps/platform/src/enums/cacheEnum.ts | 11 + apps/platform/src/enums/httpEnum.ts | 34 + apps/platform/src/enums/roleEnum.ts | 7 + .../platform/src/hooks/event/useBreakpoint.ts | 90 + .../src/hooks/event/useEventListener.ts | 58 + .../hooks/event/useIntersectionObserver.ts | 49 + apps/platform/src/hooks/event/useScroll.ts | 65 + apps/platform/src/hooks/event/useScrollTo.ts | 59 + .../src/hooks/event/useWindowSizeFn.ts | 35 + .../src/hooks/functions/useContextMenu.ts | 13 + apps/platform/src/hooks/index.ts | 8 + apps/platform/src/hooks/useBattery.ts | 92 + apps/platform/src/hooks/useDomWidth.ts | 23 + apps/platform/src/hooks/useEventbus.ts | 48 + apps/platform/src/hooks/useI18n.ts | 65 + apps/platform/src/hooks/useModal/index.ts | 11 + apps/platform/src/hooks/useModal/modal.tsx | 85 + apps/platform/src/hooks/useModal/types.ts | 25 + .../src/hooks/useModal/useFormModal.tsx | 59 + apps/platform/src/hooks/useModal/useModal.tsx | 82 + apps/platform/src/hooks/useOnline.ts | 30 + apps/platform/src/hooks/useSortable.ts | 21 + apps/platform/src/hooks/useTime.ts | 55 + apps/platform/src/io/index.ts | 338 + .../src/layout/footer/index.module.less | 29 + apps/platform/src/layout/footer/index.tsx | 34 + .../header/components/breadcrumb/index.vue | 78 + .../header/components/fullscreen/index.vue | 24 + .../src/layout/header/components/index.ts | 4 + .../search/components/SearchFooter.vue | 34 + .../search/components/SearchResult.vue | 60 + .../layout/header/components/search/index.vue | 145 + .../header/components/setting/constant.ts | 90 + .../header/components/setting/index.vue | 144 + apps/platform/src/layout/header/index.vue | 145 + apps/platform/src/layout/index.vue | 65 + apps/platform/src/layout/logo/index.vue | 35 + .../menu/components/menu-item-content.vue | 23 + .../src/layout/menu/components/menu-item.vue | 35 + .../layout/menu/components/sub-menu-item.vue | 41 + apps/platform/src/layout/menu/menu.vue | 133 + apps/platform/src/layout/tabs/index.ts | 3 + .../src/layout/tabs/tabs-operator.vue | 174 + apps/platform/src/layout/tabs/tabs-view.vue | 151 + apps/platform/src/locales/config.ts | 21 + apps/platform/src/locales/helper.ts | 36 + apps/platform/src/locales/index.ts | 41 + apps/platform/src/locales/lang/en.ts | 13 + apps/platform/src/locales/lang/en/common.json | 20 + .../src/locales/lang/en/component.json | 28 + apps/platform/src/locales/lang/en/layout.json | 108 + .../src/locales/lang/en/routes/account.json | 4 + .../src/locales/lang/en/routes/basic.json | 4 + .../src/locales/lang/en/routes/dashboard.json | 6 + .../src/locales/lang/en/routes/demo.json | 20 + .../src/locales/lang/zh-CN/common.json | 22 + .../src/locales/lang/zh-CN/component.json | 32 + .../src/locales/lang/zh-CN/layout.json | 108 + .../locales/lang/zh-CN/routes/account.json | 4 + .../src/locales/lang/zh-CN/routes/basic.json | 4 + .../locales/lang/zh-CN/routes/dashboard.json | 6 + .../src/locales/lang/zh-CN/routes/demo.json | 20 + apps/platform/src/locales/lang/zh_CN.ts | 11 + apps/platform/src/locales/useLocale.ts | 68 + apps/platform/src/main.ts | 56 + apps/platform/src/permission/index.ts | 41 + apps/platform/src/permission/permCode.ts | 85 + apps/platform/src/plugins/antd.ts | 10 + apps/platform/src/plugins/assets.ts | 6 + apps/platform/src/plugins/globalMethods.ts | 16 + apps/platform/src/plugins/index.ts | 3 + .../src/router/async-modules/index.ts | 18 + apps/platform/src/router/constant.ts | 14 + .../src/router/helper/routeHelper.tsx | 94 + apps/platform/src/router/index.ts | 36 + apps/platform/src/router/router-guards.ts | 112 + apps/platform/src/router/routes/basic.ts | 64 + apps/platform/src/router/routes/index.ts | 24 + .../src/router/routes/modules/dashboard.ts | 29 + .../src/router/routes/modules/index.ts | 5 + .../src/router/routes/modules/micro.ts | 53 + .../src/router/routes/modules/user.ts | 74 + .../src/router/routes/outsideLayout.ts | 16 + apps/platform/src/store/index.ts | 17 + apps/platform/src/store/modules/keepAlive.ts | 43 + .../src/store/modules/layoutSetting.ts | 111 + apps/platform/src/store/modules/locale.ts | 32 + apps/platform/src/store/modules/lockscreen.ts | 75 + apps/platform/src/store/modules/sse.ts | 95 + apps/platform/src/store/modules/tabsView.ts | 162 + apps/platform/src/store/modules/user.ts | 62 + apps/platform/src/styles/antdv.override.less | 13 + apps/platform/src/styles/common.less | 23 + apps/platform/src/styles/index.less | 8 + apps/platform/src/styles/reset.css | 8 + apps/platform/src/styles/theme.less | 50 + apps/platform/src/styles/transition.less | 60 + apps/platform/src/styles/variables.less | 11 + apps/platform/src/utils/Export2Excel.ts | 239 + apps/platform/src/utils/Storage.ts | 129 + apps/platform/src/utils/awaitTo.ts | 24 + apps/platform/src/utils/browser-type.ts | 142 + apps/platform/src/utils/common.ts | 172 + apps/platform/src/utils/dateUtil.ts | 17 + apps/platform/src/utils/downloadFile.ts | 90 + apps/platform/src/utils/helper/tsxHelper.tsx | 35 + apps/platform/src/utils/index.ts | 133 + apps/platform/src/utils/is.ts | 78 + apps/platform/src/utils/log.ts | 9 + apps/platform/src/utils/performanceMonitor.ts | 191 + apps/platform/src/utils/propTypes.ts | 39 + apps/platform/src/utils/request.ts | 159 + apps/platform/src/utils/urlUtils.ts | 33 + apps/platform/src/utils/validate.ts | 7 + .../src/views/dashboard/welcome/index.vue | 82 + apps/platform/src/views/error/404.vue | 30 + .../src/views/error/comp-not-found.vue | 12 + apps/platform/src/views/login/index.vue | 192 + .../src/views/system/dept/columns.tsx | 26 + .../src/views/system/dept/formSchemas.ts | 41 + apps/platform/src/views/system/dept/index.vue | 108 + .../src/views/system/dict-item/columns.tsx | 73 + .../src/views/system/dict-item/formSchemas.ts | 53 + .../src/views/system/dict-item/index.vue | 157 + .../src/views/system/dict-type/columns.tsx | 78 + .../src/views/system/dict-type/formSchemas.ts | 39 + .../src/views/system/dict-type/index.vue | 135 + .../src/views/system/menu/columns.tsx | 114 + .../src/views/system/menu/formSchemas.tsx | 256 + apps/platform/src/views/system/menu/index.vue | 130 + .../views/system/monitor/log/login/index.vue | 84 + .../views/system/monitor/online/columns.tsx | 51 + .../src/views/system/monitor/online/index.vue | 106 + .../src/views/system/monitor/serve/index.vue | 207 + .../src/views/system/param-config/columns.tsx | 48 + .../views/system/param-config/formSchemas.ts | 37 + .../src/views/system/param-config/index.vue | 106 + .../src/views/system/role/columns.tsx | 69 + .../src/views/system/role/formSchemas.ts | 60 + apps/platform/src/views/system/role/index.vue | 132 + .../src/views/system/schedule/log/index.vue | 89 + .../views/system/schedule/task/columns.tsx | 68 + .../views/system/schedule/task/formSchemas.ts | 129 + .../src/views/system/schedule/task/index.vue | 204 + .../src/views/system/user/AvatarUpload.vue | 111 + .../src/views/system/user/DeptTree.vue | 119 + .../src/views/system/user/columns.tsx | 114 + .../src/views/system/user/formSchemas.tsx | 120 + apps/platform/src/views/system/user/index.vue | 214 + apps/platform/src/views/user/add.vue | 60 + .../src/views/user/change-password.vue | 66 + apps/platform/src/views/user/detail.vue | 94 + apps/platform/src/views/user/edit.vue | 106 + apps/platform/src/views/user/list.vue | 219 + apps/platform/stylelint.config.mjs | 93 + apps/platform/tsconfig.json | 56 + apps/platform/tsconfig.node.json | 11 + apps/platform/types/env.d.ts | 21 + apps/platform/types/global.d.ts | 79 + apps/platform/types/index.d.ts | 27 + apps/platform/types/modules.d.ts | 16 + apps/platform/types/polyfill.d.ts | 1 + apps/platform/types/shims/shims-app.d.ts | 67 + apps/platform/types/shims/shims-tsx.d.ts | 19 + apps/platform/types/shims/shims-vue.d.ts | 25 + apps/platform/types/utils.d.ts | 74 + apps/platform/types/vue-router.d.ts | 102 + apps/platform/unocss.config.ts | 25 + apps/platform/vite.config.ts | 118 + apps/renderer/.gitignore | 22 + apps/renderer/.npmrc | 7 + apps/renderer/README.md | 37 + apps/renderer/farm.config.ts | 14 + apps/renderer/index.html | 14 + apps/renderer/package.json | 33 + apps/renderer/public/favicon.ico | Bin 0 -> 4154 bytes apps/renderer/src/App.vue | 111 + apps/renderer/src/assets/logo.png | Bin 0 -> 16859 bytes apps/renderer/src/assets/vue.svg | 1 + apps/renderer/src/env.d.ts | 2 + apps/renderer/src/index.ts | 9 + README.md => apps/renderer/src/style.css | 0 apps/renderer/tsconfig.json | 25 + apps/renderer/tsconfig.node.json | 11 + .../y-code-v1/.env.development | 0 .../y-code-v1/.env.production | 0 .env.staging => apps/y-code-v1/.env.staging | 0 .eslintrc.cjs => apps/y-code-v1/.eslintrc.cjs | 0 apps/y-code-v1/.npmrc | 6 + .../y-code-v1/.release.config.js | 34 +- apps/y-code-v1/README.md | 0 .../y-code-v1/components.d.ts | 0 env.d.ts => apps/y-code-v1/env.d.ts | 0 .../y-code-v1/farm.config.ts | 92 +- index.html => apps/y-code-v1/index.html | 0 apps/y-code-v1/package.json | 60 + apps/y-code-v1/public/favicon.ico | Bin 0 -> 4286 bytes {src => apps/y-code-v1/src}/App.vue | 0 {src => apps/y-code-v1/src}/api/common.ts | 0 .../y-code-v1/src}/api/preview/index.ts | 0 {src => apps/y-code-v1/src}/assets/avatar.png | Bin .../src}/assets/styles/variable.less | 0 .../src}/components/common/y-chart.vue | 0 .../src}/components/common/y-table.vue | 0 {src => apps/y-code-v1/src}/global.less | 0 .../src}/layout/components/Header.vue | 0 .../src}/layout/components/Sider.vue | 0 {src => apps/y-code-v1/src}/layout/index.vue | 0 {src => apps/y-code-v1/src}/main.ts | 0 .../src}/plugins/antv-g2plot/column.vue | 0 .../src}/plugins/antv-g2plot/line.vue | 0 .../src}/plugins/antv-g2plot/pie.vue | 0 .../src}/plugins/antv-g2plot/useChart.js | 0 {src => apps/y-code-v1/src}/router/guards.ts | 0 {src => apps/y-code-v1/src}/router/index.ts | 0 {src => apps/y-code-v1/src}/router/routes.ts | 234 +- .../y-code-v1/src}/stores/useUserInfoStore.ts | 0 {src => apps/y-code-v1/src}/utils/request.ts | 0 .../module-cfg/components/create-modal.vue | 0 .../module-cfg/components/field-modal.vue | 0 .../views/config-manage/module-cfg/config.ts | 0 .../views/config-manage/module-cfg/index.vue | 0 .../views/config-manage/module-cfg/service.js | 0 .../project-cfg/components/create-modal.vue | 0 .../views/config-manage/project-cfg/config.ts | 0 .../views/config-manage/project-cfg/index.vue | 0 .../config-manage/project-cfg/service.js | 0 .../view-cfg/components/create-modal.vue | 0 .../views/config-manage/view-cfg/config.ts | 0 .../views/config-manage/view-cfg/index.vue | 0 .../views/config-manage/view-cfg/service.js | 0 .../views/page-show-info/page-info/index.vue | 0 .../views/page-show-info/page-info/service.ts | 0 .../views/page-show-info/page-info/style.less | 0 .../view-all-manage/create-view/index.vue | 0 .../view-all-manage/create-view/service.js | 0 .../views/view-all-manage/view-list/config.ts | 0 .../views/view-all-manage/view-list/index.vue | 0 .../view-all-manage/view-list/service.js | 0 .../y-code-v1/tsconfig.app.json | 0 tsconfig.json => apps/y-code-v1/tsconfig.json | 0 .../y-code-v1/tsconfig.node.json | 0 .../y-code-v1/vite.config.ts | 0 eslint.config.js | 3 + lint-staged.config.mjs | 8 + package-lock.json | 26905 ---------------- package.json | 103 +- packages/render-adapter/.gitignore | 22 + packages/render-adapter/README.md | 37 + packages/render-adapter/farm.config.ts | 12 + packages/render-adapter/index.html | 16 + packages/render-adapter/package.json | 24 + packages/render-adapter/public/favicon.ico | Bin 0 -> 4154 bytes packages/render-adapter/src/App.vue | 8 + packages/render-adapter/src/assets/logo.png | Bin 0 -> 16859 bytes packages/render-adapter/src/assets/vue.svg | 1 + .../render-adapter/src/components/adapter.vue | 66 + .../render-adapter/src/components/index.ts | 1 + packages/render-adapter/src/env.d.ts | 2 + packages/render-adapter/src/index.js | 4 + packages/render-adapter/tsconfig.json | 31 + packages/render-adapter/tsconfig.node.json | 11 + packages/shared/constants/index.ts | 1 + packages/shared/package.json | 21 + packages/shared/src/index.ts | 1 + packages/shared/styles/reset.css | 51 + packages/shared/tsconfig.json | 12 + packages/vite-plugin-http2-proxy/package.json | 21 + packages/vite-plugin-http2-proxy/src/index.ts | 138 + .../vite-plugin-http2-proxy/tsconfig.json | 13 + packages/web-vitals/farm.config.ts | 9 + packages/web-vitals/package.json | 29 + packages/web-vitals/src/index.ts | 19 + packages/web-vitals/tsconfig.json | 12 + pnpm-lock.yaml | 13528 +++++++- pnpm-workspace.yaml | 3 + turbo.json | 61 + 494 files changed, 50986 insertions(+), 27639 deletions(-) create mode 100644 .env create mode 100644 .gitattributes delete mode 100644 .vscode/extensions.json create mode 100644 apps/designer/.editorconfig create mode 100644 apps/designer/.gitignore create mode 100644 apps/designer/.npmrc create mode 100644 apps/designer/.prettierrc create mode 100644 apps/designer/.vscode/extensions.json create mode 100644 apps/designer/.vtj/files/45t7j3xqi.json create mode 100644 apps/designer/.vtj/materials/@sy/low-code-designer.json create mode 100644 apps/designer/.vtj/projects/@sy/low-code-designer.json create mode 100644 apps/designer/env.json create mode 100644 apps/designer/env.local.json create mode 100644 apps/designer/env.sit.json create mode 100644 apps/designer/env.uat.json create mode 100644 apps/designer/index.html create mode 100644 apps/designer/package.json create mode 100644 apps/designer/proxy.config.ts create mode 100644 apps/designer/public/favicon.ico create mode 100644 apps/designer/public/logo.png create mode 100644 apps/designer/public/logo.svg create mode 100644 apps/designer/src/App.vue create mode 100644 apps/designer/src/assets/logo.png create mode 100644 apps/designer/src/assets/logo.svg create mode 100644 apps/designer/src/components/HelloWorld.vue create mode 100644 apps/designer/src/env.d.ts create mode 100644 apps/designer/src/main.ts create mode 100644 apps/designer/src/router/index.ts create mode 100644 apps/designer/src/style/index.scss create mode 100644 apps/designer/src/views/not-found.vue create mode 100644 apps/designer/src/views/unauthorized.vue create mode 100644 apps/designer/tsconfig.json create mode 100644 apps/designer/tsconfig.node.json create mode 100644 apps/designer/vite.config.ts create mode 100644 apps/platform/.browserslistrc create mode 100644 apps/platform/.dockerignore create mode 100644 apps/platform/.env create mode 100644 apps/platform/.env.development create mode 100644 apps/platform/.env.production create mode 100644 apps/platform/.gitattributes create mode 100644 apps/platform/.gitignore create mode 100644 apps/platform/.npmrc create mode 100644 apps/platform/CHANGELOG.md create mode 100644 apps/platform/Dockerfile create mode 100644 apps/platform/README.md create mode 100644 apps/platform/commitlint.config.mjs create mode 100644 apps/platform/docker-compose.yml create mode 100644 apps/platform/eslint.config.mjs create mode 100644 apps/platform/index.html create mode 100644 apps/platform/lint-staged.config.mjs create mode 100644 apps/platform/openapi.config.ts create mode 100644 apps/platform/package.json create mode 100644 apps/platform/prettier.config.mjs rename {public => apps/platform/public}/favicon.ico (100%) create mode 100644 apps/platform/public/iconfont.js create mode 100644 apps/platform/src/App.vue create mode 100644 apps/platform/src/api/backend/api/account.ts create mode 100644 apps/platform/src/api/backend/api/auth.ts create mode 100644 apps/platform/src/api/backend/api/authEmail.ts create mode 100644 apps/platform/src/api/backend/api/businessTodo.ts create mode 100644 apps/platform/src/api/backend/api/captcha.ts create mode 100644 apps/platform/src/api/backend/api/health.ts create mode 100644 apps/platform/src/api/backend/api/index.ts create mode 100644 apps/platform/src/api/backend/api/netDiskManage.ts create mode 100644 apps/platform/src/api/backend/api/netDiskOverview.ts create mode 100644 apps/platform/src/api/backend/api/systemDept.ts create mode 100644 apps/platform/src/api/backend/api/systemDictItem.ts create mode 100644 apps/platform/src/api/backend/api/systemDictType.ts create mode 100644 apps/platform/src/api/backend/api/systemEmail.ts create mode 100644 apps/platform/src/api/backend/api/systemLog.ts create mode 100644 apps/platform/src/api/backend/api/systemMenu.ts create mode 100644 apps/platform/src/api/backend/api/systemOnline.ts create mode 100644 apps/platform/src/api/backend/api/systemParamConfig.ts create mode 100644 apps/platform/src/api/backend/api/systemRole.ts create mode 100644 apps/platform/src/api/backend/api/systemServe.ts create mode 100644 apps/platform/src/api/backend/api/systemSse.ts create mode 100644 apps/platform/src/api/backend/api/systemTask.ts create mode 100644 apps/platform/src/api/backend/api/systemUser.ts create mode 100644 apps/platform/src/api/backend/api/toolsStorage.ts create mode 100644 apps/platform/src/api/backend/api/toolsUpload.ts create mode 100644 apps/platform/src/api/backend/api/typings.d.ts create mode 100644 apps/platform/src/api/backend/api/user.ts create mode 100644 apps/platform/src/api/demo/dict.ts create mode 100644 apps/platform/src/api/demo/hero.ts create mode 100644 apps/platform/src/api/demo/select.ts create mode 100644 apps/platform/src/api/demo/user.ts create mode 100644 apps/platform/src/api/index.ts create mode 100644 apps/platform/src/api/typings.d.ts create mode 100644 apps/platform/src/assets/404.gif create mode 100644 apps/platform/src/assets/analysis.svg create mode 100644 apps/platform/src/assets/icons/dark.svg create mode 100644 apps/platform/src/assets/icons/file-type-code.svg create mode 100644 apps/platform/src/assets/icons/file-type-dir.svg create mode 100644 apps/platform/src/assets/icons/file-type-docx.svg create mode 100644 apps/platform/src/assets/icons/file-type-excel.svg create mode 100644 apps/platform/src/assets/icons/file-type-img.svg create mode 100644 apps/platform/src/assets/icons/file-type-music.svg create mode 100644 apps/platform/src/assets/icons/file-type-office.svg create mode 100644 apps/platform/src/assets/icons/file-type-pdf.svg create mode 100644 apps/platform/src/assets/icons/file-type-ppt.svg create mode 100644 apps/platform/src/assets/icons/file-type-psd.svg create mode 100644 apps/platform/src/assets/icons/file-type-txt.svg create mode 100644 apps/platform/src/assets/icons/file-type-unknown.svg create mode 100644 apps/platform/src/assets/icons/file-type-video.svg create mode 100644 apps/platform/src/assets/icons/file-type-zip.svg create mode 100644 apps/platform/src/assets/icons/light.svg create mode 100644 apps/platform/src/assets/icons/locale.svg create mode 100644 apps/platform/src/assets/icons/login.svg create mode 100644 apps/platform/src/assets/icons/logo.svg create mode 100644 apps/platform/src/assets/icons/moon.svg create mode 100644 apps/platform/src/assets/icons/realDark.svg create mode 100644 apps/platform/src/assets/icons/sidemenu.svg create mode 100644 apps/platform/src/assets/icons/sun.svg create mode 100644 apps/platform/src/assets/icons/topmenu.svg create mode 100644 apps/platform/src/assets/images/logo.png create mode 100644 apps/platform/src/assets/images/no-preview.png create mode 100644 apps/platform/src/assets/images/tool.png create mode 100644 apps/platform/src/assets/login.svg create mode 100644 apps/platform/src/components/basic/README.md create mode 100644 apps/platform/src/components/basic/basic-arrow/index.ts create mode 100644 apps/platform/src/components/basic/basic-arrow/index.vue create mode 100644 apps/platform/src/components/basic/basic-help/index.vue create mode 100644 apps/platform/src/components/basic/button/button.ts create mode 100644 apps/platform/src/components/basic/button/button.vue create mode 100644 apps/platform/src/components/basic/button/index.ts create mode 100644 apps/platform/src/components/basic/check-box/index.vue create mode 100644 apps/platform/src/components/basic/context-menu/index.ts create mode 100644 apps/platform/src/components/basic/context-menu/src/ContextMenu.vue create mode 100644 apps/platform/src/components/basic/context-menu/src/createContextMenu.ts create mode 100644 apps/platform/src/components/basic/context-menu/src/typing.ts create mode 100644 apps/platform/src/components/basic/excel/index.ts create mode 100644 apps/platform/src/components/basic/excel/src/Export2Excel.ts create mode 100644 apps/platform/src/components/basic/excel/src/ExportExcelModal.tsx create mode 100644 apps/platform/src/components/basic/excel/src/ImportExcel.vue create mode 100644 apps/platform/src/components/basic/excel/src/typing.ts create mode 100644 apps/platform/src/components/basic/icon/Icon.vue create mode 100644 apps/platform/src/components/basic/icon/index.ts create mode 100644 apps/platform/src/components/basic/icon/src/IconPicker.vue create mode 100644 apps/platform/src/components/basic/icon/src/SvgIcon.vue create mode 100644 apps/platform/src/components/basic/icon/src/icon-font.tsx create mode 100644 apps/platform/src/components/basic/icon/src/icons.data.ts create mode 100644 apps/platform/src/components/basic/icon/src/props.ts create mode 100644 apps/platform/src/components/basic/iframe-page/index.ts create mode 100644 apps/platform/src/components/basic/iframe-page/index.vue create mode 100644 apps/platform/src/components/basic/locale-picker/index.ts create mode 100644 apps/platform/src/components/basic/locale-picker/index.vue create mode 100644 apps/platform/src/components/basic/lockscreen/huawei-charge.vue create mode 100644 apps/platform/src/components/basic/lockscreen/index.ts create mode 100644 apps/platform/src/components/basic/lockscreen/index.vue create mode 100644 apps/platform/src/components/basic/lockscreen/lockscreen-page.vue create mode 100644 apps/platform/src/components/basic/lockscreen/xiaomi-charge.vue create mode 100644 apps/platform/src/components/basic/preview-resource/index.vue create mode 100644 apps/platform/src/components/basic/pro-config-provider/index.vue create mode 100644 apps/platform/src/components/basic/progress/index.vue create mode 100644 apps/platform/src/components/basic/split-panel/index.ts create mode 100644 apps/platform/src/components/basic/split-panel/index.vue create mode 100644 apps/platform/src/components/basic/title-i18n/index.ts create mode 100644 apps/platform/src/components/basic/title-i18n/index.vue create mode 100644 apps/platform/src/components/business/README.md create mode 100644 apps/platform/src/components/core/README.md create mode 100644 apps/platform/src/components/core/draggable-modal/index.ts create mode 100644 apps/platform/src/components/core/draggable-modal/index.vue create mode 100644 apps/platform/src/components/core/dynamic-table/index.ts create mode 100644 apps/platform/src/components/core/dynamic-table/src/components/editable-cell/index.vue create mode 100644 apps/platform/src/components/core/dynamic-table/src/components/index.ts create mode 100644 apps/platform/src/components/core/dynamic-table/src/components/table-action.vue create mode 100644 apps/platform/src/components/core/dynamic-table/src/components/table-settings/column-setting.vue create mode 100644 apps/platform/src/components/core/dynamic-table/src/components/table-settings/fullscreen.vue create mode 100644 apps/platform/src/components/core/dynamic-table/src/components/table-settings/index.vue create mode 100644 apps/platform/src/components/core/dynamic-table/src/components/table-settings/refresh-setting.vue create mode 100644 apps/platform/src/components/core/dynamic-table/src/components/table-settings/search-setting.vue create mode 100644 apps/platform/src/components/core/dynamic-table/src/components/table-settings/size-setting.vue create mode 100644 apps/platform/src/components/core/dynamic-table/src/components/tool-bar/index.vue create mode 100644 apps/platform/src/components/core/dynamic-table/src/dynamic-table.config.ts create mode 100644 apps/platform/src/components/core/dynamic-table/src/dynamic-table.ts create mode 100644 apps/platform/src/components/core/dynamic-table/src/dynamic-table.vue create mode 100644 apps/platform/src/components/core/dynamic-table/src/hooks/index.ts create mode 100644 apps/platform/src/components/core/dynamic-table/src/hooks/useColumns.ts create mode 100644 apps/platform/src/components/core/dynamic-table/src/hooks/useEditable.ts create mode 100644 apps/platform/src/components/core/dynamic-table/src/hooks/useExportData2Excel.ts create mode 100644 apps/platform/src/components/core/dynamic-table/src/hooks/useScroll.ts create mode 100644 apps/platform/src/components/core/dynamic-table/src/hooks/useTable.tsx create mode 100644 apps/platform/src/components/core/dynamic-table/src/hooks/useTableContext.ts create mode 100644 apps/platform/src/components/core/dynamic-table/src/hooks/useTableExpand.ts create mode 100644 apps/platform/src/components/core/dynamic-table/src/hooks/useTableForm.ts create mode 100644 apps/platform/src/components/core/dynamic-table/src/hooks/useTableMethods.ts create mode 100644 apps/platform/src/components/core/dynamic-table/src/hooks/useTableState.ts create mode 100644 apps/platform/src/components/core/dynamic-table/src/types/column.ts create mode 100644 apps/platform/src/components/core/dynamic-table/src/types/index.ts create mode 100644 apps/platform/src/components/core/dynamic-table/src/types/table.ts create mode 100644 apps/platform/src/components/core/dynamic-table/src/types/tableAction.ts create mode 100644 apps/platform/src/components/core/schema-form/index.ts create mode 100644 apps/platform/src/components/core/schema-form/src/componentMap.ts create mode 100644 apps/platform/src/components/core/schema-form/src/components/ApiSelect.vue create mode 100644 apps/platform/src/components/core/schema-form/src/components/form-action.vue create mode 100644 apps/platform/src/components/core/schema-form/src/components/index.ts create mode 100644 apps/platform/src/components/core/schema-form/src/helper.ts create mode 100644 apps/platform/src/components/core/schema-form/src/hooks/index.ts create mode 100644 apps/platform/src/components/core/schema-form/src/hooks/useAdvanced.ts create mode 100644 apps/platform/src/components/core/schema-form/src/hooks/useForm.tsx create mode 100644 apps/platform/src/components/core/schema-form/src/hooks/useFormContext.ts create mode 100644 apps/platform/src/components/core/schema-form/src/hooks/useFormMethods.ts create mode 100644 apps/platform/src/components/core/schema-form/src/hooks/useFormState.ts create mode 100644 apps/platform/src/components/core/schema-form/src/hooks/useLabelWidth.ts create mode 100644 apps/platform/src/components/core/schema-form/src/schema-form-item.ts create mode 100644 apps/platform/src/components/core/schema-form/src/schema-form-item.vue create mode 100644 apps/platform/src/components/core/schema-form/src/schema-form.ts create mode 100644 apps/platform/src/components/core/schema-form/src/schema-form.vue create mode 100644 apps/platform/src/components/core/schema-form/src/types/component.ts create mode 100644 apps/platform/src/components/core/schema-form/src/types/form.ts create mode 100644 apps/platform/src/components/core/schema-form/src/types/hooks.ts create mode 100644 apps/platform/src/components/core/schema-form/src/types/index.ts create mode 100644 apps/platform/src/components/micro-container/index.vue create mode 100644 apps/platform/src/constants/env.ts create mode 100644 apps/platform/src/enums/breakpointEnum.ts create mode 100644 apps/platform/src/enums/cacheEnum.ts create mode 100644 apps/platform/src/enums/httpEnum.ts create mode 100644 apps/platform/src/enums/roleEnum.ts create mode 100644 apps/platform/src/hooks/event/useBreakpoint.ts create mode 100644 apps/platform/src/hooks/event/useEventListener.ts create mode 100644 apps/platform/src/hooks/event/useIntersectionObserver.ts create mode 100644 apps/platform/src/hooks/event/useScroll.ts create mode 100644 apps/platform/src/hooks/event/useScrollTo.ts create mode 100644 apps/platform/src/hooks/event/useWindowSizeFn.ts create mode 100644 apps/platform/src/hooks/functions/useContextMenu.ts create mode 100644 apps/platform/src/hooks/index.ts create mode 100644 apps/platform/src/hooks/useBattery.ts create mode 100644 apps/platform/src/hooks/useDomWidth.ts create mode 100644 apps/platform/src/hooks/useEventbus.ts create mode 100644 apps/platform/src/hooks/useI18n.ts create mode 100644 apps/platform/src/hooks/useModal/index.ts create mode 100644 apps/platform/src/hooks/useModal/modal.tsx create mode 100644 apps/platform/src/hooks/useModal/types.ts create mode 100644 apps/platform/src/hooks/useModal/useFormModal.tsx create mode 100644 apps/platform/src/hooks/useModal/useModal.tsx create mode 100644 apps/platform/src/hooks/useOnline.ts create mode 100644 apps/platform/src/hooks/useSortable.ts create mode 100644 apps/platform/src/hooks/useTime.ts create mode 100644 apps/platform/src/io/index.ts create mode 100644 apps/platform/src/layout/footer/index.module.less create mode 100644 apps/platform/src/layout/footer/index.tsx create mode 100644 apps/platform/src/layout/header/components/breadcrumb/index.vue create mode 100644 apps/platform/src/layout/header/components/fullscreen/index.vue create mode 100644 apps/platform/src/layout/header/components/index.ts create mode 100644 apps/platform/src/layout/header/components/search/components/SearchFooter.vue create mode 100644 apps/platform/src/layout/header/components/search/components/SearchResult.vue create mode 100644 apps/platform/src/layout/header/components/search/index.vue create mode 100644 apps/platform/src/layout/header/components/setting/constant.ts create mode 100644 apps/platform/src/layout/header/components/setting/index.vue create mode 100644 apps/platform/src/layout/header/index.vue create mode 100644 apps/platform/src/layout/index.vue create mode 100644 apps/platform/src/layout/logo/index.vue create mode 100644 apps/platform/src/layout/menu/components/menu-item-content.vue create mode 100644 apps/platform/src/layout/menu/components/menu-item.vue create mode 100644 apps/platform/src/layout/menu/components/sub-menu-item.vue create mode 100644 apps/platform/src/layout/menu/menu.vue create mode 100644 apps/platform/src/layout/tabs/index.ts create mode 100644 apps/platform/src/layout/tabs/tabs-operator.vue create mode 100644 apps/platform/src/layout/tabs/tabs-view.vue create mode 100644 apps/platform/src/locales/config.ts create mode 100644 apps/platform/src/locales/helper.ts create mode 100644 apps/platform/src/locales/index.ts create mode 100644 apps/platform/src/locales/lang/en.ts create mode 100644 apps/platform/src/locales/lang/en/common.json create mode 100644 apps/platform/src/locales/lang/en/component.json create mode 100644 apps/platform/src/locales/lang/en/layout.json create mode 100644 apps/platform/src/locales/lang/en/routes/account.json create mode 100644 apps/platform/src/locales/lang/en/routes/basic.json create mode 100644 apps/platform/src/locales/lang/en/routes/dashboard.json create mode 100644 apps/platform/src/locales/lang/en/routes/demo.json create mode 100644 apps/platform/src/locales/lang/zh-CN/common.json create mode 100644 apps/platform/src/locales/lang/zh-CN/component.json create mode 100644 apps/platform/src/locales/lang/zh-CN/layout.json create mode 100644 apps/platform/src/locales/lang/zh-CN/routes/account.json create mode 100644 apps/platform/src/locales/lang/zh-CN/routes/basic.json create mode 100644 apps/platform/src/locales/lang/zh-CN/routes/dashboard.json create mode 100644 apps/platform/src/locales/lang/zh-CN/routes/demo.json create mode 100644 apps/platform/src/locales/lang/zh_CN.ts create mode 100644 apps/platform/src/locales/useLocale.ts create mode 100644 apps/platform/src/main.ts create mode 100644 apps/platform/src/permission/index.ts create mode 100644 apps/platform/src/permission/permCode.ts create mode 100644 apps/platform/src/plugins/antd.ts create mode 100644 apps/platform/src/plugins/assets.ts create mode 100644 apps/platform/src/plugins/globalMethods.ts create mode 100644 apps/platform/src/plugins/index.ts create mode 100644 apps/platform/src/router/async-modules/index.ts create mode 100644 apps/platform/src/router/constant.ts create mode 100644 apps/platform/src/router/helper/routeHelper.tsx create mode 100644 apps/platform/src/router/index.ts create mode 100644 apps/platform/src/router/router-guards.ts create mode 100644 apps/platform/src/router/routes/basic.ts create mode 100644 apps/platform/src/router/routes/index.ts create mode 100644 apps/platform/src/router/routes/modules/dashboard.ts create mode 100644 apps/platform/src/router/routes/modules/index.ts create mode 100644 apps/platform/src/router/routes/modules/micro.ts create mode 100644 apps/platform/src/router/routes/modules/user.ts create mode 100644 apps/platform/src/router/routes/outsideLayout.ts create mode 100644 apps/platform/src/store/index.ts create mode 100644 apps/platform/src/store/modules/keepAlive.ts create mode 100644 apps/platform/src/store/modules/layoutSetting.ts create mode 100644 apps/platform/src/store/modules/locale.ts create mode 100644 apps/platform/src/store/modules/lockscreen.ts create mode 100644 apps/platform/src/store/modules/sse.ts create mode 100644 apps/platform/src/store/modules/tabsView.ts create mode 100644 apps/platform/src/store/modules/user.ts create mode 100644 apps/platform/src/styles/antdv.override.less create mode 100644 apps/platform/src/styles/common.less create mode 100644 apps/platform/src/styles/index.less create mode 100644 apps/platform/src/styles/reset.css create mode 100644 apps/platform/src/styles/theme.less create mode 100644 apps/platform/src/styles/transition.less create mode 100644 apps/platform/src/styles/variables.less create mode 100644 apps/platform/src/utils/Export2Excel.ts create mode 100644 apps/platform/src/utils/Storage.ts create mode 100644 apps/platform/src/utils/awaitTo.ts create mode 100644 apps/platform/src/utils/browser-type.ts create mode 100644 apps/platform/src/utils/common.ts create mode 100644 apps/platform/src/utils/dateUtil.ts create mode 100644 apps/platform/src/utils/downloadFile.ts create mode 100644 apps/platform/src/utils/helper/tsxHelper.tsx create mode 100644 apps/platform/src/utils/index.ts create mode 100644 apps/platform/src/utils/is.ts create mode 100644 apps/platform/src/utils/log.ts create mode 100644 apps/platform/src/utils/performanceMonitor.ts create mode 100644 apps/platform/src/utils/propTypes.ts create mode 100644 apps/platform/src/utils/request.ts create mode 100644 apps/platform/src/utils/urlUtils.ts create mode 100644 apps/platform/src/utils/validate.ts create mode 100644 apps/platform/src/views/dashboard/welcome/index.vue create mode 100644 apps/platform/src/views/error/404.vue create mode 100644 apps/platform/src/views/error/comp-not-found.vue create mode 100644 apps/platform/src/views/login/index.vue create mode 100644 apps/platform/src/views/system/dept/columns.tsx create mode 100644 apps/platform/src/views/system/dept/formSchemas.ts create mode 100644 apps/platform/src/views/system/dept/index.vue create mode 100644 apps/platform/src/views/system/dict-item/columns.tsx create mode 100644 apps/platform/src/views/system/dict-item/formSchemas.ts create mode 100644 apps/platform/src/views/system/dict-item/index.vue create mode 100644 apps/platform/src/views/system/dict-type/columns.tsx create mode 100644 apps/platform/src/views/system/dict-type/formSchemas.ts create mode 100644 apps/platform/src/views/system/dict-type/index.vue create mode 100644 apps/platform/src/views/system/menu/columns.tsx create mode 100644 apps/platform/src/views/system/menu/formSchemas.tsx create mode 100644 apps/platform/src/views/system/menu/index.vue create mode 100644 apps/platform/src/views/system/monitor/log/login/index.vue create mode 100644 apps/platform/src/views/system/monitor/online/columns.tsx create mode 100644 apps/platform/src/views/system/monitor/online/index.vue create mode 100644 apps/platform/src/views/system/monitor/serve/index.vue create mode 100644 apps/platform/src/views/system/param-config/columns.tsx create mode 100644 apps/platform/src/views/system/param-config/formSchemas.ts create mode 100644 apps/platform/src/views/system/param-config/index.vue create mode 100644 apps/platform/src/views/system/role/columns.tsx create mode 100644 apps/platform/src/views/system/role/formSchemas.ts create mode 100644 apps/platform/src/views/system/role/index.vue create mode 100644 apps/platform/src/views/system/schedule/log/index.vue create mode 100644 apps/platform/src/views/system/schedule/task/columns.tsx create mode 100644 apps/platform/src/views/system/schedule/task/formSchemas.ts create mode 100644 apps/platform/src/views/system/schedule/task/index.vue create mode 100644 apps/platform/src/views/system/user/AvatarUpload.vue create mode 100644 apps/platform/src/views/system/user/DeptTree.vue create mode 100644 apps/platform/src/views/system/user/columns.tsx create mode 100644 apps/platform/src/views/system/user/formSchemas.tsx create mode 100644 apps/platform/src/views/system/user/index.vue create mode 100644 apps/platform/src/views/user/add.vue create mode 100644 apps/platform/src/views/user/change-password.vue create mode 100644 apps/platform/src/views/user/detail.vue create mode 100644 apps/platform/src/views/user/edit.vue create mode 100644 apps/platform/src/views/user/list.vue create mode 100644 apps/platform/stylelint.config.mjs create mode 100644 apps/platform/tsconfig.json create mode 100644 apps/platform/tsconfig.node.json create mode 100644 apps/platform/types/env.d.ts create mode 100644 apps/platform/types/global.d.ts create mode 100644 apps/platform/types/index.d.ts create mode 100644 apps/platform/types/modules.d.ts create mode 100644 apps/platform/types/polyfill.d.ts create mode 100644 apps/platform/types/shims/shims-app.d.ts create mode 100644 apps/platform/types/shims/shims-tsx.d.ts create mode 100644 apps/platform/types/shims/shims-vue.d.ts create mode 100644 apps/platform/types/utils.d.ts create mode 100644 apps/platform/types/vue-router.d.ts create mode 100644 apps/platform/unocss.config.ts create mode 100644 apps/platform/vite.config.ts create mode 100644 apps/renderer/.gitignore create mode 100644 apps/renderer/.npmrc create mode 100644 apps/renderer/README.md create mode 100644 apps/renderer/farm.config.ts create mode 100644 apps/renderer/index.html create mode 100644 apps/renderer/package.json create mode 100644 apps/renderer/public/favicon.ico create mode 100644 apps/renderer/src/App.vue create mode 100644 apps/renderer/src/assets/logo.png create mode 100644 apps/renderer/src/assets/vue.svg create mode 100644 apps/renderer/src/env.d.ts create mode 100644 apps/renderer/src/index.ts rename README.md => apps/renderer/src/style.css (100%) create mode 100644 apps/renderer/tsconfig.json create mode 100644 apps/renderer/tsconfig.node.json rename .env.development => apps/y-code-v1/.env.development (100%) rename .env.production => apps/y-code-v1/.env.production (100%) rename .env.staging => apps/y-code-v1/.env.staging (100%) rename .eslintrc.cjs => apps/y-code-v1/.eslintrc.cjs (100%) create mode 100644 apps/y-code-v1/.npmrc rename .release.config.js => apps/y-code-v1/.release.config.js (96%) create mode 100644 apps/y-code-v1/README.md rename components.d.ts => apps/y-code-v1/components.d.ts (100%) rename env.d.ts => apps/y-code-v1/env.d.ts (100%) rename farm.config.ts => apps/y-code-v1/farm.config.ts (95%) rename index.html => apps/y-code-v1/index.html (100%) create mode 100644 apps/y-code-v1/package.json create mode 100644 apps/y-code-v1/public/favicon.ico rename {src => apps/y-code-v1/src}/App.vue (100%) rename {src => apps/y-code-v1/src}/api/common.ts (100%) rename {src => apps/y-code-v1/src}/api/preview/index.ts (100%) rename {src => apps/y-code-v1/src}/assets/avatar.png (100%) rename {src => apps/y-code-v1/src}/assets/styles/variable.less (100%) rename {src => apps/y-code-v1/src}/components/common/y-chart.vue (100%) rename {src => apps/y-code-v1/src}/components/common/y-table.vue (100%) rename {src => apps/y-code-v1/src}/global.less (100%) rename {src => apps/y-code-v1/src}/layout/components/Header.vue (100%) rename {src => apps/y-code-v1/src}/layout/components/Sider.vue (100%) rename {src => apps/y-code-v1/src}/layout/index.vue (100%) rename {src => apps/y-code-v1/src}/main.ts (100%) rename {src => apps/y-code-v1/src}/plugins/antv-g2plot/column.vue (100%) rename {src => apps/y-code-v1/src}/plugins/antv-g2plot/line.vue (100%) rename {src => apps/y-code-v1/src}/plugins/antv-g2plot/pie.vue (100%) rename {src => apps/y-code-v1/src}/plugins/antv-g2plot/useChart.js (100%) rename {src => apps/y-code-v1/src}/router/guards.ts (100%) rename {src => apps/y-code-v1/src}/router/index.ts (100%) rename {src => apps/y-code-v1/src}/router/routes.ts (96%) rename {src => apps/y-code-v1/src}/stores/useUserInfoStore.ts (100%) rename {src => apps/y-code-v1/src}/utils/request.ts (100%) rename {src => apps/y-code-v1/src}/views/config-manage/module-cfg/components/create-modal.vue (100%) rename {src => apps/y-code-v1/src}/views/config-manage/module-cfg/components/field-modal.vue (100%) rename {src => apps/y-code-v1/src}/views/config-manage/module-cfg/config.ts (100%) rename {src => apps/y-code-v1/src}/views/config-manage/module-cfg/index.vue (100%) rename {src => apps/y-code-v1/src}/views/config-manage/module-cfg/service.js (100%) rename {src => apps/y-code-v1/src}/views/config-manage/project-cfg/components/create-modal.vue (100%) rename {src => apps/y-code-v1/src}/views/config-manage/project-cfg/config.ts (100%) rename {src => apps/y-code-v1/src}/views/config-manage/project-cfg/index.vue (100%) rename {src => apps/y-code-v1/src}/views/config-manage/project-cfg/service.js (100%) rename {src => apps/y-code-v1/src}/views/config-manage/view-cfg/components/create-modal.vue (100%) rename {src => apps/y-code-v1/src}/views/config-manage/view-cfg/config.ts (100%) rename {src => apps/y-code-v1/src}/views/config-manage/view-cfg/index.vue (100%) rename {src => apps/y-code-v1/src}/views/config-manage/view-cfg/service.js (100%) rename {src => apps/y-code-v1/src}/views/page-show-info/page-info/index.vue (100%) rename {src => apps/y-code-v1/src}/views/page-show-info/page-info/service.ts (100%) rename {src => apps/y-code-v1/src}/views/page-show-info/page-info/style.less (100%) rename {src => apps/y-code-v1/src}/views/view-all-manage/create-view/index.vue (100%) rename {src => apps/y-code-v1/src}/views/view-all-manage/create-view/service.js (100%) rename {src => apps/y-code-v1/src}/views/view-all-manage/view-list/config.ts (100%) rename {src => apps/y-code-v1/src}/views/view-all-manage/view-list/index.vue (100%) rename {src => apps/y-code-v1/src}/views/view-all-manage/view-list/service.js (100%) rename tsconfig.app.json => apps/y-code-v1/tsconfig.app.json (100%) rename tsconfig.json => apps/y-code-v1/tsconfig.json (100%) rename tsconfig.node.json => apps/y-code-v1/tsconfig.node.json (100%) rename vite.config.ts => apps/y-code-v1/vite.config.ts (100%) create mode 100644 eslint.config.js create mode 100644 lint-staged.config.mjs delete mode 100644 package-lock.json create mode 100644 packages/render-adapter/.gitignore create mode 100644 packages/render-adapter/README.md create mode 100644 packages/render-adapter/farm.config.ts create mode 100644 packages/render-adapter/index.html create mode 100644 packages/render-adapter/package.json create mode 100644 packages/render-adapter/public/favicon.ico create mode 100644 packages/render-adapter/src/App.vue create mode 100644 packages/render-adapter/src/assets/logo.png create mode 100644 packages/render-adapter/src/assets/vue.svg create mode 100644 packages/render-adapter/src/components/adapter.vue create mode 100644 packages/render-adapter/src/components/index.ts create mode 100644 packages/render-adapter/src/env.d.ts create mode 100644 packages/render-adapter/src/index.js create mode 100644 packages/render-adapter/tsconfig.json create mode 100644 packages/render-adapter/tsconfig.node.json create mode 100644 packages/shared/constants/index.ts create mode 100644 packages/shared/package.json create mode 100644 packages/shared/src/index.ts create mode 100644 packages/shared/styles/reset.css create mode 100644 packages/shared/tsconfig.json create mode 100644 packages/vite-plugin-http2-proxy/package.json create mode 100644 packages/vite-plugin-http2-proxy/src/index.ts create mode 100644 packages/vite-plugin-http2-proxy/tsconfig.json create mode 100644 packages/web-vitals/farm.config.ts create mode 100644 packages/web-vitals/package.json create mode 100644 packages/web-vitals/src/index.ts create mode 100644 packages/web-vitals/tsconfig.json create mode 100644 pnpm-workspace.yaml create mode 100644 turbo.json diff --git a/.env b/.env new file mode 100644 index 0000000..b2204a9 --- /dev/null +++ b/.env @@ -0,0 +1,8 @@ +# 项目名称 +VITE_APP_TITLE = Admin + +# 公共基础路径, 详见: https://cn.vitejs.dev/guide/build.html#public-base-path +VITE_BASE_URL = / + +# enable mock in production +VITE_MOCK_IN_PROD = true \ No newline at end of file diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..d4e5bd3 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +# https://docs.github.com/cn/get-started/getting-started-with-git/configuring-git-to-handle-line-endings + +# Automatically normalize line endings (to LF) for all text-based files. +* text=auto eol=lf + +# Declare files that will always have CRLF line endings on checkout. +*.{cmd,[cC][mM][dD]} text eol=crlf +*.{bat,[bB][aA][tT]} text eol=crlf + +# Denote all files that are truly binary and should not be modified. +*.{ico,png,jpg,jpeg,gif,webp,svg,woff,woff2} binary \ No newline at end of file diff --git a/.gitignore b/.gitignore index ac14768..79d25f1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,25 +1,38 @@ -# Logs -logs -*.log +node_modules +.DS_Store +dist +.cache +.turbo +.nx +.nx/cache + +tests/server/static +tests/server/static/upload + +.local +# local env files +.env.local +.env.*.local +.eslintcache + +# Log files npm-debug.log* yarn-debug.log* yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local +*pnpm-debug.log* # Editor directories and files -.vscode/* -!.vscode/extensions.json .idea -.DS_Store +# .vscode *.suo *.ntvs* *.njsproj *.sln *.sw? -localSet.js + +# auto generate file +types/auto-imports.d.ts +types/components.d.ts + +# Turbo +.turbo diff --git a/.npmrc b/.npmrc index 2f4f197..4585979 100644 --- a/.npmrc +++ b/.npmrc @@ -1,6 +1,22 @@ -# 默认使用淘宝镜像源 -registry=https://registry.npmmirror.com/ - -# 公司私有源配置 +# 使用淘宝镜像源 +registry = https://registry.npmmirror.com @sy:registry=http://sy-registry.shiyue.com +# 根据需要提升含有以下的依赖包到根 node_modules 目录下 +public-hoist-pattern[]=husky +public-hoist-pattern[]=*eslint* +public-hoist-pattern[]=@eslint* +public-hoist-pattern[]=*prettier* +public-hoist-pattern[]=lint-staged +public-hoist-pattern[]=*stylelint* +public-hoist-pattern[]=@commitlint* +public-hoist-pattern[]=core-js + +# 提升所有依赖到根 node_modules 目录下,相当于 public-hoist-pattern[]=*,与上面一种方式一般二选一使用 +# 极不推荐用这样的方式解决依赖问题,这样没有充分利用 pnpm 依赖访问安全性的优势,又走回了 npm / yarn 的老路。 +# shamefully-hoist=true + +enable-pre-post-scripts=true +engine-strict=true +package-manager-strict=false +strict-peer-dependencies=false \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json deleted file mode 100644 index 4771846..0000000 --- a/.vscode/extensions.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "recommendations": [ - "Vue.volar", - "Vue.vscode-typescript-vue-plugin", - "dbaeumer.vscode-eslint" - ] -} diff --git a/apps/designer/.editorconfig b/apps/designer/.editorconfig new file mode 100644 index 0000000..074200f --- /dev/null +++ b/apps/designer/.editorconfig @@ -0,0 +1,9 @@ +[*.{js, jsx, ts, tsx, vue, mjs}] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +insert_final_newline = true +ij_javascript_spaces_within_imports = true +ij_html_do_not_indent_children_of_tags = html, body, thead, tbody, tfoot, script +ij_javascript_space_before_function_left_parenth = true +ij_javascript_use_semicolon_after_statement = true diff --git a/apps/designer/.gitignore b/apps/designer/.gitignore new file mode 100644 index 0000000..c482774 --- /dev/null +++ b/apps/designer/.gitignore @@ -0,0 +1,33 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +.history + +# Project +package-lock.json +yarn-lock.json +pnpm-lock.yaml +tsconfig.tsbuildinfo +node_modules +coverage +dist +dist-ssr +*.local +.vtj/logs +.vtj/histories \ No newline at end of file diff --git a/apps/designer/.npmrc b/apps/designer/.npmrc new file mode 100644 index 0000000..431a693 --- /dev/null +++ b/apps/designer/.npmrc @@ -0,0 +1,15 @@ +registry = https://registry.npmmirror.com +@sy:registry=http://sy-registry.shiyue.com + + +# 根据需要提升含有以下的依赖包到根 node_modules 目录下 +# public-hoist-pattern[]=core-js +# public-hoist-pattern[]=*@vtj* + +# 提升所有依赖到根 node_modules 目录下,相当于 public-hoist-pattern[]=*,与上面一种方式一般二选一使用 +# 极不推荐用这样的方式解决依赖问题,这样没有充分利用 pnpm 依赖访问安全性的优势,又走回了 npm / yarn 的老路。 +# shamefully-hoist=true + +enable-pre-post-scripts=true +engine-strict=true +package-manager-strict=false \ No newline at end of file diff --git a/apps/designer/.prettierrc b/apps/designer/.prettierrc new file mode 100644 index 0000000..809e231 --- /dev/null +++ b/apps/designer/.prettierrc @@ -0,0 +1,20 @@ +{ + "arrowParens": "always", + "bracketSpacing": true, + "bracketSameLine": true, + "endOfLine": "lf", + "htmlWhitespaceSensitivity": "css", + "insertPragma": false, + "jsxBracketSameLine": true, + "jsxSingleQuote": true, + "printWidth": 80, + "proseWrap": "preserve", + "quoteProps": "as-needed", + "requirePragma": false, + "semi": true, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "none", + "useTabs": false, + "vueIndentScriptAndStyle": false +} diff --git a/apps/designer/.vscode/extensions.json b/apps/designer/.vscode/extensions.json new file mode 100644 index 0000000..4881863 --- /dev/null +++ b/apps/designer/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + "recommendations": [ + "vue.volar" + ] +} \ No newline at end of file diff --git a/apps/designer/.vtj/files/45t7j3xqi.json b/apps/designer/.vtj/files/45t7j3xqi.json new file mode 100644 index 0000000..b1f7b0e --- /dev/null +++ b/apps/designer/.vtj/files/45t7j3xqi.json @@ -0,0 +1,19 @@ +{ + "name": "Test", + "locked": false, + "inject": [], + "state": {}, + "lifeCycles": {}, + "methods": {}, + "computed": {}, + "watch": [], + "css": "", + "props": [], + "emits": [], + "slots": [], + "dataSources": {}, + "__VTJ_BLOCK__": true, + "__VERSION__": "1739842497674", + "id": "45t7j3xqi", + "nodes": [] +} diff --git a/apps/designer/.vtj/materials/@sy/low-code-designer.json b/apps/designer/.vtj/materials/@sy/low-code-designer.json new file mode 100644 index 0000000..f03da9c --- /dev/null +++ b/apps/designer/.vtj/materials/@sy/low-code-designer.json @@ -0,0 +1,13288 @@ +{ + "div": { + "name": "div", + "label": "容器", + "categoryId": "html", + "snippet": { + "children": "容器文本内容示例" + } + }, + "span": { + "name": "span", + "label": "内联", + "categoryId": "html", + "snippet": { + "children": "内联容器文本内容示例" + } + }, + "a": { + "name": "a", + "label": "链接", + "categoryId": "html", + "props": [ + { + "name": "href", + "label": "href", + "setters": "InputSetter" + } + ], + "snippet": { + "children": "链接文本内容示例", + "props": { + "href": "#" + } + } + }, + "img": { + "name": "img", + "label": "图片", + "categoryId": "html", + "childIncludes": false, + "props": [ + { + "name": "src", + "label": "src", + "setters": "InputSetter" + }, + { + "name": "width", + "label": "width", + "setters": "InputSetter" + }, + { + "name": "height", + "label": "height", + "setters": "InputSetter" + } + ], + "snippet": { + "props": { + "src": "data:image/png;base64,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", + "width": "200", + "height": "200" + } + } + }, + "h1": { + "name": "h1", + "label": "大标题", + "categoryId": "html", + "snippet": { + "children": "标题" + } + }, + "h2": { + "name": "h2", + "label": "中标题", + "categoryId": "html", + "snippet": { + "children": "标题" + } + }, + "h3": { + "name": "h3", + "label": "小标题", + "categoryId": "html", + "snippet": { + "children": "标题" + } + }, + "p": { + "name": "p", + "label": "段落", + "categoryId": "html", + "snippet": { + "children": "段落文本" + } + }, + "component": { + "name": "component", + "label": "动态组件", + "categoryId": "elements", + "doc": "https://cn.vuejs.org/api/built-in-special-elements.html#component", + "props": [ + { + "name": "is", + "label": "组件名", + "setters": "InputSetter" + } + ], + "snippet": { + "children": "组件文本内容示例", + "props": { + "is": "div" + } + } + }, + "slot": { + "name": "slot", + "label": "插槽", + "categoryId": "elements", + "doc": "https://cn.vuejs.org/api/built-in-special-elements.html#slot", + "props": [ + { + "name": "name", + "label": "名称", + "defaultValue": "default", + "setters": "InputSetter" + } + ], + "snippet": { + "children": "默认插槽内容" + } + }, + "Transition": { + "name": "Transition", + "label": "过渡效果", + "categoryId": "components", + "doc": "https://cn.vuejs.org/api/built-in-components.html#transition", + "package": "vue", + "props": [ + { + "name": "name", + "label": "名称", + "defaultValue": "", + "title": "用于自动生成过渡 CSS class 名", + "setters": "InputSetter" + }, + { + "name": "css", + "label": "应用CSS", + "defaultValue": true, + "title": "是否应用 CSS 过渡 class", + "setters": "BooleanSetter" + }, + { + "name": "type", + "label": "事件类型", + "title": "指定要等待的过渡事件类型来确定过渡结束的时间,默认情况下会自动检测持续时间较长的类型", + "setters": "SelectSetter", + "options": [ + "transition", + "animation" + ] + }, + { + "name": "duration", + "label": "持续时间", + "title": "显式指定过渡的持续时间", + "setters": [ + "NumberSetter", + "JSONSetter" + ] + }, + { + "name": "mode", + "label": "时序", + "defaultValue": "default", + "title": "控制离开/进入过渡的时序。", + "setters": "SelectSetter", + "options": [ + "in-out", + "out-in", + "default" + ] + }, + { + "name": "appear", + "label": "使用过渡", + "defaultValue": false, + "title": "是否对初始渲染使用过渡", + "setters": "BooleanSetter" + }, + { + "name": "enterFromClass", + "label": "enterFromClass", + "setters": "InputSetter" + }, + { + "name": "enterActiveClass", + "label": "enterActiveClass", + "setters": "InputSetter" + }, + { + "name": "enterToClass", + "label": "enterToClass", + "setters": "InputSetter" + }, + { + "name": "appearFromClass", + "label": "appearFromClass", + "setters": "InputSetter" + }, + { + "name": "appearActiveClass", + "label": "appearActiveClass", + "setters": "InputSetter" + }, + { + "name": "appearToClass", + "label": "appearToClass", + "setters": "InputSetter" + }, + { + "name": "leaveFromClass", + "label": "leaveFromClass", + "setters": "InputSetter" + }, + { + "name": "leaveActiveClass", + "label": "leaveActiveClass", + "setters": "InputSetter" + }, + { + "name": "leaveToClass", + "label": "leaveToClass", + "setters": "InputSetter" + } + ], + "events": [ + "before-enter", + "before-leave", + "enter", + "leave", + "appear", + "after-enter", + "after-leave", + "after-appear", + "enter-cancelled", + "leave-cancelled", + "ppear-cancelled" + ], + "snippet": { + "children": "Transition" + } + }, + "TransitionGroup": { + "name": "TransitionGroup", + "label": "过渡效果组", + "categoryId": "components", + "doc": "https://cn.vuejs.org/api/built-in-components.html#transitiongroup", + "package": "vue", + "props": [ + { + "name": "name", + "label": "名称", + "defaultValue": "", + "title": "用于自动生成过渡 CSS class 名", + "setters": "InputSetter" + }, + { + "name": "tag", + "label": "标签名", + "title": "如果未定义,则渲染为片段 (fragment)", + "setters": "InputSetter" + }, + { + "name": "moveClass", + "label": "moveClass", + "title": "用于自定义过渡期间被应用的 CSS class。", + "setters": "InputSetter" + }, + { + "name": "css", + "label": "应用CSS", + "defaultValue": true, + "title": "是否应用 CSS 过渡 class", + "setters": "BooleanSetter" + }, + { + "name": "type", + "label": "事件类型", + "title": "指定要等待的过渡事件类型来确定过渡结束的时间,默认情况下会自动检测持续时间较长的类型", + "setters": "SelectSetter", + "options": [ + "transition", + "animation" + ] + }, + { + "name": "duration", + "label": "持续时间", + "title": "显式指定过渡的持续时间", + "setters": [ + "NumberSetter", + "JSONSetter" + ] + }, + { + "name": "appear", + "label": "使用过渡", + "defaultValue": false, + "title": "是否对初始渲染使用过渡", + "setters": "BooleanSetter" + }, + { + "name": "enterFromClass", + "label": "enterFromClass", + "setters": "InputSetter" + }, + { + "name": "enterActiveClass", + "label": "enterActiveClass", + "setters": "InputSetter" + }, + { + "name": "enterToClass", + "label": "enterToClass", + "setters": "InputSetter" + }, + { + "name": "appearFromClass", + "label": "appearFromClass", + "setters": "InputSetter" + }, + { + "name": "appearActiveClass", + "label": "appearActiveClass", + "setters": "InputSetter" + }, + { + "name": "appearToClass", + "label": "appearToClass", + "setters": "InputSetter" + }, + { + "name": "leaveFromClass", + "label": "leaveFromClass", + "setters": "InputSetter" + }, + { + "name": "leaveActiveClass", + "label": "leaveActiveClass", + "setters": "InputSetter" + }, + { + "name": "leaveToClass", + "label": "leaveToClass", + "setters": "InputSetter" + } + ], + "events": [ + "before-enter", + "before-leave", + "enter", + "leave", + "appear", + "after-enter", + "after-leave", + "after-appear", + "enter-cancelled", + "leave-cancelled", + "ppear-cancelled" + ], + "snippet": { + "children": "TransitionGroup" + } + }, + "KeepAlive": { + "name": "KeepAlive", + "label": "缓存切换组件", + "categoryId": "components", + "doc": "https://cn.vuejs.org/api/built-in-components.html#keepalive", + "package": "vue", + "props": [ + { + "name": "include", + "label": "匹配包含", + "title": "如果指定,则只有与 `include` 名称, 匹配的组件才会被缓存。", + "setters": [ + "InputSetter", + "JSONSetter" + ] + }, + { + "name": "exclude", + "label": "匹配排除", + "title": "任何名称与 `exclude` 匹配的组件都不会被缓存。", + "setters": [ + "InputSetter", + "JSONSetter" + ] + }, + { + "name": "max", + "label": "最大缓存数", + "title": "最多可以缓存多少组件实例。", + "setters": [ + "InputSetter" + ] + } + ] + }, + "Teleport": { + "name": "Teleport", + "label": "传送组件", + "categoryId": "components", + "doc": "https://cn.vuejs.org/api/built-in-components.html#teleport", + "package": "vue", + "props": [ + { + "name": "to", + "label": "目标容器", + "title": "指定目标容器,可以是选择器或实际元素", + "setters": [ + "InputSetter" + ] + }, + { + "name": "disabled", + "label": "禁用", + "title": "当值为 `true` 时,内容将保留在其原始位置, 而不是移动到目标容器中, 可以动态更改", + "setters": [ + "BooleanSetter" + ] + } + ] + }, + "Suspense": { + "name": "Suspense", + "label": "异步依赖", + "categoryId": "components", + "doc": "https://cn.vuejs.org/api/built-in-components.html#suspense", + "package": "vue", + "props": [ + { + "name": "timeout", + "label": "timeout", + "setters": [ + "InputSetter" + ] + } + ] + }, + "RouterLink": { + "name": "RouterLink", + "label": "路由链接", + "categoryId": "components", + "doc": "https://router.vuejs.org/zh/api/interfaces/RouterLinkProps.html", + "package": "vue-router", + "props": [ + { + "name": "to", + "label": "to", + "setters": [ + "InputSetter" + ] + }, + { + "name": "replace", + "label": "replace", + "setters": [ + "BooleanSetter" + ] + } + ], + "snippet": { + "children": "RouterLink", + "props": { + "to": "/" + } + } + }, + "ElAffix": { + "name": "ElAffix", + "label": "固钉", + "categoryId": "nav", + "doc": "https://element-plus.org/zh-CN/component/affix.html", + "package": "element-plus", + "props": [ + { + "name": "offset", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "position", + "defaultValue": "top", + "setters": "SelectSetter", + "options": [ + "top", + "bottom" + ] + }, + { + "name": "target", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "z-index", + "defaultValue": 100, + "setters": "NumberSetter" + } + ], + "events": [ + { + "name": "change" + }, + { + "name": "scroll" + } + ], + "slots": [ + "default" + ], + "snippet": { + "name": "ElAffix", + "children": [ + { + "name": "ElButton", + "props": { + "type": "primary" + }, + "children": "Affix 固钉" + } + ] + } + }, + "ElAlert": { + "name": "ElAlert", + "childIncludes": true, + "label": "提示", + "doc": "https://element-plus.org/zh-CN/component/alert.html", + "categoryId": "other", + "package": "element-plus", + "props": [ + { + "name": "title", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "type", + "defaultValue": "info", + "setters": "SelectSetter", + "options": [ + "success", + "warning", + "info", + "error" + ] + }, + { + "name": "description", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "closable", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "center", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "closeText", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "showIcon", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "effect", + "defaultValue": "light", + "setters": "SelectSetter", + "options": [ + "light", + "dark" + ] + } + ], + "events": [ + { + "name": "close" + } + ], + "slots": [ + { + "name": "default" + }, + { + "name": "title" + } + ], + "snippet": { + "props": { + "title": "success alert", + "type": "success" + } + } + }, + "ElAnchor": { + "name": "ElAnchor", + "label": "锚点", + "doc": "https://element-plus.org/zh-CN/component/anchor.html", + "categoryId": "other", + "package": "element-plus", + "props": [ + { + "name": "container", + "label": "container", + "title": "滚动的容器", + "setters": "StringSetter" + }, + { + "name": "offset", + "label": "offset", + "title": "设置锚点滚动的偏移量", + "setters": "NumberSetter", + "defaultValue": 0 + }, + { + "name": "bound", + "label": "bound", + "title": "触发锚点的元素的位置偏移量", + "setters": "NumberSetter", + "defaultValue": 15 + }, + { + "name": "duration", + "label": "duration", + "title": "设置容器滚动持续时间,单位为毫秒", + "setters": "NumberSetter", + "defaultValue": 300 + }, + { + "name": "marker", + "label": "marker", + "title": "是否显示标记", + "setters": "BooleanSetter", + "defaultValue": true + }, + { + "name": "type", + "label": "type", + "title": "设置锚点类型", + "setters": "SelectSetter", + "options": [ + "default", + "underline" + ], + "defaultValue": "default" + }, + { + "name": "direction", + "label": "direction", + "title": "设置锚点方向", + "setters": "SelectSetter", + "options": [ + "vertical", + "horizontal" + ], + "defaultValue": "horizontal" + }, + { + "name": "selectScrollTop", + "title": "滚动时,链接是否选中位于顶部", + "defaultValue": false, + "setters": "BooleanSetter" + } + ], + "events": [ + "change", + "click" + ], + "slots": [ + "default" + ], + "snippet": { + "props": { + "offset": "70" + }, + "children": [ + { + "name": "ElAnchorLink", + "props": { + "href": "" + }, + "children": "基本用法" + } + ] + } + }, + "ElAnchorLink": { + "name": "ElAnchorLink", + "label": "锚点链接", + "doc": "https://element-plus.org/zh-CN/component/anchor.html", + "categoryId": "other", + "package": "element-plus", + "props": [ + { + "name": "title", + "label": "title", + "title": "链接的文本内容", + "setters": "StringSetter" + }, + { + "name": "href", + "label": "href", + "title": "链接的地址", + "setters": "StringSetter" + } + ], + "slots": [ + "default", + "sub-link" + ], + "snippet": { + "props": { + "href": "" + }, + "children": "基本用法" + } + }, + "ElAutocomplete": { + "name": "ElAutocomplete", + "label": "自动补全输入框", + "categoryId": "form", + "doc": "https://element-plus.org/zh-CN/component/autocomplete.html", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "defaultValue": "", + "title": "选中项绑定值", + "setters": "StringSetter" + }, + { + "name": "placeholder", + "title": "占位文本", + "defaultValue": "", + "setters": "StringSetter" + }, + { + "name": "clearable", + "title": "是否可清空", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "disabled", + "title": "自动补全组件是否被禁用", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "valueKey", + "title": "输入建议对象中用于显示的键名", + "defaultValue": "value", + "setters": "StringSetter" + }, + { + "name": "debounce", + "defaultValue": 300, + "title": "获取输入建议的防抖延时", + "setters": "NumberSetter" + }, + { + "name": "placement", + "defaultValue": "bottom-start", + "title": "菜单弹出位置", + "options": [ + "top ", + "top-start", + "top-end", + "top-end", + "bottom", + "bottom-start", + "bottom-end" + ], + "setters": "SelectSetter" + }, + { + "name": "fetchSuggestions", + "defaultValue": "", + "title": "获取输入建议的方法", + "setters": [ + "ArraySetter", + "FunctionSetter" + ] + }, + { + "name": "triggerOnFocus", + "defaultValue": true, + "title": "是否在输入框focus时显示建议列表", + "setters": "BooleanSetter" + }, + { + "name": "selectWhenUnmatched", + "defaultValue": false, + "title": "在输入没有任何匹配建议的情况下,按下回车是否触发select事件", + "setters": "BooleanSetter" + }, + { + "name": "name", + "title": "等价于原生 input name 属性", + "defaultValue": "", + "setters": "StringSetter" + }, + { + "name": "aria-label", + "defaultValue": "", + "title": "原生 aria-label属性", + "setters": "StringSetter" + }, + { + "name": "hideLoading", + "title": "是否隐藏远程加载时的加载图标", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "popperClass", + "defaultValue": "", + "title": "下拉列表的类名", + "setters": "StringSetter" + }, + { + "name": "teleported", + "title": "是否将下拉列表元素插入 append-to 指向的元素下", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "highlightFirstItem", + "defaultValue": false, + "title": "是否默认突出显示远程搜索建议中的第一项", + "setters": "BooleanSetter" + }, + { + "name": "fit-input-width", + "defaultValue": false, + "title": "下拉框是否与输入框同宽", + "setters": "BooleanSetter" + }, + { + "name": "popperAppendToBody", + "defaultValue": false, + "title": "是否将下拉列表插入至body元素", + "setters": "BooleanSetter" + } + ], + "slots": [ + { + "name": "default", + "params": [ + "item" + ] + }, + { + "name": "prefix" + }, + { + "name": "suffix" + }, + { + "name": "prepend" + }, + { + "name": "append" + }, + { + "name": "loading" + } + ], + "events": [ + { + "name": "update:modelValue" + }, + { + "name": "select" + }, + { + "name": "change" + } + ], + "snippet": { + "props": { + "fetchSuggestions": { + "type": "JSFunction", + "value": "(function (queryString, cb) {\r\n\r\n const list = [\r\n { value: 'vue', link: 'https://github.com/vuejs/vue' },\r\n { value: 'element', link: 'https://github.com/ElemeFE/element' },\r\n { value: 'cooking', link: 'https://github.com/ElemeFE/cooking' },\r\n { value: 'mint-ui', link: 'https://github.com/ElemeFE/mint-ui' },\r\n { value: 'vuex', link: 'https://github.com/vuejs/vuex' },\r\n { value: 'vue-router', link: 'https://github.com/vuejs/vue-router' },\r\n { value: 'babel', link: 'https://github.com/babel/babel' }\r\n ];\r\n\r\n const results = list.filter(n => n.value.startsWith(queryString));\r\n\r\n cb(results);\r\n\r\n})" + } + } + } + }, + "ElAvatar": { + "name": "ElAvatar", + "label": "头像", + "categoryId": "data", + "doc": "https://element-plus.org/zh-CN/component/avatar.html", + "package": "element-plus", + "props": [ + { + "name": "icon", + "defaultValue": "", + "setters": "IconSetter" + }, + { + "name": "size", + "setters": [ + "SelectSetter", + "NumberSetter" + ], + "options": [ + "large", + "default", + "small" + ], + "defaultValue": "default" + }, + { + "name": "shape", + "defaultValue": "circle", + "options": [ + "circle", + "square" + ], + "setters": "SelectSetter" + }, + { + "name": "src", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "srcSet", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "alt", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "fit", + "defaultValue": "cover", + "options": [ + "fill", + "contain", + "cover", + "none", + "scale-down" + ], + "setters": "SelectSetter" + } + ], + "events": [ + "error" + ], + "slots": [ + "default", + "icon" + ], + "snippet": { + "props": { + "src": "https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png" + } + } + }, + "ElBacktop": { + "name": "ElBacktop", + "label": "回到顶部", + "categoryId": "nav", + "doc": "https://element-plus.org/zh-CN/component/backtop.html", + "package": "element-plus", + "props": [ + { + "name": "target", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "visibilityHeight", + "defaultValue": 200, + "setters": "NumberSetter" + }, + { + "name": "right", + "defaultValue": 40, + "setters": "NumberSetter" + }, + { + "name": "bottom", + "defaultValue": 40, + "setters": "NumberSetter" + } + ], + "events": [ + { + "name": "click" + } + ], + "slots": [ + "default" + ], + "snippet": { + "name": "ElBacktop", + "children": [ + { + "name": "component", + "props": { + "is": "div", + "style": { + "height": "100%", + "textAlign": "center", + "width": "100px", + "lineHeight": "40px", + "color": "#1989fa" + } + }, + "children": "UP" + } + ] + } + }, + "ElBadge": { + "name": "ElBadge", + "label": "徽章", + "categoryId": "data", + "doc": "https://element-plus.org/zh-CN/component/badge.html", + "package": "element-plus", + "props": [ + { + "name": "value", + "defaultValue": "", + "title": "显示值", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "max", + "defaultValue": 99, + "setters": "NumberSetter" + }, + { + "name": "isDot", + "defaultValue": false, + "title": "是否显示小圆点。", + "setters": "BooleanSetter" + }, + { + "name": "hidden", + "defaultValue": false, + "title": "是否隐藏 Badge。", + "setters": "BooleanSetter" + }, + { + "name": "type", + "defaultValue": "danger", + "title": "badge 类型。", + "options": [ + "primary", + "success", + "warning", + "danger", + "info" + ], + "setters": "SelectSetter" + }, + { + "name": "showZero", + "title": "值为零时是否显示 Badge ", + "setters": "BooleanSetter", + "defaultValue": true + }, + { + "name": "color", + "title": "背景色", + "setters": "ColorSetter" + }, + { + "name": "offset", + "title": "badge 的偏移量", + "setters": "ArraySetter" + }, + { + "name": "badgeStyle", + "title": "自定义 badge 样式", + "setters": "ObjectSetter" + }, + { + "name": "badgeClass", + "title": "自定义 badge 类名", + "setters": "StringSetter" + } + ], + "slots": [ + "default", + "content" + ], + "snippet": { + "props": { + "value": 12 + }, + "children": [ + { + "name": "ElButton", + "children": "评论" + } + ] + } + }, + "ElBreadcrumb": { + "name": "ElBreadcrumb", + "childIncludes": [ + "ElBreadcrumbItem" + ], + "label": "面包屑", + "categoryId": "nav", + "doc": "https://element-plus.org/zh-CN/component/breadcrumb.html", + "package": "element-plus", + "props": [ + { + "name": "separator", + "defaultValue": "/", + "setters": "InputSetter" + }, + { + "name": "separatorIcon", + "defaultValue": "", + "setters": [ + "InputSetter" + ] + } + ], + "slots": [ + "default", + "separatorIcon" + ], + "snippet": { + "children": [ + { + "name": "ElBreadcrumbItem", + "children": "主页" + }, + { + "name": "ElBreadcrumbItem", + "children": "列表" + }, + { + "name": "ElBreadcrumbItem", + "children": "详情" + } + ] + } + }, + "ElBreadcrumbItem": { + "name": "ElBreadcrumbItem", + "label": "面包屑项", + "categoryId": "nav", + "package": "element-plus", + "props": [ + { + "name": "to", + "defaultValue": "", + "setters": [ + "InputSetter", + "JSONSetter" + ] + }, + { + "name": "replace", + "defaultValue": "", + "setters": "InputSetter" + } + ], + "slots": [ + "default" + ], + "snippet": { + "name": "ElBreadcrumbItem", + "children": "BreadcrumbItem" + } + }, + "ElButton": { + "name": "ElButton", + "label": "按钮", + "categoryId": "base", + "doc": "https://element-plus.org/zh-CN/component/button.html", + "props": [ + { + "name": "size", + "defaultValue": "default", + "setters": "SelectSetter", + "options": [ + "default", + "large", + "small" + ] + }, + { + "name": "type", + "defaultValue": "default", + "setters": "SelectSetter", + "options": [ + "default", + "primary", + "success", + "warning", + "danger", + "info" + ] + }, + { + "name": "plain", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "text", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "bg", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "link", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "round", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "circle", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "loading", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "loadingIcon", + "setters": "IconSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "icon", + "setters": "IconSetter" + }, + { + "name": "autofocus", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "nativeType", + "defaultValue": "button", + "setters": "SelectSetter", + "options": [ + "button ", + "submit", + "reset" + ] + }, + { + "name": "autoInsertSpace", + "setters": "BooleanSetter" + }, + { + "name": "color", + "setters": "StringSetter" + }, + { + "name": "dark", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "tag", + "setters": "StringSetter", + "defaultValue": "button" + } + ], + "events": [ + "click" + ], + "slots": [ + "default", + "loading", + "icon", + "tag" + ], + "snippet": { + "name": "ElButton", + "children": "按钮", + "props": { + "type": "primary" + } + }, + "package": "element-plus" + }, + "ElButtonGroup": { + "name": "ElButtonGroup", + "childIncludes": [ + "ElButton" + ], + "label": "按钮组", + "categoryId": "base", + "props": [ + { + "name": "size", + "defaultValue": "default", + "setters": "SelectSetter", + "options": [ + "default", + "large", + "small" + ] + }, + { + "name": "type", + "defaultValue": "default", + "setters": "SelectSetter", + "options": [ + "default", + "primary", + "success", + "warning", + "danger", + "info" + ] + } + ], + "slots": [ + "default" + ], + "snippet": { + "name": "ElButtonGroup", + "children": [ + { + "name": "ElButton", + "children": "Button1" + }, + { + "name": "ElButton", + "children": "Button2" + }, + { + "name": "ElButton", + "children": "Button3" + } + ] + }, + "package": "element-plus" + }, + "ElCalendar": { + "name": "ElCalendar", + "label": "日历", + "categoryId": "data", + "doc": "https://element-plus.org/zh-CN/component/calendar.html", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "defaultValue": "", + "setters": [ + "StringSetter", + "ExpressionSetter" + ] + }, + { + "name": "range", + "defaultValue": "", + "setters": [ + "ArraySetter", + "JSONSetter" + ] + } + ], + "events": [ + "update:modelValue" + ], + "slots": [ + { + "name": "date-cell" + }, + { + "name": "header" + } + ] + }, + "ElCard": { + "name": "ElCard", + "label": "卡片", + "categoryId": "data", + "package": "element-plus", + "doc": "https://element-plus.org/zh-CN/component/card.html", + "props": [ + { + "name": "header", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "footer", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "bodyStyle", + "setters": "JSONSetter" + }, + { + "name": "bodyClass", + "setters": "StringSetter" + }, + { + "name": "shadow", + "defaultValue": "always", + "options": [ + "always", + "hover", + "never" + ], + "setters": "SelectSetter" + } + ], + "slots": [ + { + "name": "default" + }, + { + "name": "header" + }, + { + "name": "footer" + } + ], + "snippet": { + "props": { + "header": "标题" + }, + "children": "内容文本" + } + }, + "ElCarousel": { + "name": "ElCarousel", + "label": "走马灯", + "categoryId": "data", + "doc": "https://element-plus.org/zh-CN/component/carousel.html", + "childIncludes": [ + "ElCarouselItem" + ], + "package": "element-plus", + "props": [ + { + "name": "height", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "initialIndex", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "trigger", + "defaultValue": "hover", + "options": [ + "hover", + "click" + ], + "setters": "SelectSetter" + }, + { + "name": "autoplay", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "interval", + "defaultValue": 3000, + "setters": "NumberSetter" + }, + { + "name": "indicatorPosition", + "defaultValue": "", + "options": [ + "", + "outside", + "none" + ], + "label": "指示器", + "setters": "InputSetter" + }, + { + "name": "arrow", + "defaultValue": "hover", + "options": [ + "always", + "hover", + "never" + ], + "setters": "SelectSetter" + }, + { + "name": "type", + "defaultValue": "", + "options": [ + "", + "card" + ], + "setters": "SelectSetter" + }, + { + "name": "cardScale", + "defaultValue": 0.83, + "setters": "NumberSetter" + }, + { + "name": "loop", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "direction", + "defaultValue": "horizontal", + "options": [ + "horizontal", + "vertical" + ], + "setters": "SelectSetter" + }, + { + "name": "pauseOnHover", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "motionBlur", + "defaultValue": false, + "setters": "BooleanSetter" + } + ], + "events": [ + "change" + ], + "slots": [ + "default" + ], + "snippet": { + "props": { + "height": "300px", + "style": { + "width": "100%" + } + }, + "children": [ + { + "name": "ElCarouselItem", + "props": { + "style": { + "width": "100%" + } + }, + "children": [ + { + "name": "component", + "props": { + "is": "img", + "style": { + "width": "100%", + "height": "300px" + }, + "src": "https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg" + } + } + ], + "directives": [ + { + "name": "vFor", + "value": { + "type": "JSExpression", + "value": "3" + } + } + ] + } + ] + } + }, + "ElCarouselItem": { + "name": "ElCarouselItem", + "label": "走马灯子项", + "categoryId": "data", + "package": "element-plus", + "props": [ + { + "name": "name", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "label", + "defaultValue": "", + "setters": "InputSetter" + } + ], + "slots": [ + "default" + ], + "snippet": { + "props": { + "style": { + "width": "100%" + } + }, + "children": [ + { + "name": "component", + "props": { + "is": "img", + "style": { + "width": "100%", + "height": "300px" + }, + "src": "https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg" + } + } + ] + } + }, + "ElCascader": { + "name": "ElCascader", + "label": "级联选择器", + "categoryId": "form", + "doc": "https://element-plus.org/zh-CN/component/cascader.html", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "title": "选中项绑定值", + "setters": [ + "StringSetter", + "NumberSetter", + "ObjectSetter" + ] + }, + { + "name": "options", + "title": "选项的数据源, value 和 label 可以通过 CascaderProps 自定义", + "defaultValue": [], + "setters": [ + "ArraySetter", + "JSONSetter" + ] + }, + { + "name": "props", + "title": "配置选项", + "setters": [ + "ObjectSetter", + "JSONSetter" + ] + }, + { + "name": "size", + "defaultValue": "", + "title": "尺寸", + "options": [ + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "placeholder", + "title": "输入框占位文本", + "setters": "StringSetter" + }, + { + "name": "disabled", + "title": "是否禁用", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "clearable", + "title": "是否支持清空选项", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "showAllLevels", + "defaultValue": true, + "title": "输入框中是否显示选中值的完整路径", + "setters": "BooleanSetter" + }, + { + "name": "collapseTags", + "title": "多选模式下是否折叠Tag", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "collapseTagsTooltip", + "defaultValue": false, + "title": "当鼠标悬停于折叠标签的文本时,是否显示所有选中的标签。 要使用此属性,collapseTags属性必须设定为 true", + "setters": "BooleanSetter" + }, + { + "name": "separator", + "title": "用于分隔选项的字符", + "defaultValue": "/", + "setters": "StringSetter" + }, + { + "name": "filterable", + "title": "该选项是否可以被搜索", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "filterMethod", + "title": "自定义搜索逻辑,第一个参数是node,第二个参数是keyword,返回的布尔值表示是否保留该选项", + "defaultValue": "", + "setters": [ + "FunctionSetter", + "ExpressionSetter" + ] + }, + { + "name": "debounce", + "title": "搜索关键词正在输入时的去抖延迟,单位为毫秒", + "defaultValue": 300, + "setters": "NumberSetter" + }, + { + "name": "beforeFilter", + "title": "过滤函数调用前,所要调用的钩子函数,该函数接收要过滤的值作为参数。 如果该函数的返回值是 false 或者是一个被拒绝的 Promise,那么接下来的过滤逻辑便不会执行", + "defaultValue": "", + "setters": [ + "FunctionSetter", + "ExpressionSetter" + ] + }, + { + "name": "popperClass", + "title": "弹出内容的自定义类名", + "defaultValue": "", + "setters": "StringSetter" + }, + { + "name": "teleported", + "title": "弹层是否使用 teleport", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "tagType", + "title": "标签类型", + "defaultValue": "info", + "options": [ + "success", + "info", + "warning", + "danger" + ], + "setters": "SelectSetter" + }, + { + "name": "tag-effect", + "title": "tag effect", + "defaultValue": "light", + "options": [ + "light", + "dark", + "plain" + ], + "setters": "SelectSetter" + }, + { + "name": "validateEvent", + "title": "输入时是否触发表单的校验", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "maxCollapseTags", + "title": "需要显示的 Tag 的最大数量 只有当 collapse-tags 设置为 true 时才会生效。", + "setters": "NumberSetter", + "defaultValue": 1 + }, + { + "name": "empty-values", + "title": "组件的空值配置", + "setters": "ArraySetter" + }, + { + "name": "value-on-clear", + "title": "清空选项的值", + "setters": [ + "StringSetter", + "NumberSetter", + "BooleanSetter", + "ArraySetter" + ] + }, + { + "name": "persistent", + "title": "当下拉框未被激活并且persistent设置为false,下拉框容器会被删除。", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "fallback-placements", + "title": "Tooltip 可用的 positions", + "setters": "ArraySetter" + }, + { + "name": "placement", + "title": "下拉框出现的位置", + "defaultValue": "bottom-start", + "options": [ + "top", + "top-start", + "top-end", + "bottom", + "bottom-start", + "bottom-end", + "left", + "left-start", + "left-end", + "right", + "right-start", + "right-end" + ], + "setters": "SelectSetter" + }, + { + "name": "popperAppendToBody", + "defaultValue": true, + "title": "是否将弹出的内容直接插入到 body 元素。 在弹出内容的边框定位出现问题时,可将该属性设置为 false", + "setters": "BooleanSetter" + } + ], + "events": [ + { + "name": "change" + }, + { + "name": "expand-change" + }, + { + "name": "blur" + }, + { + "name": "focus" + }, + { + "name": "clear" + }, + { + "name": "visible-change" + }, + { + "name": "remove-tag" + }, + { + "name": "update:modelValue" + } + ], + "slots": [ + { + "name": "default", + "params": [ + "node", + "data" + ] + }, + { + "name": "empty" + } + ], + "snippet": { + "props": { + "options": [ + { + "value": "guide", + "label": "Guide", + "children": [ + { + "value": "disciplines", + "label": "Disciplines", + "children": [ + { + "value": "consistency", + "label": "Consistency" + }, + { + "value": "feedback", + "label": "Feedback" + }, + { + "value": "efficiency", + "label": "Efficiency" + }, + { + "value": "controllability", + "label": "Controllability" + } + ] + }, + { + "value": "navigation", + "label": "Navigation", + "children": [ + { + "value": "side nav", + "label": "Side Navigation" + }, + { + "value": "top nav", + "label": "Top Navigation" + } + ] + } + ] + }, + { + "value": "component", + "label": "Component", + "children": [ + { + "value": "basic", + "label": "Basic", + "children": [ + { + "value": "layout", + "label": "Layout" + }, + { + "value": "color", + "label": "Color" + }, + { + "value": "typography", + "label": "Typography" + }, + { + "value": "icon", + "label": "Icon" + }, + { + "value": "button", + "label": "Button" + } + ] + }, + { + "value": "form", + "label": "Form", + "children": [ + { + "value": "radio", + "label": "Radio" + }, + { + "value": "checkbox", + "label": "Checkbox" + }, + { + "value": "input", + "label": "Input" + }, + { + "value": "input-number", + "label": "InputNumber" + }, + { + "value": "select", + "label": "Select" + }, + { + "value": "cascader", + "label": "Cascader" + }, + { + "value": "switch", + "label": "Switch" + }, + { + "value": "slider", + "label": "Slider" + }, + { + "value": "time-picker", + "label": "TimePicker" + }, + { + "value": "date-picker", + "label": "DatePicker" + }, + { + "value": "datetime-picker", + "label": "DateTimePicker" + }, + { + "value": "upload", + "label": "Upload" + }, + { + "value": "rate", + "label": "Rate" + }, + { + "value": "form", + "label": "Form" + } + ] + }, + { + "value": "data", + "label": "Data", + "children": [ + { + "value": "table", + "label": "Table" + }, + { + "value": "tag", + "label": "Tag" + }, + { + "value": "progress", + "label": "Progress" + }, + { + "value": "tree", + "label": "Tree" + }, + { + "value": "pagination", + "label": "Pagination" + }, + { + "value": "badge", + "label": "Badge" + } + ] + }, + { + "value": "notice", + "label": "Notice", + "children": [ + { + "value": "alert", + "label": "Alert" + }, + { + "value": "loading", + "label": "Loading" + }, + { + "value": "message", + "label": "Message" + }, + { + "value": "message-box", + "label": "MessageBox" + }, + { + "value": "notification", + "label": "Notification" + } + ] + }, + { + "value": "navigation", + "label": "Navigation", + "children": [ + { + "value": "menu", + "label": "Menu" + }, + { + "value": "tabs", + "label": "Tabs" + }, + { + "value": "breadcrumb", + "label": "Breadcrumb" + }, + { + "value": "dropdown", + "label": "Dropdown" + }, + { + "value": "steps", + "label": "Steps" + } + ] + }, + { + "value": "others", + "label": "Others", + "children": [ + { + "value": "dialog", + "label": "Dialog" + }, + { + "value": "tooltip", + "label": "Tooltip" + }, + { + "value": "popover", + "label": "Popover" + }, + { + "value": "card", + "label": "Card" + }, + { + "value": "carousel", + "label": "Carousel" + }, + { + "value": "collapse", + "label": "Collapse" + } + ] + } + ] + }, + { + "value": "resource", + "label": "Resource", + "children": [ + { + "value": "axure", + "label": "Axure Components" + }, + { + "value": "sketch", + "label": "Sketch Templates" + }, + { + "value": "docs", + "label": "Design Documentation" + } + ] + } + ], + "props": {}, + "modelValue": [] + } + } + }, + "ElCascaderPanel": { + "name": "ElCascaderPanel", + "label": "级联面板", + "categoryId": "form", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "title": "选中项绑定值", + "defaultValue": "", + "setters": [ + "StringSetter", + "NumberSetter", + "JSONSetter" + ] + }, + { + "name": "options", + "title": "选项的数据源", + "defaultValue": "", + "setters": "JSONSetter" + }, + { + "name": "props", + "title": "配置选项", + "defaultValue": "", + "setters": "JSONSetter" + } + ], + "events": [ + { + "name": "change" + }, + { + "name": "expand-change" + }, + { + "name": "close" + } + ], + "slots": [ + { + "name": "default", + "params": [ + "node", + "data" + ] + }, + { + "name": "empty" + } + ], + "snippet": { + "props": { + "options": [ + { + "value": "guide", + "label": "Guide", + "children": [ + { + "value": "disciplines", + "label": "Disciplines", + "children": [ + { + "value": "consistency", + "label": "Consistency" + }, + { + "value": "feedback", + "label": "Feedback" + }, + { + "value": "efficiency", + "label": "Efficiency" + }, + { + "value": "controllability", + "label": "Controllability" + } + ] + }, + { + "value": "navigation", + "label": "Navigation", + "children": [ + { + "value": "side nav", + "label": "Side Navigation" + }, + { + "value": "top nav", + "label": "Top Navigation" + } + ] + } + ] + }, + { + "value": "component", + "label": "Component", + "children": [ + { + "value": "basic", + "label": "Basic", + "children": [ + { + "value": "layout", + "label": "Layout" + }, + { + "value": "color", + "label": "Color" + }, + { + "value": "typography", + "label": "Typography" + }, + { + "value": "icon", + "label": "Icon" + }, + { + "value": "button", + "label": "Button" + } + ] + }, + { + "value": "form", + "label": "Form", + "children": [ + { + "value": "radio", + "label": "Radio" + }, + { + "value": "checkbox", + "label": "Checkbox" + }, + { + "value": "input", + "label": "Input" + }, + { + "value": "input-number", + "label": "InputNumber" + }, + { + "value": "select", + "label": "Select" + }, + { + "value": "cascader", + "label": "Cascader" + }, + { + "value": "switch", + "label": "Switch" + }, + { + "value": "slider", + "label": "Slider" + }, + { + "value": "time-picker", + "label": "TimePicker" + }, + { + "value": "date-picker", + "label": "DatePicker" + }, + { + "value": "datetime-picker", + "label": "DateTimePicker" + }, + { + "value": "upload", + "label": "Upload" + }, + { + "value": "rate", + "label": "Rate" + }, + { + "value": "form", + "label": "Form" + } + ] + }, + { + "value": "data", + "label": "Data", + "children": [ + { + "value": "table", + "label": "Table" + }, + { + "value": "tag", + "label": "Tag" + }, + { + "value": "progress", + "label": "Progress" + }, + { + "value": "tree", + "label": "Tree" + }, + { + "value": "pagination", + "label": "Pagination" + }, + { + "value": "badge", + "label": "Badge" + } + ] + }, + { + "value": "notice", + "label": "Notice", + "children": [ + { + "value": "alert", + "label": "Alert" + }, + { + "value": "loading", + "label": "Loading" + }, + { + "value": "message", + "label": "Message" + }, + { + "value": "message-box", + "label": "MessageBox" + }, + { + "value": "notification", + "label": "Notification" + } + ] + }, + { + "value": "navigation", + "label": "Navigation", + "children": [ + { + "value": "menu", + "label": "Menu" + }, + { + "value": "tabs", + "label": "Tabs" + }, + { + "value": "breadcrumb", + "label": "Breadcrumb" + }, + { + "value": "dropdown", + "label": "Dropdown" + }, + { + "value": "steps", + "label": "Steps" + } + ] + }, + { + "value": "others", + "label": "Others", + "children": [ + { + "value": "dialog", + "label": "Dialog" + }, + { + "value": "tooltip", + "label": "Tooltip" + }, + { + "value": "popover", + "label": "Popover" + }, + { + "value": "card", + "label": "Card" + }, + { + "value": "carousel", + "label": "Carousel" + }, + { + "value": "collapse", + "label": "Collapse" + } + ] + } + ] + }, + { + "value": "resource", + "label": "Resource", + "children": [ + { + "value": "axure", + "label": "Axure Components" + }, + { + "value": "sketch", + "label": "Sketch Templates" + }, + { + "value": "docs", + "label": "Design Documentation" + } + ] + } + ], + "props": {}, + "modelValue": [] + } + } + }, + "ElCheckbox": { + "name": "ElCheckbox", + "label": "多选框", + "categoryId": "form", + "doc": "https://element-plus.org/zh-CN/component/checkbox.html", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "title": "选中项绑定值", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter", + "BooleanSetter" + ] + }, + { + "name": "label", + "title": "选中状态的值,只有在绑定对象类型为 array 时有效。 如果没有 value, label则作为value使用", + "defaultValue": "", + "setters": [ + "InputSetter" + ] + }, + { + "name": "value", + "title": "选中状态的值(只有在checkbox-group或者绑定对象类型为array时有效)", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter", + "BooleanSetter", + "JSONSetter" + ] + }, + { + "name": "trueValue", + "title": "选中时的值", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "falseValue", + "title": "没有选中时的值", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "disabled", + "title": "是否禁用", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "border", + "title": "是否显示边框", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "size", + "title": "Checkbox 的尺寸", + "defaultValue": "default", + "options": [ + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "name", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "checked", + "title": "当前是否勾选", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "indeterminate", + "defaultValue": false, + "title": "设置 indeterminate 状态,只负责样式控制", + "setters": "BooleanSetter" + }, + { + "name": "validateEvent", + "defaultValue": true, + "title": "输入时是否触发表单的校验", + "setters": "BooleanSetter" + }, + { + "name": "tabindex", + "label": "tabindex", + "title": "输入框的 tabindex", + "setters": [ + "StringSetter", + "NumberSetter" + ] + }, + { + "name": "id", + "label": "id", + "title": "input id", + "setters": "StringSetter" + }, + { + "name": "aria-controls", + "title": "与 aria-control一致, 当 indeterminate为 true时生效", + "setters": "BooleanSetter" + }, + { + "name": "trueLabel", + "title": "选中时的值(deprecated)", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "falseLabel", + "title": "没有选中时的值(deprecated)", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "controls(deprecated)", + "title": "与 aria-control一致, 当 indeterminate为 true时生效", + "setters": "BooleanSetter" + } + ], + "events": [ + { + "name": "change" + }, + { + "name": "update:modelValue" + } + ], + "slots": [ + "default" + ], + "snippet": { + "props": { + "label": "选项一", + "value": 1 + } + } + }, + "ElCheckboxGroup": { + "name": "ElCheckboxGroup", + "label": "多选框组", + "childIncludes": [ + "ElCheckbox", + "ElCheckboxButton" + ], + "categoryId": "form", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "title": "绑定值", + "defaultValue": [], + "setters": "JSONSetter" + }, + { + "name": "size", + "title": "多选框组尺寸", + "defaultValue": "", + "options": [ + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "disabled", + "title": "是否禁用", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "min", + "title": "可被勾选的 checkbox 的最小数量", + "defaultValue": "", + "setters": "NumberSetter" + }, + { + "name": "max", + "title": "可被勾选的 checkbox 的最大数量", + "defaultValue": "", + "setters": "NumberSetter" + }, + { + "name": "aria-label", + "title": "原生 aria-label属性", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "textColor", + "title": "当按钮为活跃状态时的字体颜色", + "defaultValue": "#ffffff", + "setters": "ColorSetter" + }, + { + "name": "fill", + "defaultValue": "#409EFF", + "title": "当按钮为活跃状态时的边框和背景颜色", + "setters": "ColorSetter" + }, + { + "name": "tag", + "defaultValue": "div", + "title": "复选框组元素标签", + "setters": "StringSetter" + }, + { + "name": "validateEvent", + "defaultValue": true, + "title": "输入时是否触发表单的校验", + "setters": "BooleanSetter" + }, + { + "name": "label", + "title": "原生 aria-label属性", + "defaultValue": "", + "setters": "StringSetter" + } + ], + "events": [ + "change", + "update:modelValue" + ], + "slots": [ + "default" + ], + "snippet": { + "children": [ + { + "name": "ElCheckbox", + "props": { + "label": "选项一", + "value": "1" + } + }, + { + "name": "ElCheckbox", + "props": { + "label": "选项二", + "value": "2" + } + }, + { + "name": "ElCheckbox", + "props": { + "label": "选项三", + "value": "3" + } + } + ] + } + }, + "ElCheckboxButton": { + "name": "ElCheckboxButton", + "label": "按钮样式的多选组合", + "categoryId": "form", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "title": "选中状态的值,只有在绑定对象类型为 array 时有效。", + "defaultValue": [], + "setters": [ + "StringSetter", + "NumberSetter", + "BooleanSetter", + "JSONSetter" + ] + }, + { + "name": "label", + "title": "选中状态的值,只有在绑定对象类型为 array 时有效。 如果没有 value, label则作为value使用", + "defaultValue": "", + "setters": [ + "StringSetter", + "NumberSetter", + "BooleanSetter", + "JSONSetter" + ] + }, + { + "name": "trueValue", + "title": "选中时的值", + "defaultValue": "", + "setters": [ + "StringSetter", + "NumberSetter" + ] + }, + { + "name": "falseValue", + "title": "没有选中时的值", + "defaultValue": "", + "setters": [ + "StringSetter", + "NumberSetter" + ] + }, + { + "name": "disabled", + "title": "是否禁用", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "name", + "title": "原生 name 属性", + "defaultValue": "", + "setters": "StringSetter" + }, + { + "name": "checked", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "trueLabel", + "title": "选中时的值", + "defaultValue": "", + "setters": [ + "StringSetter", + "NumberSetter" + ] + }, + { + "name": "falseLabel", + "title": "没有选中时的值", + "defaultValue": "", + "setters": [ + "StringSetter", + "NumberSetter" + ] + } + ], + "slots": [ + "default" + ], + "snippet": { + "props": { + "label": "按钮选项" + } + } + }, + "ElCollapse": { + "name": "ElCollapse", + "label": "折叠面板", + "categoryId": "data", + "doc": "https://element-plus.org/zh-CN/component/collapse.html", + "childIncludes": [ + "ElCollapseItem" + ], + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "defaultValue": "", + "title": "当前激活的面板(如果是手风琴模式,绑定值类型需要为string,否则为array)", + "setters": [ + "InputSetter", + "ArraySetter", + "JSONSetter" + ] + }, + { + "name": "accordion", + "defaultValue": false, + "title": "是否手风琴模式", + "setters": "BooleanSetter" + } + ], + "events": [ + "change" + ], + "slots": [ + "default" + ], + "snippet": { + "children": [ + { + "name": "ElCollapseItem", + "children": "面板内容", + "props": { + "title": "面板标题" + }, + "directives": [ + { + "name": "vFor", + "value": { + "type": "JSExpression", + "value": "3" + } + } + ] + } + ] + } + }, + "ElCollapseItem": { + "name": "ElCollapseItem", + "label": "折叠面板子项", + "categoryId": "data", + "package": "element-plus", + "props": [ + { + "name": "name", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "title", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "icon", + "defaultValue": "ArrowRight", + "setters": "StringSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + } + ], + "events": [ + "change" + ], + "slots": [ + { + "name": "default" + }, + { + "name": "title" + }, + { + "name": "icon" + } + ], + "snippet": { + "children": "面板内容", + "props": { + "title": "面板标题" + } + } + }, + "ElColorPicker": { + "name": "ElColorPicker", + "label": "取色器", + "categoryId": "form", + "childIncludes": false, + "doc": "https://element-plus.org/zh-CN/component/color-picker.html", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "title": "选中项绑定值", + "defaultValue": "", + "setters": "StringSetter" + }, + { + "name": "disabled", + "title": "是否禁用", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "size", + "defaultValue": "", + "options": [ + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "showAlpha", + "title": "是否支持透明度选择", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "colorFormat", + "title": "写入 v-model 的颜色的格式", + "defaultValue": "", + "options": [ + "hsl", + "hsv", + "hex", + "rgb" + ], + "setters": "SelectSetter" + }, + { + "name": "popperClass", + "title": "ColorPicker 下拉框的类名", + "defaultValue": "", + "setters": "StringSetter" + }, + { + "name": "predefine", + "title": "预定义颜色", + "defaultValue": "", + "setters": "JSONSetter" + }, + { + "name": "validateEvent", + "title": "输入时是否触发表单的校验", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "tabindex", + "label": "tabindex", + "title": "ColorPicker 的 tabindex", + "setters": [ + "StringSetter", + "NumberSetter" + ], + "defaultValue": 0 + }, + { + "name": "aria-label", + "title": "ColorPicker 的 aria-label", + "setters": "StringSetter" + }, + { + "name": "id", + "title": "ColorPicker 的 id", + "setters": "StringSetter" + }, + { + "name": "teleported", + "title": "是否将 popover 的下拉列表渲染至 body 下", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "label", + "title": "ColorPicker 的 aria-label(deprecated)", + "setters": "StringSetter" + } + ], + "events": [ + { + "name": "change" + }, + { + "name": "active-change" + }, + { + "name": "update:modelValue" + }, + { + "name": "focus" + }, + { + "name": "blur" + } + ] + }, + "ElConfigProvider": { + "name": "ElConfigProvider", + "label": "全局配置", + "categoryId": "other", + "doc": "https://element-plus.org/zh-CN/component/config-provider.html", + "props": [ + { + "name": "locale", + "label": "locale", + "title": "翻译文本对象", + "setters": "ObjectSetter" + }, + { + "name": "size", + "label": "size", + "title": "全局组件大小", + "setters": "SelectSetter", + "options": [ + "large", + "default", + "small" + ], + "defaultValue": "default" + }, + { + "name": "zIndex", + "label": "zIndex", + "title": "全局初始化 zIndex 的值", + "setters": "NumberSetter" + }, + { + "name": "namespace", + "label": "namespace", + "title": "全局组件类名称前缀", + "setters": "StringSetter", + "defaultValue": "el" + }, + { + "name": "button", + "label": "button", + "title": "按钮相关配置", + "setters": "ObjectSetter", + "defaultValue": { + "autoInsertSpace": false + } + }, + { + "name": "message", + "label": "message", + "title": "消息相关配置", + "setters": "ObjectSetter" + }, + { + "name": "experimentalFeatures", + "label": "experimentalFeatures", + "title": "将要添加的实验阶段的功能,所有功能都是默认设置为 false", + "setters": "ObjectSetter" + } + ], + "slots": [ + "default" + ], + "package": "element-plus" + }, + "ElContainer": { + "name": "ElContainer", + "label": "布局容器", + "categoryId": "layout", + "doc": "https://element-plus.org/zh-CN/component/container.html", + "package": "element-plus", + "props": [ + { + "name": "direction", + "defaultValue": "", + "setters": "SelectSetter", + "options": [ + "horizontal", + "vertical" + ] + } + ], + "slots": [ + "default" + ], + "snippet": { + "props": { + "style": { + "width": "100%", + "height": "100%" + } + } + } + }, + "ElHeader": { + "name": "ElHeader", + "parentIncludes": [ + "ElContainer" + ], + "label": "顶栏容器", + "categoryId": "layout", + "package": "element-plus", + "props": [ + { + "name": "height", + "defaultValue": "60px", + "setters": [ + "InputSetter" + ] + } + ] + }, + "ElAside": { + "name": "ElAside", + "parentIncludes": [ + "ElContainer" + ], + "label": "侧边栏容器", + "categoryId": "layout", + "package": "element-plus", + "props": [ + { + "name": "width", + "defaultValue": "300px", + "setters": [ + "InputSetter" + ] + } + ], + "slots": [ + "default" + ] + }, + "ElMain": { + "name": "ElMain", + "parentIncludes": [ + "ElContainer" + ], + "label": "主要区域容器", + "categoryId": "layout", + "package": "element-plus" + }, + "ElFooter": { + "name": "ElFooter", + "parentIncludes": [ + "ElContainer" + ], + "label": "底栏容器", + "categoryId": "layout", + "package": "element-plus", + "props": [ + { + "name": "height", + "defaultValue": "60px", + "setters": [ + "InputSetter" + ] + } + ], + "slots": [ + "default" + ] + }, + "ElDatePicker": { + "name": "ElDatePicker", + "label": "日期选择器", + "categoryId": "form", + "doc": "https://element-plus.org/zh-CN/component/date-picker.html", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "title": "绑定值,如果它是数组,长度应该是 2", + "defaultValue": "", + "setters": [ + "NumberSetter", + "StringSetter", + "ArraySetter", + "ExpressionSetter" + ] + }, + { + "name": "readonly", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "size", + "defaultValue": "default", + "options": [ + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "editable", + "title": "文本框可输入", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "clearable", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "placeholder", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "startPlaceholder", + "defaultValue": "", + "title": "范围选择时开始日期的占位内容", + "setters": "InputSetter" + }, + { + "name": "endPlaceholder", + "defaultValue": "", + "title": "范围选择时结束日期的占位内容", + "setters": "InputSetter" + }, + { + "name": "type", + "defaultValue": "date", + "title": "显示类型", + "options": [ + "year", + "years", + "month", + "months", + "date", + "dates", + "datetime", + "week", + "datetimerange", + "daterange", + "monthrange", + "yearrange" + ], + "setters": "SelectSetter" + }, + { + "name": "format", + "title": "显示在输入框中的格式", + "defaultValue": "YYYY-MM-DD", + "setters": "InputSetter" + }, + { + "name": "popperClass", + "title": "DatePicker 下拉框的类名", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "popper-options", + "title": "自定义 popper 选项", + "defaultValue": "", + "setters": [ + "ObjectSetter", + "JSONSetter" + ] + }, + { + "name": "rangeSeparator", + "defaultValue": "-", + "title": "选择范围时的分隔符", + "setters": "InputSetter" + }, + { + "name": "defaultValue", + "title": "可选,选择器打开时默认显示的时间", + "defaultValue": "", + "setters": "ExpressionSetter" + }, + { + "name": "defaultTime", + "title": "范围选择时选中日期所使用的当日内具体时刻", + "defaultValue": "", + "setters": "ExpressionSetter" + }, + { + "name": "valueFormat", + "title": "可选,绑定值的格式。 不指定则绑定值为 Date 对象", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "id", + "defaultValue": "", + "setters": [ + "InputSetter" + ] + }, + { + "name": "name", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "unlinkPanels", + "title": "在范围选择器里取消两个日期面板之间的联动", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "prefixIcon", + "defaultValue": "Date", + "title": "自定义前缀图标", + "setters": "InputSetter" + }, + { + "name": "clearIcon", + "defaultValue": "CircleClose", + "title": "自定义清除图标", + "setters": "InputSetter" + }, + { + "name": "validateEvent", + "defaultValue": true, + "title": "输入时是否触发表单的校验", + "setters": "BooleanSetter" + }, + { + "name": "disabledDate", + "title": "一个用来判断该日期是否被禁用的函数,接受一个 Date 对象作为参数。 应该返回一个 Boolean 值。", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "shortcuts", + "defaultValue": "", + "title": "设置快捷选项,需要传入数组对象", + "setters": "JSONSetter" + }, + { + "name": "cellClassName", + "defaultValue": "", + "title": "设置自定义类名", + "setters": "FunctionSetter" + }, + { + "name": "teleported", + "defaultValue": true, + "title": "是否将 date-picker 的下拉列表插入至 body 元素", + "setters": "BooleanSetter" + }, + { + "name": "empty-values", + "title": "组件的空值配置", + "setters": "ArraySetter" + }, + { + "name": "value-on-clear", + "title": "清空选项的值", + "setters": [ + "StringSetter", + "NumberSetter", + "BooleanSetter", + "FunctionSetter" + ] + }, + { + "name": "fallback-placements", + "title": "Tooltip 可用的 positions", + "setters": "ArraySetter" + }, + { + "name": "placement", + "title": "下拉框出现的位置", + "defaultValue": "bottom", + "setters": "SelectSetter", + "options": [ + "top", + "top-start", + "top-end", + "bottom", + "bottom-start", + "bottom-end", + "left", + "left-start", + "left-end", + "right", + "right-start", + "right-end" + ] + } + ], + "events": [ + { + "name": "change" + }, + { + "name": "blur" + }, + { + "name": "focus" + }, + { + "name": "clear" + }, + { + "name": "calendar-change" + }, + { + "name": "panel-change" + }, + { + "name": "visible-change" + }, + { + "name": "update:modelValue" + } + ], + "slots": [ + { + "name": "default" + }, + { + "name": "range-separator" + }, + { + "name": "prev-month" + }, + { + "name": "next-month" + }, + { + "name": "prev-year" + }, + { + "name": "next-year" + } + ] + }, + "ElDateTimePicker": { + "name": "ElDateTimePicker", + "label": "日期时间选择器", + "alias": "ElDatePicker", + "categoryId": "form", + "doc": "https://element-plus.org/zh-CN/component/datetime-picker.html", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "defaultValue": "", + "setters": [ + "NumberSetter", + "StringSetter", + "ExpressionSetter" + ] + }, + { + "name": "readonly", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "editable", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "clearable", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "size", + "defaultValue": "default", + "options": [ + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "placeholder", + "defaultValue": "", + "setters": "StringSetter" + }, + { + "name": "startPlaceholder", + "defaultValue": "", + "title": "范围选择时开始日期的占位内容", + "setters": "StringSetter" + }, + { + "name": "endPlaceholder", + "defaultValue": "", + "title": "范围选择时结束日期的占位内容", + "setters": "InputSetter" + }, + { + "name": "arrowControl", + "title": "是否使用箭头进行时间选择", + "setters": "BooleanSetter", + "defaultValue": false + }, + { + "name": "type", + "defaultValue": "date", + "title": "显示类型", + "options": [ + "year", + "month", + "date", + "dates", + "datetime", + "week", + "datetimerange", + "daterange", + "monthrange" + ], + "setters": "SelectSetter" + }, + { + "name": "format", + "title": "显示在输入框中的格式", + "defaultValue": "YYYY-MM-DD HH:mm:ss", + "setters": "StringSetter" + }, + { + "name": "popperClass", + "title": "DateTimePicker 下拉框的类名", + "defaultValue": "", + "setters": "StringSetter" + }, + { + "name": "rangeSeparator", + "defaultValue": "-", + "title": "选择范围时的分隔符", + "setters": "StringSetter" + }, + { + "name": "defaultValue", + "title": "可选,选择器打开时默认显示的时间", + "defaultValue": "", + "setters": "ExpressionSetter" + }, + { + "name": "defaultTime", + "title": "选择日期后的默认时间值。 如未指定则默认时间值为 00:00:00", + "defaultValue": "", + "setters": "ExpressionSetter" + }, + { + "name": "valueFormat", + "title": "可选,绑定值的格式。 不指定则绑定值为 Date 对象", + "defaultValue": "", + "setters": "StringSetter" + }, + { + "name": "dateFormat", + "defaultValue": "", + "setters": "StringSetter", + "title": "时间选择器下拉列表中显示的日期格式" + }, + { + "name": "timeFormat", + "defaultValue": "", + "setters": "StringSetter", + "title": "时间选择器下拉列表中显示的时间格式" + }, + { + "name": "id", + "defaultValue": "", + "setters": [ + "StringSetter", + "ArraySetter", + "ExpressionSetter" + ] + }, + { + "name": "name", + "defaultValue": "", + "setters": "StringSetter" + }, + { + "name": "unlinkPanels", + "title": "在范围选择器里取消两个日期面板之间的联动", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "prefixIcon", + "defaultValue": "Date", + "title": "自定义前缀图标", + "setters": "InputSetter" + }, + { + "name": "clearIcon", + "defaultValue": "CircleClose", + "title": "自定义清除图标", + "setters": "InputSetter" + }, + { + "name": "shortcuts", + "defaultValue": "", + "title": "设置快捷选项,需要传入数组对象", + "setters": "JSONSetter" + }, + { + "name": "disabledDate", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "cellClassName", + "defaultValue": "", + "title": "设置自定义类名", + "setters": "FunctionSetter" + }, + { + "name": "teleported", + "defaultValue": true, + "title": "设置自定义类名", + "setters": "BooleanSetter" + }, + { + "name": "emptyValues", + "title": "组件的空值配置", + "setters": "ArraySetter" + }, + { + "name": "valueOnClear", + "title": "清空选项的值", + "setters": [ + "StringSetter", + "NumberSetter", + "BooleanSetter", + "FunctionSetter" + ] + }, + { + "name": "showNow", + "title": "是否显示 now 按钮", + "defaultValue": true, + "setters": "BooleanSetter" + } + ], + "events": [ + { + "name": "change" + }, + { + "name": "blur" + }, + { + "name": "focus" + }, + { + "name": "clear" + }, + { + "name": "calendar-change" + }, + { + "name": "visible-change" + }, + { + "name": "update:modelValue" + } + ], + "slots": [ + { + "name": "default" + }, + { + "name": "range-separator" + }, + { + "name": "prev-month" + }, + { + "name": "next-month" + }, + { + "name": "prev-year" + }, + { + "name": "next-year" + } + ], + "snippet": { + "props": { + "type": "datetime", + "placeholder": "Select date and time" + } + } + }, + "ElDescriptions": { + "name": "ElDescriptions", + "label": "描述列表", + "categoryId": "data", + "package": "element-plus", + "doc": "https://element-plus.org/zh-CN/component/descriptions.html", + "props": [ + { + "name": "border", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "column", + "defaultValue": 3, + "setters": "NumberSetter" + }, + { + "name": "direction", + "defaultValue": "horizontal", + "options": [ + "vertical", + "horizontal" + ], + "setters": "SelectSetter" + }, + { + "name": "size", + "defaultValue": "", + "options": [ + "", + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "title", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "extra", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "labelWidth", + "defaultValue": "", + "setters": [ + "StringSetter", + "NumberSetter" + ] + } + ], + "slots": [ + "default", + "title", + "extra" + ], + "snippet": { + "props": { + "border": true + }, + "children": [ + { + "name": "ElDescriptionsItem", + "children": "kooriookami", + "props": { + "label": "Username" + } + }, + { + "name": "ElDescriptionsItem", + "children": "18100000000", + "props": { + "label": "Telephone" + } + }, + { + "name": "ElDescriptionsItem", + "children": "Suzhou", + "props": { + "label": "Place" + } + }, + { + "name": "ElDescriptionsItem", + "children": "No.1188, Wuzhong Avenue, Wuzhong District, Suzhou, Jiangs Province", + "props": { + "label": "Address" + } + } + ] + } + }, + "ElDescriptionsItem": { + "name": "ElDescriptionsItem", + "label": "描述列表子项", + "categoryId": "data", + "parentIncludes": [ + "ElDescriptions" + ], + "package": "element-plus", + "props": [ + { + "name": "label", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "span", + "defaultValue": 1, + "setters": "NumberSetter" + }, + { + "name": "rowspan", + "defaultValue": 1, + "setters": "NumberSetter" + }, + { + "name": "width", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "min-width", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "labelWidth", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "align", + "defaultValue": "left", + "options": [ + "left", + "center", + "right" + ], + "setters": "SelectSetter" + }, + { + "name": "label-align", + "defaultValue": "", + "options": [ + "left", + "center", + "right" + ], + "setters": "SelectSetter" + }, + { + "name": "class-name", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "label-class-name", + "defaultValue": "", + "label": "标题类名", + "setters": "InputSetter" + } + ], + "slots": [ + "default", + "label" + ], + "snippet": { + "children": "内容", + "props": { + "label": "标题" + } + } + }, + "ElDialog": { + "name": "ElDialog", + "label": "对话框", + "categoryId": "other", + "doc": "https://element-plus.org/zh-CN/component/dialog.html", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "title", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "width", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "fullscreen", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "top", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "modal", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "modalClass", + "label": "modalClass", + "title": "遮罩的自定义类名", + "setters": "StringSetter" + }, + { + "name": "appendToBody", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "appendTo", + "label": "appendTo", + "title": "Dialog 挂载到哪个 DOM 元素 将覆盖 append-to-body", + "setters": "StringSetter", + "defaultValue": "body" + }, + { + "name": "lockScroll", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "openDelay", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "closeDelay", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "closeOnClickModal", + "label": "点击关闭", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "closeOnPressEscape", + "label": "ESC键关闭", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "showClose", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "beforeClose", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "draggable", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "overflow", + "label": "overflow", + "title": "拖动范围可以超出可视区", + "setters": "BooleanSetter", + "defaultValue": false + }, + { + "name": "center", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "alignCenter", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "destroyOnClose", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "closeIcon", + "label": "closeIcon", + "title": "自定义关闭图标", + "setters": [ + "StringSetter", + "IconSetter" + ] + }, + { + "name": "z-index", + "label": "z-index", + "title": "和原生的 CSS 的 z-index 相同,改变 z 轴的顺序", + "setters": "NumberSetter" + }, + { + "name": "headerAriaLevel", + "label": "headerAriaLevel", + "title": "header 的 aria-level 属性", + "setters": "StringSetter", + "defaultValue": 2 + }, + { + "name": "customClass", + "defaultValue": "", + "setters": "InputSetter" + } + ], + "events": [ + { + "name": "open" + }, + { + "name": "opened" + }, + { + "name": "close" + }, + { + "name": "closed" + }, + { + "name": "open-auto-focus" + }, + { + "name": "close-auto-focus" + }, + { + "name": "update:modelValue" + } + ], + "slots": [ + { + "name": "default" + }, + { + "name": "header" + }, + { + "name": "footer" + }, + { + "name": "title" + } + ], + "snippet": { + "name": "ElDialog", + "children": "对话框弹窗内容", + "props": { + "title": "标题", + "modelValue": true + } + } + }, + "ElDivider": { + "name": "ElDivider", + "label": "分割线", + "categoryId": "other", + "doc": "https://element-plus.org/zh-CN/component/divider.html", + "package": "element-plus", + "props": [ + { + "name": "direction", + "defaultValue": "horizontal", + "setters": "SelectSetter", + "options": [ + "horizontal", + "vertical" + ] + }, + { + "name": "borderStyle", + "defaultValue": "solid", + "setters": "InputSetter" + }, + { + "name": "contentPosition", + "defaultValue": "center", + "setters": "SelectSetter", + "options": [ + "left", + "right", + "center" + ] + } + ], + "slots": [ + "default" + ], + "snippet": { + "name": "ElDivider", + "children": "分割线" + } + }, + "ElDrawer": { + "name": "ElDrawer", + "label": "抽屉", + "categoryId": "other", + "doc": "https://element-plus.org/zh-CN/component/drawer.html", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "appendToBody", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "appendTo", + "defaultValue": "body", + "setters": "StringSetter" + }, + { + "name": "lockScroll", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "beforeClose", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "closeOnClickModal", + "label": "点击蒙层关闭", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "closOonPressEscape", + "label": "ESC键关闭", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "openDelay", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "closeDelay", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "destroyOnClose", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "modal", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "direction", + "defaultValue": "rtl", + "setters": "SelectSetter", + "options": [ + "rtl", + "ltr", + "ttb", + "btt" + ] + }, + { + "name": "showClose", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "size", + "defaultValue": "30%", + "title": "Drawer 窗体的大小, 当使用 number 类型时, 以像素为单位, 当使用 string 类型时, 请传入 x%, 否则便会以 number 类型解释", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "title", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "withHeader", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "modalClass", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "zIndex", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "headerAriaLevel", + "label": "headerAriaLevel", + "title": "header 的 aria-level 属性", + "setters": "StringSetter", + "defaultValue": 2 + }, + { + "name": "customClass", + "defaultValue": "", + "setters": "InputSetter" + } + ], + "events": [ + { + "name": "open" + }, + { + "name": "opened" + }, + { + "name": "close" + }, + { + "name": "closed" + }, + { + "name": "open-auto-focus" + }, + { + "name": "close-auto-focus" + }, + { + "name": "update:modelValue" + } + ], + "slots": [ + { + "name": "default" + }, + { + "name": "header" + }, + { + "name": "footer" + }, + { + "name": "title" + } + ], + "snippet": { + "name": "ElDrawer", + "children": "抽屉内容", + "props": { + "title": "标题", + "modelValue": true + } + } + }, + "ElDropdown": { + "name": "ElDropdown", + "label": "下拉菜单", + "categoryId": "nav", + "doc": "https://element-plus.org/zh-CN/component/dropdown.html", + "package": "element-plus", + "props": [ + { + "name": "type", + "defaultValue": "", + "options": [ + "", + "default", + "primary", + "success", + "warning", + "info", + "danger", + "text" + ], + "setters": "SelectSetter" + }, + { + "name": "size", + "defaultValue": "default", + "setters": "SelectSetter", + "options": [ + "large", + "default", + "small" + ] + }, + { + "name": "maxHeight", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "splitButton", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "placement", + "defaultValue": "bottom", + "setters": "SelectSetter", + "options": [ + "top", + "top-start", + "top-end", + "bottom", + "bottom-start", + "bottom-end" + ] + }, + { + "name": "trigger", + "defaultValue": "hover", + "setters": "SelectSetter", + "options": [ + "hover", + "click", + "contextmenu" + ] + }, + { + "name": "triggerKeys", + "title": "指定键盘上哪些按键可以触发操作", + "defaultValue": [ + "Enter", + "Space", + "ArrowDown", + "NumpadEnter" + ], + "setters": "ArraySetter" + }, + { + "name": "hideOnClick", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "showTimeout", + "defaultValue": 150, + "setters": "NumberSetter" + }, + { + "name": "hideTimeout", + "defaultValue": 150, + "setters": "NumberSetter" + }, + { + "name": "role", + "defaultValue": "menu", + "setters": "InputSetter" + }, + { + "name": "tabindex", + "defaultValue": 0, + "setters": [ + "NumberSetter", + "StringSetter" + ] + }, + { + "name": "popperClass", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "popperOptions", + "defaultValue": { + "modifiers": [ + { + "name": "computeStyles", + "options": { + "gpuAcceleration": false + } + } + ] + }, + "setters": "JSONSetter" + }, + { + "name": "teleported", + "label": "teleported", + "title": "是否将下拉列表插入至 body 元素", + "setters": "BooleanSetter", + "defaultValue": true + } + ], + "slots": [ + { + "name": "default" + }, + { + "name": "dropdown" + } + ], + "events": [ + { + "name": "click" + }, + { + "name": "command" + }, + { + "name": "visible-change" + } + ], + "snippet": { + "name": "ElDropdown", + "children": [ + { + "name": "ElButton", + "children": [ + { + "name": "component", + "props": { + "is": "span" + }, + "children": "下拉菜单" + }, + { + "name": "component", + "props": { + "is": "span" + }, + "children": " V" + } + ] + }, + { + "name": "ElDropdownMenu", + "slot": "dropdown", + "children": [ + { + "name": "ElDropdownItem", + "children": "Action 1" + }, + { + "name": "ElDropdownItem", + "children": "Action 2" + }, + { + "name": "ElDropdownItem", + "children": "Action 3" + } + ] + } + ] + } + }, + "ElDropdownMenu": { + "name": "ElDropdownMenu", + "label": "下拉菜单Menu", + "categoryId": "nav", + "package": "element-plus", + "slots": [ + "default" + ] + }, + "ElDropdownItem": { + "name": "ElDropdownItem", + "childIncludes": true, + "label": "下拉菜单项", + "categoryId": "nav", + "package": "element-plus", + "props": [ + { + "name": "command", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter", + "JSONSetter" + ] + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "divided", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "icon", + "defaultValue": "", + "setters": [ + "InputSetter" + ] + } + ], + "slots": [ + "default", + "icon" + ], + "snippet": { + "name": "ElDropdownItem", + "children": "下拉选项" + } + }, + "ElEmpty": { + "name": "ElEmpty", + "label": "空状态", + "doc": "https://element-plus.org/zh-CN/component/empty.html", + "categoryId": "data", + "package": "element-plus", + "props": [ + { + "name": "image", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "imageSize", + "defaultValue": "", + "setters": "NumberSetter" + }, + { + "name": "description", + "defaultValue": "", + "setters": "InputSetter" + } + ], + "slots": [ + { + "name": "default" + }, + { + "name": "image" + }, + { + "name": "description" + } + ] + }, + "ElForm": { + "name": "ElForm", + "label": "表单", + "categoryId": "form", + "doc": "https://element-plus.org/zh-CN/component/form.html", + "package": "element-plus", + "props": [ + { + "name": "model", + "title": "表单数据对象", + "defaultValue": "", + "setters": "ExpressionSetter" + }, + { + "name": "rules", + "defaultValue": "", + "setters": "ExpressionSetter" + }, + { + "name": "inline", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "labelPosition", + "defaultValue": "right", + "options": [ + "left", + "right", + "top" + ], + "setters": "SelectSetter" + }, + { + "name": "labelWidth", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "labelSuffix", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "hideRequiredAsterisk", + "defaultValue": false, + "title": "是否显示必填字段的标签旁边的红色星号", + "setters": "BooleanSetter" + }, + { + "name": "requireAsteriskPosition", + "defaultValue": "left", + "title": "星号的位置", + "options": [ + "left", + "right" + ], + "setters": "SelectSetter" + }, + { + "name": "showMessage", + "defaultValue": true, + "title": "是否显示校验错误信息", + "setters": "BooleanSetter" + }, + { + "name": "inlineMessage", + "defaultValue": false, + "title": "是否以行内形式展示校验信息", + "setters": "BooleanSetter" + }, + { + "name": "statusIcon", + "defaultValue": false, + "title": "是否在输入框中显示校验结果反馈图标", + "setters": "BooleanSetter" + }, + { + "name": "validateOnRuleChange", + "defaultValue": true, + "title": "是否在 rules 属性改变后立即触发一次验证", + "setters": "BooleanSetter" + }, + { + "name": "size", + "defaultValue": "", + "options": [ + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "scrollToError", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "scrollIntoViewOptions", + "defaultValue": "", + "setters": [ + "ExpressionSetter", + "BooleanSetter" + ] + } + ], + "events": [ + { + "name": "validate" + } + ], + "slots": [ + "default" + ], + "snippet": { + "name": "ElForm", + "props": { + "labelWidth": "80px" + }, + "children": [ + { + "name": "ElFormItem", + "props": { + "label": "表单项" + }, + "children": [ + { + "name": "ElInput" + } + ] + }, + { + "name": "ElFormItem", + "props": { + "label": " " + }, + "children": [ + { + "name": "ElButton", + "props": { + "type": "primary" + }, + "children": "确定" + } + ] + } + ] + } + }, + "ElFormItem": { + "name": "ElFormItem", + "label": "表单项", + "categoryId": "form", + "package": "element-plus", + "props": [ + { + "name": "prop", + "defaultValue": "", + "setters": [ + "InputSetter", + "ArraySetter" + ] + }, + { + "name": "label", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "labelPosition", + "defaultValue": "", + "setters": "SelectSetter", + "options": [ + "left", + "right", + "top" + ] + }, + { + "name": "labelWidth", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "required", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "rules", + "defaultValue": "", + "setters": "JSONSetter" + }, + { + "name": "error", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "showMessage", + "defaultValue": true, + "title": "是否显示校验错误信息", + "label": "错误信息", + "setters": "BooleanSetter" + }, + { + "name": "inlineMessage", + "defaultValue": false, + "title": "是否在行内显示校验信息", + "label": "校验信息", + "setters": "BooleanSetter" + }, + { + "name": "size", + "defaultValue": "default", + "options": [ + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "for", + "defaultValue": "", + "setters": "StringSetter" + }, + { + "name": "validateStatus", + "title": "formitem 校验的状态", + "options": [ + "", + "error", + "validating", + "success" + ], + "setters": "SelectSetter" + } + ], + "slots": [ + "default", + "label", + "error" + ], + "snippet": { + "props": { + "label": "表单项" + }, + "children": [ + { + "name": "ElInput" + } + ] + } + }, + "ElImage": { + "name": "ElImage", + "label": "图片", + "categoryId": "data", + "doc": "https://element-plus.org/zh-CN/component/image.html", + "package": "element-plus", + "props": [ + { + "name": "src", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "fit", + "defaultValue": "", + "options": [ + "", + "fill", + "contain", + "cover", + "none", + "scale-down" + ], + "setters": "SelectSetter" + }, + { + "name": "hideOnClickModal", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "loading", + "defaultValue": "", + "options": [ + "eager", + "lazy" + ], + "setters": "SelectSetter" + }, + { + "name": "lazy", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "scrollContainer", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "alt", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "referrerPolicy", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "crossorigin", + "label": "crossorigin", + "title": "原生属性 crossorigin", + "setters": "SelectSetter", + "options": [ + "", + "anonymous", + "use-credentials" + ] + }, + { + "name": "previewSrcList", + "defaultValue": "", + "setters": [ + "ArraySetter", + "JSONSetter" + ] + }, + { + "name": "zIndex", + "defaultValue": "", + "setters": "NumberSetter" + }, + { + "name": "initialIndex", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "close-on-press-escape", + "label": "close-on-press-escape", + "defaultValue": true, + "title": "是否可以通过按下 ESC 关闭 Image Viewer", + "setters": "BooleanSetter" + }, + { + "name": "previewTeleported", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "infinite", + "defaultValue": true, + "setters": "BooleanSetter", + "title": "是否可以无限循环预览" + }, + { + "name": "zoomRate", + "defaultValue": 1.2, + "setters": { + "name": "NumberSetter", + "props": { + "precision": 1 + } + }, + "title": "图像查看器缩放事件的缩放速率" + }, + { + "name": "minScale", + "defaultValue": 0.2, + "setters": { + "name": "NumberSetter", + "props": { + "precision": 1 + } + }, + "title": "图像查看器缩放事件的最小缩放比例" + }, + { + "name": "maxScale", + "defaultValue": 7, + "setters": { + "name": "NumberSetter", + "props": { + "precision": 1 + } + }, + "title": "图像查看器缩放事件的最大缩放比例" + } + ], + "events": [ + "load", + "error", + "switch", + "close", + "show" + ], + "slots": [ + "placeholder", + "error", + "viewer" + ], + "snippet": { + "props": { + "style": { + "width": "100px", + "height": "100px" + }, + "src": "https://fuss10.elemecdn.com/a/3f/3302e58f9a181d2509f3dc0fa68b0jpeg.jpeg", + "previewSrcList": [ + "https://fuss10.elemecdn.com/a/3f/3302e58f9a181d2509f3dc0fa68b0jpeg.jpeg", + "https://fuss10.elemecdn.com/1/34/19aa98b1fcb2781c4fba33d850549jpeg.jpeg", + "https://fuss10.elemecdn.com/0/6f/e35ff375812e6b0020b6b4e8f9583jpeg.jpeg", + "https://fuss10.elemecdn.com/9/bb/e27858e973f5d7d3904835f46abbdjpeg.jpeg", + "https://fuss10.elemecdn.com/d/e6/c4d93a3805b3ce3f323f7974e6f78jpeg.jpeg", + "https://fuss10.elemecdn.com/3/28/bbf893f792f03a54408b3b7a7ebf0jpeg.jpeg", + "https://fuss10.elemecdn.com/2/11/6535bcfb26e4c79b48ddde44f4b6fjpeg.jpeg" + ] + } + } + }, + "ElInput": { + "name": "ElInput", + "label": "输入框", + "categoryId": "form", + "doc": "https://element-plus.org/zh-CN/component/input.html", + "props": [ + { + "name": "type", + "defaultValue": "text", + "options": [ + "text", + "textarea" + ], + "setters": [ + "SelectSetter", + "InputSetter" + ] + }, + { + "name": "modelValue", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "maxlength", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "minlength", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "showWordLimit", + "defaultValue": false, + "title": "是否显示输入字数统计,只在 type = \"text\" 或 type = \"textarea\" 时有效", + "label": "字数统计", + "setters": "BooleanSetter" + }, + { + "name": "placeholder", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "clearable", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "formatter", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "parser", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "showPassword", + "defaultValue": false, + "title": "是否显示切换密码图标", + "label": "密码图标", + "setters": "BooleanSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "size", + "defaultValue": "default", + "setters": "SelectSetter", + "options": [ + "default", + "large", + "small" + ] + }, + { + "name": "prefix-icon", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "suffix-icon", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "rows", + "defaultValue": 2, + "setters": "NumberSetter" + }, + { + "name": "autosize", + "defaultValue": false, + "setters": [ + "BooleanSetter", + "JSONStter" + ] + }, + { + "name": "autocomplete", + "defaultValue": "off", + "setters": "InputSetter" + }, + { + "name": "name", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "readonly", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "max", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "min", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "step", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "resize", + "defaultValue": "", + "options": [ + "none", + "both", + "horizontal", + "vertical" + ], + "setters": "InputSetter" + }, + { + "name": "autofocus", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "form", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "aria-label", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "tabindex", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "validateEvent", + "defaultValue": true, + "title": "输入时是否触发表单的校验", + "label": "表单校验", + "setters": "BooleanSetter" + }, + { + "name": "inputStyle", + "defaultValue": {}, + "setters": [ + "JSONSetter" + ] + } + ], + "events": [ + { + "name": "blur" + }, + { + "name": "focus" + }, + { + "name": "change" + }, + { + "name": "input" + }, + { + "name": "clear" + }, + { + "name": "update:modelValue" + } + ], + "slots": [ + "prefix", + "suffix", + "prepend", + "append" + ], + "package": "element-plus" + }, + "ElInputNumber": { + "name": "ElInputNumber", + "label": "数字输入框", + "categoryId": "form", + "doc": "https://element-plus.org/zh-CN/component/input-number.html", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "defaultValue": "", + "setters": "NumberSetter" + }, + { + "name": "min", + "defaultValue": null, + "setters": "NumberSetter" + }, + { + "name": "max", + "defaultValue": null, + "setters": "NumberSetter" + }, + { + "name": "step", + "defaultValue": 1, + "setters": "NumberSetter" + }, + { + "name": "stepStrictly", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "precision", + "defaultValue": "", + "setters": "NumberSetter" + }, + { + "name": "size", + "defaultValue": "default", + "options": [ + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "readonly", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "controls", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "controlsPosition", + "defaultValue": "", + "title": "控制按钮位置", + "label": "按钮位置", + "options": [ + "", + "right" + ], + "setters": "SelectSetter" + }, + { + "name": "name", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "ariaLabel", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "placeholder", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "valueOnClear", + "defaultValue": "", + "options": [ + "min", + "max" + ], + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "validateEvent", + "defaultValue": true, + "setters": "BooleanSetter" + } + ], + "slots": [ + { + "name": "decrease-icon" + }, + { + "name": "increase-icon" + }, + { + "name": "prefix" + }, + { + "name": "suffix" + } + ], + "events": [ + { + "name": "change" + }, + { + "name": "blur" + }, + { + "name": "focus" + }, + { + "name": "update:modelValue" + } + ] + }, + "ElInputTag": { + "name": "ElInputTag", + "label": "标签输入框", + "categoryId": "form", + "doc": "https://element-plus.org/zh-CN/component/input-tag.html", + "props": [ + { + "name": "modelValue", + "setters": "ArraySetter" + }, + { + "name": "max", + "title": "可添加标签的最大数量", + "setters": "NumberSetter" + }, + { + "name": "tagType", + "title": "标签类型", + "defaultValue": "info", + "setters": "SelectSetter", + "options": [ + "primary", + "success", + "info", + "warning", + "danger" + ] + }, + { + "name": "tagEffect", + "title": "标签效果", + "defaultValue": "light", + "setters": "SelectSetter", + "options": [ + "light", + "dark", + "plain" + ] + }, + { + "name": "trigger", + "title": "触发输入标签的按键", + "defaultValue": "Enter", + "setters": "SelectSetter", + "options": [ + "Enter", + "Space" + ] + }, + { + "name": "draggable", + "title": "是否可以拖动标签", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "size", + "setters": "SelectSetter", + "defaultValue": "default", + "options": [ + "large", + "default", + "small" + ] + }, + { + "name": "clearable", + "title": "是否显示清除按钮", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "disabled", + "title": "是否禁用", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "validateEvent", + "title": "是否触发表单验证", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "readonly", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "autofocus", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "id", + "setters": "StringSetter" + }, + { + "name": "tabindex", + "setters": [ + "StringSetter", + "NumberSetter" + ] + }, + { + "name": "maxlength", + "setters": [ + "StringSetter", + "NumberSetter" + ] + }, + { + "name": "minlength", + "setters": [ + "StringSetter", + "NumberSetter" + ] + }, + { + "name": "placeholder", + "setters": "StringSetter" + }, + { + "name": "autocomplete", + "defaultValue": "off", + "setters": "StringSetter" + }, + { + "name": "ariaLabel", + "setters": "StringSetter" + } + ], + "events": [ + { + "name": "change" + }, + { + "name": "input" + }, + { + "name": "add-tag" + }, + { + "name": "remove-tag" + }, + { + "name": "focus" + }, + { + "name": "blur" + }, + { + "name": "clear" + }, + { + "name": "update:modelValue" + } + ], + "slots": [ + { + "name": "tag" + }, + { + "name": "prefix" + }, + { + "name": "suffix" + } + ], + "snippet": { + "props": { + "modelValue": [ + "1", + "2" + ] + } + }, + "package": "element-plus" + }, + "ElMention": { + "name": "ElMention", + "label": "提及", + "categoryId": "form", + "doc": "https://element-plus.org/zh-CN/component/mention.html#api", + "props": [ + { + "name": "options", + "title": "提及选项列表", + "defaultValue": [], + "setters": "ArraySetter" + }, + { + "name": "prefix", + "title": "触发字段的前缀。 字符串长度必须且只能为 1", + "defaultValue": "@", + "setters": [ + "StringSetter", + "ArraySetter" + ] + }, + { + "name": "split", + "title": "用于拆分提及的字符。 字符串长度必须且只能为 1\t", + "defaultValue": " ", + "setters": "StringSetter" + }, + { + "name": "filterOption", + "title": "定制筛选器选项逻辑", + "setters": [ + "BooleanSetter", + "FunctionSetter" + ] + }, + { + "name": "placement", + "title": "设置弹出位置", + "defaultValue": "bottom", + "options": [ + "top", + "bottom" + ], + "setters": "SelectSetter" + }, + { + "name": "showArrow", + "title": "下拉菜单的内容是否有箭头", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "offset", + "title": "下拉面板偏移量", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "whole", + "title": "当退格键被按下做删除操作时,是否将提及部分作为整体删除", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "checkIsWhole", + "title": "当退格键被按下做删除操作时,检查是否将提及部分作为整体删除", + "setters": "FunctionSetter" + }, + { + "name": "loading", + "title": "提及的下拉面板是否处于加载状态", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "modelValue", + "title": "输入值", + "setters": "StringSetter" + }, + { + "name": "popperClass", + "title": "自定义浮层类名", + "setters": "StringSetter" + }, + { + "name": "popperOptions", + "title": "参数", + "setters": [ + "ObjectSetter", + "JSONSetter" + ] + }, + { + "name": "type", + "defaultValue": "text", + "options": [ + "text", + "textarea" + ], + "setters": [ + "SelectSetter", + "InputSetter" + ] + }, + { + "name": "maxlength", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "minlength", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "showWordLimit", + "defaultValue": false, + "title": "是否显示输入字数统计,只在 type = \"text\" 或 type = \"textarea\" 时有效", + "label": "字数统计", + "setters": "BooleanSetter" + }, + { + "name": "placeholder", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "clearable", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "formatter", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "parser", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "showPassword", + "defaultValue": false, + "title": "是否显示切换密码图标", + "label": "密码图标", + "setters": "BooleanSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "size", + "defaultValue": "default", + "setters": "SelectSetter", + "options": [ + "default", + "large", + "small" + ] + }, + { + "name": "prefix-icon", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "suffix-icon", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "rows", + "defaultValue": 2, + "setters": "NumberSetter" + }, + { + "name": "autosize", + "defaultValue": false, + "setters": [ + "BooleanSetter", + "JSONStter" + ] + }, + { + "name": "autocomplete", + "defaultValue": "off", + "setters": "InputSetter" + }, + { + "name": "name", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "readonly", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "max", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "min", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "step", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "resize", + "defaultValue": "", + "options": [ + "none", + "both", + "horizontal", + "vertical" + ], + "setters": "InputSetter" + }, + { + "name": "autofocus", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "form", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "aria-label", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "tabindex", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "validateEvent", + "defaultValue": true, + "title": "输入时是否触发表单的校验", + "label": "表单校验", + "setters": "BooleanSetter" + }, + { + "name": "inputStyle", + "defaultValue": {}, + "setters": [ + "JSONSetter" + ] + } + ], + "events": [ + { + "name": "update:modelValue" + }, + { + "name": "search" + }, + { + "name": "select" + }, + { + "name": "input" + }, + { + "name": "blur" + }, + { + "name": "focus" + }, + { + "name": "change" + }, + { + "name": "clear" + } + ], + "slots": [ + "label", + "loading", + "header", + "footer", + "prefix", + "suffix", + "prepend", + "append" + ], + "snippet": { + "props": { + "options": [ + { + "label": "Fuphoenixes", + "value": "Fuphoenixes" + }, + { + "label": "kooriookami", + "value": "kooriookami" + }, + { + "label": "Jeremy", + "value": "Jeremy" + }, + { + "label": "btea", + "value": "btea" + } + ], + "modelValue": "@" + } + }, + "package": "element-plus" + }, + "ElRow": { + "name": "ElRow", + "label": "布局行", + "categoryId": "layout", + "doc": "https://element-plus.org/zh-CN/component/layout.html", + "package": "element-plus", + "props": [ + { + "name": "gutter", + "defaultValue": 0, + "label": "栅格间隔", + "setters": "NumberSetter" + }, + { + "name": "justify", + "defaultValue": "start", + "title": "flex 布局下的水平排列方式", + "options": [ + "start", + "end", + "center", + "space-around", + "space-between", + "space-evenly" + ], + "setters": "SelectSetter" + }, + { + "name": "align", + "defaultValue": "top", + "title": "flex 布局下的垂直排列方式", + "options": [ + "top", + "middle", + "bottom" + ], + "setters": "SelectSetter" + }, + { + "name": "tag", + "defaultValue": "div", + "title": "自定义元素标签", + "setters": "InputSetter" + } + ], + "slots": [ + "default" + ], + "snippet": { + "props": { + "gutter": 10 + }, + "children": [ + { + "name": "ElCol", + "props": { + "span": 6 + }, + "children": [ + { + "name": "component", + "props": { + "is": "div", + "style": { + "height": "50px", + "background": "#ecf5ff" + } + } + } + ], + "directives": [ + { + "name": "vFor", + "value": { + "type": "JSExpression", + "value": "4" + } + } + ] + } + ] + } + }, + "ElCol": { + "name": "ElCol", + "label": "布局列", + "categoryId": "layout", + "package": "element-plus", + "parentIncludes": [ + "ElRow" + ], + "props": [ + { + "name": "span", + "defaultValue": 24, + "setters": "NumberSetter" + }, + { + "name": "offset", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "push", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "pull", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "xs", + "setters": [ + "JSONSetter", + "NumberSetter" + ] + }, + { + "name": "sm", + "setters": [ + "JSONSetter", + "NumberSetter" + ] + }, + { + "name": "md", + "setters": [ + "JSONSetter", + "NumberSetter" + ] + }, + { + "name": "lg", + "setters": [ + "JSONSetter", + "NumberSetter" + ] + }, + { + "name": "xl", + "setters": [ + "JSONSetter", + "NumberSetter" + ] + }, + { + "name": "tag", + "defaultValue": "div", + "title": "自定义元素标签", + "setters": "InputSetter" + } + ], + "slots": [ + "default" + ], + "snippet": { + "props": { + "span": 6 + }, + "children": [ + { + "name": "component", + "props": { + "is": "div", + "style": { + "height": "50px", + "background": "#ecf5ff" + } + }, + "children": "Col" + } + ] + } + }, + "ElLink": { + "name": "ElLink", + "label": "链接", + "categoryId": "base", + "doc": "https://element-plus.org/zh-CN/component/link.html", + "props": [ + { + "name": "type", + "defaultValue": "default", + "setters": "SelectSetter", + "options": [ + "default", + "primary", + "success", + "warning", + "danger", + "info" + ] + }, + { + "name": "underline", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "href", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "target", + "label": "target", + "title": "同原生 target 属性", + "setters": "SelectSetter", + "options": [ + "_blank", + "_parent", + "_self", + "_top" + ], + "defaultValue": "_self" + }, + { + "name": "icon", + "defaultValue": "", + "setters": "IconSetter" + } + ], + "events": [], + "slots": [ + { + "name": "default" + }, + { + "name": "icon" + } + ], + "snippet": { + "children": "链接文本" + }, + "package": "element-plus" + }, + "ElMenu": { + "name": "ElMenu", + "label": "导航菜单", + "doc": "https://element-plus.org/zh-CN/component/menu.html", + "categoryId": "nav", + "package": "element-plus", + "props": [ + { + "name": "mode", + "defaultValue": "vertical", + "setters": "SelectSetter", + "options": [ + "horizontal", + "vertical" + ] + }, + { + "name": "collapse", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "ellipsis", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "ellipsisIcon", + "label": "ellipsisIcon", + "title": "自定义省略图标 (仅在水平模式下可用)", + "setters": "StringSetter" + }, + { + "name": "popperOffset", + "label": "popperOffset", + "title": "弹出层的偏移量(对所有子菜单有效)", + "setters": "NumberSetter", + "defaultValue": 6 + }, + { + "name": "defaultActive", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "defaultOpeneds", + "defaultValue": [], + "setters": "ArraySetter" + }, + { + "name": "uniqueOpened", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "menuTrigger", + "defaultValue": "hover", + "setters": "SelectSetter", + "options": [ + "hover", + "click" + ] + }, + { + "name": "router", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "collapseTransition", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "popperEffect", + "label": "popperEffect", + "title": "Tooltip 主题,内置了 dark / light 两种主题", + "setters": "SelectSetter", + "options": [ + "dark", + "light" + ], + "defaultValue": "dark" + }, + { + "name": "closeOnClickOutside", + "label": "closeOnClickOutside", + "title": "可选,单击外部时是否折叠菜单", + "setters": "BooleanSetter", + "defaultValue": false + }, + { + "name": "popperClass", + "label": "popperClass", + "title": "为 popper 添加类名", + "setters": "StringSetter" + }, + { + "name": "showTimeout", + "label": "showTimeout", + "title": "菜单出现前的延迟", + "setters": "NumberSetter", + "defaultValue": 300 + }, + { + "name": "hideTimeout", + "label": "hideTimeout", + "title": "菜单消失前的延迟", + "setters": "NumberSetter", + "defaultValue": 300 + }, + { + "name": "backgroundColor", + "defaultValue": "#ffffff", + "setters": "ColorSetter" + }, + { + "name": "textColor", + "defaultValue": "#303133", + "setters": "ColorSetter" + }, + { + "name": "activeTextColor", + "defaultValue": "#409EFF", + "setters": "ColorSetter" + } + ], + "events": [ + { + "name": "select" + }, + { + "name": "open" + }, + { + "name": "close" + } + ], + "slots": [ + "default", + "ellipsis-icon" + ], + "snippet": { + "props": { + "mode": "horizontal" + }, + "children": [ + { + "name": "ElMenuItem", + "children": "菜单项一", + "props": { + "index": "1" + } + }, + { + "name": "ElSubMenu", + "props": { + "index": "2" + }, + "children": [ + { + "name": "component", + "slot": "title", + "props": { + "is": "div" + }, + "children": "子菜单" + }, + { + "name": "ElMenuItem", + "children": "子菜单项一", + "props": { + "index": "2-1" + } + }, + { + "name": "ElMenuItem", + "children": "子菜单项二", + "props": { + "index": "2-2" + } + } + ] + }, + { + "name": "ElMenuItem", + "children": "菜单项三", + "props": { + "index": "3" + } + } + ] + } + }, + "ElSubMenu": { + "name": "ElSubMenu", + "label": "导航子菜单", + "categoryId": "nav", + "package": "element-plus", + "props": [ + { + "name": "index", + "label": "index *", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "popperClass", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "showTimeout", + "setters": "NumberSetter" + }, + { + "name": "hideTimeout", + "setters": "NumberSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "teleported", + "setters": "BooleanSetter" + }, + { + "name": "popperOffset", + "defaultValue": 6, + "setters": "NumberSetter" + }, + { + "name": "expandCloseIcon", + "defaultValue": "", + "setters": [ + "InputSetter" + ] + }, + { + "name": "expandOpenIcon", + "defaultValue": "", + "setters": [ + "InputSetter" + ] + }, + { + "name": "collapseCloseIcon", + "defaultValue": "", + "setters": [ + "InputSetter" + ] + }, + { + "name": "collapseOpenIcon", + "defaultValue": "", + "setters": [ + "InputSetter" + ] + } + ], + "slots": [ + { + "name": "default" + }, + { + "name": "title" + } + ], + "snippet": { + "children": [ + { + "name": "component", + "slot": "title", + "props": { + "is": "div" + }, + "children": "子菜单" + }, + { + "name": "ElMenuItem", + "children": "子菜单项一" + } + ] + } + }, + "ElMenuItem": { + "name": "ElMenuItem", + "label": "导航菜单项", + "categoryId": "nav", + "package": "element-plus", + "props": [ + { + "name": "index", + "defaultValue": null, + "setters": "InputSetter" + }, + { + "name": "route", + "defaultValue": "", + "setters": [ + "StringSetter", + "JSONSetter" + ] + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + } + ], + "events": [ + { + "name": "click" + } + ], + "slots": [ + { + "name": "default" + }, + { + "name": "title" + } + ], + "snippet": { + "children": "菜单项" + } + }, + "ElMenuItemGroup": { + "name": "ElMenuItemGroup", + "label": "导航菜单组", + "categoryId": "nav", + "package": "element-plus", + "props": [ + { + "name": "title", + "defaultValue": "", + "setters": "InputSetter" + } + ], + "slots": [ + { + "name": "default" + }, + { + "name": "title" + } + ], + "snippet": { + "props": { + "title": "分组一" + }, + "children": [ + { + "name": "ElMenuItem", + "children": "子菜单项一" + }, + { + "name": "ElMenuItem", + "children": "子菜单项一" + } + ] + } + }, + "ElPageHeader": { + "name": "ElPageHeader", + "label": "页头", + "doc": "https://element-plus.org/zh-CN/component/page-header.html", + "categoryId": "nav", + "package": "element-plus", + "props": [ + { + "name": "icon", + "defaultValue": "Back", + "setters": "InputSetter" + }, + { + "name": "title", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "content", + "defaultValue": "", + "setters": "InputSetter" + } + ], + "events": [ + { + "name": "back" + } + ], + "slots": [ + { + "name": "icon" + }, + { + "name": "title" + }, + { + "name": "content" + }, + { + "name": "extra" + }, + { + "name": "breadcrumb" + }, + { + "name": "default" + } + ], + "snippet": { + "name": "ElPageHeader", + "children": [ + { + "name": "component", + "slot": "content", + "props": { + "is": "span" + }, + "children": "Title" + } + ] + } + }, + "ElPagination": { + "name": "ElPagination", + "label": "分页", + "categoryId": "data", + "doc": "https://element-plus.org/zh-CN/component/pagination.html", + "package": "element-plus", + "props": [ + { + "name": "size", + "defaultValue": "default", + "options": [ + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "background", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "pageSize", + "defaultValue": 10, + "setters": "NumberSetter" + }, + { + "name": "defaultPageSize", + "label": "默认页大小", + "setters": "NumberSetter" + }, + { + "name": "total", + "title": "总条目数", + "setters": "NumberSetter" + }, + { + "name": "pageCount", + "setters": "NumberSetter" + }, + { + "name": "pagerCount", + "defaultValue": 7, + "setters": "NumberSetter" + }, + { + "name": "currentPage", + "defaultValue": 1, + "setters": "NumberSetter" + }, + { + "name": "defaultCurrentPage", + "label": "默认当前页", + "setters": "NumberSetter" + }, + { + "name": "layout", + "defaultValue": "prev, pager, next, jumper, ->, total", + "setters": "InputSetter" + }, + { + "name": "pageSizes", + "defaultValue": [ + 10, + 20, + 30, + 40, + 50, + 100 + ], + "setters": [ + "ArraySetter", + "JSONSetter" + ] + }, + { + "name": "appendSizeTo", + "title": "下拉框挂载到哪个 DOM 元素", + "setters": "StringSetter" + }, + { + "name": "popperClass", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "prevText", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "prevIcon", + "defaultValue": "ArrowLeft", + "setters": "InputSetter" + }, + { + "name": "nextText", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "nextIcon", + "defaultValue": "ArrowRight", + "setters": "InputSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "teleported ", + "title": "是否将下拉菜单teleport至 body", + "setters": "BooleanSetter", + "defaultValue": true + }, + { + "name": "hideOnSinglePage", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "small", + "defaultValue": false, + "setters": "BooleanSetter" + } + ], + "events": [ + "size-change", + "current-change", + "change", + "prev-click", + "next-click", + "update:pageSize", + "update:currentPage" + ], + "slots": [ + "default", + "prevIcon", + "nextIcon" + ], + "snippet": { + "props": { + "total": 1000, + "background": true + } + } + }, + "ElPopconfirm": { + "name": "ElPopconfirm", + "label": "气泡确认框", + "categoryId": "other", + "doc": "https://element-plus.org/zh-CN/component/popconfirm.html", + "package": "element-plus", + "props": [ + { + "name": "title", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "confirmButtonText", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "cancelButtonText", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "confirmButtonType", + "defaultValue": "primary", + "setters": "SelectSetter", + "options": [ + "primary", + "success", + "warning", + "danger", + "info", + "text" + ] + }, + { + "name": "confirmButtonType", + "defaultValue": "text", + "setters": "SelectSetter", + "options": [ + "primary", + "success", + "warning", + "danger", + "info", + "text" + ] + }, + { + "name": "icon", + "defaultValue": "QuestionFilled", + "setters": [ + "InputSetter" + ] + }, + { + "name": "iconColor", + "defaultValue": "#f90", + "setters": "ColorSetter" + }, + { + "name": "hideIcon", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "hideAfter", + "defaultValue": 200, + "setters": "NumberSetter" + }, + { + "name": "teleported", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "persistent", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "width", + "defaultValue": "150", + "setters": [ + "NumberSetter", + "InputSetter" + ] + } + ], + "events": [ + { + "name": "confirm" + }, + { + "name": "cancel" + } + ], + "slots": [ + { + "name": "reference" + }, + { + "name": "actions" + } + ], + "snippet": { + "name": "ElPopconfirm", + "children": [ + { + "name": "ElButton", + "children": "气泡确认框", + "slot": "reference" + } + ], + "props": { + "title": "标题内容" + } + } + }, + "ElPopover": { + "name": "ElPopover", + "label": "气泡卡片", + "categoryId": "other", + "doc": "https://element-plus.org/zh-CN/component/popover.html", + "package": "element-plus", + "props": [ + { + "name": "trigger", + "defaultValue": "primary", + "setters": "click", + "options": [ + "click", + "focus", + "hover", + "contextmenu" + ] + }, + { + "name": "title", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "effect", + "defaultValue": "light", + "options": [ + "dark", + "light" + ], + "setters": "SelectSetter" + }, + { + "name": "content", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "width", + "defaultValue": 150, + "setters": [ + "NumberSetter", + "InputSetter" + ] + }, + { + "name": "placement", + "defaultValue": "bottom", + "setters": "SelectSetter", + "options": [ + "top", + "top-start", + "top-end", + "bottom", + "bottom-start", + "bottom-end", + "left", + "left-start", + "left-end", + "right", + "right-start", + "right-end" + ] + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "visible", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "offset", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "transition", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "showArrow", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "popperOptions", + "setters": "JSONSetter" + }, + { + "name": "popperClass", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "popperStyle", + "setters": [ + "InputSetter", + "ObjectSetter" + ] + }, + { + "name": "showAfter", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "hideAfter", + "defaultValue": 200, + "setters": "NumberSetter" + }, + { + "name": "autoClose", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "tabindex", + "defaultValue": "", + "setters": "NumberSetter" + }, + { + "name": "teleported", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "persistent", + "defaultValue": true, + "setters": "BooleanSetter" + } + ], + "events": [ + { + "name": "show" + }, + { + "name": "before-enter" + }, + { + "name": "after-enter" + }, + { + "name": "hide" + }, + { + "name": "before-leave" + }, + { + "name": "after-leave" + }, + { + "name": "update:visible" + } + ], + "slots": [ + { + "name": "default" + }, + { + "name": "reference" + } + ], + "snippet": { + "name": "ElPopover", + "props": { + "placement": "bottom", + "title": "Title", + "width": "200", + "trigger": "hover", + "content": "这是content123!" + }, + "children": [ + { + "name": "ElButton", + "children": "气泡卡片", + "slot": "reference" + } + ] + } + }, + "ElProgress": { + "name": "ElProgress", + "label": "进度条", + "categoryId": "data", + "doc": "https://element-plus.org/zh-CN/component/progress.html", + "package": "element-plus", + "props": [ + { + "name": "percentage", + "defaultValue": 0, + "title": "百分比,必填", + "setters": { + "name": "NumberSetter", + "props": { + "min": 0, + "max": 100 + } + } + }, + { + "name": "type", + "defaultValue": "line", + "options": [ + "line", + "circle", + "dashboard" + ], + "setters": "SelectSetter" + }, + { + "name": "strokeWidth", + "defaultValue": 6, + "setters": "NumberSetter" + }, + { + "name": "textInside", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "status", + "defaultValue": "", + "options": [ + "success", + "exception", + "warning" + ], + "setters": "SelectSetter" + }, + { + "name": "indeterminate", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "duration", + "defaultValue": 3, + "setters": "NumberSetter" + }, + { + "name": "color", + "defaultValue": "", + "setters": [ + "ColorSetter", + "FunctionSetter", + "ArraySetter", + "JSONSetter" + ] + }, + { + "name": "width", + "defaultValue": 126, + "setters": "NumberSetter" + }, + { + "name": "showText", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "strokeLinecap", + "defaultValue": "round", + "options": [ + "butt", + "round", + "square" + ], + "setters": "SelectSetter" + }, + { + "name": "format", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "striped", + "label": "striped", + "title": "在进度条上增加条纹", + "setters": "BooleanSetter", + "defaultValue": false + }, + { + "name": "stripedFlow", + "label": "stripedFlow", + "title": "让进度条上的条纹流动起来", + "setters": "BooleanSetter", + "defaultValue": false + } + ], + "slots": [ + "default" + ], + "snippet": { + "name": "ElProgress", + "props": { + "percentage": 50 + } + } + }, + "ElRadio": { + "name": "ElRadio", + "label": "单选框", + "categoryId": "form", + "doc": "https://element-plus.org/zh-CN/component/radio.html", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter", + "BooleanSetter" + ] + }, + { + "name": "value", + "title": "单选框的值", + "setters": [ + "StringSetter", + "NumberSetter", + "BooleanSetter" + ] + }, + { + "name": "label", + "defaultValue": "", + "title": "单选框的 label 如果value没有值, label则作为value使用", + "setters": [ + "StringSetter", + "NumberSetter", + "BooleanSetter" + ] + }, + { + "name": "disabled", + "title": "是否禁用单选框", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "border", + "title": "是否显示边框", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "size", + "title": "单选框的尺寸", + "defaultValue": "", + "options": [ + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "name", + "title": "原始 name 属性", + "defaultValue": "", + "setters": "StringSetter" + } + ], + "events": [ + { + "name": "change" + }, + { + "name": "update:modelValue" + } + ], + "slots": [ + "default" + ], + "snippet": { + "props": { + "label": "选项一", + "value": "1" + } + } + }, + "ElRadioGroup": { + "name": "ElRadioGroup", + "label": "单选框组", + "categoryId": "form", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "title": "绑定值", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter", + "BooleanSetter" + ] + }, + { + "name": "size", + "title": "单选框按钮或边框按钮的大小", + "defaultValue": "", + "options": [ + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "disabled", + "title": "是否禁用", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "textColor", + "title": "按钮形式的 Radio 激活时的文本颜色", + "defaultValue": "#ffffff", + "setters": "ColorSetter" + }, + { + "name": "fill", + "title": "按钮形式的 Radio 激活时的填充色和边框色", + "defaultValue": "#409EFF", + "setters": "ColorSetter" + }, + { + "name": "validateEvent", + "title": "输入时是否触发表单的校验", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "aria-label", + "title": "与 RadioGroup 中的 aria-label 属性相同", + "setters": "StringSetter" + }, + { + "name": "name", + "label": "name", + "title": "原生 name 属性", + "setters": "StringSetter" + }, + { + "name": "id", + "label": "id", + "title": "原生 id 属性", + "setters": "StringSetter" + } + ], + "events": [ + { + "name": "change" + }, + { + "name": "update:modelValue" + } + ], + "slots": [ + "default" + ], + "snippet": { + "name": "ElRadioGroup", + "children": [ + { + "name": "ElRadio", + "props": { + "label": "选项一", + "value": "1" + } + }, + { + "name": "ElRadio", + "props": { + "label": "选项二", + "value": "2" + } + }, + { + "name": "ElRadio", + "props": { + "label": "选项三", + "value": "3" + } + } + ] + } + }, + "ElRadioButton": { + "name": "ElRadioButton", + "label": "单选框按钮", + "categoryId": "form", + "package": "element-plus", + "props": [ + { + "name": "label", + "title": "单选框的label,如果没有value,label则作为value使用", + "defaultValue": "", + "setters": [ + "StringSetter", + "NumberSetter" + ] + }, + { + "name": "value", + "title": "单选框的值", + "defaultValue": "", + "setters": [ + "StringSetter", + "NumberSetter", + "BooleanSetter" + ] + }, + { + "name": "disabled", + "title": "是否禁用单选框", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "name", + "title": "原生 name 属性", + "defaultValue": "", + "setters": "StringSetter" + } + ], + "slots": [ + "default" + ], + "snippet": { + "children": "按钮选项" + } + }, + "ElRate": { + "name": "ElRate", + "label": "评分", + "childIncludes": false, + "categoryId": "form", + "doc": "https://element-plus.org/zh-CN/component/rate.html", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "max", + "defaultValue": 5, + "setters": "NumberSetter" + }, + { + "name": "size", + "defaultValue": "default", + "options": [ + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "allowHalf", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "lowThreshold", + "defaultValue": 2, + "title": "低分和中等分数的界限值, 值本身被划分在低分中", + "setters": "NumberSetter" + }, + { + "name": "highThreshold", + "defaultValue": 4, + "title": "高分和中等分数的界限值, 值本身被划分在高分中", + "setters": "NumberSetter" + }, + { + "name": "colors", + "defaultValue": [ + "#F7BA2A", + "#F7BA2A", + "#F7BA2A" + ], + "setters": [ + "ArraySetter", + "JSONSetter" + ] + }, + { + "name": "voidColor", + "defaultValue": "#C6D1DE", + "setters": "ColorSetter" + }, + { + "name": "disabledVoidColor", + "defaultValue": "#EFF2F7", + "label": "disabledColor", + "setters": "ColorSetter" + }, + { + "name": "icons", + "defaultValue": [ + "StarFilled", + "StarFilled", + "StarFilled" + ], + "setters": [ + "ArraySetter", + "JSONSetter" + ] + }, + { + "name": "voidIcon", + "defaultValue": "Star", + "setters": "InputSetter" + }, + { + "name": "disabledVoidIcon", + "defaultValue": "StarFilled", + "label": "disabledIcon", + "setters": "InputSetter" + }, + { + "name": "showText", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "showScore", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "textColor", + "defaultValue": "#1F2D3D", + "setters": "ColorSetter" + }, + { + "name": "texts", + "defaultValue": [ + "Extremely bad", + "Disappointed", + "Fair", + "Satisfied", + "Surprise" + ], + "setters": [ + "ArraySetter", + "JSONSetter" + ] + }, + { + "name": "scoreTemplate", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "clearable", + "label": "clearable", + "title": "是否可以重置值为 0", + "setters": "BooleanSetter", + "defaultValue": false + }, + { + "name": "id", + "label": "id", + "title": "原生 id 属性", + "setters": "StringSetter" + }, + { + "name": "ariaLabel", + "title": "和 Rate 的 aria-label 属性保持一致", + "setters": "StringSetter" + }, + { + "name": "label", + "label": "label", + "title": "和 Rate 的 aria-label 属性保持一致", + "setters": "StringSetter" + } + ], + "events": [ + "change", + "update:modelValue" + ] + }, + "ElResult": { + "name": "ElResult", + "label": "结果", + "doc": "https://element-plus.org/zh-CN/component/result.html", + "categoryId": "data", + "package": "element-plus", + "props": [ + { + "name": "title", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "subTitle", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "icon", + "defaultValue": "info", + "options": [ + "success", + "warning", + "info", + "error" + ], + "setters": "SelectSetter" + } + ], + "slots": [ + "icon", + "title", + "sub-title", + "extra" + ], + "snippet": { + "props": { + "icon": "success", + "title": "Success Tip", + "subTitle": "Please follow the instructions" + } + } + }, + "ElScrollbar": { + "name": "ElScrollbar", + "label": "滚动条", + "categoryId": "base", + "doc": "https://element-plus.org/zh-CN/component/scrollbar.html", + "childIncludes": false, + "package": "element-plus", + "props": [ + { + "name": "height", + "defaultValue": "", + "setters": [ + "NumberSetter", + "InputSetter" + ] + }, + { + "name": "maxHeight", + "defaultValue": "", + "setters": [ + "NumberSetter", + "InputSetter" + ] + }, + { + "name": "native", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "wrapStyle", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "wrapClass", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "viewStyle", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "viewClass", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "noresize", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "tag", + "defaultValue": "div", + "setters": "InputSetter" + }, + { + "name": "always", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "minSize", + "defaultValue": 20, + "setters": "NumberSetter" + }, + { + "name": "id", + "label": "id", + "title": "视图id", + "setters": "StringSetter" + }, + { + "name": "role", + "label": "role", + "title": "视图的角色", + "setters": "StringSetter" + }, + { + "name": "ariaLabel", + "label": "ariaLabel", + "title": "视图的 aria-label", + "setters": "StringSetter" + }, + { + "name": "ariaOrientation", + "label": "ariaOrientation", + "title": "视图的 aria-orientation", + "setters": "SelectSetter", + "options": [ + "horizontal", + "vertical" + ] + } + ], + "events": [ + { + "name": "scroll" + } + ], + "snippet": { + "props": { + "style": { + "height": "300px" + } + }, + "children": [ + { + "name": "component", + "props": { + "style": { + "height": "50px", + "margin": "10px", + "background": "#ecf5ff" + } + }, + "directives": [ + { + "name": "vFor", + "value": { + "type": "JSExpression", + "value": "6" + } + } + ] + } + ] + } + }, + "ElSelect": { + "name": "ElSelect", + "label": "选择器", + "doc": "https://element-plus.org/zh-CN/component/select.html", + "categoryId": "form", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "defaultValue": "", + "setters": [ + "NumberSetter", + "InputSetter", + "BooleanSetter" + ] + }, + { + "name": "multiple", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "valueKey", + "defaultValue": "value", + "setters": "InputSetter" + }, + { + "name": "size", + "defaultValue": "default", + "options": [ + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "clearable", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "collapseTags", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "collapseTagsTooltip", + "title": "当鼠标悬停于折叠标签的文本时,是否显示所有选中的标签。 要使用此属性,collapse-tags属性必须设定为 true", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "multipleLimit", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "name", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "effect", + "defaultValue": "light", + "options": [ + "dark", + "light" + ], + "setters": "SelectSetter" + }, + { + "name": "autocomplete", + "defaultValue": "off", + "setters": "InputSetter" + }, + { + "name": "placeholder", + "defaultValue": "Select", + "setters": "InputSetter" + }, + { + "name": "filterable", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "allowCreate", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "filterMethod", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "remote", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "remoteMethod", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "remoteShowSuffix", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "loading", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "loadingText", + "defaultValue": "Loading", + "setters": "InputSetter" + }, + { + "name": "noMatchText", + "defaultValue": "No matching data", + "setters": "InputSetter" + }, + { + "name": "noDataText", + "defaultValue": "No data", + "setters": "InputSetter" + }, + { + "name": "popperClass", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "reserveKeyword", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "defaultFirstOption", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "teleported", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "appendTo", + "title": "下拉框挂载到哪个 DOM 元素", + "defaultValue": "", + "setters": "StringSetter" + }, + { + "name": "persistent", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "automaticDropdown", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "clearIcon", + "defaultValue": "CircleClose", + "setters": "InputSetter" + }, + { + "name": "fitInputWidth", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "suffixIcon", + "defaultValue": "ArrowUp", + "setters": "InputSetter" + }, + { + "name": "tagType", + "defaultValue": "info", + "options": [ + "success", + "info", + "warning", + "danger" + ], + "setters": "SelectSetter" + }, + { + "name": "tagEffect", + "defaultValue": "light", + "options": [ + "", + "light", + "dark", + "plain" + ], + "setters": "SelectSetter" + }, + { + "name": "validateEvent", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "offset", + "defaultValue": 12, + "setters": "NumberSetter" + }, + { + "name": "showArrow", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "placement", + "label": "placement", + "title": "下拉框出现的位置", + "setters": "SelectSetter", + "options": [ + "top", + "top-start", + "top-end", + "bottom", + "bottom-start", + "bottom-end", + "left", + "left-start", + "left-end", + "right", + "right-start", + "right-end" + ], + "defaultValue": "bottom-start" + }, + { + "name": "fallbackPlacements", + "label": "fallbackPlacements", + "title": "dropdown 可用的 positions", + "setters": "ArraySetter", + "defaultValue": [ + "bottom-start", + "top-start", + "right", + "left" + ] + }, + { + "name": "maxCollapseTags", + "label": "maxCollapseTags", + "title": "需要显示的 Tag 的最大数量 只有当 collapse-tags 设置为 true 时才会生效。", + "setters": "NumberSetter", + "defaultValue": 1 + }, + { + "name": "popperOptions", + "label": "popperOptions", + "title": "popper.js 参数", + "setters": "ObjectSetter", + "defaultValue": {} + }, + { + "name": "ariaLabel", + "label": "ariaLabel", + "title": "等价于原生 input aria-label 属性", + "setters": "StringSetter" + }, + { + "name": "emptyValues", + "title": "组件的空值配置", + "setters": "ArraySetter" + }, + { + "name": "valueOnClear", + "title": "清空选项的值 ", + "setters": [ + "StringSetter", + "NumberSetter", + "BooleanSetter", + "FunctionSetter" + ] + }, + { + "name": "suffixTransition", + "title": "下拉菜单显示/消失时后缀图标的动画", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "tabindex", + "title": "input 的 tabindex", + "setters": [ + "StringSetter", + "NumberSetter" + ] + } + ], + "events": [ + "change", + "visible-change", + "remove-tag", + "clear", + "blur", + "focus", + "update:modelValue" + ], + "slots": [ + { + "name": "default" + }, + { + "name": "header" + }, + { + "name": "footer" + }, + { + "name": "prefix" + }, + { + "name": "empty" + }, + { + "name": "tag" + }, + { + "name": "loading" + }, + { + "name": "label" + } + ], + "snippet": { + "children": [ + { + "name": "ElOption", + "props": { + "label": { + "type": "JSExpression", + "value": "`选项${this.context.item}`" + } + }, + "directives": [ + { + "name": "vFor", + "value": { + "type": "JSExpression", + "value": "6" + } + } + ] + } + ] + } + }, + "ElOptionGroup": { + "name": "ElOptionGroup", + "label": "选择器选项组", + "categoryId": "form", + "package": "element-plus", + "parentIncludes": [ + "ElSelect" + ], + "props": [ + { + "name": "label", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + } + ], + "slots": [ + "default" + ], + "snippet": { + "props": { + "label": "分组" + } + } + }, + "ElOption": { + "name": "ElOption", + "label": "选择器选项", + "categoryId": "form", + "package": "element-plus", + "parentIncludes": [ + "ElSelect", + "ElOptionGroup" + ], + "props": [ + { + "name": "value", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter", + "BooleanSetter", + "JSONSetter" + ] + }, + { + "name": "label", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + } + ], + "slots": [ + "default" + ], + "snippet": { + "props": { + "label": "选项" + } + } + }, + "ElSelectV2": { + "name": "ElSelectV2", + "label": "虚拟列表选择器", + "doc": "https://element-plus.org/zh-CN/component/select-v2.html", + "categoryId": "data", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter", + "BooleanSetter", + "JSONSetter" + ] + }, + { + "name": "options", + "label": "options", + "title": "选项的数据源, value 的 key 和 label 可以通过 props自定义.", + "setters": "ArraySetter" + }, + { + "name": "props", + "label": "props", + "title": "配置选项,具体看下表", + "setters": "ObjectSetter" + }, + { + "name": "multiple", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "valueKey", + "defaultValue": "value", + "setters": "InputSetter" + }, + { + "name": "size", + "defaultValue": "", + "options": [ + "", + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "clearable", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "clearIcon", + "label": "clearIcon", + "title": "自定义清除图标", + "setters": [ + "StringSetter", + "ObjectSetter" + ], + "defaultValue": "CircleClose" + }, + { + "name": "collapseTags", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "multipleLimit", + "label": "multipleLimit", + "title": "多选时可被选择的最大数目。 当被设置为0时,可被选择的数目不设限。", + "setters": "NumberSetter", + "defaultValue": 0 + }, + { + "name": "name", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "effect", + "defaultValue": "light", + "options": [ + "dark", + "light" + ], + "setters": [ + "SelectSetter", + "StringSetter" + ] + }, + { + "name": "autocomplete", + "defaultValue": "off", + "setters": "InputSetter" + }, + { + "name": "placeholder", + "defaultValue": "Please select", + "setters": "InputSetter" + }, + { + "name": "filterable", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "allowCreate", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "filterMethod", + "label": "filterMethod", + "title": "自定义筛选方法", + "setters": "FunctionSetter" + }, + { + "name": "loading", + "label": "loading", + "title": "是否从远程加载数据", + "setters": "BooleanSetter", + "defaultValue": false + }, + { + "name": "loadingText", + "label": "loadingText", + "title": "从服务器加载数据时显示的文本,默认为“Loading”", + "setters": "StringSetter", + "defaultValue": "Loading" + }, + { + "name": "reserveKeyword", + "label": "reserveKeyword", + "title": "筛选时,是否在选择选项后保留关键字", + "setters": "BooleanSetter", + "defaultValue": true + }, + { + "name": "noMatchText", + "label": "noMatchText", + "title": "搜索条件无匹配时显示的文字,也可以使用 empty 插槽设置,默认是 “No matching data“", + "setters": "StringSetter" + }, + { + "name": "noDataText", + "label": "noDataText", + "title": "当在没有数据时显示的文字,你同时可以使用empty插槽进行设置。", + "setters": "StringSetter", + "defaultValue": "No Data" + }, + { + "name": "popperClass", + "label": "popperClass", + "title": "选择器下拉菜单的自定义类名", + "setters": "StringSetter", + "defaultValue": "" + }, + { + "name": "teleported", + "label": "teleported", + "title": "是否将下拉列表元素插入 append-to 指向的元素下", + "setters": "BooleanSetter", + "defaultValue": true + }, + { + "name": "appendTo", + "title": "下拉框挂载到哪个 DOM 元素", + "setters": "StringSetter" + }, + { + "name": "persistent", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "popperOptions", + "label": "popperOptions", + "setters": "ObjectSetter", + "defaultValue": {} + }, + { + "name": "automaticDropdown", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "fitInputWidth", + "defaultValue": true, + "setters": [ + "BooleanSetter", + "NumberSetter" + ] + }, + { + "name": "height", + "defaultValue": 274, + "setters": "NumberSetter" + }, + { + "name": "itemHeight", + "label": "itemHeight", + "title": "下拉项的高度", + "setters": "NumberSetter", + "defaultValue": 34 + }, + { + "name": "scrollbarAlwaysOn", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "remote", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "remoteMethod", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "validateEvent", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "offset", + "title": "下拉面板偏移量", + "defaultValue": 12, + "setters": "NumberSetter" + }, + { + "name": "showArrow", + "title": "下拉菜单的内容是否有箭头", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "placement", + "label": "placement", + "title": "下拉框出现的位置", + "setters": "SelectSetter", + "options": [ + "top", + "top-start", + "top-end", + "bottom", + "bottom-start", + "bottom-end", + "left", + "left-start", + "left-end", + "right", + "right-start", + "right-end" + ], + "defaultValue": "bottom-start" + }, + { + "name": "fallbackPlacements", + "setters": "ArraySetter", + "defaultValue": [ + "bottom-start", + "top-start", + "right", + "left" + ] + }, + { + "name": "collapseTagsTooltip", + "setters": "BooleanSetter", + "defaultValue": false + }, + { + "name": "maxCollapseTags", + "setters": "NumberSetter", + "defaultValue": 1 + }, + { + "name": "tagType", + "label": "tagType", + "title": "标签类型", + "setters": "SelectSetter", + "options": [ + "", + "success", + "info", + "warning", + "danger" + ], + "defaultValue": "info" + }, + { + "name": "tagEffect", + "title": "标签效果", + "defaultValue": "light", + "options": [ + "", + "light", + "dark", + "plain" + ], + "setters": "SelectSetter" + }, + { + "name": "ariaLabel", + "label": "ariaLabel", + "title": "等价于原生 input aria-label 属性", + "setters": "StringSetter" + }, + { + "name": "emptyValues", + "title": "组件的空值配置", + "setters": "ArraySetter" + }, + { + "name": "valueOnClear", + "title": "清空选项的值 ", + "setters": [ + "StringSetter", + "NumberSetter", + "BooleanSetter", + "FunctionSetter" + ] + }, + { + "name": "popperAppendToBody", + "title": "是否将弹出框插入至 body 元素 当弹出框的位置出现问题时,你可以尝试将该属性设置为false。", + "setters": "BooleanSetter", + "defaultValue": false + }, + { + "name": "tabindex", + "title": "input 的 tabindex", + "setters": [ + "StringSetter", + "NumberSetter" + ] + } + ], + "events": [ + "change", + "visible-change", + "remove-tag", + "clear", + "blur", + "focus", + "update:modelValue" + ], + "slots": [ + { + "name": "default", + "params": [ + "item" + ] + }, + { + "name": "header" + }, + { + "name": "footer" + }, + { + "name": "prefix" + }, + { + "name": "empty" + }, + { + "name": "tag" + }, + { + "name": "loading" + }, + { + "name": "label" + } + ] + }, + "ElSkeleton": { + "name": "ElSkeleton", + "label": "骨架屏", + "doc": "https://element-plus.org/zh-CN/component/skeleton.html", + "categoryId": "data", + "package": "element-plus", + "props": [ + { + "name": "animated", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "count", + "defaultValue": 1, + "setters": "NumberSetter" + }, + { + "name": "loading", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "rows", + "defaultValue": 3, + "setters": "NumberSetter" + }, + { + "name": "throttle", + "defaultValue": 0, + "setters": [ + "NumberSetter", + "ObjectSetter" + ] + } + ], + "slots": [ + { + "name": "default", + "params": [ + "object" + ] + }, + { + "name": "template", + "params": [ + "object" + ] + } + ] + }, + "ElSkeletonItem": { + "name": "ElSkeletonItem", + "label": "骨架项", + "doc": "https://element-plus.org/zh-CN/component/skeleton.html", + "categoryId": "data", + "package": "element-plus", + "props": [ + { + "name": "variant", + "setters": "SelectSetter", + "options": [ + "p", + "text", + "h1", + "h3", + "caption", + "button", + "image", + "circle", + "rect" + ], + "defaultValue": "text" + } + ], + "snippet": { + "props": { + "variant": "image", + "style": { + "width": "240px", + "height": "240px" + } + } + } + }, + "ElSlider": { + "name": "ElSlider", + "label": "滑块", + "childIncludes": false, + "doc": "https://element-plus.org/zh-CN/component/slider.html", + "categoryId": "form", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "title": "选中项绑定值", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "min", + "title": "最小值", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "max", + "title": "最大值", + "defaultValue": 100, + "setters": "NumberSetter" + }, + { + "name": "disabled", + "title": "是否禁用", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "step", + "title": "步长", + "defaultValue": 1, + "setters": "NumberSetter" + }, + { + "name": "showInput", + "title": "是否显示输入框,仅在非范围选择时有效", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "showInputControls", + "title": "在显示输入框的情况下,是否显示输入框的控制按钮", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "size", + "defaultValue": "default", + "title": "slider 包装器的大小,垂直模式下该属性不可用", + "options": [ + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "inputSize", + "title": "输入框的大小,如果设置了 size 属性,默认值自动取 size", + "defaultValue": "default", + "options": [ + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "showStops", + "defaultValue": false, + "title": "是否显示间断点", + "setters": "BooleanSetter" + }, + { + "name": "showTooltip", + "defaultValue": true, + "title": "是否显示提示信息", + "setters": "BooleanSetter" + }, + { + "name": "formatTooltip", + "title": "格式化提示信息", + "setters": "FunctionSetter" + }, + { + "name": "range", + "title": "是否开启选择范围", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "vertical", + "defaultValue": false, + "title": "垂直模式", + "setters": "BooleanSetter" + }, + { + "name": "height", + "defaultValue": "", + "title": "滑块高度,垂直模式必填", + "setters": "InputSetter" + }, + { + "name": "aria-label", + "title": "原生 aria-label属性", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "rangeStartLabel", + "defaultValue": "", + "title": "当 range 为true时,屏幕阅读器标签开始的标记", + "setters": "InputSetter" + }, + { + "name": "rangeEndLabel", + "defaultValue": "", + "title": "当 range 为true时,屏幕阅读器标签结尾的标记", + "setters": "InputSetter" + }, + { + "name": "formatValueText", + "title": "显示屏幕阅读器的 aria-valuenow 属性的格式", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "debounce", + "defaultValue": 300, + "title": "输入时的去抖延迟,毫秒,仅在 show-input 等于 true 时有效", + "setters": "NumberSetter" + }, + { + "name": "tooltipClass", + "title": "tooltip 的自定义类名", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "placement", + "title": "Tooltip 出现的位置", + "defaultValue": "top", + "options": [ + "top", + "top-start", + "top-end", + "bottom", + "bottom-start", + "bottom-end", + "left", + "left-start", + "left-end", + "right", + "right-start", + "right-end" + ], + "setters": "SelectSetter" + }, + { + "name": "marks", + "title": "标记, key 的类型必须为 number 且取值在闭区间 [min, max] 内,每个标记可以单独设置样式", + "defaultValue": "", + "setters": "JSONSetter" + }, + { + "name": "validateEvent", + "title": "输入时是否触发表单的校验", + "defaultValue": true, + "setters": "BooleanSetter" + } + ], + "events": [ + "change", + "input", + "update:modelValue" + ] + }, + "ElSpace": { + "name": "ElSpace", + "label": "间距", + "categoryId": "base", + "doc": "https://element-plus.org/zh-CN/component/space.html", + "package": "element-plus", + "props": [ + { + "name": "alignment", + "defaultValue": "center", + "title": "对齐的方式", + "options": [ + "normal", + "stretch", + "center", + "start", + "end", + "flex-start", + "flex-end", + "baseline", + "first baseline", + "last baseline", + "safe center", + "unsafe center", + "inherit", + "initial", + "revert", + "revert-layer", + "unset" + ], + "setters": "SelectSetter" + }, + { + "name": "class", + "title": "className", + "defaultValue": "", + "setters": [ + "StringSetter", + "ObjectSetter", + "ArraySetter" + ] + }, + { + "name": "direction", + "title": "排列的方向", + "defaultValue": "horizontal", + "options": [ + "vertical", + "horizontal" + ], + "setters": "SelectSetter" + }, + { + "name": "prefixCls", + "title": "给 space-items 的类名前缀", + "defaultValue": "", + "setters": "StringSetter" + }, + { + "name": "style", + "title": "额外样式", + "defaultValue": "", + "setters": [ + "StringSetter", + "JSONSetter" + ] + }, + { + "name": "spacer", + "title": "间隔符", + "defaultValue": "", + "setters": [ + "StringSetter", + "NumberSetter" + ] + }, + { + "name": "size", + "title": "间隔大小", + "defaultValue": "small", + "setters": [ + "SelectSetter", + "NumberSetter", + "ArraySetter" + ], + "options": [ + "large", + "default", + "small" + ] + }, + { + "name": "wrap", + "title": "设置是否自动折行", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "fill", + "title": "子元素是否填充父容器", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "fillRatio", + "title": "填充父容器的比例", + "defaultValue": 100, + "setters": "NumberSetter" + } + ], + "slots": [ + "default", + "spacer" + ], + "snippet": { + "props": { + "fill": true, + "style": { + "width": "100%" + } + }, + "children": [ + { + "name": "ElCard" + }, + { + "name": "ElCard" + } + ] + } + }, + "ElStatistic": { + "name": "ElStatistic", + "label": "统计组件", + "doc": "https://element-plus.org/zh-CN/component/statistic.html", + "categoryId": "data", + "package": "element-plus", + "props": [ + { + "name": "value", + "label": "value", + "title": "数字内容", + "setters": "NumberSetter", + "defaultValue": 0 + }, + { + "name": "decimalSeparator", + "label": "decimalSeparator", + "title": "设置小数点符号", + "setters": "StringSetter", + "defaultValue": "." + }, + { + "name": "formatter", + "label": "formatter", + "title": "自定义数字格式化", + "setters": "FunctionSetter" + }, + { + "name": "groupSeparator", + "label": "groupSeparator", + "title": "设置千分位标识符", + "setters": "StringSetter", + "defaultValue": "," + }, + { + "name": "precision", + "label": "precision", + "title": "数字精度", + "setters": "NumberSetter", + "defaultValue": 0 + }, + { + "name": "prefix", + "label": "prefix", + "title": "设置数字的前缀", + "setters": "StringSetter" + }, + { + "name": "suffix", + "label": "suffix", + "title": "设置数字的后缀", + "setters": "StringSetter" + }, + { + "name": "title", + "label": "title", + "title": "数字标题", + "setters": "StringSetter" + }, + { + "name": "valueStyle", + "label": "valueStyle", + "title": "数字样式", + "setters": [ + "StringSetter", + "ObjectSetter", + "ArraySetter" + ] + } + ], + "slots": [ + "prefix", + "suffix", + "title" + ], + "snippet": { + "props": { + "title": "Daily active users", + "value": "268500" + } + } + }, + "ElCountdown": { + "name": "ElCountdown", + "label": "倒计时", + "doc": "https://element-plus.org/zh-CN/component/statistic.html", + "categoryId": "data", + "package": "element-plus", + "props": [ + { + "name": "value", + "label": "value", + "title": "目标时间", + "setters": [ + "NumberSetter" + ] + }, + { + "name": "format", + "label": "format", + "title": "格式化倒计时", + "setters": "StringSetter", + "defaultValue": "HH:mm:ss" + }, + { + "name": "prefix", + "label": "prefix", + "title": "设置倒计时前缀", + "setters": "StringSetter" + }, + { + "name": "suffix", + "label": "suffix", + "title": "设置倒计时的后缀", + "setters": "StringSetter" + }, + { + "name": "title", + "label": "title", + "title": "倒计时标题", + "setters": "StringSetter" + }, + { + "name": "valueStyle", + "label": "valueStyle", + "title": "倒计时值的样式", + "setters": [ + "StringSetter", + "ObjectSetter", + "ArraySetter" + ] + } + ], + "events": [ + "change", + "finish" + ], + "slots": [ + "prefix", + "suffix", + "title" + ], + "snippet": { + "props": { + "title": "Start to grab", + "value": 1792134444342 + } + } + }, + "ElSegmented": { + "name": "ElSegmented", + "label": "分段控制器", + "doc": "https://element-plus.org/zh-CN/component/segmented.html", + "categoryId": "data", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "title": "绑定值", + "setters": [ + "StringSetter", + "NumberSetter", + "BooleanSetter" + ] + }, + { + "name": "options", + "title": "选项的数据", + "defaultValue": [], + "setters": "ArraySetter" + }, + { + "name": "size", + "defaultValue": "", + "options": [ + "", + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "block", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "validate-event", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "name", + "setters": "StringSetter" + }, + { + "name": "id", + "setters": "StringSetter" + }, + { + "name": "ariaLabel", + "setters": "StringSetter" + }, + { + "name": "direction", + "defaultValue": "horizontal", + "options": [ + "horizontal", + "vertical" + ], + "setters": "SelectSetter" + } + ], + "events": [ + "change", + "update:modelValue" + ], + "slots": [ + "default" + ], + "snippet": { + "props": { + "modelValue": "Mom", + "options": [ + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat", + "Sun" + ] + } + } + }, + "ElSteps": { + "name": "ElSteps", + "label": "步骤条", + "categoryId": "nav", + "doc": "https://element-plus.org/zh-CN/component/steps.html", + "package": "element-plus", + "props": [ + { + "name": "space", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "direction", + "defaultValue": "horizontal", + "setters": "SelectSetter", + "options": [ + "vertical", + "horizontal" + ] + }, + { + "name": "active", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "processStatus", + "defaultValue": "process", + "setters": "SelectSetter", + "options": [ + "wait", + "process", + "finish", + "error", + "success" + ] + }, + { + "name": "finishStatus", + "defaultValue": "finish", + "setters": "SelectSetter", + "options": [ + "wait", + "process", + "finish", + "error", + "success" + ] + }, + { + "name": "alignCenter", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "simple", + "defaultValue": false, + "setters": "BooleanSetter" + } + ], + "slots": [ + "default" + ], + "snippet": { + "name": "ElSteps", + "children": [ + { + "name": "ElStep", + "props": { + "title": "Step 1" + } + }, + { + "name": "ElStep", + "props": { + "title": "Step 2" + } + }, + { + "name": "ElStep", + "props": { + "title": "Step 3" + } + } + ], + "props": { + "active": 0, + "finishStatus": "success" + } + } + }, + "ElStep": { + "name": "ElStep", + "label": "步骤项", + "categoryId": "nav", + "package": "element-plus", + "props": [ + { + "name": "title", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "description", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "icon", + "defaultValue": "", + "setters": [ + "InputSetter" + ] + }, + { + "name": "status", + "defaultValue": "", + "setters": "SelectSetter", + "options": [ + "wait", + "process", + "finish", + "error", + "success" + ] + } + ], + "slots": [ + { + "name": "icon" + }, + { + "name": "title" + }, + { + "name": "description" + } + ], + "snippet": { + "props": { + "title": "步骤" + } + } + }, + "ElSwitch": { + "name": "ElSwitch", + "label": "开关", + "doc": "https://element-plus.org/zh-CN/component/switch.html", + "categoryId": "form", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "defaultValue": false, + "setters": [ + "BooleanSetter", + "NumberSetter", + "InputSetter" + ] + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "loading", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "size", + "defaultValue": "default", + "options": [ + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "width", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "inlinePrompt", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "activeIcon", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "inactiveIcon", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "activeActionIcon", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "inactiveActionIcon", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "activeText", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "inactiveText", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "activeValue", + "defaultValue": true, + "setters": [ + "BooleanSetter", + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "inactiveValue", + "defaultValue": false, + "setters": [ + "BooleanSetter", + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "name", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "validateEvent", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "beforeChange", + "setters": [ + "BooleanSetter", + "FunctionSetter" + ] + }, + { + "name": "id", + "defaultValue": "", + "setters": "StringSetter" + }, + { + "name": "tabindex", + "defaultValue": "", + "setters": [ + "StringSetter", + "NumberSetter" + ] + }, + { + "name": "ariaLabel", + "defaultValue": "", + "setters": "StringSetter" + }, + { + "name": "activeColor", + "defaultValue": "", + "setters": "ColorSetter" + }, + { + "name": "inactiveColor", + "defaultValue": "", + "setters": "ColorSetter" + }, + { + "name": "borderColor", + "defaultValue": "", + "setters": "ColorSetter" + }, + { + "name": "label", + "defaultValue": "", + "setters": "StringSetter" + } + ], + "events": [ + "change", + "update:modelValue" + ], + "slots": [ + "active-action", + "inactive-action" + ] + }, + "ElTable": { + "name": "ElTable", + "label": "表格", + "doc": "https://element-plus.org/zh-CN/component/table.html", + "categoryId": "data", + "package": "element-plus", + "props": [ + { + "name": "data", + "defaultValue": "", + "setters": [ + "ArraySetter", + "JSONSetter" + ] + }, + { + "name": "height", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "maxHeight", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "stripe", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "border", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "size", + "defaultValue": "", + "options": [ + "", + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "fit", + "defaultValue": true, + "title": "列的宽度是否自撑开", + "setters": "BooleanSetter" + }, + { + "name": "showHeader", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "highlightCurrentRow", + "defaultValue": false, + "label": "是否高亮", + "setters": "BooleanSetter" + }, + { + "name": "currentRowKey", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "rowClassName", + "defaultValue": "", + "setters": [ + "InputSetter", + "FunctionSetter" + ] + }, + { + "name": "rowStyle", + "defaultValue": "", + "setters": [ + "JSONSetter", + "FunctionSetter" + ] + }, + { + "name": "cellClassName", + "defaultValue": "", + "setters": [ + "InputSetter", + "FunctionSetter" + ] + }, + { + "name": "cellStyle", + "defaultValue": "", + "setters": [ + "JSONSetter", + "FunctionSetter" + ] + }, + { + "name": "headerRowClassName", + "defaultValue": "", + "title": "表头行类名", + "label": "RowClassName", + "setters": [ + "InputSetter", + "FunctionSetter" + ] + }, + { + "name": "headerRowStyle", + "defaultValue": "", + "setters": [ + "JSONSetter", + "FunctionSetter" + ] + }, + { + "name": "headerCellClassName", + "defaultValue": "", + "title": "表头单元格类名", + "label": "CellClassName", + "setters": [ + "InputSetter", + "FunctionSetter" + ] + }, + { + "name": "headerCellStyle", + "defaultValue": "", + "setters": [ + "JSONSetter", + "FunctionSetter" + ] + }, + { + "name": "rowKey", + "defaultValue": "", + "setters": [ + "InputSetter", + "FunctionSetter" + ] + }, + { + "name": "emptyText", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "defaultExpandAll", + "defaultValue": false, + "label": "展开所有", + "setters": "BooleanSetter" + }, + { + "name": "expand-row-keys", + "defaultValue": "", + "title": "可以通过该属性设置 Table 目前的展开行,需要设置 row-key 属性才能使用,该属性为展开行的 keys 数组。", + "label": "row-keys", + "setters": "JSONSetter" + }, + { + "name": "default-sort", + "defaultValue": "", + "setters": "JSONSetter" + }, + { + "name": "tooltip-effect", + "defaultValue": "dark", + "options": [ + "dark", + "light" + ], + "setters": "SelectSetter" + }, + { + "name": "tooltip-options", + "defaultValue": { + "enterable": true, + "placement": "top", + "showArrow": true, + "hideAfter": 200, + "popperOptions": { + "strategy": "fixed" + } + }, + "setters": "ObjectSetter" + }, + { + "name": "show-summary", + "defaultValue": false, + "label": "显示合计行", + "setters": "BooleanSetter" + }, + { + "name": "sum-text", + "defaultValue": "合计", + "setters": "InputSetter" + }, + { + "name": "summary-method", + "defaultValue": "", + "label": "合计计算方法", + "setters": "FunctionSetter" + }, + { + "name": "span-method", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "select-on-indeterminate", + "defaultValue": true, + "title": "在多选表格中,当仅有部分行被选中时,点击表头的多选框时的行为。 若为 true,则选中所有行;若为 false,则取消选择所有行", + "label": "indeterminate", + "setters": "BooleanSetter" + }, + { + "name": "indent", + "defaultValue": 16, + "setters": "NumberSetter" + }, + { + "name": "lazy", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "load", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "tree-props", + "defaultValue": { + "hasChildren": "hasChildren", + "children": "children" + }, + "setters": "JSONSetter" + }, + { + "name": "tableLayout", + "defaultValue": "fixed", + "title": "设置表格单元、行和列的布局方式", + "options": [ + "fixed", + "auto" + ], + "setters": "SelectSetter" + }, + { + "name": "scrollbar-always-on", + "defaultValue": false, + "label": "显示滚动条", + "setters": "BooleanSetter" + }, + { + "name": "show-overflow-tooltip", + "setters": [ + "BooleanSetter", + "JSONSetter" + ] + }, + { + "name": "flexible", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "scrollbarTabindex", + "setters": [ + "StringSetter", + "NumberSetter" + ] + }, + { + "name": "allowDragLastColumn", + "defaultValue": true, + "setters": "BooleanSetter" + } + ], + "events": [ + "select", + "select-all", + "selection-change", + "cell-mouse-enter", + "cell-mouse-leave", + "cell-click", + "cell-dblclick", + "cell-contextmenu", + "row-click", + "row-contextmenu", + "row-dblclick", + "header-click", + "header-contextmenu", + "sort-change", + "filter-change", + "current-change", + "header-dragend", + "expand-change", + "scroll" + ], + "slots": [ + "default", + "append", + "empty" + ], + "snippet": { + "name": "ElTable", + "props": { + "data": [ + { + "date": "2016-05-03", + "name": "Tom", + "address": "No. 189, Grove St, Los Angeles" + }, + { + "date": "2016-05-02", + "name": "Tom", + "address": "No. 189, Grove St, Los Angeles" + }, + { + "date": "2016-05-04", + "name": "Tom", + "address": "No. 189, Grove St, Los Angeles" + }, + { + "date": "2016-05-01", + "name": "Tom", + "address": "No. 189, Grove St, Los Angeles" + } + ] + }, + "children": [ + { + "name": "ElTableColumn", + "props": { + "prop": "date", + "label": "Date" + } + }, + { + "name": "ElTableColumn", + "props": { + "prop": "name", + "label": "Name" + } + }, + { + "name": "ElTableColumn", + "props": { + "prop": "address", + "label": "Address" + } + } + ] + } + }, + "ElTableColumn": { + "name": "ElTableColumn", + "label": "表头", + "categoryId": "data", + "package": "element-plus", + "props": [ + { + "name": "type", + "defaultValue": "default", + "options": [ + "default", + "selection", + "index", + "expand" + ], + "setters": "SelectSetter" + }, + { + "name": "index", + "defaultValue": 0, + "title": "如果设置了 type=index,可以通过传递 index 属性来自定义索引", + "setters": [ + "NumberSetter", + "FunctionSetter" + ] + }, + { + "name": "label", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "column-key", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "prop", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "width", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "min-width", + "defaultValue": "", + "title": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "fixed", + "defaultValue": "", + "options": [ + "left", + "right" + ], + "setters": [ + "SelectSetter", + "BooleanSetter" + ] + }, + { + "name": "render-header", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "sortable", + "defaultValue": false, + "options": [ + "", + "custom" + ], + "setters": [ + "BooleanSetter", + "SelectSetter" + ] + }, + { + "name": "sort-method", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "sort-by", + "defaultValue": "", + "setters": [ + "InputSetter", + "FunctionSetter", + "JSONSetter" + ] + }, + { + "name": "sort-orders", + "defaultValue": [ + "ascending", + "descending", + null + ], + "title": "数据在排序时所使用排序策略的轮转顺序,仅当 sortable 为 true 时有效。 需传入一个数组,随着用户点击表头,该列依次按照数组中元素的顺序进行排序", + "setters": "JSONSetter" + }, + { + "name": "resizable", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "formatter", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "show-overflow-tooltip", + "title": "当内容过长被隐藏时显示 tooltip", + "setters": [ + "BooleanSetter", + "JSONSetter" + ] + }, + { + "name": "align", + "defaultValue": "left", + "options": [ + "left", + "center", + "right" + ], + "setters": "SelectSetter" + }, + { + "name": "header-align", + "defaultValue": "left", + "options": [ + "left", + "center", + "right" + ], + "setters": "SelectSetter" + }, + { + "name": "class-name", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "label-class-name", + "defaultValue": "", + "title": "当前列标题的自定义类名", + "setters": "InputSetter" + }, + { + "name": "selectable", + "setters": "FunctionSetter" + }, + { + "name": "reserve-selection", + "defaultValue": false, + "title": "仅对 type=selection 的列有效, 请注意, 需指定 row-key 来让这个功能生效。", + "setters": "BooleanSetter" + }, + { + "name": "filters", + "defaultValue": "", + "setters": "JSONSetter" + }, + { + "name": "filter-placement", + "defaultValue": "", + "title": "过滤弹出框的定位,与 Tooltip 的 placement 属性相同", + "setters": "InputSetter" + }, + { + "name": "filter-class-name", + "defaultValue": "", + "setters": "StringSetter" + }, + { + "name": "filter-multiple", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "filter-method", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "filtered-value", + "defaultValue": "", + "setters": "JSONSetter" + } + ], + "slots": [ + { + "name": "default", + "params": [ + "row", + "column", + "$index" + ] + }, + { + "name": "header", + "params": [ + "column", + "$index" + ] + }, + { + "name": "filter-icon", + "params": [ + "filterOpened" + ] + } + ], + "snippet": { + "props": { + "label": "列名" + } + } + }, + "ElTabs": { + "name": "ElTabs", + "label": "标签页", + "doc": "https://element-plus.org/zh-CN/component/tabs.html", + "categoryId": "nav", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "type", + "setters": [ + { + "name": "SelectSetter", + "props": { + "closable": true + } + } + ], + "defaultValue": "", + "options": [ + "", + "card", + "border-card" + ] + }, + { + "name": "closable", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "addable", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "editable", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "tabPosition", + "defaultValue": "top", + "setters": "SelectSetter", + "options": [ + "top", + "right", + "bottom", + "left" + ] + }, + { + "name": "stretch", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "beforeLeave", + "defaultValue": "", + "setters": "FunctionSetter" + } + ], + "events": [ + { + "name": "tab-click" + }, + { + "name": "tab-change" + }, + { + "name": "tab-remove" + }, + { + "name": "tab-add" + }, + { + "name": "edit" + }, + { + "name": "update:modelValue" + } + ], + "slots": [ + "default", + "addIcon", + "add-icon" + ], + "snippet": { + "props": { + "modelValue": "1" + }, + "children": [ + { + "name": "ElTabPane", + "children": "面板一内容", + "props": { + "label": "面板一", + "name": "1" + } + }, + { + "name": "ElTabPane", + "children": "面板二内容", + "props": { + "label": "面板二", + "name": "2" + } + }, + { + "name": "ElTabPane", + "children": "面板三内容", + "props": { + "label": "面板三", + "name": "3" + } + } + ] + } + }, + "ElTabPane": { + "name": "ElTabPane", + "label": "标签页面板", + "categoryId": "nav", + "package": "element-plus", + "props": [ + { + "name": "label", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "name", + "defaultValue": "", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "closable", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "lazy", + "defaultValue": false, + "setters": "BooleanSetter" + } + ], + "slots": [ + { + "name": "default" + }, + { + "name": "label" + } + ], + "snippet": { + "props": { + "label": "面板标题" + }, + "children": "面板内容" + } + }, + "ElTag": { + "name": "ElTag", + "label": "标签", + "doc": "https://element-plus.org/zh-CN/component/tag.html", + "categoryId": "data", + "package": "element-plus", + "props": [ + { + "name": "type", + "defaultValue": "primary", + "options": [ + "primary", + "success", + "info", + "warning", + "danger" + ], + "setters": "SelectSetter" + }, + { + "name": "closable", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "disable-transitions", + "defaultValue": false, + "label": "渐变动画", + "setters": "BooleanSetter" + }, + { + "name": "hit", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "color", + "defaultValue": "", + "setters": "ColorSetter" + }, + { + "name": "size", + "defaultValue": "default", + "options": [ + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "effect", + "defaultValue": "light", + "options": [ + "dark", + "light", + "plain" + ], + "setters": "SelectSetter" + }, + { + "name": "round", + "defaultValue": false, + "setters": "BooleanSetter" + } + ], + "events": [ + "click", + "close" + ], + "slots": [ + "default" + ], + "snippet": { + "children": "标签一" + } + }, + "ElCheckTag": { + "name": "ElCheckTag", + "label": "可选中的标签", + "categoryId": "data", + "package": "element-plus", + "props": [ + { + "name": "checked", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "type", + "label": "type", + "title": "CheckTag 类型", + "setters": "SelectSetter", + "options": [ + "primary", + "success", + "info", + "warning", + "danger" + ], + "defaultValue": "primary" + } + ], + "events": [ + "change", + "update:checked" + ], + "slots": [ + "default" + ], + "snippet": { + "children": "标签一" + } + }, + "ElText": { + "name": "ElText", + "label": "文本", + "categoryId": "base", + "doc": "https://element-plus.org/zh-CN/component/text.html", + "props": [ + { + "name": "type", + "label": "type", + "title": "类型", + "setters": "SelectSetter", + "options": [ + "primary", + "success", + "warning", + "danger", + "info" + ] + }, + { + "name": "size", + "label": "size", + "title": "大小", + "setters": "SelectSetter", + "options": [ + "large", + "default", + "small" + ], + "defaultValue": "default" + }, + { + "name": "truncated", + "label": "truncated", + "title": "显示省略号", + "setters": "BooleanSetter", + "defaultValue": false + }, + { + "name": "lineClamp", + "label": "lineClamp", + "title": "最大行数", + "setters": [ + "StringSetter", + "NumberSetter" + ] + }, + { + "name": "tag", + "label": "tag", + "title": "自定义元素标签", + "setters": "StringSetter", + "defaultValue": "span" + } + ], + "slots": [ + "default" + ], + "snippet": { + "props": { + "type": "primary" + }, + "children": "这是一段Primary颜色的文本" + }, + "package": "element-plus" + }, + "ElTimeline": { + "name": "ElTimeline", + "label": "时间线", + "doc": "https://element-plus.org/zh-CN/component/timeline.html", + "categoryId": "form", + "package": "element-plus", + "slots": [ + "default" + ], + "snippet": { + "name": "ElTimeline", + "children": [ + { + "name": "ElTimelineItem", + "children": "Event start", + "props": { + "timestamp": "2018-04-15", + "size": "large", + "type": "primary", + "icon": "MoreFilled" + } + }, + { + "name": "ElTimelineItem", + "children": "Approved", + "props": { + "timestamp": "2018-04-13", + "color": "#0bbd87" + } + }, + { + "name": "ElTimelineItem", + "children": "Success", + "props": { + "timestamp": "2018-04-11", + "hollow": true, + "icon": "el-icon-more" + } + } + ] + } + }, + "ElTimelineItem": { + "name": "ElTimelineItem", + "label": "时间线子项", + "categoryId": "form", + "package": "element-plus", + "props": [ + { + "name": "timestamp", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "hide-timestamp", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "center", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "placement", + "defaultValue": "bottom", + "options": [ + "top", + "bottom" + ], + "setters": "SelectSetter" + }, + { + "name": "type", + "defaultValue": "", + "options": [ + "primary", + "success", + "warning", + "danger", + "info" + ], + "setters": "SelectSetter" + }, + { + "name": "color", + "defaultValue": "", + "options": [ + "hsl", + "hsv", + "hex", + "rgb" + ], + "setters": "SelectSetter" + }, + { + "name": "size", + "defaultValue": "normal", + "options": [ + "normal", + "large" + ], + "setters": "SelectSetter" + }, + { + "name": "icon", + "defaultValue": "", + "setters": "IconSetter" + }, + { + "name": "hollow", + "defaultValue": false, + "setters": "BooleanSetter" + } + ], + "slots": [ + "default", + "dot" + ] + }, + "ElTimePicker": { + "name": "ElTimePicker", + "label": "时间选择器", + "childIncludes": false, + "doc": "https://element-plus.org/zh-CN/component/time-picker.html", + "categoryId": "form", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "defaultValue": "", + "setters": [ + "NumberSetter", + "StringSetter", + "ArraySetter", + "ExpressionSetter" + ] + }, + { + "name": "readonly", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "editable", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "clearable", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "size", + "defaultValue": "default", + "options": [ + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "placeholder", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "startPlaceholder", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "endPlaceholder", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "isRange", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "arrowControl", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "popperClass", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "rangeSeparator", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "format", + "defaultValue": "HH:mm:ss", + "setters": "InputSetter" + }, + { + "name": "defaultValue", + "defaultValue": "", + "setters": [ + "InputSetter", + "ExpressionSetter" + ] + }, + { + "name": "valueFormat", + "title": "可选,绑定值的格式。 不指定则绑定值为 Date 对象", + "defaultValue": "", + "setters": "StringSetter" + }, + { + "name": "id", + "defaultValue": "", + "setters": [ + "InputSetter" + ] + }, + { + "name": "name", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "ariaLabel", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "prefixIcon", + "defaultValue": "Clock", + "setters": "InputSetter" + }, + { + "name": "clearIcon", + "defaultValue": "CircleClose", + "setters": "InputSetter" + }, + { + "name": "disabledHours", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "disabledMinutes", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "disabledSeconds", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "teleported", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "tabindex", + "label": "tabindex", + "title": "输入框的 tabindex", + "setters": [ + "StringSetter", + "NumberSetter" + ], + "defaultValue": 0 + }, + { + "name": "emptyValues", + "title": "组件的空值配置", + "setters": "ArraySetter" + }, + { + "name": "valueOnClear", + "title": "清空选项的值", + "setters": [ + "StringSetter", + "NumberSetter", + "BooleanSetter", + "FunctionSetter" + ] + } + ], + "events": [ + "change", + "blur", + "focus", + "clear", + "visible-change", + "update:modelValue" + ] + }, + "ElTimeSelect": { + "name": "ElTimeSelect", + "label": "时间选择", + "childIncludes": false, + "doc": "https://element-plus.org/zh-CN/component/time-select.html", + "categoryId": "form", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "defaultValue": "", + "setters": [ + "StringSetter", + "ExpressionSetter" + ] + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "editable", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "clearable", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "size", + "defaultValue": "default", + "options": [ + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "placeholder", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "name", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "effect", + "defaultValue": "light", + "options": [ + "dark", + "light" + ], + "setters": "SelectSetter" + }, + { + "name": "prefixIcon", + "defaultValue": "Clock", + "setters": "InputSetter" + }, + { + "name": "clearIcon", + "defaultValue": "CircleClose", + "setters": "InputSetter" + }, + { + "name": "start", + "defaultValue": "09:00", + "setters": "InputSetter" + }, + { + "name": "end", + "defaultValue": "18:00", + "setters": "InputSetter" + }, + { + "name": "step", + "defaultValue": "00:30", + "setters": "InputSetter" + }, + { + "name": "minTime", + "defaultValue": "00:00", + "setters": "InputSetter" + }, + { + "name": "maxTime", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "format", + "defaultValue": "HH:mm", + "setters": "InputSetter" + }, + { + "name": "emptyValues", + "title": "组件的空值配置", + "setters": "ArraySetter" + }, + { + "name": "valueOnClear", + "title": "清空选项的值", + "setters": [ + "StringSetter", + "NumberSetter", + "BooleanSetter", + "FunctionSetter" + ] + } + ], + "events": [ + "change", + "blur", + "focus", + "clear", + "update:modelValue" + ] + }, + "ElTooltip": { + "name": "ElTooltip", + "childIncludes": true, + "label": "文字提示", + "doc": "https://element-plus.org/zh-CN/component/tooltip.html", + "categoryId": "other", + "package": "element-plus", + "props": [ + { + "name": "appendTo", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "effect", + "defaultValue": "dark", + "setters": "InputSetter" + }, + { + "name": "content", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "rawContent", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "placement", + "defaultValue": "bottom", + "setters": "SelectSetter", + "options": [ + "top", + "top-start", + "top-end", + "bottom", + "bottom-start", + "bottom-end", + "left", + "left-start", + "left-end", + "right", + "right-start", + "right-end" + ] + }, + { + "name": "fallback-placements", + "setters": "ArraySetter" + }, + { + "name": "visible", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "offset", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "transition", + "defaultValue": "el-fade-in-linear", + "setters": "InputSetter" + }, + { + "name": "popperOptions", + "defaultValue": { + "boundariesElement": "body", + "gpuAcceleration": false + }, + "setters": "JSONSetter" + }, + { + "name": "showAfter", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "show-arrow", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "hide-after", + "defaultValue": 200, + "setters": "NumberSetter" + }, + { + "name": "auto-close", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "popper-class", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "enterable", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "teleported", + "label": "teleported", + "title": "是否使用 teleport。设置成 true则会被追加到 append-to 的位置", + "setters": "BooleanSetter", + "defaultValue": true + }, + { + "name": "trigger", + "label": "trigger", + "title": "如何触发 Tooltip", + "setters": "SelectSetter", + "options": [ + "hover", + "click", + "focus", + "contextmenu" + ], + "defaultValue": "hover" + }, + { + "name": "virtual-triggering", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "virtual-ref", + "defaultValue": "", + "setters": "ExpressionSetter" + }, + { + "name": "trigger-keys", + "defaultValue": [ + "Enter", + "Space" + ], + "setters": "ExpressionSetter" + }, + { + "name": "persistent", + "setters": "BooleanSetter" + }, + { + "name": "ariaLabel", + "label": "ariaLabel", + "title": "和 aria-label 属性保持一致", + "setters": "StringSetter" + } + ], + "events": [ + { + "name": "confirm" + }, + { + "name": "cancel" + }, + { + "name": "update:visible " + } + ], + "slots": [ + { + "name": "default" + }, + { + "name": "content" + } + ], + "snippet": { + "name": "ElTooltip", + "children": "文字提示", + "props": { + "content": "自定义弹出框的内容" + } + } + }, + "ElTour": { + "name": "ElTour", + "label": "漫游式引导", + "doc": "https://element-plus.org/zh-CN/component/tour.html", + "categoryId": "data", + "package": "element-plus", + "props": [ + { + "name": "showArrow", + "label": "showArrow", + "title": "是否显示箭头", + "setters": "BooleanSetter", + "defaultValue": true + }, + { + "name": "placement", + "label": "placement", + "title": "引导卡片相对于目标元素的位置", + "setters": "SelectSetter", + "options": [ + "top", + "top-start", + "top-end", + "bottom", + "bottom-start", + "bottom-end", + "left", + "left-start", + "left-end", + "right", + "right-start", + "right-end" + ], + "defaultValue": "bottom" + }, + { + "name": "contentStyle", + "label": "contentStyle", + "title": "为content自定义样式", + "setters": "ObjectSetter" + }, + { + "name": "mask", + "label": "mask", + "title": "是否启用遮罩,通过自定义属性改变遮罩样式以及填充的颜色", + "setters": [ + "BooleanSetter", + "ObjectSetter" + ], + "defaultValue": true + }, + { + "name": "type", + "label": "type", + "title": "类型,影响底色与文字颜色", + "setters": "SelectSetter", + "options": [ + "default", + "primary" + ], + "defaultValue": "default" + }, + { + "name": "modelValue", + "label": "modelValue", + "title": "打开引导", + "setters": "BooleanSetter", + "defaultValue": false + }, + { + "name": "current", + "label": "current", + "title": "当前值", + "setters": "NumberSetter" + }, + { + "name": "scroll-into-view-options", + "label": "scroll-into-view-options", + "title": "是否支持当前元素滚动到视窗内,也可传入配置指定滚动视窗的相关参数", + "setters": [ + "BooleanSetter", + "ObjectSetter" + ], + "defaultValue": { + "block": "center" + } + }, + { + "name": "z-index", + "label": "z-index", + "title": "Tour 的层级", + "setters": "NumberSetter", + "defaultValue": 2001 + }, + { + "name": "show-close", + "label": "show-close", + "title": "是否显示关闭按钮", + "setters": "BooleanSetter", + "defaultValue": true + }, + { + "name": "close-icon", + "label": "close-icon", + "title": "自定义关闭图标", + "setters": "IconSetter", + "defaultValue": "Close" + }, + { + "name": "close-on-press-escape", + "label": "close-on-press-escape", + "title": "是否可以通过按下 ESC 关闭引导", + "setters": "BooleanSetter", + "defaultValue": true + }, + { + "name": "target-area-clickable", + "label": "target-area-clickable", + "title": "启用蒙层时,target 元素区域是否可以点击。", + "setters": "BooleanSetter", + "defaultValue": true + } + ], + "slots": [ + { + "name": "default" + }, + { + "name": "indicators", + "params": [ + "current", + "total" + ] + }, + { + "name": "close-icon" + } + ], + "events": [ + "close", + "finish", + "change", + "update:modelValue", + "update:current" + ], + "snippet": { + "props": { + "modelValue": true + }, + "children": [ + { + "name": "ElTourStep", + "props": { + "title": "Center", + "description": "Displayed in the center of screen." + } + }, + { + "name": "ElTourStep", + "props": { + "title": "Center", + "description": "Displayed in the center of screen." + } + }, + { + "name": "ElTourStep", + "props": { + "title": "Center", + "description": "Displayed in the center of screen." + } + } + ] + } + }, + "ElTourStep": { + "name": "ElTourStep", + "label": "漫游式引导步", + "parentIncludes": [ + "ElTour" + ], + "doc": "https://element-plus.org/zh-CN/component/tour.html", + "categoryId": "data", + "package": "element-plus", + "props": [ + { + "name": "target", + "label": "target", + "title": "获取引导卡片指向的元素, 为空时居中于屏幕。", + "setters": [ + "StringSetter", + "FunctionSetter" + ] + }, + { + "name": "showArrow", + "label": "showArrow", + "title": "是否显示箭头", + "setters": "BooleanSetter", + "defaultValue": true + }, + { + "name": "title", + "label": "title", + "title": "标题", + "setters": "StringSetter" + }, + { + "name": "description", + "label": "description", + "title": "主要描述部分", + "setters": "StringSetter" + }, + { + "name": "placement", + "label": "placement", + "title": "引导卡片相对于目标元素的位置", + "setters": "SelectSetter", + "options": [ + "top", + "top-start", + "top-end", + "bottom", + "bottom-start", + "bottom-end", + "left", + "left-start", + "left-end", + "right", + "right-start", + "right-end" + ], + "defaultValue": "bottom" + }, + { + "name": "contentStyle", + "label": "contentStyle", + "title": "为content自定义样式", + "setters": "ObjectSetter" + }, + { + "name": "mask", + "label": "mask", + "title": "是否启用蒙层,也可传入配置改变蒙层样式和填充色", + "setters": [ + "BooleanSetter", + "ObjectSetter" + ], + "defaultValue": true + }, + { + "name": "type", + "label": "type", + "title": "类型,影响底色与文字颜色", + "setters": "SelectSetter", + "options": [ + "default", + "primary" + ], + "defaultValue": "default" + }, + { + "name": "nextButtonProps", + "label": "nextButtonProps", + "title": "“下一步”按钮的属性", + "setters": "ObjectSetter" + }, + { + "name": "prev-button-props", + "label": "prev-button-props", + "title": "“上一步”按钮的属性", + "setters": "ObjectSetter" + }, + { + "name": "scrollIntoViewOptions", + "label": "scrollIntoViewOptions", + "title": "是否支持当前元素滚动到视窗内,也可传入配置指定滚动视窗的相关参数", + "setters": [ + "BooleanSetter", + "ObjectSetter" + ] + }, + { + "name": "showClose", + "label": "showClose", + "title": "是否显示关闭按钮", + "setters": "BooleanSetter", + "defaultValue": true + }, + { + "name": "closeIcon", + "label": "closeIcon", + "title": "自定义关闭图标", + "setters": [ + "IconSetter" + ] + } + ], + "slots": [ + { + "name": "default" + }, + { + "name": "header" + }, + { + "name": "close-icon" + } + ], + "events": [ + "close" + ], + "snippet": { + "props": { + "title": "Center", + "description": "Displayed in the center of screen." + } + } + }, + "ElTransfer": { + "name": "ElTransfer", + "label": "穿梭框", + "categoryId": "form", + "doc": "https://element-plus.org/zh-CN/component/transfer.html", + "package": "element-plus", + "props": [ + { + "name": "modelValue", + "defaultValue": "", + "setters": [ + "ArraySetter", + "ExpressionSetter" + ] + }, + { + "name": "data", + "defaultValue": [], + "setters": [ + "ArraySetter", + "JSONSetter" + ] + }, + { + "name": "filterable", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "filterPlaceholder", + "defaultValue": "Enter keyword", + "setters": "InputSetter" + }, + { + "name": "filterMethod", + "setters": "FunctionSetter" + }, + { + "name": "targetOrder", + "defaultValue": "original", + "options": [ + "original", + "push", + "unshift" + ], + "setters": "SelectSetter" + }, + { + "name": "titles", + "defaultValue": [], + "setters": [ + "ArraySetter", + "JSONSetter" + ] + }, + { + "name": "buttonTexts", + "defaultValue": [], + "setters": [ + "ArraySetter", + "JSONSetter" + ] + }, + { + "name": "renderContent", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "format", + "defaultValue": "", + "setters": [ + "ObjectSetter", + "JSONSetter" + ] + }, + { + "name": "props", + "defaultValue": "", + "setters": [ + "ObjectSetter", + "JSONSetter" + ] + }, + { + "name": "leftDefaultChecked", + "defaultValue": [], + "title": "初始状态下左侧列表的已勾选项的 key 数组", + "setters": [ + "ArraySetter", + "JSONSetter" + ] + }, + { + "name": "rightDefaultChecked", + "defaultValue": [], + "title": "初始状态下右侧列表的已勾选项的 key 数组", + "setters": [ + "ArraySetter", + "JSONSetter" + ] + }, + { + "name": "validateEvent", + "defaultValue": true, + "setters": "BooleanSetter" + } + ], + "slots": [ + { + "name": "default", + "params": [ + "options" + ] + }, + { + "name": "left-footer" + }, + { + "name": "right-footer" + }, + { + "name": "left-empty" + }, + { + "name": "right-empty" + } + ], + "events": [ + { + "name": "change" + }, + { + "name": "left-check-change" + }, + { + "name": "right-check-change" + }, + { + "name": "update:modelValue" + } + ] + }, + "ElTree": { + "name": "ElTree", + "label": "树形控件", + "doc": "https://element-plus.org/zh-CN/component/tree.html", + "categoryId": "data", + "package": "element-plus", + "props": [ + { + "name": "data", + "defaultValue": "", + "setters": "JSONSetter" + }, + { + "name": "empty-text", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "node-key", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "props", + "defaultValue": "", + "setters": "JSONSetter" + }, + { + "name": "render-after-expand", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "load", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "render-content", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "highlight-current", + "defaultValue": false, + "label": "高亮当前节点", + "setters": "BooleanSetter" + }, + { + "name": "default-expand-all", + "defaultValue": false, + "label": "展开所有节点", + "setters": "BooleanSetter" + }, + { + "name": "expand-on-click-node", + "defaultValue": true, + "title": "是否在点击节点的时候展开或者收缩节点, 默认值为 true,如果为 false,则只有点箭头图标的时候才会展开或者收缩节点。", + "label": "点击展开", + "setters": "BooleanSetter" + }, + { + "name": "check-on-click-node", + "defaultValue": false, + "title": "是否在点击节点的时候选中节点,默认值为 false,即只有在点击复选框时才会选中节点。", + "label": "点击选中", + "setters": "BooleanSetter" + }, + { + "name": "auto-expand-parent", + "defaultValue": true, + "title": "展开子节点的时候是否自动展开父节点", + "label": "自动展开", + "setters": "BooleanSetter" + }, + { + "name": "default-expanded-keys", + "defaultValue": "", + "title": "默认展开的节点的 key 的数组", + "label": "默认展开", + "setters": "JSONSetter" + }, + { + "name": "show-checkbox", + "defaultValue": false, + "label": "显示checkbox", + "setters": "BooleanSetter" + }, + { + "name": "check-strictly", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "default-checked-keys", + "defaultValue": "", + "title": "默认勾选的节点的 key 的数组", + "label": "默认勾选", + "setters": "JSONSetter" + }, + { + "name": "current-node-key", + "defaultValue": "", + "label": "当前节点key", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "filter-node-method", + "defaultValue": "", + "title": "filter-node-method 对树节点进行筛选时执行的方法, 返回 false 则表示这个节点会被隐藏", + "label": "筛选节点函数", + "setters": "FunctionSetter" + }, + { + "name": "accordion", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "indent", + "defaultValue": 16, + "setters": "NumberSetter" + }, + { + "name": "icon", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "lazy", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "draggable", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "allow-drag", + "defaultValue": "", + "title": "判断节点能否被拖拽 如果返回 false ,节点不能被拖动", + "setters": "FunctionSetter" + }, + { + "name": "allow-drop", + "defaultValue": "", + "title": "拖拽时判定目标节点能否成为拖动目标位置。 如果返回 false ,拖动节点不能被拖放到目标节点。 type 参数有三种情况:prev、inner 和 next,分别表示放置在目标节点前、插入至目标节点和放置在目标节点后", + "setters": "FunctionSetter" + } + ], + "events": [ + "node-click", + "node-contextmenu", + "check-change", + "check", + "current-change", + "node-expand", + "node-collapse", + "node-drag-start", + "node-drag-enter", + "node-drag-leave", + "node-drag-over", + "node-drop", + "node-drag-end" + ], + "slots": [ + { + "name": "default", + "params": [ + "node", + "data" + ] + }, + { + "name": "empty" + } + ], + "snippet": { + "props": { + "data": [ + { + "value": "guide", + "label": "Guide", + "children": [ + { + "value": "disciplines", + "label": "Disciplines", + "children": [ + { + "value": "consistency", + "label": "Consistency" + }, + { + "value": "feedback", + "label": "Feedback" + }, + { + "value": "efficiency", + "label": "Efficiency" + }, + { + "value": "controllability", + "label": "Controllability" + } + ] + }, + { + "value": "navigation", + "label": "Navigation", + "children": [ + { + "value": "side nav", + "label": "Side Navigation" + }, + { + "value": "top nav", + "label": "Top Navigation" + } + ] + } + ] + }, + { + "value": "component", + "label": "Component", + "children": [ + { + "value": "basic", + "label": "Basic", + "children": [ + { + "value": "layout", + "label": "Layout" + }, + { + "value": "color", + "label": "Color" + }, + { + "value": "typography", + "label": "Typography" + }, + { + "value": "icon", + "label": "Icon" + }, + { + "value": "button", + "label": "Button" + } + ] + }, + { + "value": "form", + "label": "Form", + "children": [ + { + "value": "radio", + "label": "Radio" + }, + { + "value": "checkbox", + "label": "Checkbox" + }, + { + "value": "input", + "label": "Input" + }, + { + "value": "input-number", + "label": "InputNumber" + }, + { + "value": "select", + "label": "Select" + }, + { + "value": "cascader", + "label": "Cascader" + }, + { + "value": "switch", + "label": "Switch" + }, + { + "value": "slider", + "label": "Slider" + }, + { + "value": "time-picker", + "label": "TimePicker" + }, + { + "value": "date-picker", + "label": "DatePicker" + }, + { + "value": "datetime-picker", + "label": "DateTimePicker" + }, + { + "value": "upload", + "label": "Upload" + }, + { + "value": "rate", + "label": "Rate" + }, + { + "value": "form", + "label": "Form" + } + ] + }, + { + "value": "data", + "label": "Data", + "children": [ + { + "value": "table", + "label": "Table" + }, + { + "value": "tag", + "label": "Tag" + }, + { + "value": "progress", + "label": "Progress" + }, + { + "value": "tree", + "label": "Tree" + }, + { + "value": "pagination", + "label": "Pagination" + }, + { + "value": "badge", + "label": "Badge" + } + ] + }, + { + "value": "notice", + "label": "Notice", + "children": [ + { + "value": "alert", + "label": "Alert" + }, + { + "value": "loading", + "label": "Loading" + }, + { + "value": "message", + "label": "Message" + }, + { + "value": "message-box", + "label": "MessageBox" + }, + { + "value": "notification", + "label": "Notification" + } + ] + }, + { + "value": "navigation", + "label": "Navigation", + "children": [ + { + "value": "menu", + "label": "Menu" + }, + { + "value": "tabs", + "label": "Tabs" + }, + { + "value": "breadcrumb", + "label": "Breadcrumb" + }, + { + "value": "dropdown", + "label": "Dropdown" + }, + { + "value": "steps", + "label": "Steps" + } + ] + }, + { + "value": "others", + "label": "Others", + "children": [ + { + "value": "dialog", + "label": "Dialog" + }, + { + "value": "tooltip", + "label": "Tooltip" + }, + { + "value": "popover", + "label": "Popover" + }, + { + "value": "card", + "label": "Card" + }, + { + "value": "carousel", + "label": "Carousel" + }, + { + "value": "collapse", + "label": "Collapse" + } + ] + } + ] + }, + { + "value": "resource", + "label": "Resource", + "children": [ + { + "value": "axure", + "label": "Axure Components" + }, + { + "value": "sketch", + "label": "Sketch Templates" + }, + { + "value": "docs", + "label": "Design Documentation" + } + ] + } + ] + } + } + }, + "ElTreeSelect": { + "name": "ElTreeSelect", + "label": "树形选择", + "doc": "https://element-plus.org/zh-CN/component/tree-select.html", + "categoryId": "data", + "package": "element-plus", + "props": [ + { + "name": "cacheData", + "label": "cacheData", + "title": "懒加载节点的缓存数据,结构与数据相同,用于获取未加载数据的标签", + "setters": "ArraySetter", + "defaultValue": [] + }, + { + "name": "data", + "defaultValue": "", + "setters": "JSONSetter" + }, + { + "name": "empty-text", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "node-key", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "props", + "defaultValue": "", + "setters": "JSONSetter" + }, + { + "name": "renderAfterExpand", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "load", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "renderContent", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "highlightCurrent", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "defaultExpandAll", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "expandOnClickNode", + "defaultValue": true, + "title": "是否在点击节点的时候展开或者收缩节点, 默认值为 true,如果为 false,则只有点箭头图标的时候才会展开或者收缩节点。", + "setters": "BooleanSetter" + }, + { + "name": "checkOnClickNode", + "defaultValue": false, + "title": "是否在点击节点的时候选中节点,默认值为 false,即只有在点击复选框时才会选中节点。", + "setters": "BooleanSetter" + }, + { + "name": "autoExpandParent", + "defaultValue": true, + "title": "展开子节点的时候是否自动展开父节点", + "setters": "BooleanSetter" + }, + { + "name": "defaultExpandedKeys", + "defaultValue": "", + "title": "默认展开的节点的 key 的数组", + "label": "默认展开", + "setters": "JSONSetter" + }, + { + "name": "showCheckbox", + "defaultValue": false, + "label": "显示checkbox", + "setters": "BooleanSetter" + }, + { + "name": "checkStrictly", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "defaultCheckedKeys", + "defaultValue": "", + "title": "默认勾选的节点的 key 的数组", + "label": "默认勾选", + "setters": "JSONSetter" + }, + { + "name": "currentNodeKey", + "defaultValue": "", + "label": "当前节点key", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "filterNodeMethod", + "defaultValue": "", + "title": "filter-node-method 对树节点进行筛选时执行的方法, 返回 false 则表示这个节点会被隐藏", + "label": "筛选节点函数", + "setters": "FunctionSetter" + }, + { + "name": "accordion", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "indent", + "defaultValue": 16, + "setters": "NumberSetter" + }, + { + "name": "icon", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "lazy", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "draggable", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "allowDrag", + "defaultValue": "", + "title": "判断节点能否被拖拽 如果返回 false ,节点不能被拖动", + "setters": "FunctionSetter" + }, + { + "name": "allowDrop", + "defaultValue": "", + "title": "拖拽时判定目标节点能否成为拖动目标位置。 如果返回 false ,拖动节点不能被拖放到目标节点。 type 参数有三种情况:prev、inner 和 next,分别表示放置在目标节点前、插入至目标节点和放置在目标节点后", + "setters": "FunctionSetter" + }, + { + "name": "modelValue", + "defaultValue": "", + "setters": [ + "StringSetter", + "NumberSetter", + "BooleanSetter", + "ObjectSetter", + "ArraySetter" + ] + }, + { + "name": "multiple", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "valueKey", + "defaultValue": "value", + "setters": "InputSetter" + }, + { + "name": "size", + "defaultValue": "default", + "options": [ + "large", + "default", + "small" + ], + "setters": "SelectSetter" + }, + { + "name": "clearable", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "collapseTags", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "collapseTagsTooltip", + "label": "Tooltip", + "title": "当鼠标悬停于折叠标签的文本时,是否显示所有选中的标签。 要使用此属性,collapse-tags属性必须设定为 true", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "multipleLimit", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "name", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "effect", + "defaultValue": "light", + "options": [ + "dark", + "light" + ], + "setters": "SelectSetter" + }, + { + "name": "autocomplete", + "defaultValue": "off", + "setters": "InputSetter" + }, + { + "name": "placeholder", + "defaultValue": "Select", + "setters": "InputSetter" + }, + { + "name": "filterable", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "allowCreate", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "filterMethod", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "remote", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "remoteMethod", + "defaultValue": "", + "setters": "FunctionSetter" + }, + { + "name": "remoteShowSuffix", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "loading", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "loadingText", + "defaultValue": "Loading", + "setters": "InputSetter" + }, + { + "name": "noMatchText", + "defaultValue": "No matching data", + "setters": "InputSetter" + }, + { + "name": "noDataText", + "defaultValue": "No data", + "setters": "InputSetter" + }, + { + "name": "popperClass", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "reserveKeyword", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "defaultFirstOption", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "popperAppendToBody", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "teleported", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "appendTo", + "setters": "StringSetter" + }, + { + "name": "persistent", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "automaticDropdown", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "clearIcon", + "defaultValue": "CircleClose", + "setters": "InputSetter" + }, + { + "name": "fitInputWidth", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "suffixIcon", + "defaultValue": "ArrowUp", + "setters": "InputSetter" + }, + { + "name": "tagType", + "defaultValue": "info", + "options": [ + "success", + "info", + "warning", + "danger" + ], + "setters": "SelectSetter" + }, + { + "name": "tagEffect", + "defaultValue": "light", + "options": [ + "", + "light", + "dark", + "plain" + ], + "setters": "SelectSetter" + }, + { + "name": "validateEvent", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "offset", + "defaultValue": 12, + "setters": "NumberSetter" + }, + { + "name": "showArrow", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "placement", + "label": "placement", + "title": "下拉框出现的位置", + "setters": "SelectSetter", + "options": [ + "top", + "top-start", + "top-end", + "bottom", + "bottom-start", + "bottom-end", + "left", + "left-start", + "left-end", + "right", + "right-start", + "right-end" + ], + "defaultValue": "bottom-start" + }, + { + "name": "fallbackPlacements", + "label": "fallbackPlacements", + "title": "dropdown 可用的 positions", + "setters": "ArraySetter", + "defaultValue": [ + "bottom-start", + "top-start", + "right", + "left" + ] + }, + { + "name": "maxCollapseTags", + "label": "maxCollapseTags", + "title": "需要显示的 Tag 的最大数量 只有当 collapse-tags 设置为 true 时才会生效。", + "setters": "NumberSetter", + "defaultValue": 1 + }, + { + "name": "popperOptions", + "label": "popperOptions", + "title": "popper.js 参数", + "setters": "ObjectSetter", + "defaultValue": {} + }, + { + "name": "ariaLabel", + "label": "ariaLabel", + "title": "等价于原生 input aria-label 属性", + "setters": "StringSetter" + }, + { + "name": "emptyValues", + "setters": "ArraySetter" + }, + { + "name": "valueOnClear", + "setters": [ + "StringSetter", + "NumberSetter", + "BooleanSetter", + "FunctionSetter" + ] + }, + { + "name": "suffixTransition", + "title": "下拉菜单显示/消失时后缀图标的动画", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "tabindex", + "setters": [ + "StringSetter", + "NumberSetter" + ] + } + ], + "events": [ + "node-click", + "node-contextmenu", + "check-change", + "check", + "current-change", + "node-expand", + "node-collapse", + "node-drag-start", + "node-drag-enter", + "node-drag-leave", + "node-drag-over", + "node-drop", + "node-drag-end", + "change", + "visible-change", + "remove-tag", + "clear", + "blur", + "focus", + "update:modelValue" + ], + "slots": [ + { + "name": "default", + "params": [ + "node", + "data" + ] + }, + { + "name": "empty" + }, + { + "name": "header" + }, + { + "name": "footer" + }, + { + "name": "prefix" + }, + { + "name": "tag" + }, + { + "name": "loading" + }, + { + "name": "label" + } + ], + "snippet": { + "props": { + "data": [ + { + "value": "1", + "label": "Level one 1", + "children": [ + { + "value": "1-1", + "label": "Level two 1-1", + "children": [ + { + "value": "1-1-1", + "label": "Level three 1-1-1" + } + ] + } + ] + }, + { + "value": "2", + "label": "Level one 2", + "children": [ + { + "value": "2-1", + "label": "Level two 2-1", + "children": [ + { + "value": "2-1-1", + "label": "Level three 2-1-1" + } + ] + }, + { + "value": "2-2", + "label": "Level two 2-2", + "children": [ + { + "value": "2-2-1", + "label": "Level three 2-2-1" + } + ] + } + ] + }, + { + "value": "3", + "label": "Level one 3", + "children": [ + { + "value": "3-1", + "label": "Level two 3-1", + "children": [ + { + "value": "3-1-1", + "label": "Level three 3-1-1" + } + ] + }, + { + "value": "3-2", + "label": "Level two 3-2", + "children": [ + { + "value": "3-2-1", + "label": "Level three 3-2-1" + } + ] + } + ] + } + ], + "renderAfterExpand": false, + "style": { + "width": "240px" + } + } + } + }, + "ElTreeV2": { + "name": "ElTreeV2", + "label": "虚拟化树形控件", + "doc": "https://element-plus.org/zh-CN/component/tree-v2.html", + "categoryId": "data", + "package": "element-plus", + "props": [ + { + "name": "data", + "defaultValue": "", + "setters": [ + "ArraySetter", + "JSONSetter" + ] + }, + { + "name": "empty-text", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "props", + "defaultValue": "", + "setters": [ + "ObjectSetter", + "JSONSetter" + ] + }, + { + "name": "highlight-current", + "defaultValue": false, + "label": "高亮选中节点", + "setters": "BooleanSetter" + }, + { + "name": "expand-on-click-node", + "defaultValue": true, + "title": "是否在点击节点的时候展开或者收缩节点, 默认值为 true,如果为 false,则只有点箭头图标的时候才会展开或者收缩节点", + "label": "expand-on", + "setters": "BooleanSetter" + }, + { + "name": "check-on-click-node", + "defaultValue": false, + "title": "是否在点击节点的时候选中节点,默认值为 false,即只有在点击复选框时才会选中节点", + "label": "check-on", + "setters": "BooleanSetter" + }, + { + "name": "default-expanded-keys", + "defaultValue": "", + "title": "默认展开的节点的 key 的数组", + "label": "check-on", + "setters": "JSONSetter" + }, + { + "name": "show-checkbox", + "defaultValue": false, + "title": "节点是否可被选择", + "label": "check-on", + "setters": "BooleanSetter" + }, + { + "name": "check-strictly", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "default-checked-keys", + "defaultValue": "", + "title": "默认勾选的节点的 key 的数组", + "label": "checked-keys", + "setters": "JSONSetter" + }, + { + "name": "current-node-key", + "defaultValue": "", + "label": "选中的节点", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "filter-method", + "defaultValue": "", + "title": "对树节点进行筛选时执行的方法,返回 true 表示这个节点可以显示, 返回 false 则表示这个节点会被隐藏", + "setters": "JSONSetter" + }, + { + "name": "indent", + "defaultValue": 16, + "title": "相邻级节点间的水平缩进,单位为像素", + "setters": "NumberSetter" + }, + { + "name": "icon", + "defaultValue": "", + "title": "相邻级节点间的水平缩进,单位为像素", + "setters": "InputSetter" + }, + { + "name": "itemSize ", + "label": "itemSize ", + "title": "自定义树节点的高度", + "setters": "NumberSetter", + "defaultValue": 26 + } + ], + "events": [ + "node-click", + "node-drop", + "node-contextmenu", + "check-change", + "check", + "current-change", + "node-expand", + "node-collapse" + ], + "slots": [ + { + "name": "default", + "params": [ + "node", + "data" + ] + } + ] + }, + "ElUpload": { + "name": "ElUpload", + "label": "上传", + "doc": "https://element-plus.org/zh-CN/component/upload.html", + "categoryId": "form", + "package": "element-plus", + "props": [ + { + "name": "action", + "defaultValue": "#", + "title": "请求 URL", + "setters": "InputSetter" + }, + { + "name": "headers", + "defaultValue": "", + "setters": "JSONSetter" + }, + { + "name": "method", + "defaultValue": "post", + "setters": "InputSetter" + }, + { + "name": "multiple", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "data", + "defaultValue": "", + "setters": "ExpressionSetter" + }, + { + "name": "name", + "defaultValue": "file", + "setters": "ExpressionSetter" + }, + { + "name": "withCredentials", + "defaultValue": false, + "title": "支持发送 cookie 凭证信息", + "setters": "BooleanSetter" + }, + { + "name": "showFileList", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "drag", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "accept", + "defaultValue": "", + "setters": "InputSetter" + }, + { + "name": "crossorigin", + "options": [ + "", + "anonymous", + "use-credentials" + ], + "setters": "SelectSetter" + }, + { + "name": "onPreview", + "setters": "FunctionSetter" + }, + { + "name": "onRemove", + "setters": "FunctionSetter" + }, + { + "name": "onSuccess", + "setters": "FunctionSetter" + }, + { + "name": "onError", + "setters": [ + "FunctionSetter", + "ExpressionSetter" + ] + }, + { + "name": "onProgress", + "setters": [ + "FunctionSetter", + "ExpressionSetter" + ] + }, + { + "name": "onChange", + "setters": "FunctionSetter" + }, + { + "name": "onExceed", + "setters": "FunctionSetter" + }, + { + "name": "beforeUpload", + "setters": "FunctionSetter" + }, + { + "name": "beforeRemove", + "setters": "FunctionSetter" + }, + { + "name": "fileList", + "setters": [ + "ArraySetter", + "JSONSetter" + ] + }, + { + "name": "listType", + "defaultValue": "text", + "options": [ + "text", + "picture", + "picture-card" + ], + "setters": "SelectSetter" + }, + { + "name": "autoUpload", + "defaultValue": true, + "setters": "BooleanSetter" + }, + { + "name": "httpRequest", + "setters": "FunctionSetter" + }, + { + "name": "disabled", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "limit", + "defaultValue": "", + "setters": "NumberSetter" + } + ], + "slots": [ + { + "name": "default" + }, + { + "name": "trigger" + }, + { + "name": "tip" + }, + { + "name": "file" + } + ], + "events": [ + { + "name": "update:fileList" + } + ], + "snippet": { + "props": { + "action": "https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15", + "multiple": true, + "fileList": [ + { + "name": "element-plus-logo.svg", + "url": "https://element-plus.org/images/element-plus-logo.svg" + } + ] + }, + "children": [ + { + "name": "ElButton", + "props": { + "type": "primary" + }, + "children": "选择文件" + } + ] + } + }, + "ElTableV2": { + "name": "ElTableV2", + "label": "虚拟化表格", + "categoryId": "data", + "doc": "https://element-plus.org/zh-CN/component/table-v2.html", + "package": "element-plus", + "props": [ + { + "name": "cache", + "defaultValue": 2, + "setters": "NumberSetter" + }, + { + "name": "estimated-row-height", + "defaultValue": "", + "title": "渲染动态的单元格的预估高度", + "label": "row-height", + "setters": "NumberSetter" + }, + { + "name": "header-class", + "defaultValue": "", + "setters": [ + "InputSetter", + "ExpressionSetter" + ] + }, + { + "name": "header-props", + "defaultValue": "", + "setters": [ + "JSONSetter", + "ExpressionSetter" + ] + }, + { + "name": "header-cell-props", + "defaultValue": "", + "setters": [ + "JSONSetter", + "ExpressionSetter" + ] + }, + { + "name": "header-height", + "defaultValue": 50, + "setters": [ + "NumberSetter", + "ExpressionSetter" + ] + }, + { + "name": "footer-height", + "defaultValue": 0, + "setters": "NumberSetter" + }, + { + "name": "row-class", + "defaultValue": "", + "setters": [ + "InputSetter", + "ExpressionSetter" + ] + }, + { + "name": "row-key", + "defaultValue": "id", + "setters": [ + "InputSetter", + "NumberSetter" + ] + }, + { + "name": "row-props", + "defaultValue": "", + "setters": [ + "JSONSetter", + "ExpressionSetter" + ] + }, + { + "name": "columns", + "defaultValue": "50", + "setters": "NumberSetter" + }, + { + "name": "data", + "defaultValue": [], + "setters": "JSONSetter" + }, + { + "name": "data-getter", + "defaultValue": "", + "setters": "ExpressionSetter" + }, + { + "name": "fixed-data", + "defaultValue": "", + "setters": "JSONSetter" + }, + { + "name": "expand-column-key", + "defaultValue": "", + "title": "列的 key 来标记哪个行可以被展开", + "label": "column-key", + "setters": "InputSetter" + }, + { + "name": "expanded-row-keys", + "defaultValue": "", + "title": "列的 key 来标记哪个行可以被展开", + "label": "column-key", + "setters": "JSONSetter" + }, + { + "name": "default-expanded-row-keys", + "defaultValue": "", + "title": "默认展开的行的 key 的数组, 这个数据不是响应式的", + "label": "默认展开行", + "setters": "JSONSetter" + }, + { + "name": "class", + "defaultValue": "", + "setters": [ + "JSONSetter", + "InputSetter" + ] + }, + { + "name": "fixed", + "defaultValue": false, + "setters": "BooleanSetter" + }, + { + "name": "width", + "defaultValue": "", + "label": "表宽必填", + "setters": "NumberSetter" + }, + { + "name": "height", + "defaultValue": "", + "label": "表高必填", + "setters": "NumberSetter" + }, + { + "name": "max-height", + "defaultValue": "", + "setters": "NumberSetter" + }, + { + "name": "h-scrollbar-size", + "defaultValue": 6, + "label": "水平滚动条大小", + "setters": "NumberSetter" + }, + { + "name": "h-scrollbar-size", + "defaultValue": 6, + "label": "垂直滚动条大小", + "setters": "NumberSetter" + }, + { + "name": "scrollbar-always-on", + "defaultValue": false, + "title": "如果开启,滚动条将一直显示,反之只会在鼠标经过时显示。", + "label": "scrollbar", + "setters": "BooleanSetter" + }, + { + "name": "sort-by", + "defaultValue": {}, + "title": "排序方式", + "setters": "JSONSetter" + }, + { + "name": "sort-state", + "title": "多个排序", + "setters": "JSONSetter" + } + ], + "slots": [ + "cell", + "header", + "header-cell", + "row", + "footer", + "empty", + "overlay" + ], + "events": [ + "column-sort", + "expanded-rows-change", + "end-reached", + "scroll", + "rows-rendered", + "row-event-handlers" + ], + "snippet": { + "props": { + "width": 700, + "height": 400 + } + } + }, + "ElWatermark": { + "name": "ElWatermark", + "label": "水印", + "categoryId": "other", + "doc": "https://element-plus.org/zh-CN/component/watermark.html", + "package": "element-plus", + "props": [ + { + "name": "width", + "label": "width", + "title": "水印的宽度, content 的默认值是它自己的宽度", + "setters": "NumberSetter", + "defaultValue": 120 + }, + { + "name": "height", + "label": "height", + "title": "水印的高度, content 的默认值是它自己的高度", + "setters": "NumberSetter", + "defaultValue": 64 + }, + { + "name": "rotate", + "label": "rotate", + "title": "水印的旋转角度, 单位 °", + "setters": "NumberSetter", + "defaultValue": -22 + }, + { + "name": "zIndex", + "label": "zIndex", + "title": "水印元素的z-index值", + "setters": "NumberSetter", + "defaultValue": 9 + }, + { + "name": "image", + "label": "image", + "title": "水印图片,建议使用 2x 或 3x 图像", + "setters": "StringSetter" + }, + { + "name": "content", + "label": "content", + "title": "水印文本内容", + "setters": [ + "StringSetter", + "ArraySetter" + ] + }, + { + "name": "font", + "label": "font", + "title": "文字样式", + "setters": "ObjectSetter", + "defaultValue": { + "color": "rgba(0,0,0,.15)", + "fontSize": 16, + "fontWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textAlign": "center", + "textBaseline": "top" + } + }, + { + "name": "gap", + "label": "gap", + "title": "水印之间的间距", + "setters": "ArraySetter", + "defaultValue": [ + 100, + 100 + ] + }, + { + "name": "offset", + "label": "offset", + "title": "水印从容器左上角的偏移 默认值为 gap/2", + "setters": "ArraySetter", + "defaultValue": [ + 50, + 50 + ] + } + ], + "slots": [ + "default" + ], + "snippet": { + "props": { + "font": { + "color": "rgba(0, 0, 0, .15)" + } + }, + "children": [ + { + "name": "div", + "props": { + "style": { + "height": "500px" + } + } + } + ] + } + } +} diff --git a/apps/designer/.vtj/projects/@sy/low-code-designer.json b/apps/designer/.vtj/projects/@sy/low-code-designer.json new file mode 100644 index 0000000..40ef3b1 --- /dev/null +++ b/apps/designer/.vtj/projects/@sy/low-code-designer.json @@ -0,0 +1,176 @@ +{ + "__VTJ_PROJECT__": true, + "id": "@sy/low-code-designer", + "platform": "web", + "name": "低代码编辑器", + "homepage": "", + "description": "低代码编辑器", + "dependencies": [ + { + "package": "vue", + "version": "latest", + "library": "Vue", + "urls": [ + "@vtj/materials/deps/vue/vue.global.prod.js" + ], + "assetsLibrary": "VueMaterial", + "required": true, + "official": true, + "enabled": true + }, + { + "package": "vue-router", + "version": "latest", + "library": "VueRouter", + "urls": [ + "@vtj/materials/deps/vue-router/vue-router.global.prod.js" + ], + "assetsLibrary": "VueRouterMaterial", + "required": true, + "official": true, + "enabled": true + }, + { + "package": "@vtj/utils", + "version": "latest", + "library": "VtjUtils", + "urls": [ + "@vtj/materials/deps/@vtj/utils/index.umd.js" + ], + "required": true, + "official": true, + "enabled": true + }, + { + "package": "@vtj/icons", + "version": "latest", + "library": "VtjIcons", + "urls": [ + "@vtj/materials/deps/@vtj/icons/style.css", + "@vtj/materials/deps/@vtj/icons/index.umd.js" + ], + "required": true, + "official": true, + "enabled": true + }, + { + "package": "@vueuse/core", + "version": "latest", + "library": "VueUse", + "urls": [ + "@vtj/materials/deps/@vueuse/shared/index.iife.min.js", + "@vtj/materials/deps/@vueuse/core/index.iife.min.js" + ], + "required": false, + "official": true, + "enabled": true, + "platform": [ + "web", + "h5" + ] + }, + { + "package": "element-plus", + "version": "latest", + "library": "ElementPlus", + "localeLibrary": "ElementPlusLocaleZhCn", + "urls": [ + "@vtj/materials/deps/element-plus/dark/css-vars.css", + "@vtj/materials/deps/element-plus/index.css", + "@vtj/materials/deps/element-plus/zh-cn.js", + "@vtj/materials/deps/element-plus/index.full.min.js" + ], + "assetsUrl": "@vtj/materials/assets/element/index.umd.js", + "assetsLibrary": "ElementPlusMaterial", + "required": false, + "official": true, + "enabled": true, + "platform": "web" + }, + { + "package": "@vtj/ui", + "version": "latest", + "library": "VtjUI", + "urls": [ + "@vtj/materials/deps/vxe-table/style.min.css", + "@vtj/materials/deps/@vtj/ui/style.css", + "@vtj/materials/deps/xe-utils/xe-utils.umd.min.js", + "@vtj/materials/deps/vxe-table/index.umd.min.js", + "@vtj/materials/deps/@vtj/ui/index.umd.js" + ], + "assetsUrl": "@vtj/materials/assets/ui/index.umd.js", + "assetsLibrary": "VtjUIMaterial", + "required": false, + "official": true, + "enabled": false, + "platform": "web" + }, + { + "package": "ant-design-vue", + "version": "latest", + "library": "antd", + "urls": [ + "@vtj/materials/deps/ant-design-vue/reset.css", + "@vtj/materials/deps/ant-design-vue/dayjs/dayjs.min.js", + "@vtj/materials/deps/ant-design-vue/dayjs/plugin/customParseFormat.js", + "@vtj/materials/deps/ant-design-vue/dayjs/plugin/weekday.js", + "@vtj/materials/deps/ant-design-vue/dayjs/plugin/localeData.js", + "@vtj/materials/deps/ant-design-vue/dayjs/plugin/weekOfYear.js", + "@vtj/materials/deps/ant-design-vue/dayjs/plugin/weekYear.js", + "@vtj/materials/deps/ant-design-vue/dayjs/plugin/advancedFormat.js", + "@vtj/materials/deps/ant-design-vue/dayjs/plugin/quarterOfYear.js", + "@vtj/materials/deps/ant-design-vue/antd.min.js" + ], + "assetsUrl": "@vtj/materials/assets/antdv/index.umd.js", + "assetsLibrary": "AntdvMaterial", + "required": false, + "official": true, + "enabled": false, + "platform": [ + "web" + ] + }, + { + "package": "@vtj/charts", + "version": "latest", + "library": "VtjCharts", + "urls": [ + "@vtj/materials/deps/echarts/echarts.min.js", + "@vtj/materials/deps/@vtj/charts/index.umd.js" + ], + "assetsUrl": "@vtj/materials/assets/charts/index.umd.js", + "assetsLibrary": "VtjChartsMaterial", + "required": false, + "official": true, + "enabled": false, + "platform": [ + "web", + "h5" + ] + } + ], + "pages": [ + { + "dir": false, + "name": "Test", + "title": "1", + "icon": "", + "mask": true, + "hidden": false, + "raw": false, + "pure": false, + "meta": "", + "cache": false, + "id": "45t7j3xqi", + "type": "page" + } + ], + "blocks": [], + "apis": [], + "meta": [], + "config": { + "title": "", + "themeSwitchable": false + }, + "__BASE_PATH__": "/" +} diff --git a/apps/designer/env.json b/apps/designer/env.json new file mode 100644 index 0000000..15afaac --- /dev/null +++ b/apps/designer/env.json @@ -0,0 +1,4 @@ +{ + "PORTAL_HOST": "sso-sit.newpearl.com", + "PORTAL_HOST_I": "soi-sit.newpearl.com" +} diff --git a/apps/designer/env.local.json b/apps/designer/env.local.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/apps/designer/env.local.json @@ -0,0 +1 @@ +{} diff --git a/apps/designer/env.sit.json b/apps/designer/env.sit.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/apps/designer/env.sit.json @@ -0,0 +1 @@ +{} diff --git a/apps/designer/env.uat.json b/apps/designer/env.uat.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/apps/designer/env.uat.json @@ -0,0 +1 @@ +{} diff --git a/apps/designer/index.html b/apps/designer/index.html new file mode 100644 index 0000000..13baab3 --- /dev/null +++ b/apps/designer/index.html @@ -0,0 +1,18 @@ + + + + + + + + + + VTJ Web Project Template + + +
+ + + diff --git a/apps/designer/package.json b/apps/designer/package.json new file mode 100644 index 0000000..0415d00 --- /dev/null +++ b/apps/designer/package.json @@ -0,0 +1,35 @@ +{ + "name": "@sy/low-code-designer", + "description": "低代码编辑器", + "private": true, + "version": "1.0.0-1", + "type": "module", + "scripts": { + "dev": "cross-env ENV_TYPE=local vite", + "build": "npm run build:prod", + "build:sit": "vue-tsc && cross-env ENV_TYPE=sit vite build", + "build:uat": "vue-tsc && cross-env ENV_TYPE=uat vite build", + "build:pre": "vue-tsc && cross-env ENV_TYPE=pre vite build", + "build:prod": "cross-env ENV_TYPE=live vite build", + "preview": "vite preview", + "clean:lock": "rimraf pnpm-lock.yaml && rimraf package.lock.json", + "clean:lib": "rimraf node_modules" + }, + "dependencies": { + "@vtj/materials": "^0.9.30", + "@vtj/renderer": "^0.9.30", + "@vtj/ui": "^0.9.30", + "@vtj/web": "^0.9.30", + "element-plus": "^2.9.4", + "vue": "~3.5.13", + "vue-router": "~4.5.0", + "core-js": "^3.40.0" + }, + "devDependencies": { + "@sy/vite-plugin-http2-proxy": "workspace:*", + "@vtj/cli": "^0.9.8", + "@vtj/local": "^0.9.30", + "vite": "6.1.0", + "vite-plugin-mkcert": "^1.17.6" + } +} \ No newline at end of file diff --git a/apps/designer/proxy.config.ts b/apps/designer/proxy.config.ts new file mode 100644 index 0000000..f4f95bb --- /dev/null +++ b/apps/designer/proxy.config.ts @@ -0,0 +1,7 @@ +export default { + '/api': { + target: 'https://sso-sit.newpearl.com', + changeOrigin: true, + ws: true + } +}; diff --git a/apps/designer/public/favicon.ico b/apps/designer/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..abed801594063f28a3f80bec5f4f0474f9bc850b GIT binary patch literal 16958 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 KwN>0~`2PW!jB@P& literal 0 HcmV?d00001 diff --git a/apps/designer/public/logo.png b/apps/designer/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..96380c64d217582425afc390af39a41e3692165c GIT binary patch literal 11965 zcmZWvWmps5+aBHBDUCEpNq2XL!~}uC=nhEBe{b{vY2D zyLMeWJMoAbhTCRu&J>D005qvs-ivsfFz6f05H)Jzw`~)4I;jfy!2J%0kxB~ z2LJ#AKuuB3(BBFk>{wu7lm$2MbVZH;a;<)JEI?`?8z4e0>_jO{l0%Eo_2FbhBE@9l zL1v;X5Oz!o`xb`6pg@Sy?sF*4FI-T7>MxQ~6Tx(6PHJaNgTbbDymZuUAgVeTRCO5F zIVm05czrkD+7oPYhr+1rI&%c;BYj`D$~^ii&h4$=>xC-$ccJ0dz`uPxgR*eeE{ zV{H}tqv;!Obi-0pJcvrV2j!mdMvkfneEg3aPByYRrpm_q`o(I)L}iC?Ox5mux>M0x zkpsbBZbLiIkD$MmeuYDn65biIdhU1%$y@u!T0rr9cSe*g-%hlgad@JqtDo-h13 zg7dr55u&C_ts8vJtZmskcC=Id6eVGzkci0ZxAz7R)DBJPkH?8)@Vu98FMc~JdMhyV z`YP%-dzwDtFs0nF?9Iw(hn3UbuA!n_x`i+F&28e%A~0Klk)fQ4u>`r#N5(?CnDsI& zXmIxX?rWPs#Ewmtvp$h)9pk&iLz(qZ{E6)*lrIB$4KQXzFlA4RrdcqHnyYV<)Wdsb z(d7T;lUSe=*UJq&C?AFcDG=C;0o?meLM}w{79RKg{Ne%N78XL*Rw!#(S2{hl!hnM* ziOSe}h`nBUc7bj>H`%rCU0+)|+U$mx?%jG?jL7T~jSZr@(N4p3o=0XfMMA9?3plKTHY23-e z+RU~-y{9pMcsuVQ84~!sxsJw{)MUiw@2`fy1`%Tz(f*n|f~@&KX?64GVGXq}DGA70 za7_;B$BByA4OWruP3@$scaIhBA$X~p;bq!o+bdo|;TQ}hUdvbN#*ZrpH`Zb88pkLJ z6h?Y9^Zoo zVK3%rF#v@|RA#kEGOokstU$ie&V>1~V1{EO6e+!yg^cyrui8{sU!EZOy`_5JCUBS3 zx&Y!)@6vR!(KHDsC{~V&xX+|O)9nh&8hRJRiGR^eBbfZL0Vu1;ph{bF({DXS<5YGgyi|!-i59g)u*4ne_m0$J_#OI-X?kwngVO$0ZyoC3%glop($~t{m>f<@pt^qKbzw>UB?SF{u*+!lt6I1{CK_vIyc}O_-eB%g@pCBzb zPM8xCO^4)B06rV`G>H34^ekf)LffEqpKVCL9hC|NQbNW)GeZ4-1(9aAUPvwLaHl=X zXq14Rh#!G&iG68wlb#$BSCa)GNH!&fsJ+2gksne>|+X9s6wl@42)bPrcHy# zU@^U$C8!LGw*{f0qUkC%-AJ{SXZOuW`O{2*dsdFH0t2FX=`>VZhCLB)Kt)}9dd|-P zkXHy}7tM49i%b@`NZrgk+DN7MY*drLi7WIr8>u5$WSMP9XStqz_z=@}yCV<}JK9mv zn)G0W!wK0>cDU24PN8E;!!3EoIqvW2%K1x2S+_7gQa0%fd2>{oav?D5nR}DJT6QL{ ztpM~f%mU1E*Cu~nx#HutkEu^lMxD`S`P(`2BDeanA#*Ha9=H2b%lX)eRt0a%4iMRa z;T;!_b2-0*6NYlfEXU;O3#@=Fms6-kfT)UtK3kRB?Qz9c=xSJ29@x?0S;L4~i!CFZ%)g&U=HM6~P>qS*HZ480qWy>v?ai zSaA(qP@E5~vA82rhu{+i->1FfH1Axo7UXzS7k^zQUX8MvewMqS75zE)o>OVKSz!R| zIsRakt}+X?68A5oxr6p6x)^s8g}fwhg0>3yyH{)YC*kZ;6OSxeT7wL87(&-=Y$~9_K6*|VH^dhy@{LNxaU2{HWU=E zmL1Hqc345YedbrK@bDH^@!kikT(ehTj0D9XeshIboR5~E;X^8*82)CD%C>jY4X|)- zN}$d0P+n~ku9~=+BN%F?yO1tKcRsewYSC&(?vE;OwF1A9qcq_`!7U;nkt}D4y3gaj z9>NSYA(qaX0Rn9s|HWv2C?R-y_NsUFTnxu`@nTf#s7+pF9v!H4u-2+M0Z8<2vUvBH zPvR_ph{n|K?zZTuUDEnY{t3H(@^h{{Z2tfBuq;9Su%t(3O@6P0`K=c|tRMaC$%_eq zN#z9t$&WP`NvaeEoNvR}ppFrvFzS68>@W2=urv!|6+PHrvWXn@pG)zh|PFdR$$G$VTWSg@% z8j~+NzBMk)otLF4a8#yH_x}Auq7=uu)7Q{EwpHl$#9m9m{H>AWjkiW*mmbgYH2kmC zU=~A%EYP=gzB@4s_@|(CmRb|#E4%G+Yb@&3+$86~O>J*rtK?xb;sLY(ht+^OKyP>eY6!C5afP z)Fbphx1T@#l_i~DF#1)L@q9b}s+T2eHNODA7d zR}x`FpBN0TkOw?u*8g=E7p zR$rr2&ZR*iA*grfKFA=Pi)t9<)q8^I+s5S6!%qpz=&yZa5ot1;lpXvRaE&9jf^t*8 z9E5SFB45#?ILz@6OqLx?JX8sOh3AT9xG1Oo$t#l*a(k?NObrb7wx%Y@vCe~6vsn>S z#U%>8fM>sPi_XbbI2fZEPU0wm5HM}ue)=F(6u=^rL|Og-2utt<*9g){db~2t}Q)hu9;3lrO6s)uvuSoen_8IO)F<#vy5) zbt)3xUU3XPrUDwo=v5ky(PRFrXbI4nkr`dtUAQEs9$^3ClKE!b8+o+~+9ihf(u5#X zC%JRDANsqGg)(5uXAF=d9<9HVki{bG{6^T%w;2_d1N8~u+buc8%(GL-%Oqvbb3?Y| ze7XK1b%r62u)o>Y{FoBRoULJ8tTa^#*4;h@o&Jdg3$`AxeU#?;TilMO$&pA3kG?8t z^H4aesvyu+f8rJpOIabZa4O%4MC!PcGE?U|xkfH$+}6?W8>5X5ej(s7~f2~wx zZ34pAO!MW-q@-;6Nk)8d>OS%ejNE=8Vh0Ep%jbKd2V1`I*4NKOu z1X02i4rCy1ysLTC9THz?M=6W{z?;;a!iuo|?9?_ls(T?}`=a+18fRw)0MpvXPW^Ak z&WtGEKJ1D=f3XD#|gMn-iU_jYYh_-G~9VpsPs5A3uRYrZ|;@ob}DVzV&f?N zjaOem$H9YMZ#47H;;RlKS(#{;YOHd!T<{gT>j4Wh_($QHjUPD2Pb;Vjg1V7AEs+U8 zuhuQRZRc$8+@pPq;hFhhp4m>Gv$n05d5+5urkp^f4?-72`uQB$%5|q`5;&W>E2hPn zRfQELt{iOsn|d!6SbA!P2P+4tfC~4Cbmu{in|3e5!iI~XztPYlCs|l>I_PJto{OnU zYU}WU2Zd-xw&+?gnEG+*CkloqLTK<%5p@;0ZI~^*+UA^#E#$|MYW<1)YwzG6LNhqM zy&}8sq>|`?uBxpZLIz&3B31WUm?@19|Tw)6}LobU|8Zp#IEnOv8TrcUzaV@sZc?c4)y zePMfv_LRa;;=!A6`9@2ufKvI9X*zrYPN6qtOtR<N{(ynH_GD*vGKu2Yr zRLD6O413~wSB4JC?$DhfGGo&13^rBj?zX8~f!7X9I?aJQ>*D$J>HgcFQ*Yx%U>c_h>!Nhvup$zG1ul7r0rb4#s2ip+JB;nr*EDL9ogjGe*xk14r~0jR|z?%c^+i}|i- zxY%;4*x`wzbyj@{FofUtY2qYaihcVj@;SJy=oAm(+Jh*}c@8{`H~X=2-TGk|IPA&j zhzhvKTbWun;cdyhHdi~6aa*p@62bcsPraP7U9~&Kbb;>>@-_l_s~j|6#!S5K{9mk5 zKY2y=QLrcG)i_uLA=s^rMK@~8yF)4Dkhxn#A#Sg>y9X+%o)Uyb)7a3vjJ6H*2`gVS zPRtD?zht@F!k(x~Ry;o#dx>u+|FV4~$2_LnW}$(HC#i|1tB*?#3wbkD2%cjal~JyW80SKt!x=NQy}vev z{KH1*V&Y`*Ub@i9r(MDNYk)iaVfQ%a`|4BjbF?nbgALf%yMdOWzgk?z-DX=8F zJp1HcD4I(2ItA!tx)r!!w%-u%A7M{~lkAEPqeM(!6YgfqX?tk3YyC3ysXw%WSM+2up-@OJUI75_w@YR#79GxL;e^a0TeJg-OVZ zvCL7?;gjSKwAu;}i^2w{A%Iqa2AbHylISOf{}N`_AKzvy(69CYPty%wUl@U&)&wSR zXYnrdvx;69x}z56v}q5_8sgY+7}~9huaHfFD9K$C_|FzwH=>5# zraqCs5%GCh`uR32SB+%9D#D(EDey@ygEw^c&4`!reY(WQ1lG)3#<}40H)Dz;^q;Sw zc8**4+*ZLCt0j&fOx=K97K{SO%kApTwb{iFXz#&)Mm;3mgwRGvB z>^B6fTJHXa&S6jFi<`*1a@_)f0LPwmm2X0}iP>&%g#RU1QRodx`%oj*yYkIi&@H#4 zDWi$1-)Ata@|n&4x=ogbKE`>*rS2q9Zd&dDw*ax&BI4xm`}9zB+ht^Z8K3TPyX*WP z-X?VDcfth|oivu&dcFFf7EZjJ?<5t#I-LmX2F4*={vJfWF=AI)UYpT<{G_mt#c62W zfijWk#TT#2+r&d}e06Dp9>N9{i>RDGK4xdSmWw5*ZK7BdDz2Z!D^<@}$8NoH5-mzm z75DqwGR$Ud) zg>AI~!O666x0vRl6(1M*;vvr(S?V9gi+fq?0ib_6l65ujnrN8z1H(6jwi%s0l7jrVOZPPL6Ugs-Gqe_C^KLJegrjD+!#(E+lx%=odn^gf+Ix@Kw|A9~NeEYg$U?T;NfK!4kx-|aH*a`W*hC97h_A0P%)3DZX;O1Zl4v}6YiWAEg8Oy0_J_i87okDff`lIe zTG?!2m2QdXOwGb9KgzmE`tTEWuA8_;`!F-a2PJ|#Vw^0cW9m%c<6lgNwHMCn@0TBs zLy>xP%gV}hE7vyV`ud5le_~onQncR7e9yYWP!6oW$Fidu0h4}rVyCL*4YACb-CqV+ zy-6S49#GgI!VK`>I}H?tPzIM-O{$(MoE2I{;6WDkKHV2i9HBF02$%CK#6SwVKPxqn3<$Q~Gub%ok;8mA(C~AGUZNQ^yVL+Ab*V*D_=)Ia{GJOHFYM+~(`0jOX z2o<{sg6zPwO{Z31AOP86Gi~=ZAB*ZWE?i<)BN~0RfNIXLZ)>+X%R}&^2a$Gn z4OHo8U={IURsZ(;B9pYE8TWTc4JR)fX;6`KNxRAbDa4vF_aEB0>@^_JU`8qJ=>2Bs zoJeR6c$^s3w%>}trjA&5B&RR8(u0lsJi`%Hdk!GMW;)<&Zky(>xQ!1wofg7Qk%+EZ z_s6z2ST-!rxm{#5YL)O;4L)Pldf$59XPc?Rf8YE-b| zPV4fX@h>Qnc3AYRYEBv|5_w#+vFFf0y1?BF4;G*3{iKOouTY;2ZxXM#zSq*vj)IfL z;sudm?n$$dx7)42x)$E&(#R-uLY+Q&br~>dezQ{$Bq`7jdxOO!ffCpM`mTxzFNrlT zPGogoV_`|WwC%%p@Qar93TPK|d|(=NaS>hCpsSwGCp>VBgHgUS9>2XM{5Jw`GQa&o zfvJ4W7U$LZ1~c!i!sNu^mtxX3tz6lIYJK;SEY#AeWnZ3Il$`IP5Ywi+{Z2mH-JvH*SB&OGI&7uDu9290Ddj{wIhM(HEkNhoaTi5nyKa-mF#C`Mp$V_CgpG3eO$DP7f~&OjxyC< zMw@(M!+kt)iqk!?d*rSY;1-@eoDs%x*W@<*}A>!_M4(yz2&l%S?uTn8+2m(rd^+?L9pA9h99 zk;UNMyAYm?WB0DKJv5BZm{D4>uPs>Y8&RXg8GUn=sG0OI{!-ymw%tOF+#L@M-6Q8K zl||)iU=&=YP9vW1cuTox4RBxkc|ZHv4|8ftzU>(0aYDz>xB|D{He$}DoUEMBO#27s z3!T<+u&h^;Sro(!(Tmu#Oyr z>BfF(l9OZTj2igW%wS0G&SHkeGM5j5L&K;l&fOBwQ%43Z4A}3P3Lx#6Sv~Yrp2~va zpFHEdJ_o*AMNFLYqyg?_6eO^C%grbvCMtIp3v(Elx7Waz6B)XILBtSHmYZL&>&z#iT4bpNhMgFudV+>#0=XIfcvzV;Si#i z86dJfJ(=iwh>|+#7wz_05iRd?VtZ4gy81F5N}ON~$ks@|zr`pgt7-A{{cPN>+Jhps zX@Jeg>S85_t1(2if-Nqj6F*9*vEhMvpy|ihipyW?PDWEzwrG?c-aYoiB}V7K%rydh z<4pB5+_|}N$Y`*--O?h!v{x`-v24b=Ni*d$^=v*{gO&fvIpIyJR`1??O=(*Ec68!+ z;coNw0jX9G^i{lJ@)=pInwebt{5783%grIpo1?=q%ws-xu(GWJ8{Wh+p&}7=%#KGV zf5@dqp|y5y5R9HpajPu!#rs50;l-IGtGkFi`OIV`K@XRf#{xiN3RNQBXlr)dD#h^Q z+2mgC_sq{kyjr8vbKUc=R>=F~mVb77`Is+n8Ous^D0DcK>8O5<62SpG%n5E8v9-B` z*|zo@eACwH40kSPbq_TE*ZHdcbg4HXIQ_>9&h6!7-V6C%37A`hMokDuzZqqjmo;g1 zX8t`orGsG0h~(N*y-LP_mrdqRg=u^7b(#5QocQ$DNjKOm9Jwyb&0CgRk0w2W-k3E( zU+CDN_d{b7b$<~myD$Kx1XjzhnEIet;{S$}6s5lXABf%5mKi-s=%a7$AF!$FYuyx6 zJHlnf=0QC@&C;8R<@;3N$9*zv@ENhh>l)o^yEZ8Npl&KaFY z$l$*>y#iX}wDlo;V_N)uFJnxXqCxwL`VRIqEM6BU!=A>xaM&vyJ8lRB;kHu8Y6jIN zTY1WY)&`JZpA|fhL!Bd-Mcy%&_ePEPXUd+V1xudGnxPWb&Rf66F%b+&kmO&Gr3Mb6 z(oF9u((mb)Vg}DgHj(~MoQfJNU$=M&X)!BdkN8SxB_<9F50UK)Tr5rowU;w0kzWyYQ;TawMd z^$B$uAGu*G$Q^@dLOl?99>P{D&6*K$*S8Hf-spr#jE+Y-vngzAGQV(P`tV89_8ma` z&~v$RViM5tHPOdKZFXt$wu}i&-4`FGpp5{ND@`tO`Hh{c8=Sf}KKl#&#i7!kvhxZh zq|+$*r6zu$e)P8IKS-XwtW8D;+M+mw8vB}mbqS$MIM!N-5O5@9td!{`Q8P3!eeeuN zI&OAkO+`QYF6Ht0^uO8O1)UbU4&wjHY}ms7O~IVAotZHUuTDNRv_zrpq)VWwvdWtk z{9gX9_<%ACQCcb;IXyYoOqB+9R5jR9v#b=gEH!JUdhX2p>g7FgO;uUQ8)BXGZO=8D zff+6XY%j&*jhbI>?eQi532Apd^lKtZ`LBUH69vC`D7&(BjWBx(mS*T*szo?M^F3}f z?NOfITU&(XTSsIG)senNVf2#vh-h16M3KVw_e`R+Sw3|ZOx(O4ak8G6&Pr`(VkSDa zbPbtAOt1VR3ZWpS1y@t&Y&4Y=)grvot&I)pE}oR+^nMvv}GzJIVB?Wizec&K5sp*!!sJN7euf`cRg5qu8~f zQAD~AeHv(J?l9EIU&38q*=S8Tos6o*YLbNx-C-#^Eh^hz$qJ>zRl+=W{ZVLDzJ|ca ziS8oszyt7ZI*AuMBdH5&`0fws^2cck3=RsJviTGjg;vB2-VJzQl;z1v3Z8kPd72GW z?5i2mv~Bt2-*44olR+T{NONKgqZJxZi^yiduS}KzGZIA{w4S;gXyjz`TbF`mGoRvq zf7>o3-$Eb)Q&RgM{~+Tak)`!Gi#P{hu`L0$;gxvzd0a4larNto=7INet=Kf~Ydo#H zfxqaBHJ<;U`7r89i}HvMUAL!VM){M^DO7csEtiQDK?^=1zdl-izf=7m`{BTv%}3AG zEzI)c#R8*GH!}LENDW6A9rA?bM|VDD(*z!eiBbuD1;2}AeX7Cahh&%2^-;(G2mZYi zO0{SQUG)+^M6e(Lm%R0DB)&8XuX2D}*uZ|CnjwkeIRfH2%mf{Q@Pc_r^d!HT0BI3) z6@2I!5O{)K-)+EwrGtPOFW1Y(jGDt4kMP`e)y)>zggj4h{@tLgwk)~nj&7X0Yar+$ zu5)0xb53!L{;vMQ43R&rym1*?C-{=ey9Ys6Dd}UYcR})5m`S1w=2B++H;f<#od6Le zId}d;Oay0(q`SxV;6b-AAjkHr)GCrb1i{oHZLGBfHT`Th#0;5?e)#yzm-&HU+H3%R z&7e+aA?tYakcHnfY&X}QUcJXqL7V_ZR|EZO2+-ogowj~3wSv2F9`MWwLP4+tWfu@7 z`mWGjGuV-kvZ2tiZE*RVjvFCqht*V>wCutAg&D#dxk&GXRmKp%k%H`4Pt}=qrG5`3!@bNvwp#z)}jG>hn?-^U+ruopL75OvY3$u&bZ>l_n-ik9>8dS$|eEP$OcUhd)@Rt)A2WcXIP7WpCP%sdi=S z?=gi^P0;_Y^qIvp-GPYqf=#QI#e8Em{C(E#&%$axpU`xHz>)6BIMgHYjyTFb`$L!1 z4w4aqyc8Sd5~s~RA!=F7`Mw{1lZ7zY_i``%B9E;d)g=jCLRJy4;UYTs3MSwj9AEju)QC!KOLCE@hSo2v-1 zBn7tA)`7`P?R6WDp~>!W6{%-OP?ywJ`%`8@9>TeDO@6=phx7}9@0biHz)t?BbKYwr)58}D*j z<*LOq|AG0&jOGmWS)u0;mIhopf`3EwY+pnwETmgnP1V5=5^)DTt_nfc9bdKnWRf=U z4Up<}LKsE;pUb*u{u|18hh6y{0?>C^u0*T-dns9kxIbA8C%1_GS3h$5e=5;Ok@LCB zn(H+De!iWzNUwcqxcgoB$Mf46YW7TBo^?_GpYjD!az2NY<)&}*#ANB-0ahRy0P$}} zDxpihRB7Ceu@>5Mr)eIY~(6%WDt3&K~22=NyLp4 z=fzY%7k}RKKdfH}UV6sah@wbnZPx6qs{TNqb>9e{UwvI18dtn;5 z%Wya9pnaPXaYqUHqA`4%g)*epguxAQ6}vV5W?S*yW@|Zd1pEuX)<9=5&-uRe>awH^ zj7zr~u}PhnK+I@XoWl+orNd>QM;9^)C%=N5 zJn292Z7YBXN \ No newline at end of file diff --git a/apps/designer/src/App.vue b/apps/designer/src/App.vue new file mode 100644 index 0000000..c0d4397 --- /dev/null +++ b/apps/designer/src/App.vue @@ -0,0 +1,51 @@ + + diff --git a/apps/designer/src/assets/logo.png b/apps/designer/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..96380c64d217582425afc390af39a41e3692165c GIT binary patch literal 11965 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 \ No newline at end of file diff --git a/apps/designer/src/components/HelloWorld.vue b/apps/designer/src/components/HelloWorld.vue new file mode 100644 index 0000000..7b25f3f --- /dev/null +++ b/apps/designer/src/components/HelloWorld.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/apps/designer/src/env.d.ts b/apps/designer/src/env.d.ts new file mode 100644 index 0000000..acef380 --- /dev/null +++ b/apps/designer/src/env.d.ts @@ -0,0 +1,28 @@ +/// + +declare module '*.vue' { + import type { DefineComponent } from 'vue'; + const component: DefineComponent<{}, {}, any>; + export default component; +} + +declare namespace NodeJS { + interface ProcessEnv { + [key: string]: any; + } +} + +declare module global { + interface Window {} +} + +declare module 'vue' { + interface ComponentCustomProperties { + $uploader: any; + $reqeust: any; + $apis: any; + $libs: any; + } +} + +export {}; diff --git a/apps/designer/src/main.ts b/apps/designer/src/main.ts new file mode 100644 index 0000000..c360ed9 --- /dev/null +++ b/apps/designer/src/main.ts @@ -0,0 +1,48 @@ +import { + createProvider, + LocalService, + createModules, + NodeEnv, + autoUpdate, + notify, + loading, + createAdapter, + createServiceRequest +} from '@vtj/web'; +import { createApp } from 'vue'; +import router from './router'; +import App from './App.vue'; +import { name, description } from '../package.json'; +import './style/index.scss'; + +const app = createApp(App); +const adapter = createAdapter({ loading, notify }); +const service = new LocalService(createServiceRequest(notify)); + +// const modules = createModules(); +// console.log('modules', modules); +const { provider, onReady } = createProvider({ + nodeEnv: process.env.NODE_ENV as NodeEnv, + modules: createModules(), + service, + adapter, + router, + dependencies: { + Vue: () => import('vue'), + VueRouter: () => import('vue-router') + }, + project: { + id: name, + name: description + } +}); + +onReady(async () => { + app.use(router); + app.use(provider); + app.mount('#low-code-designer'); +}); + +if (process.env.NODE_ENV === 'production') { + autoUpdate(); +} diff --git a/apps/designer/src/router/index.ts b/apps/designer/src/router/index.ts new file mode 100644 index 0000000..f064ca7 --- /dev/null +++ b/apps/designer/src/router/index.ts @@ -0,0 +1,19 @@ +import { createRouter, createWebHistory } from 'vue-router'; + +const router = createRouter({ + history: createWebHistory(), + routes: [ + { + path: '/unauthorized', + name: 'Unauthorized', + component: () => import('@/views/unauthorized.vue') + }, + { + path: '/:pathMatch(.*)*', + name: 'NotFound', + component: () => import('@/views/not-found.vue') + } + ] +}); + +export default router; diff --git a/apps/designer/src/style/index.scss b/apps/designer/src/style/index.scss new file mode 100644 index 0000000..7632c94 --- /dev/null +++ b/apps/designer/src/style/index.scss @@ -0,0 +1,11 @@ +@use '@vtj/web/src/index.scss'; + +html, +body, +#app { + padding: 0; + margin: 0; + font-size: 14px; + height: 100%; + overflow: hidden; +} diff --git a/apps/designer/src/views/not-found.vue b/apps/designer/src/views/not-found.vue new file mode 100644 index 0000000..0444e15 --- /dev/null +++ b/apps/designer/src/views/not-found.vue @@ -0,0 +1,10 @@ + + + diff --git a/apps/designer/src/views/unauthorized.vue b/apps/designer/src/views/unauthorized.vue new file mode 100644 index 0000000..426326f --- /dev/null +++ b/apps/designer/src/views/unauthorized.vue @@ -0,0 +1,10 @@ + + + diff --git a/apps/designer/tsconfig.json b/apps/designer/tsconfig.json new file mode 100644 index 0000000..b5e02d3 --- /dev/null +++ b/apps/designer/tsconfig.json @@ -0,0 +1,27 @@ +{ + "extends": "./node_modules/@vtj/cli/config/tsconfig.web.json", + "compilerOptions": { + "noUnusedLocals": false, + "noUnusedParameters": false, + "baseUrl": "./", + "paths": { + "@/*": [ + "src/*" + ], + "$vtj/*": [ + ".vtj/*" + ] + } + }, + "include": [ + "src" + ], + "exclude": [ + ".vtj", + ], + "references": [ + { + "path": "./tsconfig.node.json" + } + ] +} \ No newline at end of file diff --git a/apps/designer/tsconfig.node.json b/apps/designer/tsconfig.node.json new file mode 100644 index 0000000..d0adb28 --- /dev/null +++ b/apps/designer/tsconfig.node.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": [ + "vite.config.ts", + "proxy.config.ts" + ] +} \ No newline at end of file diff --git a/apps/designer/vite.config.ts b/apps/designer/vite.config.ts new file mode 100644 index 0000000..311da85 --- /dev/null +++ b/apps/designer/vite.config.ts @@ -0,0 +1,19 @@ +import { createViteConfig } from '@vtj/cli'; +import { createDevTools } from '@vtj/local'; +import mkcert from 'vite-plugin-mkcert'; +import Http2Proxy from '@sy/vite-plugin-http2-proxy'; +import type { UserConfig, ConfigEnv } from 'vite'; +const config = createViteConfig({ + plugins: [createDevTools(), mkcert({ source: 'coding' }), Http2Proxy()] +}); + +// export default config; + +export default ({ command, mode }: ConfigEnv): UserConfig => { + return { + ...config, + server: { + cors: true + } + }; +}; diff --git a/apps/platform/.browserslistrc b/apps/platform/.browserslistrc new file mode 100644 index 0000000..b133c49 --- /dev/null +++ b/apps/platform/.browserslistrc @@ -0,0 +1,5 @@ +> 1% +last 2 versions +not dead +not ie 11 +chrome 79 diff --git a/apps/platform/.dockerignore b/apps/platform/.dockerignore new file mode 100644 index 0000000..54adfc6 --- /dev/null +++ b/apps/platform/.dockerignore @@ -0,0 +1,19 @@ +.DS_Store +node_modules/ +dist/ +.vscode/ + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +tests/**/coverage/ + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln + \ No newline at end of file diff --git a/apps/platform/.env b/apps/platform/.env new file mode 100644 index 0000000..b2204a9 --- /dev/null +++ b/apps/platform/.env @@ -0,0 +1,8 @@ +# 项目名称 +VITE_APP_TITLE = Admin + +# 公共基础路径, 详见: https://cn.vitejs.dev/guide/build.html#public-base-path +VITE_BASE_URL = / + +# enable mock in production +VITE_MOCK_IN_PROD = true \ No newline at end of file diff --git a/apps/platform/.env.development b/apps/platform/.env.development new file mode 100644 index 0000000..0ffcd41 --- /dev/null +++ b/apps/platform/.env.development @@ -0,0 +1,8 @@ +# 只在开发模式中被载入 +ENV = 'development' + +# 公共基础路径, 详见: https://cn.vitejs.dev/guide/build.html#public-base-path +VITE_BASE_URL = / + +# base api url +VITE_BASE_API_URL = 'http://8.134.216.72:8080/' \ No newline at end of file diff --git a/apps/platform/.env.production b/apps/platform/.env.production new file mode 100644 index 0000000..5d6a75e --- /dev/null +++ b/apps/platform/.env.production @@ -0,0 +1,8 @@ +# 只在生产模式中被载入 +ENV = 'production' + +# base api url +VITE_BASE_API_URL = 'http://127.0.0.1:8080/' + +# 公共基础路径, 详见: https://cn.vitejs.dev/guide/build.html#public-base-path +VITE_BASE_URL = / \ No newline at end of file diff --git a/apps/platform/.gitattributes b/apps/platform/.gitattributes new file mode 100644 index 0000000..d4e5bd3 --- /dev/null +++ b/apps/platform/.gitattributes @@ -0,0 +1,11 @@ +# https://docs.github.com/cn/get-started/getting-started-with-git/configuring-git-to-handle-line-endings + +# Automatically normalize line endings (to LF) for all text-based files. +* text=auto eol=lf + +# Declare files that will always have CRLF line endings on checkout. +*.{cmd,[cC][mM][dD]} text eol=crlf +*.{bat,[bB][aA][tT]} text eol=crlf + +# Denote all files that are truly binary and should not be modified. +*.{ico,png,jpg,jpeg,gif,webp,svg,woff,woff2} binary \ No newline at end of file diff --git a/apps/platform/.gitignore b/apps/platform/.gitignore new file mode 100644 index 0000000..4717f93 --- /dev/null +++ b/apps/platform/.gitignore @@ -0,0 +1,35 @@ +node_modules +.DS_Store +dist +.cache +.turbo +.nx +.nx/cache + +tests/server/static +tests/server/static/upload + +.local +# local env files +.env.local +.env.*.local +.eslintcache + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +*pnpm-debug.log* + +# Editor directories and files +.idea +# .vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# auto generate file +types/auto-imports.d.ts +types/components.d.ts diff --git a/apps/platform/.npmrc b/apps/platform/.npmrc new file mode 100644 index 0000000..22f2731 --- /dev/null +++ b/apps/platform/.npmrc @@ -0,0 +1,22 @@ +# 使用淘宝镜像源 +registry = https://registry.npmmirror.com +@sy:registry=http://sy-registry.shiyue.com + + +# 根据需要提升含有以下的依赖包到根 node_modules 目录下 +# public-hoist-pattern[]=husky +# public-hoist-pattern[]=*eslint* +# public-hoist-pattern[]=@eslint* +# public-hoist-pattern[]=*prettier* +# public-hoist-pattern[]=lint-staged +# public-hoist-pattern[]=*stylelint* +# public-hoist-pattern[]=@commitlint* +# public-hoist-pattern[]=core-js + +# 提升所有依赖到根 node_modules 目录下,相当于 public-hoist-pattern[]=*,与上面一种方式一般二选一使用 +# 极不推荐用这样的方式解决依赖问题,这样没有充分利用 pnpm 依赖访问安全性的优势,又走回了 npm / yarn 的老路。 +# shamefully-hoist=true + +enable-pre-post-scripts=true +engine-strict=true +package-manager-strict=false \ No newline at end of file diff --git a/apps/platform/CHANGELOG.md b/apps/platform/CHANGELOG.md new file mode 100644 index 0000000..121a2ac --- /dev/null +++ b/apps/platform/CHANGELOG.md @@ -0,0 +1,81 @@ +# 1.1.0 (2022-09-02) + +### Bug Fixes + +- :bug: router navigation bug ([b550a7a](https://github.com/buqiyuan/vite-vue3-admin/commit/b550a7a01b486cfd161ccb8efd7bca9a0ed35627)) +- :bug:生成路由出错问题 ([917e3f0](https://github.com/buqiyuan/vite-vue3-admin/commit/917e3f07209851a3df0b7e220e38df4df7612a68)) +- :bug:修复某些权限码传参错误 ([47071ef](https://github.com/buqiyuan/vite-vue3-admin/commit/47071efa7beb2e210151405e2a1c7e74d6dff4f1)) +- :bug:fix BASE_URL to VITE_BASE_URL ([3d32e82](https://github.com/buqiyuan/vite-vue3-admin/commit/3d32e82b838aea3c8a928989d2aa55c5d125a8ab)) +- 面包屑导航和弹窗拖拽后宽度问题 ([ae96559](https://github.com/buqiyuan/vite-vue3-admin/commit/ae96559fb82a87908a40b425701eaa0ee1993aa7)) +- 删除一些多余的旧代码 ([9eaa568](https://github.com/buqiyuan/vite-vue3-admin/commit/9eaa568a104e7ab1980c0d2069cbedddb4a4934b)) +- add menu type judgment ([144a539](https://github.com/buqiyuan/vite-vue3-admin/commit/144a53942a9229cb5e0286ae3452b644d66621e6)) +- **component:** :bug:修复 dynamicTable ts 类型错误 ([58b9275](https://github.com/buqiyuan/vite-vue3-admin/commit/58b9275758625f583aed644923431df72acb9687)) +- **components:** [dynamic-table] initial fetchData did not carry the default value ([3aaedcf](https://github.com/buqiyuan/vite-vue3-admin/commit/3aaedcf3c0551477e05dec85fb86d4e5af62b193)) +- **components:** [dynamic-table] parameter missing ([1e306d7](https://github.com/buqiyuan/vite-vue3-admin/commit/1e306d77d205cc9fe69fb19d860f5e014e8accc8)) +- **dynamic-table:** add onChangeParams param for dataRequest ([f381c79](https://github.com/buqiyuan/vite-vue3-admin/commit/f381c793529b6711994e001d29d1b8e6dc016631)) +- fix the aformPropsKeys ([#22](https://github.com/buqiyuan/vite-vue3-admin/issues/22)) ([e1c21be](https://github.com/buqiyuan/vite-vue3-admin/commit/e1c21bea3dddee1fefc9465142f390b0252ebcb4)) +- invalid regular expression in safari ([3939f82](https://github.com/buqiyuan/vite-vue3-admin/commit/3939f8229561959cb46982f64c54f4348258a1bd)), closes [#20](https://github.com/buqiyuan/vite-vue3-admin/issues/20) +- isAsyncFunction ([71aca13](https://github.com/buqiyuan/vite-vue3-admin/commit/71aca13b8055cd38c9f49a4d370c935312fa4d6f)) +- **pages:** about page link issues ([62c840c](https://github.com/buqiyuan/vite-vue3-admin/commit/62c840ccec3aa4b4237a182d750db933797c1c92)) +- **projects:** 修复 tabs-view 下拉菜单溢出 ([a43353d](https://github.com/buqiyuan/vite-vue3-admin/commit/a43353dc89f8395278b6988f7a2dd8c372ff0d7f)) +- remove topLevelAwait usage ([6653da6](https://github.com/buqiyuan/vite-vue3-admin/commit/6653da65f7a6d9738a39c955fb4dcb6d4f553235)) +- router redirect error when logout ([4073cb6](https://github.com/buqiyuan/vite-vue3-admin/commit/4073cb651b3bf45c16ce5f965fb7dddd3fab3bcd)) +- **router:** 第一次进入页面缓存失效问题 ([1b79adc](https://github.com/buqiyuan/vite-vue3-admin/commit/1b79adc072c1c9b6518cc4c05846dfd47c954989)) +- **schema-form:** update props issue ([ff1da5e](https://github.com/buqiyuan/vite-vue3-admin/commit/ff1da5e4f9723392f8af6a5286131f8cbf3c2bf8)) +- some css style issues ([9db10b0](https://github.com/buqiyuan/vite-vue3-admin/commit/9db10b058c8ba212cf51c94c10d2f37705ff7112)) +- some route file path error ([c89b131](https://github.com/buqiyuan/vite-vue3-admin/commit/c89b131d77c0ee8036813a2d377774bb854c652d)) +- some ts type issue ([60ea702](https://github.com/buqiyuan/vite-vue3-admin/commit/60ea702d7fe9cc88f85c07cdb0cd6fe5f3c56669)) +- svg can not loaded ([6aec46a](https://github.com/buqiyuan/vite-vue3-admin/commit/6aec46a00412a2b02e4090faca6722717a739550)) +- **utils:** [is] always false of isPromise ([8479111](https://github.com/buqiyuan/vite-vue3-admin/commit/84791110a87ab48f131c91e73508c2547fff8b25)) +- xlsx.js not default export in new versions [#8](https://github.com/buqiyuan/vite-vue3-admin/issues/8) ([a0b0fc8](https://github.com/buqiyuan/vite-vue3-admin/commit/a0b0fc8c78e1cf75e5ed7e48aee03dc7ce364db4)) + +### Features + +- 表格列设置工具栏 ([a934e12](https://github.com/buqiyuan/vite-vue3-admin/commit/a934e123426fab27fcbfbf47181f3355f584974a)) +- 当前用户角色权限变更时实时更新权限菜单 ([89918a2](https://github.com/buqiyuan/vite-vue3-admin/commit/89918a2195b119f480f498d420bb29016d557846)) +- 服务监控页面 ([0c3d61f](https://github.com/buqiyuan/vite-vue3-admin/commit/0c3d61fbdf4b0ecb1375990c06f5b039bed37085)) +- 全局挂载 Reflect 反射对象 ([f6f4675](https://github.com/buqiyuan/vite-vue3-admin/commit/f6f4675fba8e94b8b8bb67eff79d1205e3b06fff)) +- 新增按钮权限 ([5538d38](https://github.com/buqiyuan/vite-vue3-admin/commit/5538d387925b7bd53f332643903f9e4cacad0908)) +- **components:** [dynamic-table] cell support defaultEditable ([125bb08](https://github.com/buqiyuan/vite-vue3-admin/commit/125bb08ef2563f4dd4f3883da679e739e3f80bad)) +- **components:** [dynamic-table] support cell edit ([4411b0e](https://github.com/buqiyuan/vite-vue3-admin/commit/4411b0e49feeb93b3d1034fc038c9a778d7312af)) +- **components:** [ProjectSetting] add layout mode ([815b0c2](https://github.com/buqiyuan/vite-vue3-admin/commit/815b0c2cdc063a848b88cfe35519b0755b279282)) +- edit-row-table support save loading ([4d0eea6](https://github.com/buqiyuan/vite-vue3-admin/commit/4d0eea6d30d8b09d30cafb6e3bb4b80bb806c675)) +- support for nested routes ([9d9e1d8](https://github.com/buqiyuan/vite-vue3-admin/commit/9d9e1d856f01e0164c88a18583957d20ace95654)) +- **tools:** :art: add project config drawer ([c1f0de0](https://github.com/buqiyuan/vite-vue3-admin/commit/c1f0de05f25bbbadbcbc9f4a105e8d721b008bbb)) +- update basic-form demo ([27f95ec](https://github.com/buqiyuan/vite-vue3-admin/commit/27f95ec4e7c1b57fca5af379165960167aea2e1b)) +- **views:** add about page ([0a34802](https://github.com/buqiyuan/vite-vue3-admin/commit/0a34802b7ef2d2727df4b3b769bd4d664ace2bfa)) + +### Performance Improvements + +- **tableColumns:** customRender is easy ([#10](https://github.com/buqiyuan/vite-vue3-admin/issues/10)) ([e069f3c](https://github.com/buqiyuan/vite-vue3-admin/commit/e069f3c164f92e414638cb2f681013c7dc7727a0)) +- use vite-plugin-style-import replace unplugin-vue-components [#5](https://github.com/buqiyuan/vite-vue3-admin/issues/5) ([10540eb](https://github.com/buqiyuan/vite-vue3-admin/commit/10540eb1de36f4cd6048f86e5b0363109d571760)) + +## 1.0.2 (2022-03-15) + +### Bug Fixes + +- :bug: router navigation bug ([b550a7a](https://github.com/buqiyuan/vite-vue3-admin/commit/b550a7a01b486cfd161ccb8efd7bca9a0ed35627)) +- :bug:生成路由出错问题 ([917e3f0](https://github.com/buqiyuan/vite-vue3-admin/commit/917e3f07209851a3df0b7e220e38df4df7612a68)) +- :bug:修复某些权限码传参错误 ([47071ef](https://github.com/buqiyuan/vite-vue3-admin/commit/47071efa7beb2e210151405e2a1c7e74d6dff4f1)) +- :bug:fix BASE_URL to VITE_BASE_URL ([3d32e82](https://github.com/buqiyuan/vite-vue3-admin/commit/3d32e82b838aea3c8a928989d2aa55c5d125a8ab)) +- 面包屑导航和弹窗拖拽后宽度问题 ([ae96559](https://github.com/buqiyuan/vite-vue3-admin/commit/ae96559fb82a87908a40b425701eaa0ee1993aa7)) +- 删除一些多余的旧代码 ([9eaa568](https://github.com/buqiyuan/vite-vue3-admin/commit/9eaa568a104e7ab1980c0d2069cbedddb4a4934b)) +- **component:** :bug:修复 dynamicTable ts 类型错误 ([58b9275](https://github.com/buqiyuan/vite-vue3-admin/commit/58b9275758625f583aed644923431df72acb9687)) +- remove topLevelAwait usage ([6653da6](https://github.com/buqiyuan/vite-vue3-admin/commit/6653da65f7a6d9738a39c955fb4dcb6d4f553235)) +- **router:** 第一次进入页面缓存失效问题 ([1b79adc](https://github.com/buqiyuan/vite-vue3-admin/commit/1b79adc072c1c9b6518cc4c05846dfd47c954989)) +- some route file path error ([c89b131](https://github.com/buqiyuan/vite-vue3-admin/commit/c89b131d77c0ee8036813a2d377774bb854c652d)) +- svg can not loaded ([6aec46a](https://github.com/buqiyuan/vite-vue3-admin/commit/6aec46a00412a2b02e4090faca6722717a739550)) +- xlsx.js not default export in new versions [#8](https://github.com/buqiyuan/vite-vue3-admin/issues/8) ([a0b0fc8](https://github.com/buqiyuan/vite-vue3-admin/commit/a0b0fc8c78e1cf75e5ed7e48aee03dc7ce364db4)) + +### Features + +- 表格列设置工具栏 ([a934e12](https://github.com/buqiyuan/vite-vue3-admin/commit/a934e123426fab27fcbfbf47181f3355f584974a)) +- 服务监控页面 ([0c3d61f](https://github.com/buqiyuan/vite-vue3-admin/commit/0c3d61fbdf4b0ecb1375990c06f5b039bed37085)) +- 全局挂载 Reflect 反射对象 ([f6f4675](https://github.com/buqiyuan/vite-vue3-admin/commit/f6f4675fba8e94b8b8bb67eff79d1205e3b06fff)) +- 新增按钮权限 ([5538d38](https://github.com/buqiyuan/vite-vue3-admin/commit/5538d387925b7bd53f332643903f9e4cacad0908)) +- **views:** add about page ([0a34802](https://github.com/buqiyuan/vite-vue3-admin/commit/0a34802b7ef2d2727df4b3b769bd4d664ace2bfa)) + +### Performance Improvements + +- **tableColumns:** customRender is easy ([#10](https://github.com/buqiyuan/vite-vue3-admin/issues/10)) ([e069f3c](https://github.com/buqiyuan/vite-vue3-admin/commit/e069f3c164f92e414638cb2f681013c7dc7727a0)) +- use vite-plugin-style-import replace unplugin-vue-components [#5](https://github.com/buqiyuan/vite-vue3-admin/issues/5) ([10540eb](https://github.com/buqiyuan/vite-vue3-admin/commit/10540eb1de36f4cd6048f86e5b0363109d571760)) diff --git a/apps/platform/Dockerfile b/apps/platform/Dockerfile new file mode 100644 index 0000000..9bd9b47 --- /dev/null +++ b/apps/platform/Dockerfile @@ -0,0 +1,29 @@ + +# https://stackoverflow.com/questions/53681522/share-variable-in-multi-stage-dockerfile-arg-before-from-not-substituted +ARG PROJECT_DIR=/vue3-antdv-admin + +FROM node:20-slim as builder +ARG PROJECT_DIR +WORKDIR $PROJECT_DIR + +# 安装pnpm +RUN npm install -g pnpm + +COPY . ./ +# 安装依赖 +# 若网络不通,可以使用淘宝源 +# RUN pnpm config set registry https://registry.npmmirror.com +RUN pnpm install + +# 构建项目 +ENV VITE_BASE_URL=/ +RUN pnpm build + + +FROM nginx:alpine as production +ARG PROJECT_DIR + +COPY --from=builder $PROJECT_DIR/dist/ /usr/share/nginx/html +# COPY --from=builder $PROJECT_DIR/nginx.conf /etc/nginx/nginx.conf + +EXPOSE 80 diff --git a/apps/platform/README.md b/apps/platform/README.md new file mode 100644 index 0000000..457b449 --- /dev/null +++ b/apps/platform/README.md @@ -0,0 +1,42 @@ +## 安装使用 + +- 安装依赖 + +```bash +pnpm install + +``` + +- 运行 + +```bash +pnpm dev +``` + +- 打包 + +```bash +pnpm build +``` + +## vscode 配置 + +安装项目根目录 `.vscode` 推荐的插件,再安装 `Volar`,并禁用 `Vetur`,重启 vscode 即可。 + +## Git 贡献提交规范 + +- 参考 [vue](https://github.com/vuejs/vue/blob/dev/.github/COMMIT_CONVENTION.md) 规范 ([Angular](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular)) + + - `feat` 增加新功能 + - `fix` 修复问题/BUG + - `style` 代码风格相关无影响运行结果的 + - `perf` 优化/性能提升 + - `refactor` 重构 + - `revert` 撤销修改 + - `test` 测试相关 + - `docs` 文档/注释 + - `chore` 依赖更新/脚手架配置修改等 + - `workflow` 工作流改进 + - `ci` 持续集成 + - `types` 类型定义文件更改 + - `wip` 开发中 diff --git a/apps/platform/commitlint.config.mjs b/apps/platform/commitlint.config.mjs new file mode 100644 index 0000000..6debc80 --- /dev/null +++ b/apps/platform/commitlint.config.mjs @@ -0,0 +1,34 @@ +/** @type {import("@commitlint/types").UserConfig} */ +export default { + ignores: [(commit) => commit.includes('init')], + extends: ['@commitlint/config-conventional'], + rules: { + 'body-leading-blank': [2, 'always'], + 'footer-leading-blank': [1, 'always'], + 'header-max-length': [2, 'always', 108], + 'subject-empty': [2, 'never'], + 'type-empty': [2, 'never'], + 'subject-case': [0], + 'type-enum': [ + 2, + 'always', + [ + 'feat', + 'fix', + 'perf', + 'style', + 'docs', + 'test', + 'refactor', + 'build', + 'ci', + 'chore', + 'revert', + 'wip', + 'workflow', + 'types', + 'release', + ], + ], + }, +}; diff --git a/apps/platform/docker-compose.yml b/apps/platform/docker-compose.yml new file mode 100644 index 0000000..5ae49e8 --- /dev/null +++ b/apps/platform/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3' + +services: + vue3-antdv-admin: + # 从当前路径构建镜像 + build: + context: . + dockerfile: Dockerfile + target: production + image: buqiyuan/vue3-antdv-admin:latest + ports: + - '80:80' + env_file: + - .env + - .env.production diff --git a/apps/platform/eslint.config.mjs b/apps/platform/eslint.config.mjs new file mode 100644 index 0000000..d694401 --- /dev/null +++ b/apps/platform/eslint.config.mjs @@ -0,0 +1,206 @@ +import js from '@eslint/js'; +import pluginVue from 'eslint-plugin-vue'; +import * as parserVue from 'vue-eslint-parser'; +import configPrettier from 'eslint-config-prettier'; +import pluginPrettier from 'eslint-plugin-prettier'; +import pluginImport from 'eslint-plugin-import'; +import { defineFlatConfig } from 'eslint-define-config'; +import * as parserTypeScript from '@typescript-eslint/parser'; +import pluginTypeScript from '@typescript-eslint/eslint-plugin'; +import unusedImports from 'eslint-plugin-unused-imports'; + +export default defineFlatConfig([ + { + ...js.configs.recommended, + plugins: { + prettier: pluginPrettier, + }, + rules: { + ...configPrettier.rules, + ...pluginPrettier.configs.recommended.rules, + 'no-debugger': 'off', + 'no-unused-vars': [ + 'error', + { + argsIgnorePattern: '^_', + varsIgnorePattern: '^_', + }, + ], + 'prettier/prettier': [ + 'error', + { + endOfLine: 'auto', + }, + ], + }, + }, + { + files: ['**/*.?([cm])ts', '**/*.?([cm])tsx'], + languageOptions: { + parser: parserTypeScript, + parserOptions: { + sourceType: 'module', + }, + }, + plugins: { + '@typescript-eslint': pluginTypeScript, + }, + rules: { + ...pluginTypeScript.configs.strict.rules, + '@typescript-eslint/ban-types': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-unused-expressions': 'off', + '@typescript-eslint/no-invalid-void-type': 'off', + '@typescript-eslint/no-redeclare': 'error', + '@typescript-eslint/ban-ts-comment': 'off', + '@typescript-eslint/prefer-ts-expect-error': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/prefer-as-const': 'warn', + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/no-empty-object-type': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-import-type-side-effects': 'error', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/consistent-type-imports': [ + 'error', + { disallowTypeAnnotations: false, fixStyle: 'inline-type-imports' }, + ], + '@typescript-eslint/prefer-literal-enum-member': ['error', { allowBitwiseExpressions: true }], + }, + }, + { + files: ['**/*.d.ts'], + rules: { + 'eslint-comments/no-unlimited-disable': 'off', + 'import/no-duplicates': 'off', + 'unused-imports/no-unused-vars': 'off', + }, + }, + { + files: ['**/*.?([cm])js'], + rules: { + '@typescript-eslint/no-require-imports': 'off', + '@typescript-eslint/no-var-requires': 'off', + }, + }, + { + files: ['**/*.vue'], + languageOptions: { + parser: parserVue, + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + extraFileExtensions: ['.vue'], + parser: parserTypeScript, + sourceType: 'module', + }, + }, + plugins: { + vue: pluginVue, + }, + processor: pluginVue.processors['.vue'], + rules: { + ...pluginVue.configs.base.rules, + ...pluginVue.configs['vue3-essential'].rules, + ...pluginVue.configs['vue3-recommended'].rules, + 'no-undef': 'off', + 'no-unused-vars': 'off', + 'vue/no-v-html': 'off', + 'vue/require-default-prop': 'off', + 'vue/require-explicit-emits': 'off', + 'vue/multi-word-component-names': 'off', + 'vue/no-setup-props-reactivity-loss': 'off', + 'vue/html-self-closing': [ + 'error', + { + html: { + void: 'always', + normal: 'always', + component: 'always', + }, + svg: 'always', + math: 'always', + }, + ], + }, + }, + { + files: ['**/*.vue', '**/*.?([cm])ts', '**/*.?([cm])tsx'], + plugins: { + import: pluginImport, + 'unused-imports': unusedImports, + }, + rules: { + 'import/first': 'error', + 'import/no-duplicates': 'error', + 'import/order': [ + 'error', + { + groups: [ + 'builtin', + 'external', + 'internal', + 'parent', + 'sibling', + 'index', + 'object', + 'type', + ], + + pathGroups: [ + { + pattern: 'vue', + group: 'external', + position: 'before', + }, + { + pattern: '@vue/**', + group: 'external', + position: 'before', + }, + { + pattern: 'ant-design-vue', + group: 'internal', + }, + ], + pathGroupsExcludedImportTypes: ['type'], + }, + ], + + 'unused-imports/no-unused-imports': 'error', + // 如需保存时自动删除未引用代码,可注释掉该规则 + 'unused-imports/no-unused-vars': [ + 'warn', + { + vars: 'all', + varsIgnorePattern: '^_', + args: 'after-used', + argsIgnorePattern: '^_', + }, + ], + }, + }, + { + linterOptions: { + reportUnusedDisableDirectives: 'off', + }, + ignores: [ + 'src/assets/**', + '*.sh', + 'node_modules', + '*.md', + '*.woff', + '*.ttf', + '.vscode', + '.idea', + 'dist', + '/public', + '/docs', + '.husky', + '.local', + '/bin', + 'Dockerfile', + ], + }, +]); diff --git a/apps/platform/index.html b/apps/platform/index.html new file mode 100644 index 0000000..d8bb3e9 --- /dev/null +++ b/apps/platform/index.html @@ -0,0 +1,17 @@ + + + + + + + + Vite App + + +
+ + + diff --git a/apps/platform/lint-staged.config.mjs b/apps/platform/lint-staged.config.mjs new file mode 100644 index 0000000..4a369a0 --- /dev/null +++ b/apps/platform/lint-staged.config.mjs @@ -0,0 +1,8 @@ +/** @type {import('lint-staged').Config} */ +export default { + '*.{js,jsx,ts,tsx}': ['eslint --fix', 'prettier --write'], + '*.json': ['prettier --write'], + '*.vue': ['eslint --fix', 'prettier --write', 'stylelint --fix --allow-empty-input'], + '*.{scss,less,styl,html}': ['stylelint --fix --allow-empty-input', 'prettier --write'], + '*.md': ['prettier --write'], +}; diff --git a/apps/platform/openapi.config.ts b/apps/platform/openapi.config.ts new file mode 100644 index 0000000..fc6b2bb --- /dev/null +++ b/apps/platform/openapi.config.ts @@ -0,0 +1,104 @@ +import { generateService } from '@umijs/openapi'; +import type { RequestOptions } from './src/utils/request'; + +const re = /controller[-_ .](\w)/gi; + +// swagger-typescript-api +generateService({ + schemaPath: 'http://127.0.0.1:7001/api-docs-json', + serversPath: './src/api/backend', + requestOptionsType: 'RequestOptions', + // 自定义网络请求函数路径 + requestImportStatement: ` + /** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + + import { request, type RequestOptions } from "@/utils/request"; + `, + hook: { + afterOpenApiDataInited(openAPIData) { + const schemas = openAPIData.components?.schemas; + if (schemas) { + Object.values(schemas).forEach((schema) => { + if ('$ref' in schema) { + return; + } + if (schema.properties) { + Object.values(schema.properties).forEach((prop) => { + if ('$ref' in prop) { + return; + } + // 匡正文件上传的参数类型 + if (prop.format === 'binary') { + prop.type = 'object'; + } + }); + } + }); + } + return openAPIData; + }, + // @ts-ignore + customFunctionName(operationObject, apiPath) { + const { operationId } = operationObject; + + if (!operationId) { + console.warn('[Warning] no operationId', apiPath); + return; + } + + const funcName = operationId.replace(re, (_all, letter) => letter.toUpperCase()); + + operationObject.operationId = funcName; + + return funcName; + }, + // @ts-ignore + customFileNames(operationObject, apiPath) { + const { operationId } = operationObject; + + if (!operationId) { + console.warn('[Warning] no operationId', apiPath); + return; + } + const controllerName = operationId.split(re)[0]; + const moduleName = operationObject.tags?.[0].split(' - ')[0]; + + // 移除 query 参数的默认值 + operationObject.parameters?.forEach((param) => { + if ('in' in param && param.in === 'query' && param.schema) { + if (!('$ref' in param.schema) && param.schema.default) { + Reflect.deleteProperty(param.schema, 'default'); + } + } + }); + + if (moduleName === controllerName) { + return [controllerName]; + } else if (moduleName && moduleName !== controllerName) { + return [`${moduleName}_${controllerName}`]; + } + return; + }, + customType(schemaObject, namespace, defaultGetType) { + const type = defaultGetType(schemaObject, namespace); + // 提取出 data 的类型 + const regex = /API\.ResOp & { 'data'\?: (.+); }/; + return type.replace(regex, '$1'); + }, + customOptionsDefaultValue(data): RequestOptions { + const { summary } = data; + + if (summary?.startsWith('创建') || summary?.startsWith('新增')) { + return { successMsg: '创建成功' }; + } else if (summary?.startsWith('更新')) { + return { successMsg: '更新成功' }; + } else if (summary?.startsWith('删除')) { + return { successMsg: '删除成功' }; + } + + return {}; + }, + }, +}); diff --git a/apps/platform/package.json b/apps/platform/package.json new file mode 100644 index 0000000..7dadc02 --- /dev/null +++ b/apps/platform/package.json @@ -0,0 +1,120 @@ +{ + "name": "@sy/low-code-platform", + "version": "1.0.0-1", + "packageManager": "pnpm@9.4.0", + "type": "module", + "engines": { + "node": ">=20", + "pnpm": ">=9.0.2" + }, + "author": { + "name": "wangxuefeng", + "email": "wangxuefeng@shiyue.com" + }, + "scripts": { + "preinstall": "npx only-allow pnpm", + "serve": "npm run dev", + "dev": "vite dev", + "build": "rimraf dist && cross-env NODE_ENV=production vite build", + "build:watch": "rimraf dist && cross-env NODE_ENV=production vite build --watch", + "preview": "vite preview", + "preview:watch": "npm run build:watch && vite preview", + "clean:cache": "rimraf node_modules/.cache/ && rimraf node_modules/.vite", + "test:gzip": "npx http-server dist --cors --gzip -c-1", + "test:br": "npx http-server dist --cors --brotli -c-1", + "clean:lock": "rimraf pnpm-lock.yaml && rimraf package.lock.json", + "clean:lib": "rimraf node_modules" + }, + "dependencies": { + "@ant-design/icons-vue": "~7.0.1", + "@iconify/vue": "^4.3.0", + "@vueuse/core": "~11.1.0", + "ant-design-vue": "~4.2.6", + "axios": "~1.7.9", + "crypto-js": "^4.2.0", + "dayjs": "~1.11.13", + "file-saver": "~2.0.5", + "licia-es": "^1.46.0", + "lodash-es": "~4.17.21", + "mitt": "~3.0.1", + "nprogress": "1.0.0-1", + "pinia": "~2.2.8", + "pinia-plugin-persistedstate": "^4.2.0", + "qs": "~6.13.1", + "sortablejs": "~1.15.6", + "vue": "~3.5.13", + "vue-i18n": "^11.1.1", + "vue-router": "~4.4.5", + "vue-types": "~5.1.3", + "vue-virtual-scroller": "2.0.0-beta.8", + "wujie-vue3": "^1.0.24", + "xlsx": "~0.18.5", + "core-js": "^3.40.0" + }, + "devDependencies": { + "@sy/vite-plugin-http2-proxy": "workspace:*", + "@commitlint/cli": "~19.5.0", + "@commitlint/config-conventional": "~19.5.0", + "@iconify-json/ant-design": "^1.2.5", + "@iconify-json/ep": "^1.2.2", + "@iconify/json": "^2.2.307", + "@sy/low-code-designer": "workspace:*", + "@types/crypto-js": "^4.2.2", + "@types/lodash-es": "~4.17.12", + "@types/node": "~22.7.9", + "@types/qs": "^6.9.18", + "@types/sortablejs": "^1.15.8", + "@typescript-eslint/eslint-plugin": "~8.11.0", + "@typescript-eslint/parser": "~8.11.0", + "@umijs/openapi": "^1.13.0", + "@vitejs/plugin-vue": "~5.1.5", + "@vitejs/plugin-vue-jsx": "~4.0.1", + "@vue/tsconfig": "^0.5.1", + "commitizen": "~4.3.1", + "conventional-changelog-cli": "~4.1.0", + "cross-env": "~7.0.3", + "eslint": "~9.13.0", + "eslint-config-prettier": "~9.1.0", + "eslint-define-config": "~2.1.0", + "eslint-plugin-import": "~2.31.0", + "eslint-plugin-prettier": "~5.2.3", + "eslint-plugin-unused-imports": "^4.1.4", + "eslint-plugin-vue": "~9.29.1", + "less": "~4.2.2", + "lint-staged": "~15.2.11", + "msw": "^2.7.0", + "postcss": "~8.4.49", + "postcss-html": "~1.7.0", + "postcss-less": "~6.0.0", + "prettier": "~3.3.3", + "rimraf": "~6.0.1", + "stylelint": "~16.10.0", + "stylelint-config-property-sort-order-smacss": "^10.0.0", + "stylelint-config-recommended": "~14.0.1", + "stylelint-config-recommended-vue": "~1.5.0", + "stylelint-config-standard": "~36.0.1", + "stylelint-order": "~6.0.4", + "stylelint-prettier": "^5.0.3", + "typescript": "~5.6.3", + "unocss": "^65.5.0", + "unplugin-vue-components": "~0.27.5", + "vite": "~6.1.0", + "vite-plugin-checker": "~0.8.0", + "vite-plugin-inspect": "^10.2.1", + "vite-plugin-mkcert": "^1.17.6", + "vite-plugin-svg-icons": "~2.0.1", + "vite-plugin-vue-inspector": "^5.3.1", + "vue-eslint-parser": "~9.4.3", + "vue-tsc": "~2.1.10" + }, + "keywords": [ + "vue", + "ant-design-vue", + "vue3", + "ts", + "tsx", + "admin", + "typescript" + ], + "target": "web" +} \ No newline at end of file diff --git a/apps/platform/prettier.config.mjs b/apps/platform/prettier.config.mjs new file mode 100644 index 0000000..e5d7d55 --- /dev/null +++ b/apps/platform/prettier.config.mjs @@ -0,0 +1,11 @@ +/** @type {import('prettier').Config} */ +export default { + printWidth: 100, + semi: true, + vueIndentScriptAndStyle: true, + singleQuote: true, + trailingComma: 'all', + proseWrap: 'never', + htmlWhitespaceSensitivity: 'strict', + endOfLine: 'auto', +}; diff --git a/public/favicon.ico b/apps/platform/public/favicon.ico similarity index 100% rename from public/favicon.ico rename to apps/platform/public/favicon.ico diff --git a/apps/platform/public/iconfont.js b/apps/platform/public/iconfont.js new file mode 100644 index 0000000..37aff3d --- /dev/null +++ b/apps/platform/public/iconfont.js @@ -0,0 +1 @@ +window._iconfont_svg_string_2184398='',function(l){var a=(a=document.getElementsByTagName("script"))[a.length-1],h=a.getAttribute("data-injectcss"),a=a.getAttribute("data-disable-injectsvg");if(!a){var v,o,i,m,z,t=function(a,h){h.parentNode.insertBefore(a,h)};if(h&&!l.__iconfont__svg__cssinject__){l.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}v=function(){var a,h=document.createElement("div");h.innerHTML=l._iconfont_svg_string_2184398,(h=h.getElementsByTagName("svg")[0])&&(h.setAttribute("aria-hidden","true"),h.style.position="absolute",h.style.width=0,h.style.height=0,h.style.overflow="hidden",h=h,(a=document.body).firstChild?t(h,a.firstChild):a.appendChild(h))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(v,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),v()},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(i=v,m=l.document,z=!1,s(),m.onreadystatechange=function(){"complete"==m.readyState&&(m.onreadystatechange=null,n())})}function n(){z||(z=!0,i())}function s(){try{m.documentElement.doScroll("left")}catch(a){return void setTimeout(s,50)}n()}}(window); diff --git a/apps/platform/src/App.vue b/apps/platform/src/App.vue new file mode 100644 index 0000000..c7d7138 --- /dev/null +++ b/apps/platform/src/App.vue @@ -0,0 +1,30 @@ + + + diff --git a/apps/platform/src/api/backend/api/account.ts b/apps/platform/src/api/backend/api/account.ts new file mode 100644 index 0000000..52d741e --- /dev/null +++ b/apps/platform/src/api/backend/api/account.ts @@ -0,0 +1,64 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 账户登出 GET /api/account/logout */ +export async function accountLogout(options?: RequestOptions) { + return request('/api/account/logout', { + method: 'GET', + ...(options || {}), + }); +} + +/** 获取菜单列表 GET /api/account/menus */ +export async function accountMenu(options?: RequestOptions) { + return request('/api/account/menus', { + method: 'GET', + ...(options || {}), + }); +} + +/** 更改账户密码 POST /api/account/password */ +export async function accountPassword(body: API.PasswordUpdateDto, options?: RequestOptions) { + return request('/api/account/password', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + }); +} + +/** 获取权限列表 GET /api/account/permissions */ +export async function accountPermissions(options?: RequestOptions) { + return request('/api/account/permissions', { + method: 'GET', + ...(options || {}), + }); +} + +/** 获取账户资料 GET /api/account/profile */ +export async function accountProfile(options?: RequestOptions) { + return request('/api/account/profile', { + method: 'GET', + ...(options || {}), + }); +} + +/** 更改账户资料 PUT /api/account/update */ +export async function accountUpdate(body: API.AccountUpdateDto, options?: RequestOptions) { + return request('/api/account/update', { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + }); +} diff --git a/apps/platform/src/api/backend/api/auth.ts b/apps/platform/src/api/backend/api/auth.ts new file mode 100644 index 0000000..3a6a822 --- /dev/null +++ b/apps/platform/src/api/backend/api/auth.ts @@ -0,0 +1,32 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 登录 POST /api/auth/login */ +export async function authLogin(body: API.LoginDto, options?: RequestOptions) { + return request('/api/auth/login', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + }); +} + +/** 注册 POST /api/auth/register */ +export async function authRegister(body: API.RegisterDto, options?: RequestOptions) { + return request('/api/auth/register', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + }); +} diff --git a/apps/platform/src/api/backend/api/authEmail.ts b/apps/platform/src/api/backend/api/authEmail.ts new file mode 100644 index 0000000..17102b0 --- /dev/null +++ b/apps/platform/src/api/backend/api/authEmail.ts @@ -0,0 +1,20 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 发送邮箱验证码 POST /api/auth/email/send */ +export async function emailSendEmailCode(body: API.SendEmailCodeDto, options?: RequestOptions) { + return request('/api/auth/email/send', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + }); +} diff --git a/apps/platform/src/api/backend/api/businessTodo.ts b/apps/platform/src/api/backend/api/businessTodo.ts new file mode 100644 index 0000000..2f1d1bd --- /dev/null +++ b/apps/platform/src/api/backend/api/businessTodo.ts @@ -0,0 +1,82 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 获取Todo列表 GET /api/todos */ +export async function todoList( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.TodoListParams, + options?: RequestOptions, +) { + return request('/api/todos', { + method: 'GET', + params: { + ...params, + }, + ...(options || {}), + }); +} + +/** 创建Todo POST /api/todos */ +export async function todoCreate(body: API.TodoDto, options?: RequestOptions) { + return request('/api/todos', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || { successMsg: '创建成功' }), + }); +} + +/** 获取Todo详情 GET /api/todos/${param0} */ +export async function todoInfo( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.TodoInfoParams, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/todos/${param0}`, { + method: 'GET', + params: { ...queryParams }, + ...(options || {}), + }); +} + +/** 更新Todo PUT /api/todos/${param0} */ +export async function todoUpdate( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.TodoUpdateParams, + body: API.TodoUpdateDto, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/todos/${param0}`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + }, + params: { ...queryParams }, + data: body, + ...(options || { successMsg: '更新成功' }), + }); +} + +/** 删除Todo DELETE /api/todos/${param0} */ +export async function todoDelete( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.TodoDeleteParams, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/todos/${param0}`, { + method: 'DELETE', + params: { ...queryParams }, + ...(options || { successMsg: '删除成功' }), + }); +} diff --git a/apps/platform/src/api/backend/api/captcha.ts b/apps/platform/src/api/backend/api/captcha.ts new file mode 100644 index 0000000..30c2117 --- /dev/null +++ b/apps/platform/src/api/backend/api/captcha.ts @@ -0,0 +1,23 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 获取登录图片验证码 GET /api/auth/captcha/img */ +export async function captchaCaptchaByImg( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.CaptchaCaptchaByImgParams, + options?: RequestOptions, +) { + return request('/api/auth/captcha/img', { + method: 'GET', + params: { + ...params, + }, + ...(options || {}), + }); +} diff --git a/apps/platform/src/api/backend/api/health.ts b/apps/platform/src/api/backend/api/health.ts new file mode 100644 index 0000000..80d1c90 --- /dev/null +++ b/apps/platform/src/api/backend/api/health.ts @@ -0,0 +1,73 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 此处后端没有提供注释 GET /api/health/database */ +export async function healthCheckDatabase(options?: RequestOptions) { + return request<{ + status?: string; + info?: Record; + error?: Record; + details?: Record; + }>('/api/health/database', { + method: 'GET', + ...(options || {}), + }); +} + +/** 此处后端没有提供注释 GET /api/health/disk */ +export async function healthCheckDisk(options?: RequestOptions) { + return request<{ + status?: string; + info?: Record; + error?: Record; + details?: Record; + }>('/api/health/disk', { + method: 'GET', + ...(options || {}), + }); +} + +/** 此处后端没有提供注释 GET /api/health/memory-heap */ +export async function healthCheckMemoryHeap(options?: RequestOptions) { + return request<{ + status?: string; + info?: Record; + error?: Record; + details?: Record; + }>('/api/health/memory-heap', { + method: 'GET', + ...(options || {}), + }); +} + +/** 此处后端没有提供注释 GET /api/health/memory-rss */ +export async function healthCheckMemoryRss(options?: RequestOptions) { + return request<{ + status?: string; + info?: Record; + error?: Record; + details?: Record; + }>('/api/health/memory-rss', { + method: 'GET', + ...(options || {}), + }); +} + +/** 此处后端没有提供注释 GET /api/health/network */ +export async function healthCheckNetwork(options?: RequestOptions) { + return request<{ + status?: string; + info?: Record; + error?: Record; + details?: Record; + }>('/api/health/network', { + method: 'GET', + ...(options || {}), + }); +} diff --git a/apps/platform/src/api/backend/api/index.ts b/apps/platform/src/api/backend/api/index.ts new file mode 100644 index 0000000..baf3c23 --- /dev/null +++ b/apps/platform/src/api/backend/api/index.ts @@ -0,0 +1,54 @@ +// @ts-ignore +/* eslint-disable */ +// API 更新时间: +// API 唯一标识: +import * as auth from './auth'; +import * as account from './account'; +import * as captcha from './captcha'; +import * as authEmail from './authEmail'; +import * as systemUser from './systemUser'; +import * as systemRole from './systemRole'; +import * as systemMenu from './systemMenu'; +import * as systemParamConfig from './systemParamConfig'; +import * as systemLog from './systemLog'; +import * as systemDept from './systemDept'; +import * as systemDictType from './systemDictType'; +import * as systemDictItem from './systemDictItem'; +import * as systemTask from './systemTask'; +import * as systemOnline from './systemOnline'; +import * as systemSse from './systemSse'; +import * as systemServe from './systemServe'; +import * as toolsStorage from './toolsStorage'; +import * as systemEmail from './systemEmail'; +import * as toolsUpload from './toolsUpload'; +import * as health from './health'; +import * as netDiskManage from './netDiskManage'; +import * as netDiskOverview from './netDiskOverview'; +import * as businessTodo from './businessTodo'; +import * as user from './user'; +export default { + auth, + account, + captcha, + authEmail, + systemUser, + systemRole, + systemMenu, + systemParamConfig, + systemLog, + systemDept, + systemDictType, + systemDictItem, + systemTask, + systemOnline, + systemSse, + systemServe, + toolsStorage, + systemEmail, + toolsUpload, + health, + netDiskManage, + netDiskOverview, + businessTodo, + user, +}; diff --git a/apps/platform/src/api/backend/api/netDiskManage.ts b/apps/platform/src/api/backend/api/netDiskManage.ts new file mode 100644 index 0000000..72f847d --- /dev/null +++ b/apps/platform/src/api/backend/api/netDiskManage.ts @@ -0,0 +1,133 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 复制文件或文件夹,支持批量 POST /api/netdisk/manage/copy */ +export async function netDiskManageCopy(body: API.FileOpDto, options?: RequestOptions) { + return request('/api/netdisk/manage/copy', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + }); +} + +/** 剪切文件或文件夹,支持批量 POST /api/netdisk/manage/cut */ +export async function netDiskManageCut(body: API.FileOpDto, options?: RequestOptions) { + return request('/api/netdisk/manage/cut', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + }); +} + +/** 删除文件或文件夹 POST /api/netdisk/manage/delete */ +export async function netDiskManageDelete(body: API.DeleteDto, options?: RequestOptions) { + return request('/api/netdisk/manage/delete', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || { successMsg: '删除成功' }), + }); +} + +/** 获取下载链接,不支持下载文件夹 GET /api/netdisk/manage/download */ +export async function netDiskManageDownload( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.NetDiskManageDownloadParams, + options?: RequestOptions, +) { + return request('/api/netdisk/manage/download', { + method: 'GET', + params: { + ...params, + }, + ...(options || {}), + }); +} + +/** 获取文件详细信息 GET /api/netdisk/manage/info */ +export async function netDiskManageInfo( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.NetDiskManageInfoParams, + options?: RequestOptions, +) { + return request('/api/netdisk/manage/info', { + method: 'GET', + params: { + ...params, + }, + ...(options || {}), + }); +} + +/** 获取文件列表 GET /api/netdisk/manage/list */ +export async function netDiskManageList( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.NetDiskManageListParams, + options?: RequestOptions, +) { + return request('/api/netdisk/manage/list', { + method: 'GET', + params: { + ...params, + }, + ...(options || {}), + }); +} + +/** 添加文件备注 POST /api/netdisk/manage/mark */ +export async function netDiskManageMark(body: API.MarkFileDto, options?: RequestOptions) { + return request('/api/netdisk/manage/mark', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + }); +} + +/** 创建文件夹,支持多级 POST /api/netdisk/manage/mkdir */ +export async function netDiskManageMkdir(body: API.MKDirDto, options?: RequestOptions) { + return request('/api/netdisk/manage/mkdir', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || { successMsg: '创建成功' }), + }); +} + +/** 重命名文件或文件夹 POST /api/netdisk/manage/rename */ +export async function netDiskManageRename(body: API.RenameDto, options?: RequestOptions) { + return request('/api/netdisk/manage/rename', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + }); +} + +/** 获取上传Token,无Token前端无法上传 GET /api/netdisk/manage/token */ +export async function netDiskManageToken(options?: RequestOptions) { + return request('/api/netdisk/manage/token', { + method: 'GET', + ...(options || {}), + }); +} diff --git a/apps/platform/src/api/backend/api/netDiskOverview.ts b/apps/platform/src/api/backend/api/netDiskOverview.ts new file mode 100644 index 0000000..c5cd11c --- /dev/null +++ b/apps/platform/src/api/backend/api/netDiskOverview.ts @@ -0,0 +1,16 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 获取网盘空间数据统计 GET /api/netdisk/overview/desc */ +export async function netDiskOverviewSpace(options?: RequestOptions) { + return request('/api/netdisk/overview/desc', { + method: 'GET', + ...(options || {}), + }); +} diff --git a/apps/platform/src/api/backend/api/systemDept.ts b/apps/platform/src/api/backend/api/systemDept.ts new file mode 100644 index 0000000..82f9bdf --- /dev/null +++ b/apps/platform/src/api/backend/api/systemDept.ts @@ -0,0 +1,82 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 获取部门列表 GET /api/system/depts */ +export async function deptList( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.DeptListParams, + options?: RequestOptions, +) { + return request('/api/system/depts', { + method: 'GET', + params: { + ...params, + }, + ...(options || {}), + }); +} + +/** 创建部门 POST /api/system/depts */ +export async function deptCreate(body: API.DeptDto, options?: RequestOptions) { + return request('/api/system/depts', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || { successMsg: '创建成功' }), + }); +} + +/** 查询部门信息 GET /api/system/depts/${param0} */ +export async function deptInfo( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.DeptInfoParams, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/depts/${param0}`, { + method: 'GET', + params: { ...queryParams }, + ...(options || {}), + }); +} + +/** 更新部门 PUT /api/system/depts/${param0} */ +export async function deptUpdate( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.DeptUpdateParams, + body: API.DeptDto, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/depts/${param0}`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + }, + params: { ...queryParams }, + data: body, + ...(options || { successMsg: '更新成功' }), + }); +} + +/** 删除部门 DELETE /api/system/depts/${param0} */ +export async function deptDelete( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.DeptDeleteParams, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/depts/${param0}`, { + method: 'DELETE', + params: { ...queryParams }, + ...(options || { successMsg: '删除成功' }), + }); +} diff --git a/apps/platform/src/api/backend/api/systemDictItem.ts b/apps/platform/src/api/backend/api/systemDictItem.ts new file mode 100644 index 0000000..988ed9c --- /dev/null +++ b/apps/platform/src/api/backend/api/systemDictItem.ts @@ -0,0 +1,91 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 获取字典项列表 GET /api/system/dict-item */ +export async function dictItemList( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.DictItemListParams, + options?: RequestOptions, +) { + return request<{ + items?: API.DictItemEntity[]; + meta?: { + itemCount?: number; + totalItems?: number; + itemsPerPage?: number; + totalPages?: number; + currentPage?: number; + }; + }>('/api/system/dict-item', { + method: 'GET', + params: { + ...params, + }, + ...(options || {}), + }); +} + +/** 新增字典项 POST /api/system/dict-item */ +export async function dictItemCreate(body: API.DictItemDto, options?: RequestOptions) { + return request('/api/system/dict-item', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || { successMsg: '创建成功' }), + }); +} + +/** 查询字典项信息 GET /api/system/dict-item/${param0} */ +export async function dictItemInfo( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.DictItemInfoParams, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/dict-item/${param0}`, { + method: 'GET', + params: { ...queryParams }, + ...(options || {}), + }); +} + +/** 更新字典项 POST /api/system/dict-item/${param0} */ +export async function dictItemUpdate( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.DictItemUpdateParams, + body: API.DictItemDto, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/dict-item/${param0}`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + params: { ...queryParams }, + data: body, + ...(options || { successMsg: '更新成功' }), + }); +} + +/** 删除指定的字典项 DELETE /api/system/dict-item/${param0} */ +export async function dictItemDelete( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.DictItemDeleteParams, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/dict-item/${param0}`, { + method: 'DELETE', + params: { ...queryParams }, + ...(options || { successMsg: '删除成功' }), + }); +} diff --git a/apps/platform/src/api/backend/api/systemDictType.ts b/apps/platform/src/api/backend/api/systemDictType.ts new file mode 100644 index 0000000..32f3391 --- /dev/null +++ b/apps/platform/src/api/backend/api/systemDictType.ts @@ -0,0 +1,99 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 获取字典类型列表 GET /api/system/dict-type */ +export async function dictTypeList( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.DictTypeListParams, + options?: RequestOptions, +) { + return request<{ + items?: API.DictTypeEntity[]; + meta?: { + itemCount?: number; + totalItems?: number; + itemsPerPage?: number; + totalPages?: number; + currentPage?: number; + }; + }>('/api/system/dict-type', { + method: 'GET', + params: { + ...params, + }, + ...(options || {}), + }); +} + +/** 新增字典类型 POST /api/system/dict-type */ +export async function dictTypeCreate(body: API.DictTypeDto, options?: RequestOptions) { + return request('/api/system/dict-type', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || { successMsg: '创建成功' }), + }); +} + +/** 查询字典类型信息 GET /api/system/dict-type/${param0} */ +export async function dictTypeInfo( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.DictTypeInfoParams, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/dict-type/${param0}`, { + method: 'GET', + params: { ...queryParams }, + ...(options || {}), + }); +} + +/** 更新字典类型 POST /api/system/dict-type/${param0} */ +export async function dictTypeUpdate( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.DictTypeUpdateParams, + body: API.DictTypeDto, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/dict-type/${param0}`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + params: { ...queryParams }, + data: body, + ...(options || { successMsg: '更新成功' }), + }); +} + +/** 删除指定的字典类型 DELETE /api/system/dict-type/${param0} */ +export async function dictTypeDelete( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.DictTypeDeleteParams, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/dict-type/${param0}`, { + method: 'DELETE', + params: { ...queryParams }, + ...(options || { successMsg: '删除成功' }), + }); +} + +/** 一次性获取所有的字典类型(不分页) GET /api/system/dict-type/select-options */ +export async function dictTypeGetAll(options?: RequestOptions) { + return request('/api/system/dict-type/select-options', { + method: 'GET', + ...(options || {}), + }); +} diff --git a/apps/platform/src/api/backend/api/systemEmail.ts b/apps/platform/src/api/backend/api/systemEmail.ts new file mode 100644 index 0000000..e8b5d33 --- /dev/null +++ b/apps/platform/src/api/backend/api/systemEmail.ts @@ -0,0 +1,20 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 发送邮件 POST /api/tools/email/send */ +export async function emailSend(body: API.EmailSendDto, options?: RequestOptions) { + return request('/api/tools/email/send', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + }); +} diff --git a/apps/platform/src/api/backend/api/systemLog.ts b/apps/platform/src/api/backend/api/systemLog.ts new file mode 100644 index 0000000..ea94d93 --- /dev/null +++ b/apps/platform/src/api/backend/api/systemLog.ts @@ -0,0 +1,80 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 查询验证码日志列表 GET /api/system/log/captcha/list */ +export async function logCaptchaList( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.LogCaptchaListParams, + options?: RequestOptions, +) { + return request<{ + items?: API.CaptchaLogEntity[]; + meta?: { + itemCount?: number; + totalItems?: number; + itemsPerPage?: number; + totalPages?: number; + currentPage?: number; + }; + }>('/api/system/log/captcha/list', { + method: 'GET', + params: { + ...params, + }, + ...(options || {}), + }); +} + +/** 查询登录日志列表 GET /api/system/log/login/list */ +export async function logLoginLogPage( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.LogLoginLogPageParams, + options?: RequestOptions, +) { + return request<{ + items?: API.LoginLogInfo[]; + meta?: { + itemCount?: number; + totalItems?: number; + itemsPerPage?: number; + totalPages?: number; + currentPage?: number; + }; + }>('/api/system/log/login/list', { + method: 'GET', + params: { + ...params, + }, + ...(options || {}), + }); +} + +/** 查询任务日志列表 GET /api/system/log/task/list */ +export async function logTaskList( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.LogTaskListParams, + options?: RequestOptions, +) { + return request<{ + items?: API.TaskLogEntity[]; + meta?: { + itemCount?: number; + totalItems?: number; + itemsPerPage?: number; + totalPages?: number; + currentPage?: number; + }; + }>('/api/system/log/task/list', { + method: 'GET', + params: { + ...params, + }, + ...(options || {}), + }); +} diff --git a/apps/platform/src/api/backend/api/systemMenu.ts b/apps/platform/src/api/backend/api/systemMenu.ts new file mode 100644 index 0000000..8051b49 --- /dev/null +++ b/apps/platform/src/api/backend/api/systemMenu.ts @@ -0,0 +1,90 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 获取所有菜单列表 GET /api/system/menus */ +export async function menuList( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.MenuListParams, + options?: RequestOptions, +) { + return request('/api/system/menus', { + method: 'GET', + params: { + ...params, + }, + ...(options || {}), + }); +} + +/** 新增菜单或权限 POST /api/system/menus */ +export async function menuCreate(body: API.MenuDto, options?: RequestOptions) { + return request('/api/system/menus', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || { successMsg: '创建成功' }), + }); +} + +/** 获取菜单或权限信息 GET /api/system/menus/${param0} */ +export async function menuInfo( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.MenuInfoParams, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/menus/${param0}`, { + method: 'GET', + params: { ...queryParams }, + ...(options || {}), + }); +} + +/** 更新菜单或权限 PUT /api/system/menus/${param0} */ +export async function menuUpdate( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.MenuUpdateParams, + body: API.MenuUpdateDto, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/menus/${param0}`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + }, + params: { ...queryParams }, + data: body, + ...(options || { successMsg: '更新成功' }), + }); +} + +/** 删除菜单或权限 DELETE /api/system/menus/${param0} */ +export async function menuDelete( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.MenuDeleteParams, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/menus/${param0}`, { + method: 'DELETE', + params: { ...queryParams }, + ...(options || { successMsg: '删除成功' }), + }); +} + +/** 获取后端定义的所有权限集 GET /api/system/menus/permissions */ +export async function menuGetPermissions(options?: RequestOptions) { + return request('/api/system/menus/permissions', { + method: 'GET', + ...(options || {}), + }); +} diff --git a/apps/platform/src/api/backend/api/systemOnline.ts b/apps/platform/src/api/backend/api/systemOnline.ts new file mode 100644 index 0000000..326a893 --- /dev/null +++ b/apps/platform/src/api/backend/api/systemOnline.ts @@ -0,0 +1,28 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 下线指定在线用户 POST /api/system/online/kick */ +export async function onlineKick(body: API.KickDto, options?: RequestOptions) { + return request('/api/system/online/kick', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + }); +} + +/** 查询当前在线用户 GET /api/system/online/list */ +export async function onlineList(options?: RequestOptions) { + return request('/api/system/online/list', { + method: 'GET', + ...(options || {}), + }); +} diff --git a/apps/platform/src/api/backend/api/systemParamConfig.ts b/apps/platform/src/api/backend/api/systemParamConfig.ts new file mode 100644 index 0000000..4422940 --- /dev/null +++ b/apps/platform/src/api/backend/api/systemParamConfig.ts @@ -0,0 +1,91 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 获取参数配置列表 GET /api/system/param-config */ +export async function paramConfigList( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.ParamConfigListParams, + options?: RequestOptions, +) { + return request<{ + items?: API.ParamConfigEntity[]; + meta?: { + itemCount?: number; + totalItems?: number; + itemsPerPage?: number; + totalPages?: number; + currentPage?: number; + }; + }>('/api/system/param-config', { + method: 'GET', + params: { + ...params, + }, + ...(options || {}), + }); +} + +/** 新增参数配置 POST /api/system/param-config */ +export async function paramConfigCreate(body: API.ParamConfigDto, options?: RequestOptions) { + return request('/api/system/param-config', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || { successMsg: '创建成功' }), + }); +} + +/** 查询参数配置信息 GET /api/system/param-config/${param0} */ +export async function paramConfigInfo( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.ParamConfigInfoParams, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/param-config/${param0}`, { + method: 'GET', + params: { ...queryParams }, + ...(options || {}), + }); +} + +/** 更新参数配置 POST /api/system/param-config/${param0} */ +export async function paramConfigUpdate( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.ParamConfigUpdateParams, + body: API.ParamConfigDto, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/param-config/${param0}`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + params: { ...queryParams }, + data: body, + ...(options || { successMsg: '更新成功' }), + }); +} + +/** 删除指定的参数配置 DELETE /api/system/param-config/${param0} */ +export async function paramConfigDelete( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.ParamConfigDeleteParams, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/param-config/${param0}`, { + method: 'DELETE', + params: { ...queryParams }, + ...(options || { successMsg: '删除成功' }), + }); +} diff --git a/apps/platform/src/api/backend/api/systemRole.ts b/apps/platform/src/api/backend/api/systemRole.ts new file mode 100644 index 0000000..dfa5ec3 --- /dev/null +++ b/apps/platform/src/api/backend/api/systemRole.ts @@ -0,0 +1,91 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 获取角色列表 GET /api/system/roles */ +export async function roleList( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.RoleListParams, + options?: RequestOptions, +) { + return request<{ + items?: API.RoleEntity[]; + meta?: { + itemCount?: number; + totalItems?: number; + itemsPerPage?: number; + totalPages?: number; + currentPage?: number; + }; + }>('/api/system/roles', { + method: 'GET', + params: { + ...params, + }, + ...(options || {}), + }); +} + +/** 新增角色 POST /api/system/roles */ +export async function roleCreate(body: API.RoleDto, options?: RequestOptions) { + return request('/api/system/roles', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || { successMsg: '创建成功' }), + }); +} + +/** 获取角色信息 GET /api/system/roles/${param0} */ +export async function roleInfo( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.RoleInfoParams, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/roles/${param0}`, { + method: 'GET', + params: { ...queryParams }, + ...(options || {}), + }); +} + +/** 更新角色 PUT /api/system/roles/${param0} */ +export async function roleUpdate( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.RoleUpdateParams, + body: API.RoleUpdateDto, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/roles/${param0}`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + }, + params: { ...queryParams }, + data: body, + ...(options || { successMsg: '更新成功' }), + }); +} + +/** 删除角色 DELETE /api/system/roles/${param0} */ +export async function roleDelete( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.RoleDeleteParams, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/roles/${param0}`, { + method: 'DELETE', + params: { ...queryParams }, + ...(options || { successMsg: '删除成功' }), + }); +} diff --git a/apps/platform/src/api/backend/api/systemServe.ts b/apps/platform/src/api/backend/api/systemServe.ts new file mode 100644 index 0000000..7ddc60b --- /dev/null +++ b/apps/platform/src/api/backend/api/systemServe.ts @@ -0,0 +1,16 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 获取服务器运行信息 GET /api/system/serve/stat */ +export async function serveStat(options?: RequestOptions) { + return request('/api/system/serve/stat', { + method: 'GET', + ...(options || {}), + }); +} diff --git a/apps/platform/src/api/backend/api/systemSse.ts b/apps/platform/src/api/backend/api/systemSse.ts new file mode 100644 index 0000000..eb07ee5 --- /dev/null +++ b/apps/platform/src/api/backend/api/systemSse.ts @@ -0,0 +1,22 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 服务端推送消息 GET /api/sse/${param0} */ +export async function sseSse( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.SseSseParams, + options?: RequestOptions, +) { + const { uid: param0, ...queryParams } = params; + return request>(`/api/sse/${param0}`, { + method: 'GET', + params: { ...queryParams }, + ...(options || {}), + }); +} diff --git a/apps/platform/src/api/backend/api/systemTask.ts b/apps/platform/src/api/backend/api/systemTask.ts new file mode 100644 index 0000000..0af74c0 --- /dev/null +++ b/apps/platform/src/api/backend/api/systemTask.ts @@ -0,0 +1,133 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 获取任务列表 GET /api/system/tasks */ +export async function taskList( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.TaskListParams, + options?: RequestOptions, +) { + return request<{ + items?: API.TaskEntity[]; + meta?: { + itemCount?: number; + totalItems?: number; + itemsPerPage?: number; + totalPages?: number; + currentPage?: number; + }; + }>('/api/system/tasks', { + method: 'GET', + params: { + ...params, + }, + ...(options || {}), + }); +} + +/** 添加任务 POST /api/system/tasks */ +export async function taskCreate(body: API.TaskDto, options?: RequestOptions) { + return request('/api/system/tasks', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + }); +} + +/** 查询任务详细信息 GET /api/system/tasks/${param0} */ +export async function taskInfo( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.TaskInfoParams, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/tasks/${param0}`, { + method: 'GET', + params: { ...queryParams }, + ...(options || {}), + }); +} + +/** 更新任务 PUT /api/system/tasks/${param0} */ +export async function taskUpdate( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.TaskUpdateParams, + body: API.TaskUpdateDto, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/tasks/${param0}`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + }, + params: { ...queryParams }, + data: body, + ...(options || { successMsg: '更新成功' }), + }); +} + +/** 删除任务 DELETE /api/system/tasks/${param0} */ +export async function taskDelete( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.TaskDeleteParams, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/tasks/${param0}`, { + method: 'DELETE', + params: { ...queryParams }, + ...(options || { successMsg: '删除成功' }), + }); +} + +/** 手动执行一次任务 PUT /api/system/tasks/${param0}/once */ +export async function taskOnce( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.TaskOnceParams, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/tasks/${param0}/once`, { + method: 'PUT', + params: { ...queryParams }, + ...(options || {}), + }); +} + +/** 启动任务 PUT /api/system/tasks/${param0}/start */ +export async function taskStart( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.TaskStartParams, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/tasks/${param0}/start`, { + method: 'PUT', + params: { ...queryParams }, + ...(options || {}), + }); +} + +/** 停止任务 PUT /api/system/tasks/${param0}/stop */ +export async function taskStop( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.TaskStopParams, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/tasks/${param0}/stop`, { + method: 'PUT', + params: { ...queryParams }, + ...(options || {}), + }); +} diff --git a/apps/platform/src/api/backend/api/systemUser.ts b/apps/platform/src/api/backend/api/systemUser.ts new file mode 100644 index 0000000..d20caf5 --- /dev/null +++ b/apps/platform/src/api/backend/api/systemUser.ts @@ -0,0 +1,110 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 获取用户列表 GET /api/system/users */ +export async function userList( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.UserListParams, + options?: RequestOptions, +) { + return request<{ + items?: API.UserEntity[]; + meta?: { + itemCount?: number; + totalItems?: number; + itemsPerPage?: number; + totalPages?: number; + currentPage?: number; + }; + }>('/api/system/users', { + method: 'GET', + params: { + ...params, + }, + ...(options || {}), + }); +} + +/** 新增用户 POST /api/system/users */ +export async function userCreate(body: API.UserDto, options?: RequestOptions) { + return request('/api/system/users', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || { successMsg: '创建成功' }), + }); +} + +/** 查询用户 GET /api/system/users/${param0} */ +export async function userRead( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.UserReadParams, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/users/${param0}`, { + method: 'GET', + params: { ...queryParams }, + ...(options || {}), + }); +} + +/** 更新用户 PUT /api/system/users/${param0} */ +export async function userUpdate( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.UserUpdateParams, + body: API.UserUpdateDto, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/users/${param0}`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + }, + params: { ...queryParams }, + data: body, + ...(options || { successMsg: '更新成功' }), + }); +} + +/** 删除用户 DELETE /api/system/users/${param0} */ +export async function userDelete( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.UserDeleteParams, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/users/${param0}`, { + method: 'DELETE', + params: { ...queryParams }, + ...(options || { successMsg: '删除成功' }), + }); +} + +/** 更改用户密码 POST /api/system/users/${param0}/password */ +export async function userPassword( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.UserPasswordParams, + body: API.UserPasswordDto, + options?: RequestOptions, +) { + const { id: param0, ...queryParams } = params; + return request(`/api/system/users/${param0}/password`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + params: { ...queryParams }, + data: body, + ...(options || {}), + }); +} diff --git a/apps/platform/src/api/backend/api/toolsStorage.ts b/apps/platform/src/api/backend/api/toolsStorage.ts new file mode 100644 index 0000000..bd158ff --- /dev/null +++ b/apps/platform/src/api/backend/api/toolsStorage.ts @@ -0,0 +1,44 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 删除文件 POST /api/tools/storage/delete */ +export async function storageDelete(body: API.StorageDeleteDto, options?: RequestOptions) { + return request('/api/tools/storage/delete', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || { successMsg: '删除成功' }), + }); +} + +/** 获取本地存储列表 GET /api/tools/storage/list */ +export async function storageList( + // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) + params: API.StorageListParams, + options?: RequestOptions, +) { + return request<{ + items?: API.StorageInfo[]; + meta?: { + itemCount?: number; + totalItems?: number; + itemsPerPage?: number; + totalPages?: number; + currentPage?: number; + }; + }>('/api/tools/storage/list', { + method: 'GET', + params: { + ...params, + }, + ...(options || {}), + }); +} diff --git a/apps/platform/src/api/backend/api/toolsUpload.ts b/apps/platform/src/api/backend/api/toolsUpload.ts new file mode 100644 index 0000000..7663200 --- /dev/null +++ b/apps/platform/src/api/backend/api/toolsUpload.ts @@ -0,0 +1,40 @@ +// @ts-ignore +/* eslint-disable */ + +/** + * 该文件为 @umijs/openapi 插件自动生成,请勿随意修改。如需修改请通过配置 openapi.config.ts 进行定制化。 + * */ + +import { request, type RequestOptions } from '@/utils/request'; + +/** 上传 POST /api/tools/upload */ +export async function uploadUpload(body: API.FileUploadDto, file?: File, options?: RequestOptions) { + const formData = new FormData(); + + if (file) { + formData.append('file', file); + } + + Object.keys(body).forEach((ele) => { + const item = (body as any)[ele]; + + if (item !== undefined && item !== null) { + if (typeof item === 'object' && !(item instanceof File)) { + if (item instanceof Array) { + item.forEach((f) => formData.append(ele, f || '')); + } else { + formData.append(ele, JSON.stringify(item)); + } + } else { + formData.append(ele, item); + } + } + }); + + return request('/api/tools/upload', { + method: 'POST', + data: formData, + requestType: 'form', + ...(options || {}), + }); +} diff --git a/apps/platform/src/api/backend/api/typings.d.ts b/apps/platform/src/api/backend/api/typings.d.ts new file mode 100644 index 0000000..15950bc --- /dev/null +++ b/apps/platform/src/api/backend/api/typings.d.ts @@ -0,0 +1,1284 @@ +declare namespace API { + type AccessTokenEntity = { + id: string; + value: string; + expired_at: string; + created_at: string; + refreshToken: RefreshTokenEntity; + user: UserEntity; + }; + + type AccountInfo = { + /** 用户名 */ + username: string; + /** 昵称 */ + nickname: string; + /** 邮箱 */ + email: string; + /** 手机号 */ + phone: string; + /** 备注 */ + remark: string; + /** 头像 */ + avatar: string; + }; + + type AccountMenus = { + meta: MenuMeta; + id: number; + path: string; + name: string; + component: string; + }; + + type AccountUpdateDto = { + /** 用户呢称 */ + nickname: string; + /** 用户邮箱 */ + email: string; + /** 用户QQ */ + qq: string; + /** 用户手机号 */ + phone: string; + /** 用户头像 */ + avatar: string; + /** 用户备注 */ + remark: string; + }; + + type CaptchaCaptchaByImgParams = { + /** 验证码宽度 */ + width?: number; + /** 验证码宽度 */ + height?: number; + }; + + type CaptchaLogEntity = { + /** 用户ID */ + userId: number; + /** 账号 */ + account: string; + /** 验证码 */ + code: string; + /** 验证码提供方 */ + provider: Record; + id: number; + createdAt: string; + updatedAt: string; + }; + + type CommonEntity = { + id: number; + createdAt: string; + updatedAt: string; + }; + + type CoreLoad = { + /** 当前CPU资源消耗 */ + rawLoad: number; + /** 当前空闲CPU资源 */ + rawLoadIdle: number; + }; + + type Cpu = { + /** 制造商 */ + manufacturer: string; + /** 品牌 */ + brand: string; + /** 物理核心数 */ + physicalCores: number; + /** 型号 */ + model: string; + /** 速度 in GHz */ + speed: number; + /** CPU资源消耗 原始滴答 */ + rawCurrentLoad: number; + /** 空闲CPU资源 原始滴答 */ + rawCurrentLoadIdle: number; + /** cpu资源消耗 */ + coresLoad: CoreLoad[]; + }; + + type DeleteDto = { + /** 需要操作的文件或文件夹 */ + files: FileOpItem[]; + /** 所在目录 */ + path: string; + }; + + type DeptDeleteParams = { + id: number; + }; + + type DeptDto = { + /** 部门名称 */ + name: string; + /** 父级部门id */ + parentId: number; + /** 排序编号 */ + orderNo?: number; + }; + + type DeptEntity = { + /** 创建者 */ + creator: string; + /** 更新者 */ + updater: string; + /** 部门名称 */ + name: string; + /** 排序 */ + orderNo: number; + children: DeptEntity[]; + parent?: DeptEntity; + id: number; + createdAt: string; + updatedAt: string; + }; + + type DeptInfoParams = { + id: number; + }; + + type DeptListParams = { + /** 部门名称 */ + name?: string; + }; + + type DeptUpdateParams = { + id: number; + }; + + type DictItemDeleteParams = { + id: number; + }; + + type DictItemDto = { + /** 创建者 */ + creator?: string; + /** 更新者 */ + updater?: string; + /** 字典项键名 */ + label?: string; + /** 字典项值 */ + value?: string; + /** 状态 */ + status?: number; + /** 备注 */ + remark?: string; + /** 字典类型 ID */ + typeId: number; + id?: number; + createdAt?: string; + updatedAt?: string; + type?: DictTypeEntity; + orderNo?: number; + }; + + type DictItemEntity = { + /** 创建者 */ + creator: string; + /** 更新者 */ + updater: string; + /** 字典项键名 */ + label: string; + /** 字典项值 */ + value: string; + /** 状态 */ + status: number; + /** 备注 */ + remark: string; + type: DictTypeEntity; + orderNo: number; + id: number; + createdAt: string; + updatedAt: string; + }; + + type DictItemInfoParams = { + id: number; + }; + + type DictItemListParams = { + page?: number; + pageSize?: number; + field?: string; + order?: 'ASC' | 'DESC'; + /** 字典类型 ID */ + typeId: number; + /** 字典项键名 */ + label?: string; + /** 字典项值 */ + value?: string; + _t?: number; + }; + + type DictItemUpdateParams = { + id: number; + }; + + type DictTypeDeleteParams = { + id: number; + }; + + type DictTypeDto = { + /** 创建者 */ + creator?: string; + /** 更新者 */ + updater?: string; + /** 字典类型名称 */ + name?: string; + /** 字典类型code */ + code?: string; + /** 状态 */ + status?: number; + /** 备注 */ + remark?: string; + id?: number; + createdAt?: string; + updatedAt?: string; + }; + + type DictTypeEntity = { + /** 创建者 */ + creator: string; + /** 更新者 */ + updater: string; + /** 字典名称 */ + name: string; + /** 字典编码 */ + code: string; + /** 状态 */ + status: number; + /** 备注 */ + remark: string; + id: number; + createdAt: string; + updatedAt: string; + }; + + type DictTypeInfoParams = { + id: number; + }; + + type DictTypeListParams = { + page?: number; + pageSize?: number; + field?: string; + order?: 'ASC' | 'DESC'; + /** 字典类型名称 */ + name: string; + /** 字典类型code */ + code: string; + _t?: number; + }; + + type DictTypeUpdateParams = { + id: number; + }; + + type Disk = { + /** 磁盘空间大小 (bytes) */ + size: number; + /** 已使用磁盘空间 (bytes) */ + used: number; + /** 可用磁盘空间 (bytes) */ + available: number; + }; + + type EmailSendDto = { + /** 收件人邮箱 */ + to: string; + /** 标题 */ + subject: string; + /** 正文 */ + content: string; + }; + + type FileOpDto = { + /** 需要操作的文件或文件夹 */ + files: FileOpItem[]; + /** 操作前的目录 */ + originPath: string; + /** 操作后的目录 */ + toPath: string; + }; + + type FileOpItem = { + /** 文件类型 */ + type: 'file' | 'dir'; + /** 文件名称 */ + name: string; + }; + + type FileUploadDto = { + /** 文件 */ + file: Record; + }; + + type FlowInfo = { + /** 当月的X号 */ + times: number[]; + /** 对应天数的耗费流量 */ + datas: number[]; + }; + + type ImageCaptcha = { + /** base64格式的svg图片 */ + img: string; + /** 验证码对应的唯一ID */ + id: string; + }; + + type KickDto = { + /** tokenId */ + tokenId: string; + }; + + type LogCaptchaListParams = { + page?: number; + pageSize?: number; + field?: string; + order?: 'ASC' | 'DESC'; + /** 用户名 */ + username: string; + /** 验证码 */ + code?: string; + /** 发送时间 */ + time?: string[]; + _t?: number; + }; + + type LoginDto = { + /** 手机号/邮箱 */ + username: string; + /** 密码 */ + password: string; + /** 验证码标识 */ + captchaId: string; + /** 用户输入的验证码 */ + verifyCode: string; + }; + + type LoginLogInfo = { + /** 日志编号 */ + id: number; + /** 登录ip */ + ip: string; + /** 登录地址 */ + address: string; + /** 系统 */ + os: string; + /** 浏览器 */ + browser: string; + /** 登录用户名 */ + username: string; + /** 登录时间 */ + time: string; + }; + + type LoginToken = { + /** JWT身份Token */ + token: string; + }; + + type LogLoginLogPageParams = { + page?: number; + pageSize?: number; + field?: string; + order?: 'ASC' | 'DESC'; + /** 用户名 */ + username: string; + /** 登录IP */ + ip?: string; + /** 登录地点 */ + address?: string; + /** 登录时间 */ + time?: string[]; + _t?: number; + }; + + type LogTaskListParams = { + page?: number; + pageSize?: number; + field?: string; + order?: 'ASC' | 'DESC'; + /** 用户名 */ + username: string; + /** 登录IP */ + ip?: string; + /** 登录时间 */ + time?: string[]; + _t?: number; + }; + + type MarkFileDto = { + /** 文件名 */ + name: string; + /** 文件所在路径 */ + path: string; + /** 备注信息 */ + mark: string; + }; + + type Memory = { + /** total memory in bytes */ + total: number; + /** 可用内存 */ + available: number; + }; + + type MenuDeleteParams = { + id: number; + }; + + type MenuDto = { + /** 菜单类型 */ + type: 0 | 1 | 2; + /** 父级菜单 */ + parentId: number; + /** 菜单或权限名称 */ + name: string; + /** 排序 */ + orderNo: number; + /** 前端路由地址 */ + path: string; + /** 是否外链 */ + isExt: boolean; + /** 外链打开方式 */ + extOpenMode: 1 | 2; + /** 菜单是否显示 */ + show: 0 | 1; + /** 设置当前路由高亮的菜单项,一般用于详情页 */ + activeMenu?: string; + /** 是否开启页面缓存 */ + keepAlive: 0 | 1; + /** 状态 */ + status: 0 | 1; + /** 菜单图标 */ + icon?: string; + /** 对应权限 */ + permission: string; + /** 菜单路由路径或外链 */ + component?: string; + }; + + type MenuInfoParams = { + id: number; + }; + + type MenuItemInfo = { + /** 创建者 */ + creator: string; + /** 更新者 */ + updater: string; + children: MenuItemInfo[]; + parentId: number; + name: string; + path: string; + permission: string; + type: number; + icon: string; + orderNo: number; + component: string; + isExt: boolean; + extOpenMode: number; + keepAlive: number; + show: number; + activeMenu: string; + status: number; + roles: RoleEntity[]; + id: number; + createdAt: string; + updatedAt: string; + }; + + type MenuListParams = { + /** 菜单类型 */ + type?: 0 | 1 | 2; + /** 父级菜单 */ + parentId?: number; + /** 菜单或权限名称 */ + name?: string; + /** 排序 */ + orderNo?: number; + /** 前端路由地址 */ + path?: string; + /** 是否外链 */ + isExt?: boolean; + /** 外链打开方式 */ + extOpenMode?: 1 | 2; + /** 菜单是否显示 */ + show?: 0 | 1; + /** 设置当前路由高亮的菜单项,一般用于详情页 */ + activeMenu?: string; + /** 是否开启页面缓存 */ + keepAlive?: 0 | 1; + /** 状态 */ + status?: 0 | 1; + /** 菜单图标 */ + icon?: string; + /** 对应权限 */ + permission?: string; + /** 菜单路由路径或外链 */ + component?: string; + }; + + type MenuMeta = { + /** 创建者 */ + creator?: string; + /** 更新者 */ + updater?: string; + title: string; + permission?: string; + type?: number; + icon?: string; + orderNo?: number; + component?: string; + isExt?: boolean; + extOpenMode?: number; + keepAlive?: number; + show?: number; + activeMenu?: string; + status?: number; + }; + + type MenuUpdateDto = { + /** 菜单类型 */ + type?: 0 | 1 | 2; + /** 父级菜单 */ + parentId?: number; + /** 菜单或权限名称 */ + name?: string; + /** 排序 */ + orderNo?: number; + /** 前端路由地址 */ + path?: string; + /** 是否外链 */ + isExt?: boolean; + /** 外链打开方式 */ + extOpenMode?: 1 | 2; + /** 菜单是否显示 */ + show?: 0 | 1; + /** 设置当前路由高亮的菜单项,一般用于详情页 */ + activeMenu?: string; + /** 是否开启页面缓存 */ + keepAlive?: 0 | 1; + /** 状态 */ + status?: 0 | 1; + /** 菜单图标 */ + icon?: string; + /** 对应权限 */ + permission?: string; + /** 菜单路由路径或外链 */ + component?: string; + }; + + type MenuUpdateParams = { + id: number; + }; + + type MKDirDto = { + /** 文件夹名称 */ + dirName: string; + /** 所属路径 */ + path: string; + }; + + type NetDiskManageDownloadParams = { + /** 文件名 */ + name: string; + /** 文件所在路径 */ + path: string; + }; + + type NetDiskManageInfoParams = { + /** 文件名 */ + name: string; + /** 文件所在路径 */ + path: string; + }; + + type NetDiskManageListParams = { + /** 分页标识 */ + marker: string; + /** 当前路径 */ + path: string; + /** 搜索关键字 */ + key?: string; + }; + + type OnlineUserInfo = { + /** 登录ip */ + ip: string; + /** 登录地址 */ + address: string; + /** 系统 */ + os: string; + /** 浏览器 */ + browser: string; + /** 登录用户名 */ + username: string; + /** 登录时间 */ + time: string; + /** tokenId */ + tokenId: string; + /** 部门名称 */ + deptName: string; + /** 用户ID */ + uid: number; + /** 是否为当前登录用户 */ + isCurrent: boolean; + /** 不允许踢当前用户或超级管理员下线 */ + disable: boolean; + }; + + type OverviewSpaceInfo = { + /** 当前使用容量 */ + spaceSize: number; + /** 当前文件数量 */ + fileSize: number; + /** 当天使用流量 */ + flowSize: number; + /** 当天请求次数 */ + hitSize: number; + /** 流量趋势,从当月1号开始计算 */ + flowTrend: FlowInfo; + /** 容量趋势,从当月1号开始计算 */ + sizeTrend: SpaceInfo; + }; + + type Pagination = {}; + + type ParamConfigDeleteParams = { + id: number; + }; + + type ParamConfigDto = { + /** 参数名称 */ + name: string; + /** 参数键名 */ + key: string; + /** 参数值 */ + value: string; + /** 备注 */ + remark?: string; + }; + + type ParamConfigEntity = { + /** 配置名 */ + name: string; + /** 配置键名 */ + key: string; + /** 配置值 */ + value: string; + /** 配置描述 */ + remark: string; + id: number; + createdAt: string; + updatedAt: string; + }; + + type ParamConfigInfoParams = { + id: number; + }; + + type ParamConfigListParams = { + page?: number; + pageSize?: number; + field?: string; + order?: 'ASC' | 'DESC'; + /** 参数名称 */ + name: string; + _t?: number; + }; + + type ParamConfigUpdateParams = { + id: number; + }; + + type PasswordUpdateDto = { + /** 旧密码 */ + oldPassword: string; + /** 新密码 */ + newPassword: string; + }; + + type RefreshTokenEntity = { + id: string; + value: string; + expired_at: string; + created_at: string; + accessToken: AccessTokenEntity; + }; + + type RegisterDto = { + /** 账号 */ + username: string; + /** 密码 */ + password: string; + /** 语言 */ + lang: string; + }; + + type RenameDto = { + /** 文件类型 */ + type: string; + /** 更改的名称 */ + toName: string; + /** 原来的名称 */ + name: string; + /** 路径 */ + path: string; + }; + + type ResOp = { + data: Record; + code: number; + message: string; + }; + + type RoleDeleteParams = { + id: number; + }; + + type RoleDto = { + /** 角色名称 */ + name: string; + /** 角色标识 */ + value: string; + /** 角色备注 */ + remark?: string; + /** 状态 */ + status: 0 | 1; + /** 关联菜单、权限编号 */ + menuIds?: number[]; + }; + + type RoleEntity = { + /** 创建者 */ + creator: string; + /** 更新者 */ + updater: string; + /** 角色名 */ + name: string; + /** 角色标识 */ + value: string; + /** 角色描述 */ + remark: string; + /** 状态:1启用,0禁用 */ + status: number; + /** 是否默认用户 */ + default: boolean; + id: number; + createdAt: string; + updatedAt: string; + }; + + type RoleInfo = { + /** 创建者 */ + creator: string; + /** 更新者 */ + updater: string; + /** 角色名 */ + name: string; + /** 角色标识 */ + value: string; + /** 角色描述 */ + remark: string; + /** 状态:1启用,0禁用 */ + status: number; + /** 是否默认用户 */ + default: boolean; + menuIds: number[]; + id: number; + createdAt: string; + updatedAt: string; + }; + + type RoleInfoParams = { + id: number; + }; + + type RoleListParams = { + page?: number; + pageSize?: number; + field?: string; + order?: 'ASC' | 'DESC'; + /** 角色名称 */ + name?: string; + /** 角色值 */ + value?: string; + /** 角色备注 */ + remark?: string; + /** 状态 */ + status?: 0 | 1; + /** 关联菜单、权限编号 */ + menuIds?: number[]; + _t?: number; + }; + + type RoleUpdateDto = { + /** 角色名称 */ + name?: string; + /** 角色标识 */ + value?: string; + /** 角色备注 */ + remark?: string; + /** 状态 */ + status?: 0 | 1; + /** 关联菜单、权限编号 */ + menuIds?: number[]; + }; + + type RoleUpdateParams = { + id: number; + }; + + type Runtime = { + /** 系统 */ + os: string; + /** 服务器架构 */ + arch: string; + /** Node版本 */ + nodeVersion: string; + /** Npm版本 */ + npmVersion: string; + }; + + type SendEmailCodeDto = { + /** 邮箱 */ + email: string; + }; + + type ServeStatInfo = { + /** 运行环境 */ + runtime: Runtime; + /** CPU信息 */ + cpu: Cpu; + /** 磁盘信息 */ + disk: Disk; + /** 内存信息 */ + memory: Memory; + }; + + type SFileInfo = { + /** 文件id */ + id: string; + /** 文件类型 */ + type: 'file' | 'dir'; + /** 文件名称 */ + name: string; + /** 存入时间 */ + putTime: string; + /** 文件大小, byte单位 */ + fsize: string; + /** 文件的mime-type */ + mimeType: string; + /** 所属目录 */ + belongTo: string; + }; + + type SFileInfoDetail = { + /** 文件大小,int64类型,单位为字节(Byte) */ + fsize: number; + /** 文件HASH值 */ + hash: string; + /** 文件MIME类型,string类型 */ + mimeType: string; + /** 文件存储类型,2 表示归档存储,1 表示低频存储,0表示普通存储。 */ + type: number; + /** 文件上传时间 */ + putTime: string; + /** 文件md5值 */ + md5: string; + /** 上传人 */ + uploader: string; + /** 文件备注 */ + mark: string; + }; + + type SFileList = { + /** 文件列表 */ + list: SFileInfo[]; + /** 分页标志,空则代表加载完毕 */ + marker: string; + }; + + type SpaceInfo = { + /** 当月的X号 */ + times: number[]; + /** 对应天数的容量, byte单位 */ + datas: number[]; + }; + + type SseSseParams = { + uid: number; + }; + + type StorageDeleteDto = { + /** 需要删除的文件ID列表 */ + ids: number[]; + }; + + type StorageInfo = { + /** 文件ID */ + id: number; + /** 文件名 */ + name: string; + /** 文件扩展名 */ + extName: string; + /** 文件路径 */ + path: string; + /** 文件类型 */ + type: string; + /** 大小 */ + size: string; + /** 上传时间 */ + createdAt: string; + /** 上传者 */ + username: string; + }; + + type StorageListParams = { + page?: number; + pageSize?: number; + field?: string; + order?: 'ASC' | 'DESC'; + /** 文件名 */ + name: string; + /** 文件后缀 */ + extName: string; + /** 文件类型 */ + type: string; + /** 大小 */ + size: string; + /** 上传时间 */ + time: string[]; + /** 上传者 */ + username: string; + _t?: number; + }; + + type String = {}; + + type TaskDeleteParams = { + id: number; + }; + + type TaskDto = { + /** 任务名称 */ + name: string; + /** 调用的服务 */ + service: string; + /** 任务类别:cron | interval */ + type: 0 | 1; + /** 任务状态 */ + status: 0 | 1; + /** 开始时间 */ + startTime?: string; + /** 结束时间 */ + endTime?: string; + /** 限制执行次数,负数则无限制 */ + limit?: number; + /** cron表达式 */ + cron: string; + /** 执行间隔,毫秒单位 */ + every?: number; + /** 执行参数 */ + data?: string; + /** 任务备注 */ + remark?: string; + }; + + type TaskEntity = { + /** 任务名 */ + name: string; + /** 任务标识 */ + service: string; + /** 任务类型 0cron 1间隔 */ + type: number; + /** 任务状态 0禁用 1启用 */ + status: number; + /** 开始时间 */ + startTime: string; + /** 结束时间 */ + endTime: string; + /** 间隔时间 */ + limit: number; + /** cron表达式 */ + cron: string; + /** 执行次数 */ + every: number; + /** 任务参数 */ + data: string; + /** 任务配置 */ + jobOpts: string; + /** 任务描述 */ + remark: string; + id: number; + createdAt: string; + updatedAt: string; + }; + + type TaskInfoParams = { + id: number; + }; + + type TaskListParams = { + page?: number; + pageSize?: number; + field?: string; + order?: 'ASC' | 'DESC'; + /** 任务名称 */ + name?: string; + /** 调用的服务 */ + service?: string; + /** 任务类别:cron | interval */ + type?: 0 | 1; + /** 任务状态 */ + status?: 0 | 1; + /** 开始时间 */ + startTime?: string; + /** 结束时间 */ + endTime?: string; + /** 限制执行次数,负数则无限制 */ + limit?: number; + /** cron表达式 */ + cron?: string; + /** 执行间隔,毫秒单位 */ + every?: number; + /** 执行参数 */ + data?: string; + /** 任务备注 */ + remark?: string; + _t?: number; + }; + + type TaskLogEntity = { + /** 任务状态:0失败,1成功 */ + status: number; + /** 任务日志信息 */ + detail: string; + /** 任务耗时 */ + consumeTime: number; + task: TaskEntity; + id: number; + createdAt: string; + updatedAt: string; + }; + + type TaskOnceParams = { + id: number; + }; + + type TaskStartParams = { + id: number; + }; + + type TaskStopParams = { + id: number; + }; + + type TaskUpdateDto = { + /** 任务名称 */ + name?: string; + /** 调用的服务 */ + service?: string; + /** 任务类别:cron | interval */ + type?: 0 | 1; + /** 任务状态 */ + status?: 0 | 1; + /** 开始时间 */ + startTime?: string; + /** 结束时间 */ + endTime?: string; + /** 限制执行次数,负数则无限制 */ + limit?: number; + /** cron表达式 */ + cron?: string; + /** 执行间隔,毫秒单位 */ + every?: number; + /** 执行参数 */ + data?: string; + /** 任务备注 */ + remark?: string; + }; + + type TaskUpdateParams = { + id: number; + }; + + type TodoDeleteParams = { + id: number; + }; + + type TodoDto = { + /** 名称 */ + value: string; + }; + + type TodoEntity = { + /** todo */ + value: string; + /** todo */ + status: boolean; + user: UserEntity; + id: number; + createdAt: string; + updatedAt: string; + }; + + type TodoInfoParams = { + id: number; + }; + + type TodoListParams = { + page?: number; + pageSize?: number; + field?: string; + order?: 'ASC' | 'DESC'; + /** 名称 */ + value: string; + _t?: number; + }; + + type TodoUpdateDto = { + /** 名称 */ + value?: string; + }; + + type TodoUpdateParams = { + id: number; + }; + + type TreeResult = { + id: number; + parentId: number; + children: string[]; + }; + + type UploadToken = { + /** 上传token */ + token: string; + }; + + type UserDeleteParams = { + id: string | number; + }; + + type UserDto = { + /** 头像 */ + avatar?: string; + /** 登录账号 */ + username: string; + /** 登录密码 */ + password: string; + /** 归属角色 */ + roleIds: number[]; + /** 归属大区 */ + deptId?: number; + /** 呢称 */ + nickname: string; + /** 邮箱 */ + email: string; + /** 手机号 */ + phone?: string; + /** QQ */ + qq?: string; + /** 备注 */ + remark?: string; + /** 状态 */ + status: 0 | 1; + }; + + type UserEntity = { + username: string; + password: string; + psalt: string; + nickname: string; + avatar: string; + qq: string; + email: string; + phone: string; + remark: string; + status: number; + roles: RoleEntity[]; + dept: DeptEntity; + accessTokens: AccessTokenEntity[]; + id: number; + createdAt: string; + updatedAt: string; + }; + + type UserListParams = { + page?: number; + pageSize?: number; + field?: string; + order?: 'ASC' | 'DESC'; + /** 头像 */ + avatar?: string; + /** 登录账号 */ + username?: string; + /** 登录密码 */ + password?: string; + /** 归属角色 */ + roleIds?: number[]; + /** 归属大区 */ + deptId?: number; + /** 呢称 */ + nickname?: string; + /** 邮箱 */ + email?: string; + /** 手机号 */ + phone?: string; + /** QQ */ + qq?: string; + /** 备注 */ + remark?: string; + /** 状态 */ + status?: 0 | 1; + _t?: number; + }; + + type UserPasswordDto = { + /** 更改后的密码 */ + password: string; + }; + + type UserPasswordParams = { + id: number; + }; + + type UserReadParams = { + id: number; + }; + + type UserUpdateDto = { + /** 头像 */ + avatar?: string; + /** 登录账号 */ + username?: string; + /** 登录密码 */ + password?: string; + /** 归属角色 */ + roleIds?: number[]; + /** 归属大区 */ + deptId?: number; + /** 呢称 */ + nickname?: string; + /** 邮箱 */ + email?: string; + /** 手机号 */ + phone?: string; + /** QQ */ + qq?: string; + /** 备注 */ + remark?: string; + /** 状态 */ + status?: 0 | 1; + }; + + type UserUpdateParams = { + id: number; + }; +} diff --git a/apps/platform/src/api/backend/api/user.ts b/apps/platform/src/api/backend/api/user.ts new file mode 100644 index 0000000..e678498 --- /dev/null +++ b/apps/platform/src/api/backend/api/user.ts @@ -0,0 +1,29 @@ +import { request } from '@/utils/request'; + +enum Api { + Login = '/boyanghu/iotree-service/platform/login', +} + +/** + * @description: 登录接口参数 + */ +export interface LoginParams { + phone: string; + type: number; // 0短信 1密码 + code?: string; + password?: string; +} + +/** + * @description: 用户登录 + */ +export function loginApi(params: LoginParams) { + return request({ + url: Api.Login, + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + data: params, + }); +} diff --git a/apps/platform/src/api/demo/dict.ts b/apps/platform/src/api/demo/dict.ts new file mode 100644 index 0000000..cf149c4 --- /dev/null +++ b/apps/platform/src/api/demo/dict.ts @@ -0,0 +1,11 @@ +import { request } from '@/utils/request'; + +export type DictType = 'gender' | 'sell_status'; + +export async function getDictData(params: { type: DictType }) { + return request({ + url: '/dict/data', + method: 'GET', + params, + }); +} diff --git a/apps/platform/src/api/demo/hero.ts b/apps/platform/src/api/demo/hero.ts new file mode 100644 index 0000000..04d9e49 --- /dev/null +++ b/apps/platform/src/api/demo/hero.ts @@ -0,0 +1,33 @@ +import { request } from '@/utils/request'; + +/** + * @description 获取王者荣耀英雄列表 + */ +export function getWzryHeroList(query: API.PageParams) { + return request({ + url: '/demo/wzry/hero_list', + method: 'get', + params: query, + }); +} + +/** + * @description 获取英雄联盟英雄列表 + */ +export function getLolHeroList(query: API.PageParams) { + return request({ + url: '/demo/lol/hero_list', + method: 'get', + params: query, + }); +} + +/** + * @description 获取英雄联盟英雄列表 + */ +export function getLolHeroInfo({ id }) { + return request({ + url: `/demo/lol/hero_info/${id}`, + method: 'get', + }); +} diff --git a/apps/platform/src/api/demo/select.ts b/apps/platform/src/api/demo/select.ts new file mode 100644 index 0000000..2de1660 --- /dev/null +++ b/apps/platform/src/api/demo/select.ts @@ -0,0 +1,14 @@ +import { request } from '@/utils/request'; + +interface DemoOptionsItem { + name: string; + id: string; +} + +export async function optionsListApi(params?: Recordable) { + return request({ + url: '/select/getDemoOptions', + method: 'GET', + params, + }); +} diff --git a/apps/platform/src/api/demo/user.ts b/apps/platform/src/api/demo/user.ts new file mode 100644 index 0000000..e706474 --- /dev/null +++ b/apps/platform/src/api/demo/user.ts @@ -0,0 +1,26 @@ +import { request } from '@/utils/request'; + +enum Api { + Login = '/boyanghu/iotree-service/platform/login', +} + +/** + * @description: 登录接口参数 + */ +export interface LoginParams { + phone: string; + password?: string; + code?: string; + type: number; // 0短信 1密码 +} + +/** + * @description: 用户登录 + */ +export function loginApi(params: LoginParams) { + return request({ + url: Api.Login, + method: 'POST', + data: params, + }); +} diff --git a/apps/platform/src/api/index.ts b/apps/platform/src/api/index.ts new file mode 100644 index 0000000..56ab413 --- /dev/null +++ b/apps/platform/src/api/index.ts @@ -0,0 +1,5 @@ +import Api from './backend/api'; + +export { Api }; + +export default Api; diff --git a/apps/platform/src/api/typings.d.ts b/apps/platform/src/api/typings.d.ts new file mode 100644 index 0000000..49b7c3f --- /dev/null +++ b/apps/platform/src/api/typings.d.ts @@ -0,0 +1,36 @@ +// @ts-ignore +/* eslint-disable */ + +declare namespace API { + /** 全局通过表格查询返回结果 */ + type TableListResult = { + items?: T; + meta?: PaginationResult; + }; + + /** 全局通用表格分页返回数据结构 */ + type PaginationResult = { + itemCount?: number; + totalItems?: number; + itemsPerPage?: number; + totalPages?: number; + currentPage?: number; + }; + + /** 全局通用表格分页请求参数 */ + type PageParams = { + page?: number; + pageSize?: number; + } & { + [P in keyof T]?: T[P]; + }; + + type ErrorResponse = { + /** 业务约定的错误码 */ + errorCode: string; + /** 业务上的错误信息 */ + errorMessage?: string; + /** 业务上的请求是否成功 */ + success?: boolean; + }; +} diff --git a/apps/platform/src/assets/404.gif b/apps/platform/src/assets/404.gif new file mode 100644 index 0000000000000000000000000000000000000000..cd6e0d9433421b3f29d0ec0c40f755e354728000 GIT binary patch literal 164227 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⋘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 GY5fOuZZib{ literal 0 HcmV?d00001 diff --git a/apps/platform/src/assets/analysis.svg b/apps/platform/src/assets/analysis.svg new file mode 100644 index 0000000..9c2da55 --- /dev/null +++ b/apps/platform/src/assets/analysis.svg @@ -0,0 +1 @@ +- \ No newline at end of file diff --git a/apps/platform/src/assets/icons/dark.svg b/apps/platform/src/assets/icons/dark.svg new file mode 100644 index 0000000..f646bd7 --- /dev/null +++ b/apps/platform/src/assets/icons/dark.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apps/platform/src/assets/icons/file-type-code.svg b/apps/platform/src/assets/icons/file-type-code.svg new file mode 100644 index 0000000..3413de1 --- /dev/null +++ b/apps/platform/src/assets/icons/file-type-code.svg @@ -0,0 +1 @@ + diff --git a/apps/platform/src/assets/icons/file-type-dir.svg b/apps/platform/src/assets/icons/file-type-dir.svg new file mode 100644 index 0000000..1bedac3 --- /dev/null +++ b/apps/platform/src/assets/icons/file-type-dir.svg @@ -0,0 +1 @@ + diff --git a/apps/platform/src/assets/icons/file-type-docx.svg b/apps/platform/src/assets/icons/file-type-docx.svg new file mode 100644 index 0000000..4fe7a6c --- /dev/null +++ b/apps/platform/src/assets/icons/file-type-docx.svg @@ -0,0 +1 @@ + diff --git a/apps/platform/src/assets/icons/file-type-excel.svg b/apps/platform/src/assets/icons/file-type-excel.svg new file mode 100644 index 0000000..cc87c77 --- /dev/null +++ b/apps/platform/src/assets/icons/file-type-excel.svg @@ -0,0 +1 @@ + diff --git a/apps/platform/src/assets/icons/file-type-img.svg b/apps/platform/src/assets/icons/file-type-img.svg new file mode 100644 index 0000000..44feb58 --- /dev/null +++ b/apps/platform/src/assets/icons/file-type-img.svg @@ -0,0 +1 @@ + diff --git a/apps/platform/src/assets/icons/file-type-music.svg b/apps/platform/src/assets/icons/file-type-music.svg new file mode 100644 index 0000000..2677733 --- /dev/null +++ b/apps/platform/src/assets/icons/file-type-music.svg @@ -0,0 +1 @@ + diff --git a/apps/platform/src/assets/icons/file-type-office.svg b/apps/platform/src/assets/icons/file-type-office.svg new file mode 100644 index 0000000..04d37e3 --- /dev/null +++ b/apps/platform/src/assets/icons/file-type-office.svg @@ -0,0 +1 @@ + diff --git a/apps/platform/src/assets/icons/file-type-pdf.svg b/apps/platform/src/assets/icons/file-type-pdf.svg new file mode 100644 index 0000000..799b897 --- /dev/null +++ b/apps/platform/src/assets/icons/file-type-pdf.svg @@ -0,0 +1 @@ + diff --git a/apps/platform/src/assets/icons/file-type-ppt.svg b/apps/platform/src/assets/icons/file-type-ppt.svg new file mode 100644 index 0000000..3766d58 --- /dev/null +++ b/apps/platform/src/assets/icons/file-type-ppt.svg @@ -0,0 +1 @@ + diff --git a/apps/platform/src/assets/icons/file-type-psd.svg b/apps/platform/src/assets/icons/file-type-psd.svg new file mode 100644 index 0000000..61ca32a --- /dev/null +++ b/apps/platform/src/assets/icons/file-type-psd.svg @@ -0,0 +1 @@ + diff --git a/apps/platform/src/assets/icons/file-type-txt.svg b/apps/platform/src/assets/icons/file-type-txt.svg new file mode 100644 index 0000000..9ca9d93 --- /dev/null +++ b/apps/platform/src/assets/icons/file-type-txt.svg @@ -0,0 +1 @@ + diff --git a/apps/platform/src/assets/icons/file-type-unknown.svg b/apps/platform/src/assets/icons/file-type-unknown.svg new file mode 100644 index 0000000..0629c37 --- /dev/null +++ b/apps/platform/src/assets/icons/file-type-unknown.svg @@ -0,0 +1 @@ + diff --git a/apps/platform/src/assets/icons/file-type-video.svg b/apps/platform/src/assets/icons/file-type-video.svg new file mode 100644 index 0000000..7582c39 --- /dev/null +++ b/apps/platform/src/assets/icons/file-type-video.svg @@ -0,0 +1 @@ + diff --git a/apps/platform/src/assets/icons/file-type-zip.svg b/apps/platform/src/assets/icons/file-type-zip.svg new file mode 100644 index 0000000..84b316c --- /dev/null +++ b/apps/platform/src/assets/icons/file-type-zip.svg @@ -0,0 +1 @@ + diff --git a/apps/platform/src/assets/icons/light.svg b/apps/platform/src/assets/icons/light.svg new file mode 100644 index 0000000..ab7cc08 --- /dev/null +++ b/apps/platform/src/assets/icons/light.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apps/platform/src/assets/icons/locale.svg b/apps/platform/src/assets/icons/locale.svg new file mode 100644 index 0000000..c7b2683 --- /dev/null +++ b/apps/platform/src/assets/icons/locale.svg @@ -0,0 +1,14 @@ + diff --git a/apps/platform/src/assets/icons/login.svg b/apps/platform/src/assets/icons/login.svg new file mode 100644 index 0000000..e3ce2c4 --- /dev/null +++ b/apps/platform/src/assets/icons/login.svg @@ -0,0 +1,68 @@ + + + Group 21 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +