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 %>
-
-
-
- We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.
-
-
-
-
-
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 @@
+
+
+
+
+
+ {{ modelValue }}
+
+
+
+
+
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 @@
+
+ 第一个crud
+
+
-
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 @@
CRUD示例【国际化】
-
+
@@ -12,41 +14,24 @@
-
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 @@
ValueChange
+
-
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 @@
+
+
+ 文本类型
+
+ type='text'
+
+
+
+
-
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 @@
+
+
+ 分发时复制Dict
+ 如果你想要表格里同一个字段的dict和form表单同一个字段的dict不一样,就需要分发时复制
+
+
+
-
+
-
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 @@
-
- 将本地crud当做v-model,编辑好之后一并提交,你还可以使用行编辑模式,效果更好
-
+ 将本地crud当做v-model,编辑好之后一并提交,你还可以使用行编辑模式,效果更好
-
+
-
-
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 @@
-
-
-
-
-
- Fast Crud v{{ version }}
-
-
-
面向配置的crud编程,快速开发crud功能
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
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"
},