diff --git a/packages/ui/certd-client/.dependency-cruiser.js b/packages/ui/certd-client/.dependency-cruiser.js new file mode 100644 index 00000000..c27a7b85 --- /dev/null +++ b/packages/ui/certd-client/.dependency-cruiser.js @@ -0,0 +1,463 @@ +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + /* rules from the 'recommended' preset: */ + { + name: 'no-circular', + severity: 'warn', + comment: + 'This dependency is part of a circular relationship. You might want to revise ' + + 'your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ', + from: {}, + to: { + circular: true + } + }, + { + name: 'no-orphans', + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: 'warn', + from: { + orphan: true, + pathNot: [ + '(^|/)\\.[^/]+\\.(js|cjs|mjs|ts|json)$', // dot files + '\\.d\\.ts$', // TypeScript declaration files + '(^|/)tsconfig\\.json$', // TypeScript config + '(^|/)(babel|webpack)\\.config\\.(js|cjs|mjs|ts|json)$' // other configs + ] + }, + to: {}, + }, + { + name: 'no-deprecated-core', + comment: + 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' + + "bound to exist - node doesn't deprecate lightly.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'core' + ], + path: [ + '^(v8\/tools\/codemap)$', + '^(v8\/tools\/consarray)$', + '^(v8\/tools\/csvparser)$', + '^(v8\/tools\/logreader)$', + '^(v8\/tools\/profile_view)$', + '^(v8\/tools\/profile)$', + '^(v8\/tools\/SourceMap)$', + '^(v8\/tools\/splaytree)$', + '^(v8\/tools\/tickprocessor-driver)$', + '^(v8\/tools\/tickprocessor)$', + '^(node-inspect\/lib\/_inspect)$', + '^(node-inspect\/lib\/internal\/inspect_client)$', + '^(node-inspect\/lib\/internal\/inspect_repl)$', + '^(async_hooks)$', + '^(punycode)$', + '^(domain)$', + '^(constants)$', + '^(sys)$', + '^(_linklist)$', + '^(_stream_wrap)$' + ], + } + }, + { + name: 'not-to-deprecated', + comment: + 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' + + 'version of that module, or find an alternative. Deprecated modules are a security risk.', + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'deprecated' + ] + } + }, + { + name: 'no-non-package-json', + severity: 'error', + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: [ + 'npm-no-pkg', + 'npm-unknown' + ] + } + }, + { + name: 'not-to-unresolvable', + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + 'module: add it to your package.json. In all other cases you likely already know what to do.', + severity: 'error', + from: {}, + to: { + couldNotResolve: true + } + }, + { + name: 'no-duplicate-dep-types', + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: 'warn', + from: {}, + to: { + moreThanOneDependencyType: true, + // as it's pretty common to have a type import be a type only import + // _and_ (e.g.) a devDependency - don't consider type-only dependency + // types for this rule + dependencyTypesNot: ["type-only"] + } + }, + + /* rules you might want to tweak for your specific situation: */ + { + name: 'not-to-test', + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: 'error', + from: { + pathNot: '^(tests)' + }, + to: { + path: '^(tests)' + } + }, + { + name: 'not-to-spec', + comment: + 'This module depends on a spec (test) file. The sole responsibility of a spec file is to test code. ' + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.', + severity: 'error', + from: {}, + to: { + path: '\\.(spec|test)\\.(js|mjs|cjs|ts|ls|coffee|litcoffee|coffee\\.md)$' + } + }, + { + name: 'not-to-dev-dep', + severity: 'error', + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + 'package.json. It looks like something that ships to production, though. To prevent problems ' + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + 'section of your package.json. If this module is development only - add it to the ' + + 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration', + from: { + path: '^(src)', + pathNot: '\\.(spec|test)\\.(js|mjs|cjs|ts|ls|coffee|litcoffee|coffee\\.md)$' + }, + to: { + dependencyTypes: [ + 'npm-dev' + ] + } + }, + { + name: 'optional-deps-used', + severity: 'info', + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you're using an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: [ + 'npm-optional' + ] + } + }, + { + name: 'peer-deps-used', + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'npm-peer' + ] + } + } + ], + options: { + + /* conditions specifying which files not to follow further when encountered: + - path: a regular expression to match + - dependencyTypes: see https://github.com/sverweij/dependency-cruiser/blob/master/doc/rules-reference.md#dependencytypes-and-dependencytypesnot + for a complete list + */ + doNotFollow: { + path: 'node_modules' + }, + + /* conditions specifying which dependencies to exclude + - path: a regular expression to match + - dynamic: a boolean indicating whether to ignore dynamic (true) or static (false) dependencies. + leave out if you want to exclude neither (recommended!) + */ + // exclude : { + // path: '', + // dynamic: true + // }, + + /* pattern specifying which files to include (regular expression) + dependency-cruiser will skip everything not matching this pattern + */ + // includeOnly : '', + + /* dependency-cruiser will include modules matching against the focus + regular expression in its output, as well as their neighbours (direct + dependencies and dependents) + */ + // focus : '', + + /* list of module systems to cruise */ + // moduleSystems: ['amd', 'cjs', 'es6', 'tsd'], + + /* prefix for links in html and svg output (e.g. 'https://github.com/you/yourrepo/blob/develop/' + to open it on your online repo or `vscode://file/${process.cwd()}/` to + open it in visual studio code), + */ + // prefix: '', + + /* false (the default): ignore dependencies that only exist before typescript-to-javascript compilation + true: also detect dependencies that only exist before typescript-to-javascript compilation + "specify": for each dependency identify whether it only exists before compilation or also after + */ + tsPreCompilationDeps: true, + + /* + list of extensions to scan that aren't javascript or compile-to-javascript. + Empty by default. Only put extensions in here that you want to take into + account that are _not_ parsable. + */ + // extraExtensionsToScan: [".json", ".jpg", ".png", ".svg", ".webp"], + + /* if true combines the package.jsons found from the module up to the base + folder the cruise is initiated from. Useful for how (some) mono-repos + manage dependencies & dependency definitions. + */ + // combinedDependencies: false, + + /* if true leave symlinks untouched, otherwise use the realpath */ + // preserveSymlinks: false, + + /* TypeScript project file ('tsconfig.json') to use for + (1) compilation and + (2) resolution (e.g. with the paths property) + + The (optional) fileName attribute specifies which file to take (relative to + dependency-cruiser's current working directory). When not provided + defaults to './tsconfig.json'. + */ + tsConfig: { + fileName: 'tsconfig.json' + }, + + /* Webpack configuration to use to get resolve options from. + + The (optional) fileName attribute specifies which file to take (relative + to dependency-cruiser's current working directory. When not provided defaults + to './webpack.conf.js'. + + The (optional) `env` and `args` attributes contain the parameters to be passed if + your webpack config is a function and takes them (see webpack documentation + for details) + */ + // webpackConfig: { + // fileName: './webpack.config.js', + // env: {}, + // args: {}, + // }, + + /* Babel config ('.babelrc', '.babelrc.json', '.babelrc.json5', ...) to use + for compilation (and whatever other naughty things babel plugins do to + source code). This feature is well tested and usable, but might change + behavior a bit over time (e.g. more precise results for used module + systems) without dependency-cruiser getting a major version bump. + */ + // babelConfig: { + // fileName: './.babelrc' + // }, + + /* List of strings you have in use in addition to cjs/ es6 requires + & imports to declare module dependencies. Use this e.g. if you've + re-declared require, use a require-wrapper or use window.require as + a hack. + */ + // exoticRequireStrings: [], + /* options to pass on to enhanced-resolve, the package dependency-cruiser + uses to resolve module references to disk. You can set most of these + options in a webpack.conf.js - this section is here for those + projects that don't have a separate webpack config file. + + Note: settings in webpack.conf.js override the ones specified here. + */ + enhancedResolveOptions: { + /* List of strings to consider as 'exports' fields in package.json. Use + ['exports'] when you use packages that use such a field and your environment + supports it (e.g. node ^12.19 || >=14.7 or recent versions of webpack). + + If you have an `exportsFields` attribute in your webpack config, that one + will have precedence over the one specified here. + */ + exportsFields: ["exports"], + /* List of conditions to check for in the exports field. e.g. use ['imports'] + if you're only interested in exposed es6 modules, ['require'] for commonjs, + or all conditions at once `(['import', 'require', 'node', 'default']`) + if anything goes for you. Only works when the 'exportsFields' array is + non-empty. + + If you have a 'conditionNames' attribute in your webpack config, that one will + have precedence over the one specified here. + */ + conditionNames: ["import", "require", "node", "default"], + /* + The extensions, by default are the same as the ones dependency-cruiser + can access (run `npx depcruise --info` to see which ones that are in + _your_ environment. If that list is larger than what you need (e.g. + it contains .js, .jsx, .ts, .tsx, .cts, .mts - but you don't use + TypeScript you can pass just the extensions you actually use (e.g. + [".js", ".jsx"]). This can speed up the most expensive step in + dependency cruising (module resolution) quite a bit. + */ + // extensions: [".js", ".jsx", ".ts", ".tsx", ".d.ts"], + /* + If your TypeScript project makes use of types specified in 'types' + fields in package.jsons of external dependencies, specify "types" + in addition to "main" in here, so enhanced-resolve (the resolver + dependency-cruiser uses) knows to also look there. You can also do + this if you're not sure, but still use TypeScript. In a future version + of dependency-cruiser this will likely become the default. + */ + mainFields: ["main", "types"], + }, + reporterOptions: { + dot: { + /* pattern of modules that can be consolidated in the detailed + graphical dependency graph. The default pattern in this configuration + collapses everything in node_modules to one folder deep so you see + the external modules, but not the innards your app depends upon. + */ + collapsePattern: 'node_modules/(@[^/]+/[^/]+|[^/]+)', + + /* Options to tweak the appearance of your graph.See + https://github.com/sverweij/dependency-cruiser/blob/master/doc/options-reference.md#reporteroptions + for details and some examples. If you don't specify a theme + don't worry - dependency-cruiser will fall back to the default one. + */ + // theme: { + // graph: { + // /* use splines: "ortho" for straight lines. Be aware though + // graphviz might take a long time calculating ortho(gonal) + // routings. + // */ + // splines: "true" + // }, + // modules: [ + // { + // criteria: { matchesFocus: true }, + // attributes: { + // fillcolor: "lime", + // penwidth: 2, + // }, + // }, + // { + // criteria: { matchesFocus: false }, + // attributes: { + // fillcolor: "lightgrey", + // }, + // }, + // { + // criteria: { matchesReaches: true }, + // attributes: { + // fillcolor: "lime", + // penwidth: 2, + // }, + // }, + // { + // criteria: { matchesReaches: false }, + // attributes: { + // fillcolor: "lightgrey", + // }, + // }, + // { + // criteria: { source: "^src/model" }, + // attributes: { fillcolor: "#ccccff" } + // }, + // { + // criteria: { source: "^src/view" }, + // attributes: { fillcolor: "#ccffcc" } + // }, + // ], + // dependencies: [ + // { + // criteria: { "rules[0].severity": "error" }, + // attributes: { fontcolor: "red", color: "red" } + // }, + // { + // criteria: { "rules[0].severity": "warn" }, + // attributes: { fontcolor: "orange", color: "orange" } + // }, + // { + // criteria: { "rules[0].severity": "info" }, + // attributes: { fontcolor: "blue", color: "blue" } + // }, + // { + // criteria: { resolved: "^src/model" }, + // attributes: { color: "#0000ff77" } + // }, + // { + // criteria: { resolved: "^src/view" }, + // attributes: { color: "#00770077" } + // } + // ] + // } + }, + archi: { + /* pattern of modules that can be consolidated in the high level + graphical dependency graph. If you use the high level graphical + dependency graph reporter (`archi`) you probably want to tweak + this collapsePattern to your situation. + */ + collapsePattern: '^(packages|src|lib|app|bin|test(s?)|spec(s?))/[^/]+|node_modules/(@[^/]+/[^/]+|[^/]+)', + + /* Options to tweak the appearance of your graph.See + https://github.com/sverweij/dependency-cruiser/blob/master/doc/options-reference.md#reporteroptions + for details and some examples. If you don't specify a theme + for 'archi' dependency-cruiser will use the one specified in the + dot section (see above), if any, and otherwise use the default one. + */ + // theme: { + // }, + }, + "text": { + "highlightFocused": true + }, + } + } +}; +// generated: dependency-cruiser@12.11.0 on 2023-03-24T14:11:38.647Z diff --git a/packages/ui/certd-client/.eslintrc.js b/packages/ui/certd-client/.eslintrc.js index c7996c1f..a208b621 100644 --- a/packages/ui/certd-client/.eslintrc.js +++ b/packages/ui/certd-client/.eslintrc.js @@ -16,14 +16,10 @@ module.exports = { tsx: true } }, - extends: [ - "plugin:vue/vue3-recommended", - "plugin:@typescript-eslint/recommended", - "plugin:prettier/recommended", - "prettier" - ], + extends: ["plugin:vue/vue3-recommended", "plugin:@typescript-eslint/recommended", "plugin:prettier/recommended", "prettier"], rules: { //"max-len": [0, 200, 2, { ignoreUrls: true }], + "@typescript-eslint/no-unused-vars": "off", "@typescript-eslint/ban-ts-ignore": "off", "@typescript-eslint/ban-ts-comment": "off", "@typescript-eslint/ban-types": "off", diff --git a/packages/ui/certd-client/README.md b/packages/ui/certd-client/README.md index c0166cfd..b360e070 100644 --- a/packages/ui/certd-client/README.md +++ b/packages/ui/certd-client/README.md @@ -34,3 +34,4 @@ https://github.com/fast-crud/fs-server-js + diff --git a/packages/ui/certd-client/package.json b/packages/ui/certd-client/package.json index ef5b0cda..6b448fe4 100644 --- a/packages/ui/certd-client/package.json +++ b/packages/ui/certd-client/package.json @@ -6,109 +6,118 @@ "dev": "vite", "dev:pm": "vite --mode pm", "dev:force": "vite --force", - "debug": "vite --mode debug", + "debug": "vite --mode debug --open", "debug:pm": "vite --mode debugpm", "debug:force": "vite --force --mode debug", - "build": "vite build ", + "build": "npm run tsc && vite build ", "serve": "vite preview", "preview": "vite preview", "pretty-quick": "pretty-quick", "lint-fix": "eslint --fix --ext .js --ext .jsx --ext .vue src/", "upgrade": "yarn upgrade-interactive --latest", - "tsc": "vue-tsc --noEmit --skipLibCheck" + "tsc": "vue-tsc --noEmit --skipLibCheck", + "circle:check": "pnpm dependency-cruise --validate --output-type err-html -f dependency-report.html src", + "afterPubPush": "git add . && git commit -m \"build: publish success\" && git push" }, "author": "Greper", "license": "MIT", "dependencies": { - "@ant-design/colors": "^6.0.0", - "@ant-design/icons-vue": "^6.0.1", - "@certd/acme-client": "^1.1.6", - "@fast-crud/fast-crud": "^1.14.4", - "@fast-crud/fast-extends": "^1.14.4", - "@fast-crud/ui-antdv": "^1.14.4", - "@fast-crud/ui-interface": "^1.14.4", - "@iconify/iconify": "^3.0.1", - "@iconify/json": "^2.1.151", + "@ant-design/colors": "^7.0.0", + "@ant-design/icons-vue": "^6.1.0", + "@aws-sdk/client-s3": "^3.383.0", + "@aws-sdk/s3-request-presigner": "^3.383.0", + "@fast-crud/fast-crud": "^1.18.3", + "@fast-crud/fast-extends": "^1.18.3", + "@fast-crud/ui-antdv": "^1.18.3", + "@fast-crud/ui-interface": "^1.18.3", + "@iconify/iconify": "^3.1.1", + "@iconify/json": "^2.2.98", "@purge-icons/generated": "^0.9.0", "@soerenmartius/vue3-clipboard": "^0.1.2", - "ant-design-vue": "^3.2.15", - "axios": "^1.2.1", + "ant-design-vue": "^3.2.20", + "axios": "^1.3.4", "axios-mock-adapter": "^1.21.2", "base64-js": "^1.5.1", - "better-scroll": "^2.5.0", - "china-division": "^2.4.0", - "core-js": "^3.26.1", - "cos-js-sdk-v5": "^1.4.15-beta.0", + "better-scroll": "^2.5.1", + "china-division": "^2.6.1", + "core-js": "^3.32.0", + "cos-js-sdk-v5": "^1.4.19", "cropperjs": "^1.5.13", - "dayjs": "^1.11.7", - "deepdash-es": "5.3.5", - "highlight.js": "^11.7.0", + "dayjs": "^1.11.9", + "highlight.js": "^11.8.0", "humanize-duration": "^3.27.3", "lodash-es": "^4.17.21", - "mitt": "^3.0.0", + "mitt": "^3.0.1", "nanoid": "^4.0.0", "nprogress": "^0.2.0", "object-assign": "^4.1.1", - "pinia": "2.0.28", + "pinia": "2.1.6", "qiniu-js": "^3.4.1", - "sortablejs": "^1.14.0", - "vue": "^3.2.45", + "sortablejs": "^1.15.0", + "vue": "^3.3.4", "vue-cropperjs": "^5.0.0", "vue-i18n": "^9.2.2", - "vue-router": "^4.1.5", - "vuedraggable": "^4.0.1" + "vue-router": "^4.2.4", + "vuedraggable": "^2.24.3" }, "devDependencies": { + "@rollup/plugin-commonjs": "^25.0.3", + "@rollup/plugin-node-resolve": "^15.1.0", + "@types/chai": "^4.3.5", + "@types/lodash-es": "^4.17.8", "@certd/pipeline": "^1.1.6", - "@rollup/plugin-commonjs": "^23.0.4", - "@rollup/plugin-node-resolve": "^15.0.1", - "@types/chai": "^4.3.4", - "@types/lodash-es": "^4.17.7", "@types/mocha": "^10.0.1", - "@types/node": "^18.11.15", - "@typescript-eslint/eslint-plugin": "^5.46.1", - "@typescript-eslint/parser": "^5.46.1", - "@vitejs/plugin-legacy": "^3.0.1", - "@vitejs/plugin-vue": "^4.0.0", - "@vitejs/plugin-vue-jsx": "^3.0.0", - "@vue/compiler-sfc": "^3.2.45", - "@vue/eslint-config-typescript": "^11.0.2", - "@vue/test-utils": "^2.2.6", + "@types/node": "^20.4.7", + "@types/nprogress": "^0.2.0", + "@typescript-eslint/eslint-plugin": "^6.2.1", + "@typescript-eslint/parser": "^6.2.1", + "@vitejs/plugin-legacy": "^4.1.1", + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.0.1", + "@vue/compiler-sfc": "^3.3.4", + "@vue/eslint-config-typescript": "^11.0.3", + "@vue/test-utils": "^2.4.1", "autoprefixer": "^10.4.14", "caller-path": "^4.0.0", "chai": "^4.3.7", - "eslint": "8.29.0", - "eslint-config-prettier": "^8.1.0", - "eslint-plugin-import": "^2.26.0", + "dependency-cruiser": "^13.1.1", + "dot": "^1.1.3", + "eslint": "8.46.0", + "eslint-config-prettier": "^8.10.0", + "eslint-plugin-import": "^2.28.0", "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-promise": "^6.0.1", - "eslint-plugin-vue": "^9.8.0", - "esno": "^0.16.3", - "husky": "^8.0.2", + "eslint-plugin-prettier": "^5.0.0", + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-vue": "^9.16.1", + "esno": "^0.17.0", + "husky": "^8.0.3", "less": "^4.1.3", - "less-loader": "^11.0.0", - "lint-staged": "^13.1.0", - "postcss": "^8.4.23", - "prettier": "2.8.1", + "less-loader": "^11.1.3", + "lint-staged": "^13.2.3", + "postcss": "^8.4.27", + "prettier": "3.0.1", "pretty-quick": "^3.1.3", - "rimraf": "^3.0.2", - "rollup": "^3.7.4", - "rollup-plugin-visualizer": "^5.8.2", - "stylelint": "^14.16.0", - "stylelint-config-prettier": "^9.0.4", - "stylelint-order": "^5.0.0", - "tailwindcss": "^3.3.2", + "rimraf": "^5.0.1", + "rollup": "^3.27.2", + "rollup-plugin-visualizer": "^5.9.2", + "stylelint": "^15.10.2", + "stylelint-config-prettier": "^9.0.5", + "stylelint-order": "^6.0.3", + "tailwindcss": "^3.3.3.3", + "terser": "^5.19.2", "ts-node": "^10.9.1", - "typescript": "4.9.4", - "vite": "^4.0.1", + "typescript": "5.1.6", + "unplugin-vue-define-options": "^1.3.14", + "vite": "^4.4.8", "vite-plugin-compression": "^0.5.1", "vite-plugin-optimize-persist": "^0.1.2", "vite-plugin-package-config": "^0.1.1", "vite-plugin-purge-icons": "^0.9.2", - "vite-plugin-theme": "^0.8.1", - "vue-eslint-parser": "^9.1.0", - "vue-tsc": "^0.40.13" + "vite-plugin-theme": "^0.8.6", + "vite-plugin-windicss": "^1.9.0", + "vue-eslint-parser": "^9.3.1", + "vue-tsc": "^1.8.8", + "windicss": "^3.5.6" }, "husky": { "hooks": { diff --git a/packages/ui/certd-client/public/index.html b/packages/ui/certd-client/public/index.html deleted file mode 100644 index 3e5a1396..00000000 --- a/packages/ui/certd-client/public/index.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - <%= htmlWebpackPlugin.options.title %> - - - -
- - - diff --git a/packages/ui/certd-client/public/template-import.csv b/packages/ui/certd-client/public/template-import.csv new file mode 100644 index 00000000..457000ed --- /dev/null +++ b/packages/ui/certd-client/public/template-import.csv @@ -0,0 +1,6 @@ +name,mobile +张三,18603040102 +李四,18603040103 +王五,18603040104 +赵六,18603040105 +田七,18603040106 diff --git a/packages/ui/certd-client/src/App.vue b/packages/ui/certd-client/src/App.vue index 414d5081..64d04042 100644 --- a/packages/ui/certd-client/src/App.vue +++ b/packages/ui/certd-client/src/App.vue @@ -4,10 +4,10 @@ - diff --git a/packages/ui/certd-client/src/layout/components/contextmenu/index.vue b/packages/ui/certd-client/src/layout/components/contextmenu/index.vue deleted file mode 100644 index 664f4132..00000000 --- a/packages/ui/certd-client/src/layout/components/contextmenu/index.vue +++ /dev/null @@ -1,68 +0,0 @@ - - - - - diff --git a/packages/ui/certd-client/src/layout/components/locale/index.vue b/packages/ui/certd-client/src/layout/components/locale/index.vue index a1979ef0..ed4da122 100644 --- a/packages/ui/certd-client/src/layout/components/locale/index.vue +++ b/packages/ui/certd-client/src/layout/components/locale/index.vue @@ -22,7 +22,7 @@ - ")}catch(t){console&&console.log(t)}}function s(){l||(l=!0,o())}function d(){try{n.documentElement.doScroll("left")}catch(t){return void setTimeout(d,50)}s()}e=function(){var t,e=document.createElement("div");e.innerHTML=a,a=null,(e=e.getElementsByTagName("svg")[0])&&(e.setAttribute("aria-hidden","true"),e.style.position="absolute",e.style.width=0,e.style.height=0,e.style.overflow="hidden",e=e,(t=document.body).firstChild?h(e,t.firstChild):t.appendChild(e))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(e,0):(c=function(){document.removeEventListener("DOMContentLoaded",c,!1),e()},document.addEventListener("DOMContentLoaded",c,!1)):document.attachEvent&&(o=e,n=t.document,l=!1,d(),n.onreadystatechange=function(){"complete"==n.readyState&&(n.onreadystatechange=null,s())})}(window); +!(function (t) { + var e, + c, + o, + n, + l, + a = + '', + i = (i = document.getElementsByTagName("script"))[i.length - 1].getAttribute("data-injectcss"), + h = function (t, e) { + e.parentNode.insertBefore(t, e); + }; + if (i && !t.__iconfont__svg__cssinject__) { + t.__iconfont__svg__cssinject__ = !0; + try { + document.write(""); + } catch (t) { + console && console.log(t); + } + } + function s() { + l || ((l = !0), o()); + } + function d() { + try { + n.documentElement.doScroll("left"); + } catch (t) { + return void setTimeout(d, 50); + } + s(); + } + (e = function () { + var t, + e = document.createElement("div"); + (e.innerHTML = a), + (a = null), + (e = e.getElementsByTagName("svg")[0]) && + (e.setAttribute("aria-hidden", "true"), + (e.style.position = "absolute"), + (e.style.width = 0), + (e.style.height = 0), + (e.style.overflow = "hidden"), + (e = e), + (t = document.body).firstChild ? h(e, t.firstChild) : t.appendChild(e)); + }), + document.addEventListener + ? ~["complete", "loaded", "interactive"].indexOf(document.readyState) + ? setTimeout(e, 0) + : ((c = function () { + document.removeEventListener("DOMContentLoaded", c, !1), e(); + }), + document.addEventListener("DOMContentLoaded", c, !1)) + : document.attachEvent && + ((o = e), + (n = t.document), + (l = !1), + d(), + (n.onreadystatechange = function () { + "complete" == n.readyState && ((n.onreadystatechange = null), s()); + })); +})(window); diff --git a/packages/ui/certd-client/src/plugin/index.ts b/packages/ui/certd-client/src/plugin/index.ts index 91a48eb5..9435f7c6 100644 --- a/packages/ui/certd-client/src/plugin/index.ts +++ b/packages/ui/certd-client/src/plugin/index.ts @@ -1,6 +1,6 @@ import "./iconify"; import "./iconfont"; -import FastCrud from "./fast-crud/index"; +import FastCrud from "./fast-crud"; import permission from "./permission"; import { App } from "vue"; function install(app: App, options: any = {}) { diff --git a/packages/ui/certd-client/src/plugin/permission/directive/index.js b/packages/ui/certd-client/src/plugin/permission/directive/index.ts similarity index 57% rename from packages/ui/certd-client/src/plugin/permission/directive/index.js rename to packages/ui/certd-client/src/plugin/permission/directive/index.ts index e0e5181f..4255d90f 100644 --- a/packages/ui/certd-client/src/plugin/permission/directive/index.js +++ b/packages/ui/certd-client/src/plugin/permission/directive/index.ts @@ -1,9 +1,11 @@ -import permission from "./permission"; +import permission from "./permission.js"; import permissionUtil from "../util.permission"; -const install = function (app) { +const install = function (app: any) { app.directive("permission", permission); app.config.globalProperties.$hasPermissions = permissionUtil.hasPermissions; }; -permission.install = install; -export default permission; +export default { + install, + ...permission +}; diff --git a/packages/ui/certd-client/src/plugin/permission/directive/permission.js b/packages/ui/certd-client/src/plugin/permission/directive/permission.ts similarity index 84% rename from packages/ui/certd-client/src/plugin/permission/directive/permission.js rename to packages/ui/certd-client/src/plugin/permission/directive/permission.ts index 0b2a9578..43a0d282 100644 --- a/packages/ui/certd-client/src/plugin/permission/directive/permission.js +++ b/packages/ui/certd-client/src/plugin/permission/directive/permission.ts @@ -1,6 +1,6 @@ import permissionUtil from "../util.permission"; export default { - mounted(el, binding, vnode) { + mounted(el: any, binding: any, vnode: any) { const { value } = binding; const hasPermission = permissionUtil.hasPermissions(value); diff --git a/packages/ui/certd-client/src/plugin/permission/index.ts b/packages/ui/certd-client/src/plugin/permission/index.ts index c300560a..c86d6101 100644 --- a/packages/ui/certd-client/src/plugin/permission/index.ts +++ b/packages/ui/certd-client/src/plugin/permission/index.ts @@ -1,4 +1,4 @@ -import permissionDirective from "./directive/index"; +import permissionDirective from "./directive/index.js"; import { registerRouterHook } from "./hook"; import util from "./util.permission"; export * from "./use-crud-permission"; @@ -11,7 +11,7 @@ export function usePermission() { } export default { - install(app) { + install(app: any) { // 开启权限模块 // 注册v-permission指令, 用于控制按钮权限 app.use(permissionDirective); diff --git a/packages/ui/certd-client/src/plugin/permission/store.permission.ts b/packages/ui/certd-client/src/plugin/permission/store.permission.ts index 5cbb3305..a5d4cf25 100644 --- a/packages/ui/certd-client/src/plugin/permission/store.permission.ts +++ b/packages/ui/certd-client/src/plugin/permission/store.permission.ts @@ -21,7 +21,7 @@ interface PermissionState { * @param permissionList * @returns {*} */ -function formatPermissions(menuTree: Array, permissionList = []) { +function formatPermissions(menuTree: Array, permissionList: any[] = []) { if (menuTree == null) { menuTree = []; } @@ -44,17 +44,19 @@ export const usePermissionStore = defineStore({ inited: false }), getters: { + // @ts-ignore getPermissions() { // @ts-ignore return this.permissions; }, + // @ts-ignore isInited() { // @ts-ignore return this.inited; } }, actions: { - init({ permissions }) { + init({ permissions }: any) { this.permissions = permissions; this.inited = true; }, @@ -62,7 +64,7 @@ export const usePermissionStore = defineStore({ this.permissions = []; this.inited = false; }, - resolve(resourceTree) { + resolve(resourceTree: any) { const permissions = formatPermissions(resourceTree); this.init({ permissions }); diff --git a/packages/ui/certd-client/src/plugin/permission/use-crud-permission.ts b/packages/ui/certd-client/src/plugin/permission/use-crud-permission.ts index 2c60f8e2..69a0ed1f 100644 --- a/packages/ui/certd-client/src/plugin/permission/use-crud-permission.ts +++ b/packages/ui/certd-client/src/plugin/permission/use-crud-permission.ts @@ -1,17 +1,29 @@ import { usePermission } from "/@/plugin/permission"; import _ from "lodash-es"; +export type UseCrudPermissionExtraProps = { + hasActionPermission: (action: string) => boolean; +}; +export type UseCrudPermissionExtra = (props: UseCrudPermissionExtraProps) => any; +export type UseCrudPermissionCompProps = { + prefix: string; + extra?: UseCrudPermissionExtra; + [key: string]: any; +}; +export type UseCrudPermissionProps = { + permission: string | UseCrudPermissionCompProps; +}; /** * 设置按钮动作权限 * @param permission {prefix,extra} */ -export function useCrudPermission({ permission }) { +export function useCrudPermission({ permission }: UseCrudPermissionProps) { const { hasPermissions } = usePermission(); const prefix = permission instanceof Object ? permission.prefix : permission; //根据权限显示按钮 - function hasActionPermission(action) { + function hasActionPermission(action: string) { if (!prefix) { return true; } @@ -50,7 +62,7 @@ export function useCrudPermission({ permission }) { ); } - function merge(userOptions) { + function merge(userOptions: any) { const permissionOptions = buildCrudPermission(); _.merge(permissionOptions, userOptions); return permissionOptions; diff --git a/packages/ui/certd-client/src/plugin/permission/util.permission.ts b/packages/ui/certd-client/src/plugin/permission/util.permission.ts index 1c197335..4efd2b6b 100644 --- a/packages/ui/certd-client/src/plugin/permission/util.permission.ts +++ b/packages/ui/certd-client/src/plugin/permission/util.permission.ts @@ -14,11 +14,11 @@ const util = { } const permissionStore = usePermissionStore(); const userPermissionList = permissionStore.getPermissions; - return userPermissionList.some((permission) => { + return userPermissionList.some((permission: any) => { return need.includes(permission); }); }, - requirePermissions: (value) => { + requirePermissions: (value: any) => { if (!util.hasPermissions(value)) { message.error("对不起,您没有权限执行此操作"); throw new NoPermissionError(); diff --git a/packages/ui/certd-client/src/router/index.ts b/packages/ui/certd-client/src/router/index.ts index 72d1aac6..c57cf102 100644 --- a/packages/ui/certd-client/src/router/index.ts +++ b/packages/ui/certd-client/src/router/index.ts @@ -49,7 +49,7 @@ router.beforeEach(async (to, from, next) => { } }); -router.afterEach((to) => { +router.afterEach((to: any) => { // 进度条 NProgress.done(); // 多页控制 打开新的页面 diff --git a/packages/ui/certd-client/src/router/resolve.ts b/packages/ui/certd-client/src/router/resolve.ts index 39cbd998..8c36cc7d 100644 --- a/packages/ui/certd-client/src/router/resolve.ts +++ b/packages/ui/certd-client/src/router/resolve.ts @@ -3,11 +3,10 @@ import _ from "lodash-es"; import { outsideResource } from "./source/outside"; import { headerResource } from "./source/header"; import { frameworkResource } from "./source/framework"; -// @ts-ignore const modules = import.meta.glob("/src/views/**/*.vue"); let index = 0; -function transformOneResource(resource) { +function transformOneResource(resource: any, parent: any) { let menu: any = null; if (resource.meta == null) { resource.meta = {}; @@ -22,58 +21,58 @@ function transformOneResource(resource) { } else { menu = _.cloneDeep(resource); delete menu.component; - } - let route; - if (resource.type !== "menu") { - if (resource.path == null || resource.path.startsWith("https://") || resource.path.startsWith("http://")) { - //没有route - route = null; + if (menu.path?.startsWith("/")) { + menu.fullPath = menu.path; } else { - route = _.cloneDeep(resource); - if (route.component && typeof route.component === "string") { - const path = "/src/views" + route.component; - route.component = modules[path]; - } - if (route.component == null) { - route.component = LayoutPass; - } + menu.fullPath = (parent?.fullPath || "") + "/" + menu.path; + } + } + let route; + if (meta.isRoute === false || resource.path == null || resource.path.startsWith("https://") || resource.path.startsWith("http://")) { + //没有route + route = null; + } else { + route = _.cloneDeep(resource); + if (route.component && typeof route.component === "string") { + const path = "/src/views" + route.component; + route.component = modules[path]; + } + if (route.component == null) { + route.component = LayoutPass; + } + if (route?.meta?.cache !== false) { + if (route.meta == null) { + route.meta = {}; + } + route.meta.cache = true; + } + } + if (resource.children) { + const { menus, routes } = buildMenusAndRouters(resource.children, resource); + if (menu) { + menu.children = menus; + } + if (route) { + route.children = routes; } } - return { menu, route }; } -export const buildMenusAndRouters = (resources) => { +export const buildMenusAndRouters = (resources: any, parent: any = null) => { const routes: Array = []; const menus: Array = []; for (const item of resources) { - const { menu, route } = transformOneResource(item); - let menuChildren; - let routeChildren; - if (item.children) { - if (item.children.length > 0) { - const ret = buildMenusAndRouters(item.children); - menuChildren = ret.menus; - routeChildren = ret.routes; - } - } + const { menu, route } = transformOneResource(item, parent); if (menu) { menus.push(menu); - menu.children = menuChildren; } if (route) { - if (route?.meta?.cache !== false) { - if (route.meta == null) { - route.meta = {}; - } - route.meta.cache = true; - } routes.push(route); - route.children = routeChildren; } } @@ -84,7 +83,7 @@ export const buildMenusAndRouters = (resources) => { }; }; -function setIndex(menus) { +function setIndex(menus: any) { for (const menu of menus) { menu.index = "index_" + index; index++; @@ -94,7 +93,7 @@ function setIndex(menus) { } } -function findMenus(menus, condition) { +function findMenus(menus: any, condition: any) { const list: any = []; for (const menu of menus) { if (condition(menu)) { @@ -110,8 +109,8 @@ function findMenus(menus, condition) { return list; } -function filterMenus(menus, condition) { - const list = menus.filter((item) => { +function filterMenus(menus: any, condition: any) { + const list = menus.filter((item: any) => { return condition(item); }); @@ -123,7 +122,7 @@ function filterMenus(menus, condition) { return list; } -function flatChildren(list, children) { +function flatChildren(list: any, children: any) { for (const child of children) { list.push(child); if (child.children && child.children.length > 0) { @@ -132,7 +131,7 @@ function flatChildren(list, children) { child.children = null; } } -function flatSubRouters(routers) { +function flatSubRouters(routers: any) { for (const router of routers) { const children: Array = []; if (router.children && router.children.length > 0) { @@ -148,7 +147,7 @@ const outsideRet = buildMenusAndRouters(outsideResource); const headerRet = buildMenusAndRouters(headerResource); const outsideRoutes = outsideRet.routes; -const frameworkRoutes = flatSubRouters(frameworkRet.routes); +const frameworkRoutes = frameworkRet.routes; const routes = [...outsideRoutes, ...frameworkRoutes]; const frameworkMenus = frameworkRet.menus; const headerMenus = headerRet.menus; diff --git a/packages/ui/certd-client/src/router/source/modules/crud.ts b/packages/ui/certd-client/src/router/source/modules/crud.ts index 226ff916..b6291772 100644 --- a/packages/ui/certd-client/src/router/source/modules/crud.ts +++ b/packages/ui/certd-client/src/router/source/modules/crud.ts @@ -8,6 +8,15 @@ export const crudResources = [ icon: "ion:apps-sharp" }, children: [ + { + title: "debug", + name: "debug", + path: "/crud/debug", + component: "/crud/debug/index.vue", + meta: { + isMenu: false + } + }, { title: "基本特性", name: "basis", @@ -18,11 +27,17 @@ export const crudResources = [ }, children: [ { - title: "HelloWorld", + title: "FirstDemo", name: "FsCrudFirst", path: "/crud/basis/first", component: "/crud/basis/first/index.vue" }, + { + title: "HelloWorld", + name: "FsCrudHelloWorld", + path: "/crud/basis/helloworld", + component: "/crud/basis/helloworld/index.vue" + }, { title: "动态计算", name: "BasisCompute", @@ -59,6 +74,12 @@ export const crudResources = [ path: "/crud/basis/layout-custom", component: "/crud/basis/layout-custom/index.vue" }, + { + title: "自定义组件", + name: "BasisCustom", + path: "/crud/basis/custom", + component: "/crud/basis/custom/index.vue" + }, { title: "列设置", name: "BasisColumnsSet", @@ -70,6 +91,12 @@ export const crudResources = [ name: "BasisColumnMergePlugin", path: "/crud/basis/column-merge-plugin", component: "/crud/basis/column-merge-plugin/index.vue" + }, + { + title: "ResetCrudOptions", + name: "BasisReset", + path: "/crud/basis/reset", + component: "/crud/basis/reset/index.vue" } ] }, @@ -165,6 +192,12 @@ export const crudResources = [ path: "/crud/component/select", component: "/crud/component/select/index.vue" }, + { + title: "表格选择(table-select)", + name: "ComponentTableSelect", + path: "/crud/component/table-select", + component: "/crud/component/table-select/index.vue" + }, { title: "级联(cascader)", name: "ComponentCascader", @@ -243,6 +276,12 @@ export const crudResources = [ path: "/crud/component/uploader/qiniu", component: "/crud/component/uploader/qiniu/index.vue" }, + { + title: "s3上传", + name: "ComponentUploaderS3", + path: "/crud/component/uploader/s3", + component: "/crud/component/uploader/s3/index.vue" + }, { title: "富文本编辑器", name: "ComponentEditor", @@ -260,6 +299,12 @@ export const crudResources = [ name: "ComponentJson", path: "/crud/component/json", component: "/crud/component/json/index.vue" + }, + { + title: "组件独立使用", + name: "ComponentIndependent", + path: "/crud/component/independent", + component: "/crud/component/independent/index.vue" } ] }, @@ -391,6 +436,18 @@ export const crudResources = [ name: "FormNest", path: "/crud/form/nest", component: "/crud/form/nest/index.vue" + }, + { + title: "字段组件render", + name: "FormRender", + path: "/crud/form/render", + component: "/crud/form/render/index.vue" + }, + { + title: "查看表单使用单元格组件", + name: "FormView", + path: "/crud/form/view", + component: "/crud/form/view/index.vue" } ] }, @@ -444,6 +501,12 @@ export const crudResources = [ path: "/crud/feature/header-group", component: "/crud/feature/header-group/index.vue" }, + { + title: "自定义表头", + name: "FeatureHeader", + path: "/crud/feature/header", + component: "/crud/feature/header/index.vue" + }, { title: "合并单元格", name: "FeatureMerge", @@ -498,6 +561,12 @@ export const crudResources = [ path: "/crud/feature/search-multi", component: "/crud/feature/search-multi/index.vue" }, + { + title: "Tabs快捷查询", + name: "FeatureTabs", + path: "/crud/feature/tabs", + component: "/crud/feature/tabs/index.vue" + }, { title: "字段排序", name: "FeatureColumnSort", @@ -525,9 +594,21 @@ export const crudResources = [ { title: "v-model", name: "FeatureVModel", - path: "/crud/feature/v-model", + path: "/crud/feature/local-v-model", component: "/crud/feature/local-v-model/index.vue" }, + { + title: "导入", + name: "FeatureImport", + path: "/crud/feature/local-import", + component: "/crud/feature/local-import/index.vue" + }, + { + title: "导出", + name: "FeatureExport", + path: "/crud/feature/export", + component: "/crud/feature/export/index.vue" + }, { title: "自定义删除", name: "FeatureRemove", diff --git a/packages/ui/certd-client/src/router/source/modules/integration.ts b/packages/ui/certd-client/src/router/source/modules/integration.ts new file mode 100644 index 00000000..0b0c8cd8 --- /dev/null +++ b/packages/ui/certd-client/src/router/source/modules/integration.ts @@ -0,0 +1,22 @@ +export const integrationResources = [ + { + title: "集成", + name: "integration", + path: "/integration", + redirect: "/integration/bpmn", + meta: { + icon: "ion:apps-sharp" + }, + children: [ + { + title: "FsBpmn", + name: "FsBpmn", + path: "/integration/bpmn", + component: "/integration/bpmn/index.vue", + meta: { + icon: "ion:disc-outline" + } + } + ] + } +]; diff --git a/packages/ui/certd-client/src/router/source/modules/ui.ts b/packages/ui/certd-client/src/router/source/modules/ui.ts new file mode 100644 index 00000000..e8cfc6e4 --- /dev/null +++ b/packages/ui/certd-client/src/router/source/modules/ui.ts @@ -0,0 +1,30 @@ +export const uiResources = [ + { + title: "UI示例", + name: "ui", + path: "/ui", + redirect: "/ui/form", + meta: { + icon: "ion:apps-sharp" + }, + children: [ + { + title: "表单组件", + name: "UIForm", + path: "/ui/form", + redirect: "/ui/form/input", + meta: { + icon: "ion:disc-outline" + }, + children: [ + { + title: "input", + name: "UIFormInput", + path: "/ui/form/input", + component: "/ui/form/input/index.vue" + } + ] + } + ] + } +]; diff --git a/packages/ui/certd-client/src/store/index.ts b/packages/ui/certd-client/src/store/index.ts index 52b9cf68..cecd8344 100644 --- a/packages/ui/certd-client/src/store/index.ts +++ b/packages/ui/certd-client/src/store/index.ts @@ -1,7 +1,7 @@ import { createPinia } from "pinia"; const store = createPinia(); export default { - install(app) { + install(app: any) { app.use(store); } }; diff --git a/packages/ui/certd-client/src/store/modules/page.ts b/packages/ui/certd-client/src/store/modules/page.ts index 58305cb8..b2b100f8 100644 --- a/packages/ui/certd-client/src/store/modules/page.ts +++ b/packages/ui/certd-client/src/store/modules/page.ts @@ -15,7 +15,7 @@ interface PageState { // 已经加载多标签页数据 https://github.com/d2-projects/d2-admin/issues/201 openedLoaded: boolean; // 当前页面 - current: ""; + current: string; // 需要缓存的页面 name keepAlive: Array; inited: boolean; @@ -49,7 +49,7 @@ export const usePageStore = defineStore({ }), getters: { // @ts-ignore - getOpened() { + getOpened(): any { // @ts-ignore return this.opened; }, @@ -358,14 +358,14 @@ export const usePageStore = defineStore({ */ keepAliveRefresh() { this.keepAlive = this.opened.filter((item) => isKeepAlive(item)).map((e) => e.name); - console.log("keep alive:", this.keepAlive); + console.log("keepalive", this.keepAlive); }, /** * @description 删除一个页面的缓存设置 * @param {Object} state state * @param {String} name name */ - keepAliveRemove(name: any) { + keepAliveRemove(name: string) { const list = cloneDeep(this.keepAlive); const index = list.findIndex((item) => item === name); if (index !== -1) { @@ -378,7 +378,7 @@ export const usePageStore = defineStore({ * @param {Object} state state * @param {String} name name */ - keepAlivePush(name: any) { + keepAlivePush(name: string) { const keep = cloneDeep(this.keepAlive); keep.push(name); this.keepAlive = uniq(keep); @@ -396,7 +396,7 @@ export const usePageStore = defineStore({ * @param {Object} state state * @param {String} fullPath new fullPath */ - currentSet(fullPath: any) { + currentSet(fullPath: string) { this.current = fullPath; }, /** @@ -405,7 +405,7 @@ export const usePageStore = defineStore({ * @param {Object} state state * @param {Array} routes routes */ - async init(routes: any) { + async init(routes?: any) { if (this.inited) { return; } diff --git a/packages/ui/certd-client/src/store/modules/resource.ts b/packages/ui/certd-client/src/store/modules/resource.ts index 4018f4ab..58d8fc49 100644 --- a/packages/ui/certd-client/src/store/modules/resource.ts +++ b/packages/ui/certd-client/src/store/modules/resource.ts @@ -45,7 +45,7 @@ export const useResourceStore = defineStore({ // @ts-ignore return this.frameworkMenus; } - }, + } as any, actions: { clear() { this.inited = false; diff --git a/packages/ui/certd-client/src/style/common.less b/packages/ui/certd-client/src/style/common.less index ad43d5b6..670d686b 100644 --- a/packages/ui/certd-client/src/style/common.less +++ b/packages/ui/certd-client/src/style/common.less @@ -48,6 +48,24 @@ h1, h2, h3, h4, h5, h6 { vertical-align: 0 !important; } +.flex{ + display: flex; + align-items: center; +} + + +.ml-5{ + margin-left:5px; +} + +.mt-10{ + margin-top:10px; +} + +.m-10{ + margin:10px; +} + .text-center{ text-align: center; diff --git a/packages/ui/certd-client/src/types/global.d.ts b/packages/ui/certd-client/src/types/global.d.ts index d40bbd68..4e8e52cc 100644 --- a/packages/ui/certd-client/src/types/global.d.ts +++ b/packages/ui/certd-client/src/types/global.d.ts @@ -1,10 +1,4 @@ -import type { - ComponentRenderProxy, - VNode, - ComponentPublicInstance, - FunctionalComponent, - PropType as VuePropType, -} from 'vue'; +import type { ComponentRenderProxy, VNode, ComponentPublicInstance, FunctionalComponent, PropType as VuePropType } from "vue"; declare global { const __APP_INFO__: { @@ -64,7 +58,7 @@ declare global { VITE_GLOB_APP_SHORT_NAME: string; VITE_USE_CDN: boolean; VITE_DROP_CONSOLE: boolean; - VITE_BUILD_COMPRESS: 'gzip' | 'brotli' | 'none'; + VITE_BUILD_COMPRESS: "gzip" | "brotli" | "none"; VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE: boolean; VITE_LEGACY: boolean; VITE_USE_IMAGEMIN: boolean; @@ -92,8 +86,6 @@ declare global { } } -declare module 'vue' { - export type JSXComponent = - | { new (): ComponentPublicInstance } - | FunctionalComponent; +declare module "vue" { + export type JSXComponent = { new (): ComponentPublicInstance } | FunctionalComponent; } diff --git a/packages/ui/certd-client/src/utils/util.env.ts b/packages/ui/certd-client/src/utils/util.env.ts index 523beacc..c00e549c 100644 --- a/packages/ui/certd-client/src/utils/util.env.ts +++ b/packages/ui/certd-client/src/utils/util.env.ts @@ -20,7 +20,7 @@ export class EnvConfig { _.forEach(import.meta.env, (value, key) => { if (key.startsWith("VITE_APP")) { key = key.replace("VITE_APP_", ""); - //@ts-ignore + // @ts-ignore this[key] = value; } }); diff --git a/packages/ui/certd-client/src/views/crud/advanced/big-data/api.js b/packages/ui/certd-client/src/views/crud/advanced/big-data/api.ts similarity index 73% rename from packages/ui/certd-client/src/views/crud/advanced/big-data/api.js rename to packages/ui/certd-client/src/views/crud/advanced/big-data/api.ts index a2e187ae..5895fc6b 100644 --- a/packages/ui/certd-client/src/views/crud/advanced/big-data/api.js +++ b/packages/ui/certd-client/src/views/crud/advanced/big-data/api.ts @@ -1,7 +1,8 @@ import { requestForMock } from "/src/api/service"; + const request = requestForMock; const apiPrefix = "/mock/AdvancedBigData"; -export function GetList(query) { +export function GetList(query: any) { return request({ url: apiPrefix + "/page", method: "get", @@ -9,7 +10,7 @@ export function GetList(query) { }); } -export function AddObj(obj) { +export function AddObj(obj: any) { return request({ url: apiPrefix + "/add", method: "post", @@ -17,7 +18,7 @@ export function AddObj(obj) { }); } -export function UpdateObj(obj) { +export function UpdateObj(obj: any) { return request({ url: apiPrefix + "/update", method: "post", @@ -25,7 +26,7 @@ export function UpdateObj(obj) { }); } -export function DelObj(id) { +export function DelObj(id: any) { return request({ url: apiPrefix + "/delete", method: "post", @@ -33,9 +34,9 @@ export function DelObj(id) { }); } -export function GetObj(id) { +export function GetObj(id: any) { return request({ - url: apiPrefix + "/info", + url: apiPrefix + "/get", method: "get", params: { id } }); diff --git a/packages/ui/certd-client/src/views/crud/advanced/big-data/crud.jsx b/packages/ui/certd-client/src/views/crud/advanced/big-data/crud.tsx similarity index 72% rename from packages/ui/certd-client/src/views/crud/advanced/big-data/crud.jsx rename to packages/ui/certd-client/src/views/crud/advanced/big-data/crud.tsx index d66f65d8..ddf4ef9e 100644 --- a/packages/ui/certd-client/src/views/crud/advanced/big-data/crud.jsx +++ b/packages/ui/certd-client/src/views/crud/advanced/big-data/crud.tsx @@ -1,25 +1,26 @@ import * as api from "./api"; -import { message } from "ant-design-vue"; -import { dict } from "@fast-crud/fast-crud"; -export default function ({ expose }) { - const pageRequest = async (query) => { +import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud"; + +export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet { + const pageRequest = async (query: UserPageQuery): Promise => { return await api.GetList(query); }; - const editRequest = async ({ form, row }) => { + const editRequest = async ({ form, row }: EditReq) => { form.id = row.id; return await api.UpdateObj(form); }; - const delRequest = async ({ row }) => { + const delRequest = async ({ row }: DelReq) => { return await api.DelObj(row.id); }; - const addRequest = async ({ form }) => { + const addRequest = async ({ form }: AddReq) => { return await api.AddObj(form); }; return { output: {}, crudOptions: { + //大量数据的crud配置 request: { pageRequest, addRequest, @@ -41,7 +42,6 @@ export default function ({ expose }) { columns: { id: { title: "ID", - key: "id", type: "number", column: { width: 50 @@ -58,70 +58,70 @@ export default function ({ expose }) { title: "字典1", type: "dict-select", dict: dict({ - url: "/mock/dicts/OpenStatusEnum?from=dict1" + url: "/mock/dicts/ManyOpenStatusEnum?from=dict1" }) }, dict2: { title: "字典2", type: "dict-select", dict: dict({ - url: "/mock/dicts/OpenStatusEnum?from=dict2" + url: "/mock/dicts/ManyOpenStatusEnum?from=dict2" }) }, dict3: { title: "字典3", type: "dict-select", dict: dict({ - url: "/mock/dicts/OpenStatusEnum?from=dict3" + url: "/mock/dicts/ManyOpenStatusEnum?from=dict3" }) }, dict4: { title: "字典4", type: "dict-select", dict: dict({ - url: "/mock/dicts/OpenStatusEnum?from=dict4" + url: "/mock/dicts/ManyOpenStatusEnum?from=dict4" }) }, dict5: { title: "字典5", type: "dict-select", dict: dict({ - url: "/mock/dicts/OpenStatusEnum?from=dict5" + url: "/mock/dicts/ManyOpenStatusEnum?from=dict5" }) }, dict6: { title: "字典6", type: "dict-select", dict: dict({ - url: "/mock/dicts/OpenStatusEnum?from=dict6" + url: "/mock/dicts/ManyOpenStatusEnum?from=dict6" }) }, dict7: { title: "字典7", type: "dict-select", dict: dict({ - url: "/mock/dicts/OpenStatusEnum?from=dict7" + url: "/mock/dicts/ManyOpenStatusEnum?from=dict7" }) }, dict8: { title: "字典8", type: "dict-select", dict: dict({ - url: "/mock/dicts/OpenStatusEnum?from=dict8" + url: "/mock/dicts/ManyOpenStatusEnum?from=dict8" }) }, dict9: { title: "字典9", type: "dict-select", dict: dict({ - url: "/mock/dicts/OpenStatusEnum?from=dict9" + url: "/mock/dicts/ManyOpenStatusEnum?from=dict9" }) }, dict10: { title: "字典10", type: "dict-select", dict: dict({ - url: "/mock/dicts/OpenStatusEnum?from=dict10" + url: "/mock/dicts/ManyOpenStatusEnum?from=dict10" }) }, text1: { diff --git a/packages/ui/certd-client/src/views/crud/advanced/big-data/index.vue b/packages/ui/certd-client/src/views/crud/advanced/big-data/index.vue index 91a4914c..3c3e8846 100644 --- a/packages/ui/certd-client/src/views/crud/advanced/big-data/index.vue +++ b/packages/ui/certd-client/src/views/crud/advanced/big-data/index.vue @@ -7,30 +7,18 @@ - diff --git a/packages/ui/certd-client/src/views/crud/basis/custom/mock.ts b/packages/ui/certd-client/src/views/crud/basis/custom/mock.ts new file mode 100644 index 00000000..84e0ca9f --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/basis/custom/mock.ts @@ -0,0 +1,22 @@ +import mockUtil from "/src/mock/base"; +const options: any = { + name: "BasisCustom", + idGenerator: 0 +}; +const list = [ + { + counter: 1, + cellRender: "cellRender1" + }, + { + counter: 2, + cellRender: "cellRender2" + }, + { + counter: 3, + cellRender: "cellRender3" + } +]; +options.list = list; +const mock = mockUtil.buildMock(options); +export default mock; diff --git a/packages/ui/certd-client/src/views/crud/basis/custom/vmodel-counter.vue b/packages/ui/certd-client/src/views/crud/basis/custom/vmodel-counter.vue new file mode 100644 index 00000000..226c0a5c --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/basis/custom/vmodel-counter.vue @@ -0,0 +1,45 @@ + + + diff --git a/packages/ui/certd-client/src/views/crud/basis/first/api.ts b/packages/ui/certd-client/src/views/crud/basis/first/api.ts new file mode 100644 index 00000000..227af989 --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/basis/first/api.ts @@ -0,0 +1,42 @@ +import { requestForMock } from "/src/api/service"; +const request = requestForMock; +const apiPrefix = "/mock/FsCrudFirst"; +export function GetList(query: any) { + return request({ + url: apiPrefix + "/page", + method: "get", + data: query + }); +} + +export function AddObj(obj: any) { + return request({ + url: apiPrefix + "/add", + method: "post", + data: obj + }); +} + +export function UpdateObj(obj: any) { + return request({ + url: apiPrefix + "/update", + method: "post", + data: obj + }); +} + +export function DelObj(id: any) { + return request({ + url: apiPrefix + "/delete", + method: "post", + params: { id } + }); +} + +export function GetObj(id: any) { + return request({ + url: apiPrefix + "/get", + method: "get", + params: { id } + }); +} diff --git a/packages/ui/certd-client/src/views/crud/basis/first/crud.ts b/packages/ui/certd-client/src/views/crud/basis/first/crud.ts new file mode 100644 index 00000000..c0ed096a --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/basis/first/crud.ts @@ -0,0 +1,52 @@ +import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud"; +import * as api from "./api"; +export default function ({ crudExpose, context }: CreateCrudOptionsProps): CreateCrudOptionsRet { + const pageRequest = async (query: UserPageQuery): Promise => { + return await api.GetList(query); + }; + const editRequest = async ({ form, row }: EditReq) => { + form.id = row.id; + return await api.UpdateObj(form); + }; + const delRequest = async ({ row }: DelReq) => { + return await api.DelObj(row.id); + }; + + const addRequest = async ({ form }: AddReq) => { + return await api.AddObj(form); + }; + + return { + crudOptions: { + // 自定义crudOptions配置 + request: { + pageRequest, + addRequest, + editRequest, + delRequest + }, + //两个字段 + columns: { + name: { + title: "姓名", + type: "text", + search: { show: true }, + column: { + resizable: true, + width: 200 + } + }, + type: { + title: "类型", + type: "dict-select", + dict: dict({ + data: [ + { value: 1, label: "开始", color: "green" }, + { value: 0, label: "停止", color: "red" } + ] + }) + } + } + } + }; +} diff --git a/packages/ui/certd-client/src/views/crud/basis/first/index.vue b/packages/ui/certd-client/src/views/crud/basis/first/index.vue index 6edf3a6d..27a4c5d7 100644 --- a/packages/ui/certd-client/src/views/crud/basis/first/index.vue +++ b/packages/ui/certd-client/src/views/crud/basis/first/index.vue @@ -1,105 +1,43 @@ - diff --git a/packages/ui/certd-client/src/views/crud/basis/i18n/api.js b/packages/ui/certd-client/src/views/crud/basis/i18n/api.ts similarity index 72% rename from packages/ui/certd-client/src/views/crud/basis/i18n/api.js rename to packages/ui/certd-client/src/views/crud/basis/i18n/api.ts index d62b1b72..4e4d75cf 100644 --- a/packages/ui/certd-client/src/views/crud/basis/i18n/api.js +++ b/packages/ui/certd-client/src/views/crud/basis/i18n/api.ts @@ -1,7 +1,7 @@ import { requestForMock } from "/src/api/service"; const request = requestForMock; const apiPrefix = "/mock/BasisI18n"; -export function GetList(query) { +export function GetList(query: any) { return request({ url: apiPrefix + "/page", method: "get", @@ -9,7 +9,7 @@ export function GetList(query) { }); } -export function AddObj(obj) { +export function AddObj(obj: any) { return request({ url: apiPrefix + "/add", method: "post", @@ -17,7 +17,7 @@ export function AddObj(obj) { }); } -export function UpdateObj(obj) { +export function UpdateObj(obj: any) { return request({ url: apiPrefix + "/update", method: "post", @@ -25,7 +25,7 @@ export function UpdateObj(obj) { }); } -export function DelObj(id) { +export function DelObj(id: any) { return request({ url: apiPrefix + "/delete", method: "post", @@ -33,9 +33,9 @@ export function DelObj(id) { }); } -export function GetObj(id) { +export function GetObj(id: any) { return request({ - url: apiPrefix + "/info", + url: apiPrefix + "/get", method: "get", params: { id } }); diff --git a/packages/ui/certd-client/src/views/crud/basis/i18n/crud.jsx b/packages/ui/certd-client/src/views/crud/basis/i18n/crud.tsx similarity index 76% rename from packages/ui/certd-client/src/views/crud/basis/i18n/crud.jsx rename to packages/ui/certd-client/src/views/crud/basis/i18n/crud.tsx index e789ca3e..48d9c48b 100644 --- a/packages/ui/certd-client/src/views/crud/basis/i18n/crud.jsx +++ b/packages/ui/certd-client/src/views/crud/basis/i18n/crud.tsx @@ -1,22 +1,25 @@ import * as api from "./api"; -import { dict } from "@fast-crud/fast-crud"; +import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud"; import { useI18n } from "vue-i18n"; -export default function ({ expose }) { - const { t } = useI18n(); - const pageRequest = async (query) => { + +export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet { + const pageRequest = async (query: UserPageQuery): Promise => { return await api.GetList(query); }; - const editRequest = async ({ form, row }) => { + const editRequest = async ({ form, row }: EditReq) => { form.id = row.id; return await api.UpdateObj(form); }; - const delRequest = async ({ row }) => { + const delRequest = async ({ row }: DelReq) => { return await api.DelObj(row.id); }; - const addRequest = async ({ form }) => { + const addRequest = async ({ form }: AddReq) => { return await api.AddObj(form); }; + + const { t } = useI18n(); + return { crudOptions: { request: { diff --git a/packages/ui/certd-client/src/views/crud/basis/i18n/index.vue b/packages/ui/certd-client/src/views/crud/basis/i18n/index.vue index 3c50ea0a..9a53a5b2 100644 --- a/packages/ui/certd-client/src/views/crud/basis/i18n/index.vue +++ b/packages/ui/certd-client/src/views/crud/basis/i18n/index.vue @@ -2,7 +2,9 @@ - diff --git a/packages/ui/certd-client/src/views/crud/basis/reset/mock.ts b/packages/ui/certd-client/src/views/crud/basis/reset/mock.ts new file mode 100644 index 00000000..d32e1deb --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/basis/reset/mock.ts @@ -0,0 +1,23 @@ +// @ts-ignore +import mockUtil from "/src/mock/base"; +const options: any = { + name: "BasisReset", + idGenerator: 0 +}; +const list = [ + { + switch: true, + text: "1111" + }, + { + switch: true, + text: "2222" + }, + { + switch: true, + text: "3333" + } +]; +options.list = list; +const mock = mockUtil.buildMock(options); +export default mock; diff --git a/packages/ui/certd-client/src/views/crud/basis/value-change/api.js b/packages/ui/certd-client/src/views/crud/basis/value-change/api.ts similarity index 73% rename from packages/ui/certd-client/src/views/crud/basis/value-change/api.js rename to packages/ui/certd-client/src/views/crud/basis/value-change/api.ts index 35fdfa0c..620c51e5 100644 --- a/packages/ui/certd-client/src/views/crud/basis/value-change/api.js +++ b/packages/ui/certd-client/src/views/crud/basis/value-change/api.ts @@ -1,7 +1,7 @@ import { requestForMock } from "/src/api/service"; const request = requestForMock; const apiPrefix = "/mock/BasisValueChange"; -export function GetList(query) { +export function GetList(query: any) { return request({ url: apiPrefix + "/page", method: "get", @@ -9,7 +9,7 @@ export function GetList(query) { }); } -export function AddObj(obj) { +export function AddObj(obj: any) { return request({ url: apiPrefix + "/add", method: "post", @@ -17,7 +17,7 @@ export function AddObj(obj) { }); } -export function UpdateObj(obj) { +export function UpdateObj(obj: any) { return request({ url: apiPrefix + "/update", method: "post", @@ -25,7 +25,7 @@ export function UpdateObj(obj) { }); } -export function DelObj(id) { +export function DelObj(id: any) { return request({ url: apiPrefix + "/delete", method: "post", @@ -33,9 +33,9 @@ export function DelObj(id) { }); } -export function GetObj(id) { +export function GetObj(id: any) { return request({ - url: apiPrefix + "/info", + url: apiPrefix + "/get", method: "get", params: { id } }); diff --git a/packages/ui/certd-client/src/views/crud/basis/value-change/crud.jsx b/packages/ui/certd-client/src/views/crud/basis/value-change/crud.tsx similarity index 72% rename from packages/ui/certd-client/src/views/crud/basis/value-change/crud.jsx rename to packages/ui/certd-client/src/views/crud/basis/value-change/crud.tsx index 15dde4a4..975ea76d 100644 --- a/packages/ui/certd-client/src/views/crud/basis/value-change/crud.jsx +++ b/packages/ui/certd-client/src/views/crud/basis/value-change/crud.tsx @@ -1,24 +1,24 @@ import * as api from "./api"; import { message } from "ant-design-vue"; -import { dict } from "@fast-crud/fast-crud"; -export default function ({ expose }) { - const pageRequest = async (query) => { +import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes, ValueChangeContext } from "@fast-crud/fast-crud"; + +export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet { + const pageRequest = async (query: UserPageQuery): Promise => { return await api.GetList(query); }; - const editRequest = async ({ form, row }) => { + const editRequest = async ({ form, row }: EditReq) => { form.id = row.id; return await api.UpdateObj(form); }; - const delRequest = async ({ row }) => { + const delRequest = async ({ row }: DelReq) => { return await api.DelObj(row.id); }; - const addRequest = async ({ form }) => { + const addRequest = async ({ form }: AddReq) => { return await api.AddObj(form); }; return { - output: {}, crudOptions: { request: { pageRequest, @@ -52,12 +52,12 @@ export default function ({ expose }) { name: "fs-dict-switch", vModel: "checked" }, - valueChange(context) { + valueChange(context: ValueChangeContext) { console.log("column value changed:", context); } }, form: { - valueChange({ value, key, form }) { + valueChange({ value, key, form }: ValueChangeContext) { console.log("valueChanged,", key, value, form); message.info(`valueChanged:${key}=${value}`); } @@ -67,7 +67,7 @@ export default function ({ expose }) { title: "value-change", type: "text", form: { - valueChange({ value, key, form }) { + valueChange({ value, key, form }: ValueChangeContext) { console.log("valueChanged,", key, value, form); message.info(`valueChanged:${key}=${value}`); } @@ -81,7 +81,7 @@ export default function ({ expose }) { }, form: { valueChange: { - handle({ value, key, form, immediate }) { + handle({ value, key, form, immediate }: ValueChangeContext) { console.log("valueChange,", key, value, "isImmediate=", immediate); message.info(`valueChanged:${key}=${value},isImmediate=${immediate}`); }, diff --git a/packages/ui/certd-client/src/views/crud/basis/value-change/index.vue b/packages/ui/certd-client/src/views/crud/basis/value-change/index.vue index 0a6bc659..642e5973 100644 --- a/packages/ui/certd-client/src/views/crud/basis/value-change/index.vue +++ b/packages/ui/certd-client/src/views/crud/basis/value-change/index.vue @@ -2,41 +2,33 @@ - diff --git a/packages/ui/certd-client/src/views/crud/component/json/api.js b/packages/ui/certd-client/src/views/crud/component/json/api.ts similarity index 73% rename from packages/ui/certd-client/src/views/crud/component/json/api.js rename to packages/ui/certd-client/src/views/crud/component/json/api.ts index a62736e6..ff19433e 100644 --- a/packages/ui/certd-client/src/views/crud/component/json/api.js +++ b/packages/ui/certd-client/src/views/crud/component/json/api.ts @@ -1,7 +1,7 @@ import { requestForMock } from "/src/api/service"; const request = requestForMock; const apiPrefix = "/mock/ComponentJson"; -export function GetList(query) { +export function GetList(query: any) { return request({ url: apiPrefix + "/page", method: "get", @@ -9,7 +9,7 @@ export function GetList(query) { }); } -export function AddObj(obj) { +export function AddObj(obj: any) { return request({ url: apiPrefix + "/add", method: "post", @@ -17,7 +17,7 @@ export function AddObj(obj) { }); } -export function UpdateObj(obj) { +export function UpdateObj(obj: any) { return request({ url: apiPrefix + "/update", method: "post", @@ -25,7 +25,7 @@ export function UpdateObj(obj) { }); } -export function DelObj(id) { +export function DelObj(id: any) { return request({ url: apiPrefix + "/delete", method: "post", @@ -33,9 +33,9 @@ export function DelObj(id) { }); } -export function GetObj(id) { +export function GetObj(id: any) { return request({ - url: apiPrefix + "/info", + url: apiPrefix + "/get", method: "get", params: { id } }); diff --git a/packages/ui/certd-client/src/views/crud/component/json/crud.jsx b/packages/ui/certd-client/src/views/crud/component/json/crud.tsx similarity index 68% rename from packages/ui/certd-client/src/views/crud/component/json/crud.jsx rename to packages/ui/certd-client/src/views/crud/component/json/crud.tsx index 898fb5d3..b2753af4 100644 --- a/packages/ui/certd-client/src/views/crud/component/json/crud.jsx +++ b/packages/ui/certd-client/src/views/crud/component/json/crud.tsx @@ -1,19 +1,21 @@ import * as api from "./api"; -export default function ({ expose }) { - const pageRequest = async (query) => { +import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, EditReq, UserPageQuery, UserPageRes, ValueBuilderContext, ValueResolveContext } from "@fast-crud/fast-crud"; +export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet { + const pageRequest = async (query: UserPageQuery): Promise => { return await api.GetList(query); }; - const editRequest = async ({ form, row }) => { + const editRequest = async ({ form, row }: EditReq) => { form.id = row.id; return await api.UpdateObj(form); }; - const delRequest = async ({ row }) => { + const delRequest = async ({ row }: DelReq) => { return await api.DelObj(row.id); }; - const addRequest = async ({ form }) => { + const addRequest = async ({ form }: AddReq) => { return await api.AddObj(form); }; + return { crudOptions: { request: { @@ -38,13 +40,13 @@ export default function ({ expose }) { title: "json", type: "json", form: { - valueBuilder({ form }) { + valueBuilder({ form }: ValueBuilderContext) { if (form.json == null) { return; } form.json = JSON.parse(form.json); }, - valueResolve({ form }) { + valueResolve({ form }: ValueResolveContext) { if (form.json == null) { return; } @@ -58,13 +60,13 @@ export default function ({ expose }) { form: { // 上面form.wrapper.onOpened里面配置了异步加载 helper: "在onOpened里面配置异步加载json字符串", - valueBuilder({ form }) { + valueBuilder({ form }: ValueBuilderContext) { if (form.async == null) { return; } form.async = JSON.parse(form.async); }, - valueResolve({ form }) { + valueResolve({ form }: ValueResolveContext) { if (form.async == null) { return; } diff --git a/packages/ui/certd-client/src/views/crud/component/json/index.vue b/packages/ui/certd-client/src/views/crud/component/json/index.vue index 34868881..1d854ac3 100644 --- a/packages/ui/certd-client/src/views/crud/component/json/index.vue +++ b/packages/ui/certd-client/src/views/crud/component/json/index.vue @@ -4,31 +4,19 @@ - diff --git a/packages/ui/certd-client/src/views/crud/component/table-select/mock.ts b/packages/ui/certd-client/src/views/crud/component/table-select/mock.ts new file mode 100644 index 00000000..b44acd38 --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/component/table-select/mock.ts @@ -0,0 +1,21 @@ +import mockUtil from "/src/mock/base"; +const options: any = { + name: "ComponentTableSelect", + idGenerator: 0 +}; +const list = [ + { + single: 1, + multi: [1, 2] + }, + { + single: 3, + multi: [1, 2, 3] + }, + { + single: 2 + } +]; +options.list = list; +const mock = mockUtil.buildMock(options); +export default mock; diff --git a/packages/ui/certd-client/src/views/crud/component/text/api.js b/packages/ui/certd-client/src/views/crud/component/text/api.js deleted file mode 100644 index 2111f772..00000000 --- a/packages/ui/certd-client/src/views/crud/component/text/api.js +++ /dev/null @@ -1,42 +0,0 @@ -import { requestForMock } from "/src/api/service"; -const request = requestForMock; -const apiPrefix = "/mock/ComponentText"; -export function GetList(query) { - return request({ - url: apiPrefix + "/page", - method: "get", - data: query - }); -} - -export function AddObj(obj) { - return request({ - url: apiPrefix + "/add", - method: "post", - data: obj - }); -} - -export function UpdateObj(obj) { - return request({ - url: apiPrefix + "/update", - method: "post", - data: obj - }); -} - -export function DelObj(id) { - return request({ - url: apiPrefix + "/delete", - method: "post", - params: { id } - }); -} - -export function GetObj(id) { - return request({ - url: apiPrefix + "/info", - method: "get", - params: { id } - }); -} diff --git a/packages/ui/certd-client/src/views/crud/component/text/api.ts b/packages/ui/certd-client/src/views/crud/component/text/api.ts new file mode 100644 index 00000000..6227edcd --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/component/text/api.ts @@ -0,0 +1,49 @@ +import { requestForMock } from "/src/api/service"; +const request = requestForMock; +const apiPrefix = "/mock/ComponentText"; +export function GetList(query: any) { + return request({ + url: apiPrefix + "/page", + method: "get", + data: query + }); +} + +export function AddObj(obj: any) { + return request({ + url: apiPrefix + "/add", + method: "post", + data: obj + }); +} + +export function UpdateObj(obj: any) { + return request({ + url: apiPrefix + "/update", + method: "post", + data: obj + }); +} + +export function DelObj(id: any) { + return request({ + url: apiPrefix + "/delete", + method: "post", + params: { id } + }); +} + +export function GetObj(id: any) { + return request({ + url: apiPrefix + "/get", + method: "get", + params: { id } + }); +} +export function GetByIds(ids: any) { + return request({ + url: apiPrefix + "/byIds", + method: "post", + data: { ids } + }); +} diff --git a/packages/ui/certd-client/src/views/crud/component/text/crud.jsx b/packages/ui/certd-client/src/views/crud/component/text/crud.tsx similarity index 53% rename from packages/ui/certd-client/src/views/crud/component/text/crud.jsx rename to packages/ui/certd-client/src/views/crud/component/text/crud.tsx index 24850e9e..46be924d 100644 --- a/packages/ui/certd-client/src/views/crud/component/text/crud.jsx +++ b/packages/ui/certd-client/src/views/crud/component/text/crud.tsx @@ -1,22 +1,23 @@ import * as api from "./api"; -import { compute } from "@fast-crud/fast-crud"; -import { resolveDirective, withDirectives } from "vue"; +import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, EditReq, ScopeContext, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud"; +import { SearchOutlined } from "@ant-design/icons-vue"; -export default function ({ expose }) { - const pageRequest = async (query) => { +export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet { + const pageRequest = async (query: UserPageQuery): Promise => { return await api.GetList(query); }; - const editRequest = async ({ form, row }) => { + const editRequest = async ({ form, row }: EditReq) => { form.id = row.id; return await api.UpdateObj(form); }; - const delRequest = async ({ row }) => { + const delRequest = async ({ row }: DelReq) => { return await api.DelObj(row.id); }; - const addRequest = async ({ form }) => { + const addRequest = async ({ form }: AddReq) => { return await api.AddObj(form); }; + return { crudOptions: { request: { @@ -36,6 +37,56 @@ export default function ({ expose }) { } } }, + trim: { + title: "trim空格", + type: "text", //虽然不写也能正确显示组件,但不建议省略它 + search: { show: true }, + form: { + component: { + vModel: { + name: "value", + trim: true + }, + maxlength: 20 + }, + helper: "自动移除两端空格" + } + }, + number: { + title: "转换为number", + type: "text", //虽然不写也能正确显示组件,但不建议省略它 + search: { show: true }, + form: { + component: { + vModel: { + name: "value", + number: true + }, + maxlength: 20 + }, + helper: "自动转为number" + } + }, + transform: { + title: "自定义transform", + type: "text", //虽然不写也能正确显示组件,但不建议省略它 + search: { show: true }, + form: { + component: { + vModel: { + name: "value", + transform: (value) => { + if (!value) { + return undefined; + } + return value; + } + }, + maxlength: 20, + helper: "自定义transform方法,此处演示空字符串转为undefined" + } + } + }, search: { title: "搜索", type: "text", @@ -92,23 +143,16 @@ export default function ({ expose }) { }, render: { title: "复杂输入(render)", + type: "text", form: { title: "复杂输入", component: { - render(context) { + render(context: ScopeContext) { console.log("context scope", context); return ( - - + + ); } @@ -117,6 +161,7 @@ export default function ({ expose }) { }, render2: { title: "我的值是由复杂输入列输入的", + type: "text", column: { width: "300px" }, diff --git a/packages/ui/certd-client/src/views/crud/component/text/index.vue b/packages/ui/certd-client/src/views/crud/component/text/index.vue index a97ef551..698daef5 100644 --- a/packages/ui/certd-client/src/views/crud/component/text/index.vue +++ b/packages/ui/certd-client/src/views/crud/component/text/index.vue @@ -1,34 +1,31 @@ - diff --git a/packages/ui/certd-client/src/views/crud/component/uploader/s3/mock.ts b/packages/ui/certd-client/src/views/crud/component/uploader/s3/mock.ts new file mode 100644 index 00000000..e9585bc1 --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/component/uploader/s3/mock.ts @@ -0,0 +1,23 @@ +// @ts-ignore +import mockUtil from "/src/mock/base"; +const options: any = { + name: "S3Uploader", + idGenerator: 0 +}; +const list = [ + { + avatar: "http://greper.handsfree.work/extends/avatar.jpg", + file: ["http://greper.handsfree.work/extends/avatar.jpg", "https://www.baidu.com/img/bd_logo1.png"], + image: ["http://greper.handsfree.work/extends/avatar.jpg", "https://www.baidu.com/img/bd_logo1.png"], + image2: ["http://greper.handsfree.work/extends/avatar.jpg", "https://www.baidu.com/img/bd_logo1.png"] + }, + { + radio: "2" + }, + { + radio: "0" + } +]; +options.list = list; +const mock = mockUtil.buildMock(options); +export default mock; diff --git a/packages/ui/certd-client/src/views/crud/component/uploader/s3/s3-server.ts b/packages/ui/certd-client/src/views/crud/component/uploader/s3/s3-server.ts new file mode 100644 index 00000000..c7e4632f --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/component/uploader/s3/s3-server.ts @@ -0,0 +1,46 @@ +// @ts-ignore +import { S3Client, GetObjectCommand, PutObjectCommand, CreateBucketCommand } from "@aws-sdk/client-s3"; +import { getSignedUrl } from "@aws-sdk/s3-request-presigner"; + +let bucketCreated = false; +export async function generateSignedUrl(bucket: string, key: string, type: "put" | "get" = "get") { + const client = new S3Client({ + // s3ForcePathStyle: true, + // signatureVersion: "v4", + region: "us-east-1", + forcePathStyle: true, + endpoint: "https://play.min.io", + credentials: { + accessKeyId: "Q3AM3UQ867SPQQA43P2F", //访问登录名 + secretAccessKey: "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG" //访问密码 + } + }); + + try { + if (!bucketCreated) { + bucketCreated = true; + const createCmd = new CreateBucketCommand({ Bucket: bucket }); + await client.send(createCmd); + } + } catch (e) {} + + const params = { + Bucket: bucket, + Key: key + }; + let url; + let cmd; + if (type === "get") { + cmd = new GetObjectCommand(params); + } else { + cmd = new PutObjectCommand(params); + } + + try { + url = await getSignedUrl(client, cmd); + } catch (err) { + console.log("Error getting signed URL ", err); + } + + return url; +} diff --git a/packages/ui/certd-client/src/views/crud/debug/select/api.js b/packages/ui/certd-client/src/views/crud/debug/api.ts similarity index 73% rename from packages/ui/certd-client/src/views/crud/debug/select/api.js rename to packages/ui/certd-client/src/views/crud/debug/api.ts index 06a6bd3e..ca651ead 100644 --- a/packages/ui/certd-client/src/views/crud/debug/select/api.js +++ b/packages/ui/certd-client/src/views/crud/debug/api.ts @@ -1,7 +1,7 @@ import { requestForMock } from "/src/api/service"; const request = requestForMock; const apiPrefix = "/mock/DebugSelect"; -export function GetList(query) { +export function GetList(query: any) { return request({ url: apiPrefix + "/page", method: "get", @@ -9,7 +9,7 @@ export function GetList(query) { }); } -export function AddObj(obj) { +export function AddObj(obj: any) { return request({ url: apiPrefix + "/add", method: "post", @@ -17,7 +17,7 @@ export function AddObj(obj) { }); } -export function UpdateObj(obj) { +export function UpdateObj(obj: any) { return request({ url: apiPrefix + "/update", method: "post", @@ -25,7 +25,7 @@ export function UpdateObj(obj) { }); } -export function DelObj(id) { +export function DelObj(id: any) { return request({ url: apiPrefix + "/delete", method: "post", @@ -33,9 +33,9 @@ export function DelObj(id) { }); } -export function GetObj(id) { +export function GetObj(id: any) { return request({ - url: apiPrefix + "/info", + url: apiPrefix + "/get", method: "get", params: { id } }); diff --git a/packages/ui/certd-client/src/views/crud/debug/select/crud.jsx b/packages/ui/certd-client/src/views/crud/debug/crud.tsx similarity index 52% rename from packages/ui/certd-client/src/views/crud/debug/select/crud.jsx rename to packages/ui/certd-client/src/views/crud/debug/crud.tsx index d3bee612..a919fec8 100644 --- a/packages/ui/certd-client/src/views/crud/debug/select/crud.jsx +++ b/packages/ui/certd-client/src/views/crud/debug/crud.tsx @@ -1,22 +1,47 @@ import * as api from "./api"; -import { requestForMock } from "/src/api/service"; -import { dict } from "@fast-crud/fast-crud"; -export default function ({ expose }) { - const pageRequest = async (query) => { +import { AddReq, compute, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes, utils } from "@fast-crud/fast-crud"; +import dayjs from "dayjs"; +import { computed, Ref, ref } from "vue"; + +export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet { + const pageRequest = async (query: UserPageQuery): Promise => { return await api.GetList(query); }; - const editRequest = async ({ form, row }) => { + const editRequest = async ({ form, row }: EditReq) => { form.id = row.id; return await api.UpdateObj(form); }; - const delRequest = async ({ row }) => { + const delRequest = async ({ row }: DelReq) => { return await api.DelObj(row.id); }; - const addRequest = async ({ form }) => { + const addRequest = async ({ form }: AddReq) => { return await api.AddObj(form); }; + const options: Ref = ref([]); + + let arr = [ + { + value: "1", + label: "test" + }, + { + value: "1", + label: "test2" + } + ]; + + for (let i = 0; i < 10; i++) { + arr = arr.concat(arr); + } + let i = 0; + for (const item of arr) { + i++; + item.value = i + ""; + } + options.value = arr; + return { crudOptions: { request: { @@ -46,18 +71,14 @@ export default function ({ expose }) { show: false } }, - statusRemote: { title: "单选远程", search: { - show: true, - value: [] + show: false }, type: "dict-select", dict: dict({ - url: "/mock/dicts/_OpenStatusEnum2?simple", - value: "id", - label: "text" + url: "/mock/dicts/ManyOpenStatusEnum?from=dict1" }), form: { component: { mode: "multiple" }, @@ -66,39 +87,6 @@ export default function ({ expose }) { column: { width: 200 } - }, - id2: { - title: "ID", - key: "id", - type: "number", - column: { - width: 300 - }, - form: { - show: false - } - }, - id3: { - title: "ID", - key: "id", - type: "number", - column: { - width: 300 - }, - form: { - show: false - } - }, - id4: { - title: "ID", - key: "id", - type: "number", - column: { - width: 300 - }, - form: { - show: false - } } } } diff --git a/packages/ui/certd-client/src/views/crud/debug/index.vue b/packages/ui/certd-client/src/views/crud/debug/index.vue new file mode 100644 index 00000000..35238852 --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/debug/index.vue @@ -0,0 +1,28 @@ + + + diff --git a/packages/ui/certd-client/src/views/crud/debug/mock.ts b/packages/ui/certd-client/src/views/crud/debug/mock.ts new file mode 100644 index 00000000..1321af6b --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/debug/mock.ts @@ -0,0 +1,20 @@ +import mockUtil from "/src/mock/base"; +const options: any = { + name: "DebugSelect", + idGenerator: 0, + copyTimes: 500 +}; +const list: any = [ + { + statusRemote: "1" + }, + { + statusRemote: "2" + }, + { + statusRemote: "3" + } +]; +options.list = list; +const mock = mockUtil.buildMock(options); +export default mock; diff --git a/packages/ui/certd-client/src/views/crud/debug/select/index.vue b/packages/ui/certd-client/src/views/crud/debug/select/index.vue deleted file mode 100644 index e7105c52..00000000 --- a/packages/ui/certd-client/src/views/crud/debug/select/index.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - diff --git a/packages/ui/certd-client/src/views/crud/debug/select/mock.js b/packages/ui/certd-client/src/views/crud/debug/select/mock.js deleted file mode 100644 index 2cb1e175..00000000 --- a/packages/ui/certd-client/src/views/crud/debug/select/mock.js +++ /dev/null @@ -1,9 +0,0 @@ -import mockUtil from "/src/mock/base"; -const options = { - name: "DebugSelect", - idGenerator: 0 -}; -const list = []; -options.list = list; -const mock = mockUtil.buildMock(options); -export default mock; diff --git a/packages/ui/certd-client/src/views/crud/dict/cloneable/api.js b/packages/ui/certd-client/src/views/crud/dict/cloneable/api.ts similarity index 73% rename from packages/ui/certd-client/src/views/crud/dict/cloneable/api.js rename to packages/ui/certd-client/src/views/crud/dict/cloneable/api.ts index a6c63db5..625829bc 100644 --- a/packages/ui/certd-client/src/views/crud/dict/cloneable/api.js +++ b/packages/ui/certd-client/src/views/crud/dict/cloneable/api.ts @@ -1,7 +1,7 @@ import { requestForMock } from "/src/api/service"; const request = requestForMock; const apiPrefix = "/mock/DictCloneable"; -export function GetList(query) { +export function GetList(query: any) { return request({ url: apiPrefix + "/page", method: "get", @@ -9,7 +9,7 @@ export function GetList(query) { }); } -export function AddObj(obj) { +export function AddObj(obj: any) { return request({ url: apiPrefix + "/add", method: "post", @@ -17,7 +17,7 @@ export function AddObj(obj) { }); } -export function UpdateObj(obj) { +export function UpdateObj(obj: any) { return request({ url: apiPrefix + "/update", method: "post", @@ -25,7 +25,7 @@ export function UpdateObj(obj) { }); } -export function DelObj(id) { +export function DelObj(id: any) { return request({ url: apiPrefix + "/delete", method: "post", @@ -33,9 +33,9 @@ export function DelObj(id) { }); } -export function GetObj(id) { +export function GetObj(id: any) { return request({ - url: apiPrefix + "/info", + url: apiPrefix + "/get", method: "get", params: { id } }); diff --git a/packages/ui/certd-client/src/views/crud/dict/cloneable/crud.jsx b/packages/ui/certd-client/src/views/crud/dict/cloneable/crud.tsx similarity index 77% rename from packages/ui/certd-client/src/views/crud/dict/cloneable/crud.jsx rename to packages/ui/certd-client/src/views/crud/dict/cloneable/crud.tsx index 4ad17c78..72442e3a 100644 --- a/packages/ui/certd-client/src/views/crud/dict/cloneable/crud.jsx +++ b/packages/ui/certd-client/src/views/crud/dict/cloneable/crud.tsx @@ -1,18 +1,18 @@ import * as api from "./api"; -import { dict } from "@fast-crud/fast-crud"; -export default function ({ expose }) { - const pageRequest = async (query) => { +import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes, ValueChangeContext } from "@fast-crud/fast-crud"; +export default function createCrudOptions({}: CreateCrudOptionsProps): CreateCrudOptionsRet { + const pageRequest = async (query: UserPageQuery): Promise => { return await api.GetList(query); }; - const editRequest = async ({ form, row }) => { + const editRequest = async ({ form, row }: EditReq) => { form.id = row.id; return await api.UpdateObj(form); }; - const delRequest = async ({ row }) => { + const delRequest = async ({ row }: DelReq) => { return await api.DelObj(row.id); }; - const addRequest = async ({ form }) => { + const addRequest = async ({ form }: AddReq) => { return await api.AddObj(form); }; @@ -60,7 +60,7 @@ export default function ({ expose }) { name: "a-switch", vModel: "checked" }, - valueChange({ row, getComponentRef }) { + valueChange({ row, getComponentRef }: ValueChangeContext) { // 这里不能使用remoteDict,因为在分发时已经clone到form配置中了 // 这里dict修改不会影响列里面的数据 const targetDict = getComponentRef("remote").dict; @@ -73,7 +73,7 @@ export default function ({ expose }) { name: "a-switch", vModel: "checked" }, - valueChange({ form, getComponentRef }) { + valueChange({ form, getComponentRef }: ValueChangeContext) { // 这里不能使用remoteDict,因为在分发时已经clone到form配置中了 // 这里dict修改不会影响列里面的数据 const targetDict = getComponentRef("remote").dict; diff --git a/packages/ui/certd-client/src/views/crud/dict/cloneable/index.vue b/packages/ui/certd-client/src/views/crud/dict/cloneable/index.vue index 4850b620..89ce6c7a 100644 --- a/packages/ui/certd-client/src/views/crud/dict/cloneable/index.vue +++ b/packages/ui/certd-client/src/views/crud/dict/cloneable/index.vue @@ -1,42 +1,35 @@ - diff --git a/packages/ui/certd-client/src/views/crud/feature/export/mock.ts b/packages/ui/certd-client/src/views/crud/feature/export/mock.ts new file mode 100644 index 00000000..fc4e44e2 --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/feature/export/mock.ts @@ -0,0 +1,31 @@ +import mockUtil from "/src/mock/base"; +const options: any = { + name: "FeatureExport", + idGenerator: 0 +}; +const list = [ + { + text: "测试文本1", + radio: "1", + multi: ["1", "2"], + date: 1111111222222 + }, + { + text: "测试文本2", + radio: "2", + multi: ["0", "2"], + date: 123123234433 + }, + { + text: "测试文本3" + }, + { + text: "测试文本4" + }, + { + text: "测试文本5" + } +]; +options.list = list; +const mock = mockUtil.buildMock(options); +export default mock; diff --git a/packages/ui/certd-client/src/views/crud/feature/filter/api.js b/packages/ui/certd-client/src/views/crud/feature/filter/api.ts similarity index 73% rename from packages/ui/certd-client/src/views/crud/feature/filter/api.js rename to packages/ui/certd-client/src/views/crud/feature/filter/api.ts index 6970dae3..e4093938 100644 --- a/packages/ui/certd-client/src/views/crud/feature/filter/api.js +++ b/packages/ui/certd-client/src/views/crud/feature/filter/api.ts @@ -1,7 +1,7 @@ import { requestForMock } from "/src/api/service"; const request = requestForMock; const apiPrefix = "/mock/FeatureFilter"; -export function GetList(query) { +export function GetList(query: any) { return request({ url: apiPrefix + "/page", method: "get", @@ -9,7 +9,7 @@ export function GetList(query) { }); } -export function AddObj(obj) { +export function AddObj(obj: any) { return request({ url: apiPrefix + "/add", method: "post", @@ -17,7 +17,7 @@ export function AddObj(obj) { }); } -export function UpdateObj(obj) { +export function UpdateObj(obj: any) { return request({ url: apiPrefix + "/update", method: "post", @@ -25,7 +25,7 @@ export function UpdateObj(obj) { }); } -export function DelObj(id) { +export function DelObj(id: any) { return request({ url: apiPrefix + "/delete", method: "post", @@ -33,9 +33,9 @@ export function DelObj(id) { }); } -export function GetObj(id) { +export function GetObj(id: any) { return request({ - url: apiPrefix + "/info", + url: apiPrefix + "/get", method: "get", params: { id } }); diff --git a/packages/ui/certd-client/src/views/crud/feature/filter/crud.jsx b/packages/ui/certd-client/src/views/crud/feature/filter/crud.jsx deleted file mode 100644 index 672d8911..00000000 --- a/packages/ui/certd-client/src/views/crud/feature/filter/crud.jsx +++ /dev/null @@ -1,70 +0,0 @@ -import * as api from "./api"; -import { dict } from "@fast-crud/fast-crud"; -import { ref } from "vue"; -export default function ({ expose }) { - const pageRequest = async (query) => { - return await api.GetList(query); - }; - const editRequest = async ({ form, row }) => { - form.id = row.id; - return await api.UpdateObj(form); - }; - const delRequest = async ({ row }) => { - return await api.DelObj(row.id); - }; - - const addRequest = async ({ form }) => { - return await api.AddObj(form); - }; - return { - crudOptions: { - request: { - pageRequest, - addRequest, - editRequest, - delRequest - }, - table: { - // 表头过滤改变事件 - onFilterChange(e) { - console.log("onFilterChange", e); - } - }, - columns: { - id: { - title: "ID", - key: "id", - type: "number", - column: { - width: 50 - }, - form: { - show: false - } - }, - radio: { - title: "状态", - search: { show: true }, - type: "dict-radio", - dict: dict({ - url: "/mock/dicts/OpenStatusEnum?single" - }), - column: { - filters: [ - { text: "开", value: "1" }, - { text: "关", value: "0" }, - { text: "停", value: "2" } - ], - // specify the condition of filtering result - // here is that finding the name started with `value` - onFilter: (value, record) => { - return record.radio === value; - }, - sorter: (a, b) => a.radio - b.radio, - sortDirections: ["descend"] - } - } - } - } - }; -} diff --git a/packages/ui/certd-client/src/views/crud/feature/search/crud.jsx b/packages/ui/certd-client/src/views/crud/feature/filter/crud.tsx similarity index 50% rename from packages/ui/certd-client/src/views/crud/feature/search/crud.jsx rename to packages/ui/certd-client/src/views/crud/feature/filter/crud.tsx index 06139536..c480e862 100644 --- a/packages/ui/certd-client/src/views/crud/feature/search/crud.jsx +++ b/packages/ui/certd-client/src/views/crud/feature/filter/crud.tsx @@ -1,21 +1,22 @@ import * as api from "./api"; -import { dict } from "@fast-crud/fast-crud"; -import { ref } from "vue"; -export default function ({ expose }) { - const pageRequest = async (query) => { +import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud"; + +export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet { + const pageRequest = async (query: UserPageQuery): Promise => { return await api.GetList(query); }; - const editRequest = async ({ form, row }) => { + const editRequest = async ({ form, row }: EditReq) => { form.id = row.id; return await api.UpdateObj(form); }; - const delRequest = async ({ row }) => { + const delRequest = async ({ row }: DelReq) => { return await api.DelObj(row.id); }; - const addRequest = async ({ form }) => { + const addRequest = async ({ form }: AddReq) => { return await api.AddObj(form); }; + return { crudOptions: { request: { @@ -26,29 +27,14 @@ export default function ({ expose }) { }, table: { // 表头过滤改变事件 - onFilterChange(e) { - console.log("onFilterChange", e); - } - }, - search: { - initialForm: { - radio: "0" - }, - buttons: { - custom: { - text: "自定义", - show: true, - order: 3, - icon: { - icon: "ant-design:search", - style: { - "font-size": "16px" - } - }, - click() { - console.log("点击了自定义按钮"); + onFilterChange(filters: any) { + console.log("onFilterChange", filters); + crudExpose.setSearchFormData({ + form: { + remote: filters.remote } - } + }); + crudExpose.doRefresh(); } }, columns: { @@ -64,7 +50,7 @@ export default function ({ expose }) { } }, radio: { - title: "状态", + title: "本地过滤", search: { show: true }, type: "dict-radio", dict: dict({ @@ -78,12 +64,32 @@ export default function ({ expose }) { ], // specify the condition of filtering result // here is that finding the name started with `value` - onFilter: (value, record) => { + onFilter: (value: any, record: any) => { return record.radio === value; }, - sorter: (a, b) => a.radio - b.radio, + sorter: (a: any, b: any) => a.radio - b.radio, sortDirections: ["descend"] } + }, + remote: { + title: "支持服务端过滤", + search: { + show: true, + component: { + mode: "multiple" + } + }, + type: "dict-radio", + dict: dict({ + url: "/mock/dicts/OpenStatusEnum?single" + }), + column: { + filters: [ + { text: "开", value: "1" }, + { text: "关", value: "0" }, + { text: "停", value: "2" } + ] + } } } } diff --git a/packages/ui/certd-client/src/views/crud/feature/filter/index.vue b/packages/ui/certd-client/src/views/crud/feature/filter/index.vue index 7205a947..81a2eabd 100644 --- a/packages/ui/certd-client/src/views/crud/feature/filter/index.vue +++ b/packages/ui/certd-client/src/views/crud/feature/filter/index.vue @@ -4,31 +4,18 @@ - diff --git a/packages/ui/certd-client/src/views/crud/feature/header/mock.ts b/packages/ui/certd-client/src/views/crud/feature/header/mock.ts new file mode 100644 index 00000000..a7db8232 --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/feature/header/mock.ts @@ -0,0 +1,14 @@ +// @ts-ignore +import mockUtil from "/src/mock/base"; +const options: any = { + name: "FeatureHeader", + idGenerator: 0 +}; +const list = [ + { + text: "上面自定义表头" + } +]; +options.list = list; +const mock = mockUtil.buildMock(options); +export default mock; diff --git a/packages/ui/certd-client/src/views/crud/feature/height/api.js b/packages/ui/certd-client/src/views/crud/feature/height/api.ts similarity index 73% rename from packages/ui/certd-client/src/views/crud/feature/height/api.js rename to packages/ui/certd-client/src/views/crud/feature/height/api.ts index 4f5c7d11..541c533d 100644 --- a/packages/ui/certd-client/src/views/crud/feature/height/api.js +++ b/packages/ui/certd-client/src/views/crud/feature/height/api.ts @@ -1,7 +1,7 @@ import { requestForMock } from "/src/api/service"; const request = requestForMock; const apiPrefix = "/mock/ComponentHeight"; -export function GetList(query) { +export function GetList(query: any) { return request({ url: apiPrefix + "/page", method: "get", @@ -9,7 +9,7 @@ export function GetList(query) { }); } -export function AddObj(obj) { +export function AddObj(obj: any) { return request({ url: apiPrefix + "/add", method: "post", @@ -17,7 +17,7 @@ export function AddObj(obj) { }); } -export function UpdateObj(obj) { +export function UpdateObj(obj: any) { return request({ url: apiPrefix + "/update", method: "post", @@ -25,7 +25,7 @@ export function UpdateObj(obj) { }); } -export function DelObj(id) { +export function DelObj(id: any) { return request({ url: apiPrefix + "/delete", method: "post", @@ -33,9 +33,9 @@ export function DelObj(id) { }); } -export function GetObj(id) { +export function GetObj(id: any) { return request({ - url: apiPrefix + "/info", + url: apiPrefix + "/get", method: "get", params: { id } }); diff --git a/packages/ui/certd-client/src/views/crud/feature/height/crud.jsx b/packages/ui/certd-client/src/views/crud/feature/height/crud.tsx similarity index 66% rename from packages/ui/certd-client/src/views/crud/feature/height/crud.jsx rename to packages/ui/certd-client/src/views/crud/feature/height/crud.tsx index ecd5350d..4bf77358 100644 --- a/packages/ui/certd-client/src/views/crud/feature/height/crud.jsx +++ b/packages/ui/certd-client/src/views/crud/feature/height/crud.tsx @@ -1,20 +1,22 @@ import * as api from "./api"; -import { dict } from "@fast-crud/fast-crud"; -export default function ({ expose }) { - const pageRequest = async (query) => { +import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud"; + +export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet { + const pageRequest = async (query: UserPageQuery): Promise => { return await api.GetList(query); }; - const editRequest = async ({ form, row }) => { + const editRequest = async ({ form, row }: EditReq) => { form.id = row.id; return await api.UpdateObj(form); }; - const delRequest = async ({ row }) => { + const delRequest = async ({ row }: DelReq) => { return await api.DelObj(row.id); }; - const addRequest = async ({ form }) => { + const addRequest = async ({ form }: AddReq) => { return await api.AddObj(form); }; + return { crudOptions: { request: { diff --git a/packages/ui/certd-client/src/views/crud/feature/height/index.vue b/packages/ui/certd-client/src/views/crud/feature/height/index.vue index 34e52d62..01c59c98 100644 --- a/packages/ui/certd-client/src/views/crud/feature/height/index.vue +++ b/packages/ui/certd-client/src/views/crud/feature/height/index.vue @@ -4,31 +4,18 @@ - diff --git a/packages/ui/certd-client/src/views/crud/feature/local-import/local.vue b/packages/ui/certd-client/src/views/crud/feature/local-import/local.vue new file mode 100644 index 00000000..88fc1585 --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/feature/local-import/local.vue @@ -0,0 +1,57 @@ + + + + diff --git a/packages/ui/certd-client/src/views/crud/feature/local-v-model/crud.jsx b/packages/ui/certd-client/src/views/crud/feature/local-v-model/crud.jsx deleted file mode 100644 index 1dbe46ff..00000000 --- a/packages/ui/certd-client/src/views/crud/feature/local-v-model/crud.jsx +++ /dev/null @@ -1,32 +0,0 @@ -import { uiContext } from "@fast-crud/fast-crud"; - -export default function ({ expose }) { - return { - crudOptions: { - mode:{ - name:'local', - isMergeWhenUpdate:true, - isAppendWhenAdd:true - }, - search: { - show: false - }, - toolbar:{ - show:false, - }, - pagination:{ - show:false - }, - columns: { - name: { - type: "text", - title: "联系人姓名" - }, - mobile: { - type: "text", - title: "联系人手机号码" - } - } - } - }; -} diff --git a/packages/ui/certd-client/src/views/crud/feature/local-v-model/crud.tsx b/packages/ui/certd-client/src/views/crud/feature/local-v-model/crud.tsx new file mode 100644 index 00000000..afc6e8bb --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/feature/local-v-model/crud.tsx @@ -0,0 +1,45 @@ +import { CreateCrudOptionsProps, CreateCrudOptionsRet, uiContext } from "@fast-crud/fast-crud"; + +export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet { + return { + crudOptions: { + mode: { + name: "local", + isMergeWhenUpdate: true, + isAppendWhenAdd: true + }, + //启用addRow按钮 + actionbar: { buttons: { add: { show: false }, addRow: { show: true } } }, + table: { + remove: { + //删除数据后不请求后台 + refreshTable: false + }, + editable: { + enabled: true, + mode: "row", + activeTrigger: false + } + }, + search: { + show: false + }, + toolbar: { + show: false + }, + pagination: { + show: false + }, + columns: { + name: { + type: "text", + title: "联系人姓名" + }, + mobile: { + type: "text", + title: "联系人手机号码" + } + } + } + }; +} diff --git a/packages/ui/certd-client/src/views/crud/feature/local-v-model/index.vue b/packages/ui/certd-client/src/views/crud/feature/local-v-model/index.vue index 01e615f5..03a65212 100644 --- a/packages/ui/certd-client/src/views/crud/feature/local-v-model/index.vue +++ b/packages/ui/certd-client/src/views/crud/feature/local-v-model/index.vue @@ -1,51 +1,47 @@ - diff --git a/packages/ui/certd-client/src/views/crud/feature/local-v-model/local.vue b/packages/ui/certd-client/src/views/crud/feature/local-v-model/local.vue index 0110ae27..405e2959 100644 --- a/packages/ui/certd-client/src/views/crud/feature/local-v-model/local.vue +++ b/packages/ui/certd-client/src/views/crud/feature/local-v-model/local.vue @@ -1,63 +1,53 @@ - diff --git a/packages/ui/certd-client/src/views/crud/feature/search-multi/mock.js b/packages/ui/certd-client/src/views/crud/feature/search-multi/mock.ts similarity index 91% rename from packages/ui/certd-client/src/views/crud/feature/search-multi/mock.js rename to packages/ui/certd-client/src/views/crud/feature/search-multi/mock.ts index 0a253152..d1e4ae98 100644 --- a/packages/ui/certd-client/src/views/crud/feature/search-multi/mock.js +++ b/packages/ui/certd-client/src/views/crud/feature/search-multi/mock.ts @@ -1,5 +1,5 @@ import mockUtil from "/src/mock/base"; -const options = { +const options: any = { name: "FeatureSearchMulti", idGenerator: 0 }; diff --git a/packages/ui/certd-client/src/views/crud/feature/search/api.js b/packages/ui/certd-client/src/views/crud/feature/search/api.js deleted file mode 100644 index 279509cc..00000000 --- a/packages/ui/certd-client/src/views/crud/feature/search/api.js +++ /dev/null @@ -1,42 +0,0 @@ -import { requestForMock } from "/src/api/service"; -const request = requestForMock; -const apiPrefix = "/mock/FeatureSearch"; -export function GetList(query) { - return request({ - url: apiPrefix + "/page", - method: "get", - data: query - }); -} - -export function AddObj(obj) { - return request({ - url: apiPrefix + "/add", - method: "post", - data: obj - }); -} - -export function UpdateObj(obj) { - return request({ - url: apiPrefix + "/update", - method: "post", - data: obj - }); -} - -export function DelObj(id) { - return request({ - url: apiPrefix + "/delete", - method: "post", - params: { id } - }); -} - -export function GetObj(id) { - return request({ - url: apiPrefix + "/info", - method: "get", - params: { id } - }); -} diff --git a/packages/ui/certd-client/src/views/crud/feature/column-resize/api.js b/packages/ui/certd-client/src/views/crud/feature/search/api.ts similarity index 73% rename from packages/ui/certd-client/src/views/crud/feature/column-resize/api.js rename to packages/ui/certd-client/src/views/crud/feature/search/api.ts index 279509cc..7a1e4eb6 100644 --- a/packages/ui/certd-client/src/views/crud/feature/column-resize/api.js +++ b/packages/ui/certd-client/src/views/crud/feature/search/api.ts @@ -1,7 +1,7 @@ import { requestForMock } from "/src/api/service"; const request = requestForMock; const apiPrefix = "/mock/FeatureSearch"; -export function GetList(query) { +export function GetList(query: any) { return request({ url: apiPrefix + "/page", method: "get", @@ -9,7 +9,7 @@ export function GetList(query) { }); } -export function AddObj(obj) { +export function AddObj(obj: any) { return request({ url: apiPrefix + "/add", method: "post", @@ -17,7 +17,7 @@ export function AddObj(obj) { }); } -export function UpdateObj(obj) { +export function UpdateObj(obj: any) { return request({ url: apiPrefix + "/update", method: "post", @@ -25,7 +25,7 @@ export function UpdateObj(obj) { }); } -export function DelObj(id) { +export function DelObj(id: any) { return request({ url: apiPrefix + "/delete", method: "post", @@ -33,9 +33,9 @@ export function DelObj(id) { }); } -export function GetObj(id) { +export function GetObj(id: any) { return request({ - url: apiPrefix + "/info", + url: apiPrefix + "/get", method: "get", params: { id } }); diff --git a/packages/ui/certd-client/src/views/crud/feature/search/crud.tsx b/packages/ui/certd-client/src/views/crud/feature/search/crud.tsx new file mode 100644 index 00000000..6bac155c --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/feature/search/crud.tsx @@ -0,0 +1,146 @@ +import * as api from "./api"; +import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud"; +import { computed } from "vue"; +import { message } from "ant-design-vue"; + +export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet { + const pageRequest = async (query: UserPageQuery): Promise => { + return await api.GetList(query); + }; + const editRequest = async ({ form, row }: EditReq) => { + form.id = row.id; + return await api.UpdateObj(form); + }; + const delRequest = async ({ row }: DelReq) => { + return await api.DelObj(row.id); + }; + + const addRequest = async ({ form }: AddReq) => { + return await api.AddObj(form); + }; + + const statusRef = dict({ + url: "/mock/dicts/OpenStatusEnum?single" + }); + return { + crudOptions: { + request: { + pageRequest, + addRequest, + editRequest, + delRequest + }, + search: { + validate: true, + initialForm: { + //查询默认值 + radio: "1" + }, + buttons: { + custom: { + text: "自定义", + show: true, + order: 3, + class: "fs-test", + icon: { + icon: "ant-design:search", + style: { + "font-size": "16px" + } + }, + click() { + console.log("点击了自定义按钮"); + } + } + } + }, + tabs: { + name: "radio", + show: true, + type: "card", + options: computed(() => { + return statusRef.data; + }) + }, + columns: { + id: { + title: "ID", + key: "id", + type: "number", + column: { + width: 50 + }, + form: { + show: false + } + }, + radio: { + title: "状态", + search: { + show: true, + rules: [ + { + required: true, + message: "请选择状态" + } + ] + }, + type: "dict-radio", + dict: statusRef + }, + text: { + title: "默认值", + type: "text", + search: { + show: true, + value: "1" + } + }, + customRender: { + title: "自定义render", + search: { + show: true + }, + type: "text", + form: { + component: { + vModel: "checked", + render({ attrs }) { + return ; + }, + title: "自定义render,可以继承component的属性,可以触发search的自动查询" + } + } + }, + customRender2: { + title: "自定义render2", + search: { + show: true + }, + type: "text", + form: { + component: { + render({ form }) { + //注意此处的v-model写法 + return ; + } + } + } + }, + customRender3: { + title: "自定义render3", + search: { + show: true + }, + type: "text", + form: { + render({ form }) { + //注意此处的v-model写法 + return ; + } + } + } + } + } + }; +} diff --git a/packages/ui/certd-client/src/views/crud/feature/search/index.vue b/packages/ui/certd-client/src/views/crud/feature/search/index.vue index e36b8dff..653a29f3 100644 --- a/packages/ui/certd-client/src/views/crud/feature/search/index.vue +++ b/packages/ui/certd-client/src/views/crud/feature/search/index.vue @@ -10,46 +10,33 @@ - diff --git a/packages/ui/certd-client/src/views/crud/feature/tabs/mock.ts b/packages/ui/certd-client/src/views/crud/feature/tabs/mock.ts new file mode 100644 index 00000000..af16b4a0 --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/feature/tabs/mock.ts @@ -0,0 +1,20 @@ +// @ts-ignore +import mockUtil from "/src/mock/base"; +const options: any = { + name: "FeatureTabs", + idGenerator: 0 +}; +const list = [ + { + radio: "1" + }, + { + radio: "2" + }, + { + radio: "0" + } +]; +options.list = list; +const mock = mockUtil.buildMock(options); +export default mock; diff --git a/packages/ui/certd-client/src/views/crud/feature/tree/api.js b/packages/ui/certd-client/src/views/crud/feature/tree/api.ts similarity index 72% rename from packages/ui/certd-client/src/views/crud/feature/tree/api.js rename to packages/ui/certd-client/src/views/crud/feature/tree/api.ts index 77163398..e0ba2cff 100644 --- a/packages/ui/certd-client/src/views/crud/feature/tree/api.js +++ b/packages/ui/certd-client/src/views/crud/feature/tree/api.ts @@ -1,7 +1,7 @@ import { requestForMock } from "/src/api/service"; const request = requestForMock; const apiPrefix = "/mock/FeatureTree"; -export function GetList(query) { +export function GetList(query: any) { return request({ url: apiPrefix + "/page", method: "get", @@ -9,7 +9,7 @@ export function GetList(query) { }); } -export function AddObj(obj) { +export function AddObj(obj: any) { return request({ url: apiPrefix + "/add", method: "post", @@ -17,7 +17,7 @@ export function AddObj(obj) { }); } -export function UpdateObj(obj) { +export function UpdateObj(obj: any) { return request({ url: apiPrefix + "/update", method: "post", @@ -25,7 +25,7 @@ export function UpdateObj(obj) { }); } -export function DelObj(id) { +export function DelObj(id: any) { return request({ url: apiPrefix + "/delete", method: "post", @@ -33,15 +33,15 @@ export function DelObj(id) { }); } -export function GetObj(id) { +export function GetObj(id: any) { return request({ - url: apiPrefix + "/info", + url: apiPrefix + "/get", method: "get", params: { id } }); } -export function BatchDelete(ids) { +export function BatchDelete(ids: any) { return request({ url: apiPrefix + "/batchDelete", method: "post", diff --git a/packages/ui/certd-client/src/views/crud/feature/tree/crud.jsx b/packages/ui/certd-client/src/views/crud/feature/tree/crud.tsx similarity index 77% rename from packages/ui/certd-client/src/views/crud/feature/tree/crud.jsx rename to packages/ui/certd-client/src/views/crud/feature/tree/crud.tsx index b47c3fa9..c62be79f 100644 --- a/packages/ui/certd-client/src/views/crud/feature/tree/crud.jsx +++ b/packages/ui/certd-client/src/views/crud/feature/tree/crud.tsx @@ -1,25 +1,26 @@ import * as api from "./api"; -import { dict } from "@fast-crud/fast-crud"; +import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, dict, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud"; import { ref } from "vue"; -export default function ({ expose }) { - const pageRequest = async (query) => { +export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet { + const pageRequest = async (query: UserPageQuery): Promise => { return await api.GetList(query); }; - const editRequest = async ({ form, row }) => { + const editRequest = async ({ form, row }: EditReq) => { form.id = row.id; return await api.UpdateObj(form); }; - const delRequest = async ({ row }) => { + const delRequest = async ({ row }: DelReq) => { return await api.DelObj(row.id); }; - const addRequest = async ({ form }) => { + const addRequest = async ({ form }: AddReq) => { return await api.AddObj(form); }; + const selectedRowKeys = ref([]); - const onSelectChange = (changed) => { + const onSelectChange = (changed: any) => { console.log("selection", changed); selectedRowKeys.value = changed; }; @@ -75,6 +76,7 @@ export default function ({ expose }) { }, amount: { title: "金额(元)", + type: "number", key: "amount" }, radio: { diff --git a/packages/ui/certd-client/src/views/crud/feature/tree/index.vue b/packages/ui/certd-client/src/views/crud/feature/tree/index.vue index b9240eac..95e50539 100644 --- a/packages/ui/certd-client/src/views/crud/feature/tree/index.vue +++ b/packages/ui/certd-client/src/views/crud/feature/tree/index.vue @@ -10,32 +10,19 @@ - diff --git a/packages/ui/certd-client/src/views/crud/form/render/mock.ts b/packages/ui/certd-client/src/views/crud/form/render/mock.ts new file mode 100644 index 00000000..f725d086 --- /dev/null +++ b/packages/ui/certd-client/src/views/crud/form/render/mock.ts @@ -0,0 +1,22 @@ +import mockUtil from "/src/mock/base"; + +const options: any = { + name: "FormRender", + idGenerator: 0 +}; +const list = [ + { + name: "王小虎", + conditionalRender: "conditionalRender" + }, + { + name: "张三", + conditionalRender: "conditionalRender" + } +]; + +options.list = list; +options.copyTimes = 1000; +const mock = mockUtil.buildMock(options); + +export default mock; diff --git a/packages/ui/certd-client/src/views/crud/form/reset/api.js b/packages/ui/certd-client/src/views/crud/form/reset/api.ts similarity index 72% rename from packages/ui/certd-client/src/views/crud/form/reset/api.js rename to packages/ui/certd-client/src/views/crud/form/reset/api.ts index 52a5ff5b..015c7604 100644 --- a/packages/ui/certd-client/src/views/crud/form/reset/api.js +++ b/packages/ui/certd-client/src/views/crud/form/reset/api.ts @@ -1,7 +1,7 @@ import { requestForMock } from "/src/api/service"; const request = requestForMock; const apiPrefix = "/mock/formReset"; -export function GetList(query) { +export function GetList(query: any) { return request({ url: apiPrefix + "/page", method: "get", @@ -9,7 +9,7 @@ export function GetList(query) { }); } -export function AddObj(obj) { +export function AddObj(obj: any) { return request({ url: apiPrefix + "/add", method: "post", @@ -17,7 +17,7 @@ export function AddObj(obj) { }); } -export function UpdateObj(obj) { +export function UpdateObj(obj: any) { return request({ url: apiPrefix + "/update", method: "post", @@ -25,7 +25,7 @@ export function UpdateObj(obj) { }); } -export function DelObj(id) { +export function DelObj(id: any) { return request({ url: apiPrefix + "/delete", method: "post", @@ -33,9 +33,9 @@ export function DelObj(id) { }); } -export function GetObj(id) { +export function GetObj(id: any) { return request({ - url: apiPrefix + "/info", + url: apiPrefix + "/get", method: "get", params: { id } }); diff --git a/packages/ui/certd-client/src/views/crud/form/reset/crud.jsx b/packages/ui/certd-client/src/views/crud/form/reset/crud.tsx similarity index 61% rename from packages/ui/certd-client/src/views/crud/form/reset/crud.jsx rename to packages/ui/certd-client/src/views/crud/form/reset/crud.tsx index 1a4f1df2..6c9b8936 100644 --- a/packages/ui/certd-client/src/views/crud/form/reset/crud.jsx +++ b/packages/ui/certd-client/src/views/crud/form/reset/crud.tsx @@ -1,19 +1,21 @@ import * as api from "./api"; -export default function ({ expose }) { - const pageRequest = async (query) => { +import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud"; +export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet { + const pageRequest = async (query: UserPageQuery): Promise => { return await api.GetList(query); }; - const editRequest = async ({ form, row }) => { + const editRequest = async ({ form, row }: EditReq) => { form.id = row.id; return await api.UpdateObj(form); }; - const delRequest = async ({ row }) => { + const delRequest = async ({ row }: DelReq) => { return await api.DelObj(row.id); }; - const addRequest = async ({ form }) => { + const addRequest = async ({ form }: AddReq) => { return await api.AddObj(form); }; + return { crudOptions: { request: { @@ -31,9 +33,9 @@ export default function ({ expose }) { reset: { text: "重置", order: -1, - click(value) { - console.log("on reset", value); - expose.getFormRef().reset(); + click(context) { + console.log("on reset", context); + crudExpose.getFormRef().reset(); } } } diff --git a/packages/ui/certd-client/src/views/crud/form/reset/index.vue b/packages/ui/certd-client/src/views/crud/form/reset/index.vue index 8c2e77e6..3266819e 100644 --- a/packages/ui/certd-client/src/views/crud/form/reset/index.vue +++ b/packages/ui/certd-client/src/views/crud/form/reset/index.vue @@ -4,33 +4,19 @@ - diff --git a/packages/ui/certd-client/src/views/crud/form/base/mock.js b/packages/ui/certd-client/src/views/crud/form/view/mock.ts similarity index 98% rename from packages/ui/certd-client/src/views/crud/form/base/mock.js rename to packages/ui/certd-client/src/views/crud/form/view/mock.ts index bb0fe7b9..7678f128 100644 --- a/packages/ui/certd-client/src/views/crud/form/base/mock.js +++ b/packages/ui/certd-client/src/views/crud/form/view/mock.ts @@ -1,7 +1,7 @@ import mockUtil from "/src/mock/base"; -const options = { - name: "FormBase", +const options: any = { + name: "FormView", idGenerator: 0 }; const list = [ @@ -298,7 +298,7 @@ const mock = mockUtil.buildMock(options); mock.push({ path: "/select/cascadeData", method: "get", - handle(req) { + handle(req: any) { return { code: 0, msg: "success", diff --git a/packages/ui/certd-client/src/views/crud/home/index.vue b/packages/ui/certd-client/src/views/crud/home/index.vue deleted file mode 100644 index 27445779..00000000 --- a/packages/ui/certd-client/src/views/crud/home/index.vue +++ /dev/null @@ -1,15 +0,0 @@ - - - - diff --git a/packages/ui/certd-client/src/views/crud/home/page-cover/helper.js b/packages/ui/certd-client/src/views/crud/home/page-cover/helper.js deleted file mode 100644 index 5c955ba6..00000000 --- a/packages/ui/certd-client/src/views/crud/home/page-cover/helper.js +++ /dev/null @@ -1,31 +0,0 @@ -export default { - crud: ` columns: [ - date:{ - title: '日期', //字段名称 - type: 'date', //字段类型,添加、修改、查询将自动生成相应表单组件 - }, - status: { - title: '状态', - type: 'dict-select', //选择框,默认单选 - dict: dict({ url: '/dicts/OpenStatusEnum' })//远程数据字典 - }, - province: { - title: '地区', - type: 'dict-select', //选择框 - form: { //表单组件自定义配置,此处配置选择框为多选 - component: { //支持任何v-model组件 - filterable: true, multiple: true, clearable: true - } - }, - dict: dict({ - data: [ //本地数据字典 - { value: 'sz', label: '深圳' }, - { value: 'gz', label: '广州' }, - { value: 'wh', label: '武汉' }, - { value: 'sh', label: '上海' } - ] - }) - } - ] - ` -}; diff --git a/packages/ui/certd-client/src/views/crud/home/page-cover/image/crud.png b/packages/ui/certd-client/src/views/crud/home/page-cover/image/crud.png deleted file mode 100644 index 3dfb047d..00000000 Binary files a/packages/ui/certd-client/src/views/crud/home/page-cover/image/crud.png and /dev/null differ diff --git a/packages/ui/certd-client/src/views/crud/home/page-cover/image/darkblue@2x.png b/packages/ui/certd-client/src/views/crud/home/page-cover/image/darkblue@2x.png deleted file mode 100644 index efe1577f..00000000 Binary files a/packages/ui/certd-client/src/views/crud/home/page-cover/image/darkblue@2x.png and /dev/null differ diff --git a/packages/ui/certd-client/src/views/crud/home/page-cover/image/logo.svg b/packages/ui/certd-client/src/views/crud/home/page-cover/image/logo.svg deleted file mode 100644 index 7a33425e..00000000 --- a/packages/ui/certd-client/src/views/crud/home/page-cover/image/logo.svg +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/ui/certd-client/src/views/crud/home/page-cover/index.vue b/packages/ui/certd-client/src/views/crud/home/page-cover/index.vue deleted file mode 100644 index 7c51dea3..00000000 --- a/packages/ui/certd-client/src/views/crud/home/page-cover/index.vue +++ /dev/null @@ -1,139 +0,0 @@ - - - diff --git a/packages/ui/certd-client/src/views/crud/row-handle/dropdown/api.js b/packages/ui/certd-client/src/views/crud/row-handle/dropdown/api.ts similarity index 73% rename from packages/ui/certd-client/src/views/crud/row-handle/dropdown/api.js rename to packages/ui/certd-client/src/views/crud/row-handle/dropdown/api.ts index 3cfd8182..872ce124 100644 --- a/packages/ui/certd-client/src/views/crud/row-handle/dropdown/api.js +++ b/packages/ui/certd-client/src/views/crud/row-handle/dropdown/api.ts @@ -1,7 +1,7 @@ import { requestForMock } from "/src/api/service"; const request = requestForMock; const apiPrefix = "/mock/RowHandleDropdown"; -export function GetList(query) { +export function GetList(query: any) { return request({ url: apiPrefix + "/page", method: "get", @@ -9,7 +9,7 @@ export function GetList(query) { }); } -export function AddObj(obj) { +export function AddObj(obj: any) { return request({ url: apiPrefix + "/add", method: "post", @@ -17,7 +17,7 @@ export function AddObj(obj) { }); } -export function UpdateObj(obj) { +export function UpdateObj(obj: any) { return request({ url: apiPrefix + "/update", method: "post", @@ -25,7 +25,7 @@ export function UpdateObj(obj) { }); } -export function DelObj(id) { +export function DelObj(id: any) { return request({ url: apiPrefix + "/delete", method: "post", @@ -33,9 +33,9 @@ export function DelObj(id) { }); } -export function GetObj(id) { +export function GetObj(id: any) { return request({ - url: apiPrefix + "/info", + url: apiPrefix + "/get", method: "get", params: { id } }); diff --git a/packages/ui/certd-client/src/views/crud/row-handle/dropdown/crud.jsx b/packages/ui/certd-client/src/views/crud/row-handle/dropdown/crud.tsx similarity index 81% rename from packages/ui/certd-client/src/views/crud/row-handle/dropdown/crud.jsx rename to packages/ui/certd-client/src/views/crud/row-handle/dropdown/crud.tsx index 2947b537..5f46713b 100644 --- a/packages/ui/certd-client/src/views/crud/row-handle/dropdown/crud.jsx +++ b/packages/ui/certd-client/src/views/crud/row-handle/dropdown/crud.tsx @@ -1,21 +1,23 @@ import * as api from "./api"; import { dict, compute } from "@fast-crud/fast-crud"; import { message } from "ant-design-vue"; -export default function ({ expose }) { - const pageRequest = async (query) => { +import { AddReq, CreateCrudOptionsProps, CreateCrudOptionsRet, DelReq, EditReq, UserPageQuery, UserPageRes } from "@fast-crud/fast-crud"; +export default function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet { + const pageRequest = async (query: UserPageQuery): Promise => { return await api.GetList(query); }; - const editRequest = async ({ form, row }) => { + const editRequest = async ({ form, row }: EditReq) => { form.id = row.id; return await api.UpdateObj(form); }; - const delRequest = async ({ row }) => { + const delRequest = async ({ row }: DelReq) => { return await api.DelObj(row.id); }; - const addRequest = async ({ form }) => { + const addRequest = async ({ form }: AddReq) => { return await api.AddObj(form); }; + return { crudOptions: { request: { diff --git a/packages/ui/certd-client/src/views/crud/row-handle/dropdown/index.vue b/packages/ui/certd-client/src/views/crud/row-handle/dropdown/index.vue index 45d6937e..dc0cf68e 100644 --- a/packages/ui/certd-client/src/views/crud/row-handle/dropdown/index.vue +++ b/packages/ui/certd-client/src/views/crud/row-handle/dropdown/index.vue @@ -4,31 +4,18 @@ - diff --git a/packages/ui/certd-client/tsconfig.json b/packages/ui/certd-client/tsconfig.json index 3ce206ec..c9ea1dd5 100644 --- a/packages/ui/certd-client/tsconfig.json +++ b/packages/ui/certd-client/tsconfig.json @@ -17,9 +17,11 @@ "baseUrl": ".", "outDir": "./dist/ts", "types": [ + "vite/client", "mocha", "chai", - "node" + "node", + "unplugin-vue-define-options/macros-global" ], "paths": { "/@/*": ["src/*"], diff --git a/packages/ui/certd-client/vite.config.ts b/packages/ui/certd-client/vite.config.ts index 0fa8a851..b2a1592f 100644 --- a/packages/ui/certd-client/vite.config.ts +++ b/packages/ui/certd-client/vite.config.ts @@ -4,6 +4,13 @@ import visualizer from "rollup-plugin-visualizer"; import viteCompression from "vite-plugin-compression"; import PurgeIcons from "vite-plugin-purge-icons"; import * as path from "path"; +import DefineOptions from "unplugin-vue-define-options/vite"; +// import WindiCSS from "vite-plugin-windicss"; +// import { generateModifyVars } from "./build/modify-vars"; +// import { configThemePlugin } from "./build/theme-plugin"; +// import OptimizationPersist from "vite-plugin-optimize-persist"; +// import PkgConfig from "vite-plugin-package-config"; +// https://vitejs.dev/config/ // 增加环境变量 _ process.env.VITE_APP_VERSION = require("./package.json").version; process.env.VITE_APP_BUILD_TIME = require("dayjs")().format("YYYY-M-D HH:mm:ss"); @@ -16,10 +23,11 @@ export default ({ command, mode }) => { if (mode.startsWith("debug")) { devAlias = [ { find: /@fast-crud\/fast-crud\/dist/, replacement: path.resolve("../../fast-crud/src/") }, - { find: /@fast-crud\/fast-crud$/, replacement: path.resolve("../../fast-crud/src/") }, - { find: /@fast-crud\/fast-extends\/dist/, replacement: path.resolve("../../fast-extends/src/") }, - { find: /@fast-crud\/fast-extends$/, replacement: path.resolve("../../fast-extends/src/") }, - { find: /@fast-crud\/ui-antdv$/, replacement: path.resolve("../../ui/ui-antdv/src/") } + // { find: /@fast-crud\/fast-crud$/, replacement: path.resolve("../../fast-crud/src/") }, + { find: /@fast-crud\/fast-extends\/dist/, replacement: path.resolve("../../fast-extends/src/") } + // { find: /@fast-crud\/fast-extends$/, replacement: path.resolve("../../fast-extends/src/") }, + // { find: /@fast-crud\/ui-antdv$/, replacement: path.resolve("../../ui/ui-antdv/src/") }, + // { find: /@fast-crud\/ui-interface$/, replacement: path.resolve("../../ui/ui-interface/src/") } ]; devServerFs = { // 这里配置dev启动时读取的项目根目录 @@ -31,6 +39,7 @@ export default ({ command, mode }) => { return { base: "/", plugins: [ + DefineOptions(), vueJsx(), vue(), // 压缩build后的代码 @@ -51,7 +60,7 @@ export default ({ command, mode }) => { ], esbuild: { drop: command === "build" ? ["debugger"] : [], - // pure: ["console.log", "debugger"], + pure: ["console.log", "debugger"], jsxFactory: "h", jsxFragment: "Fragment" },