Merge branch 'master' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into dev
Conflicts: src/views/infra/build/index.vue src/views/mall/product/spu/components/DescriptionForm.vue src/views/mall/product/spu/components/OtherSettingsForm.vue src/views/mall/product/spu/components/ProductPropertyAddForm.vue src/views/mall/product/spu/components/SkuList.vuepull/174/MERGE
commit
b159240824
32
.eslintrc.js
32
.eslintrc.js
|
@ -1,6 +1,4 @@
|
||||||
// @ts-check
|
module.exports = {
|
||||||
const { defineConfig } = require('eslint-define-config')
|
|
||||||
module.exports = defineConfig({
|
|
||||||
root: true,
|
root: true,
|
||||||
env: {
|
env: {
|
||||||
browser: true,
|
browser: true,
|
||||||
|
@ -8,6 +6,7 @@ module.exports = defineConfig({
|
||||||
es6: true
|
es6: true
|
||||||
},
|
},
|
||||||
parser: 'vue-eslint-parser',
|
parser: 'vue-eslint-parser',
|
||||||
|
plugins: ['vue'],
|
||||||
parserOptions: {
|
parserOptions: {
|
||||||
parser: '@typescript-eslint/parser',
|
parser: '@typescript-eslint/parser',
|
||||||
ecmaVersion: 2020,
|
ecmaVersion: 2020,
|
||||||
|
@ -17,16 +16,9 @@ module.exports = defineConfig({
|
||||||
jsx: true
|
jsx: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
extends: [
|
extends: ['plugin:vue/vue3-recommended', 'prettier', 'plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended'],
|
||||||
'plugin:vue/vue3-recommended',
|
|
||||||
'plugin:@typescript-eslint/recommended',
|
|
||||||
'prettier',
|
|
||||||
'plugin:prettier/recommended',
|
|
||||||
'./.eslintrc-auto-import.json'
|
|
||||||
],
|
|
||||||
rules: {
|
rules: {
|
||||||
'vue/script-setup-uses-vars': 'error',
|
'vue/script-setup-uses-vars': 'error',
|
||||||
'vue/no-reserved-component-names': 'off',
|
|
||||||
'@typescript-eslint/ban-ts-ignore': 'off',
|
'@typescript-eslint/ban-ts-ignore': 'off',
|
||||||
'@typescript-eslint/explicit-function-return-type': 'off',
|
'@typescript-eslint/explicit-function-return-type': 'off',
|
||||||
'@typescript-eslint/no-explicit-any': 'off',
|
'@typescript-eslint/no-explicit-any': 'off',
|
||||||
|
@ -39,8 +31,20 @@ module.exports = defineConfig({
|
||||||
'@typescript-eslint/ban-types': 'off',
|
'@typescript-eslint/ban-types': 'off',
|
||||||
'@typescript-eslint/no-non-null-assertion': 'off',
|
'@typescript-eslint/no-non-null-assertion': 'off',
|
||||||
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
||||||
'@typescript-eslint/no-unused-vars': 'error',
|
'@typescript-eslint/no-unused-vars': [
|
||||||
'no-unused-vars': 'error',
|
'error',
|
||||||
|
{
|
||||||
|
argsIgnorePattern: '^_',
|
||||||
|
varsIgnorePattern: '^_'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'no-unused-vars': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
argsIgnorePattern: '^_',
|
||||||
|
varsIgnorePattern: '^_'
|
||||||
|
}
|
||||||
|
],
|
||||||
'space-before-function-paren': 'off',
|
'space-before-function-paren': 'off',
|
||||||
|
|
||||||
'vue/attributes-order': 'off',
|
'vue/attributes-order': 'off',
|
||||||
|
@ -66,4 +70,4 @@ module.exports = defineConfig({
|
||||||
],
|
],
|
||||||
'vue/multi-word-component-names': 'off'
|
'vue/multi-word-component-names': 'off'
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
|
|
|
@ -1,36 +1,98 @@
|
||||||
{
|
{
|
||||||
"typescript.tsdk": "node_modules/typescript/lib",
|
"typescript.tsdk": "./node_modules/typescript/lib",
|
||||||
"prettier.enable": true,
|
"volar.tsPlugin": true,
|
||||||
"editor.formatOnType": true,
|
"volar.tsPluginStatus": false,
|
||||||
"editor.formatOnSave": true,
|
"npm.packageManager": "pnpm",
|
||||||
"editor.formatOnPaste": true,
|
"editor.tabSize": 2,
|
||||||
"editor.codeActionsOnSave": {
|
"prettier.printWidth": 100, // 超过最大值换行
|
||||||
"source.fixAll.eslint": true
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
|
"files.eol": "\n",
|
||||||
|
"search.exclude": {
|
||||||
|
"**/node_modules": true,
|
||||||
|
"**/*.log": true,
|
||||||
|
"**/*.log*": true,
|
||||||
|
"**/bower_components": true,
|
||||||
|
"**/dist": true,
|
||||||
|
"**/elehukouben": true,
|
||||||
|
"**/.git": true,
|
||||||
|
"**/.gitignore": true,
|
||||||
|
"**/.svn": true,
|
||||||
|
"**/.DS_Store": true,
|
||||||
|
"**/.idea": true,
|
||||||
|
"**/.vscode": false,
|
||||||
|
"**/yarn.lock": true,
|
||||||
|
"**/tmp": true,
|
||||||
|
"out": true,
|
||||||
|
"dist": true,
|
||||||
|
"node_modules": true,
|
||||||
|
"CHANGELOG.md": true,
|
||||||
|
"examples": true,
|
||||||
|
"res": true,
|
||||||
|
"screenshots": true,
|
||||||
|
"yarn-error.log": true,
|
||||||
|
"**/.yarn": true
|
||||||
},
|
},
|
||||||
"[vue]": {
|
"files.exclude": {
|
||||||
"editor.defaultFormatter": "Vue.volar"
|
"**/.cache": true,
|
||||||
|
"**/.editorconfig": true,
|
||||||
|
"**/.eslintcache": true,
|
||||||
|
"**/bower_components": true,
|
||||||
|
"**/.idea": true,
|
||||||
|
"**/tmp": true,
|
||||||
|
"**/.git": true,
|
||||||
|
"**/.svn": true,
|
||||||
|
"**/.hg": true,
|
||||||
|
"**/CVS": true,
|
||||||
|
"**/.DS_Store": true
|
||||||
},
|
},
|
||||||
"[javascript]": {
|
"files.watcherExclude": {
|
||||||
|
"**/.git/objects/**": true,
|
||||||
|
"**/.git/subtree-cache/**": true,
|
||||||
|
"**/.vscode/**": true,
|
||||||
|
"**/node_modules/**": true,
|
||||||
|
"**/tmp/**": true,
|
||||||
|
"**/bower_components/**": true,
|
||||||
|
"**/dist/**": true,
|
||||||
|
"**/yarn.lock": true
|
||||||
|
},
|
||||||
|
"stylelint.enable": true,
|
||||||
|
"stylelint.validate": ["css", "less", "postcss", "scss", "vue", "sass"],
|
||||||
|
"path-intellisense.mappings": {
|
||||||
|
"@/": "${workspaceRoot}/src"
|
||||||
|
},
|
||||||
|
"[javascriptreact]": {
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
},
|
},
|
||||||
"[typescript]": {
|
"[typescript]": {
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
|
||||||
},
|
},
|
||||||
"[json]": {
|
"[typescriptreact]": {
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
|
||||||
},
|
|
||||||
"[jsonc]": {
|
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
||||||
},
|
},
|
||||||
"[html]": {
|
"[html]": {
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
},
|
},
|
||||||
"[css]": {
|
"[css]": {
|
||||||
|
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
|
||||||
|
},
|
||||||
|
"[less]": {
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
},
|
},
|
||||||
"[scss]": {
|
"[scss]": {
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
},
|
},
|
||||||
|
"[markdown]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"editor.codeActionsOnSave": {
|
||||||
|
"source.fixAll.eslint": true
|
||||||
|
},
|
||||||
|
"[vue]": {
|
||||||
|
"editor.codeActionsOnSave": {
|
||||||
|
"source.fixAll.eslint": true,
|
||||||
|
"source.fixAll.stylelint": true
|
||||||
|
}
|
||||||
|
},
|
||||||
"i18n-ally.localesPaths": ["src/locales"],
|
"i18n-ally.localesPaths": ["src/locales"],
|
||||||
"i18n-ally.keystyle": "nested",
|
"i18n-ally.keystyle": "nested",
|
||||||
"i18n-ally.sortKeys": true,
|
"i18n-ally.sortKeys": true,
|
||||||
|
@ -39,16 +101,69 @@
|
||||||
"i18n-ally.sourceLanguage": "en",
|
"i18n-ally.sourceLanguage": "en",
|
||||||
"i18n-ally.displayLanguage": "zh-CN",
|
"i18n-ally.displayLanguage": "zh-CN",
|
||||||
"i18n-ally.enabledFrameworks": ["vue", "react"],
|
"i18n-ally.enabledFrameworks": ["vue", "react"],
|
||||||
"god.tsconfig": "./tsconfig.json",
|
"cSpell.words": [
|
||||||
"vue-i18n.i18nPaths": "src/locales",
|
"vben",
|
||||||
|
"windicss",
|
||||||
|
"tailwind",
|
||||||
|
"browserslist",
|
||||||
|
"tailwindcss",
|
||||||
|
"esnext",
|
||||||
|
"antv",
|
||||||
|
"tinymce",
|
||||||
|
"qrcode",
|
||||||
|
"sider",
|
||||||
|
"pinia",
|
||||||
|
"sider",
|
||||||
|
"nprogress",
|
||||||
|
"INTLIFY",
|
||||||
|
"stylelint",
|
||||||
|
"esno",
|
||||||
|
"vitejs",
|
||||||
|
"sortablejs",
|
||||||
|
"codemirror",
|
||||||
|
"iconify",
|
||||||
|
"commitlint",
|
||||||
|
"vditor",
|
||||||
|
"echarts",
|
||||||
|
"cropperjs",
|
||||||
|
"logicflow",
|
||||||
|
"vueuse",
|
||||||
|
"zxcvbn",
|
||||||
|
"lintstagedrc",
|
||||||
|
"brotli",
|
||||||
|
"sider",
|
||||||
|
"pnpm",
|
||||||
|
"antd"
|
||||||
|
],
|
||||||
|
"vetur.format.scriptInitialIndent": true,
|
||||||
|
"vetur.format.styleInitialIndent": true,
|
||||||
|
"vetur.validation.script": false,
|
||||||
|
"MicroPython.executeButton": [
|
||||||
|
{
|
||||||
|
"text": "▶",
|
||||||
|
"tooltip": "运行",
|
||||||
|
"alignment": "left",
|
||||||
|
"command": "extension.executeFile",
|
||||||
|
"priority": 3.5
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"MicroPython.syncButton": [
|
||||||
|
{
|
||||||
|
"text": "$(sync)",
|
||||||
|
"tooltip": "同步",
|
||||||
|
"alignment": "left",
|
||||||
|
"command": "extension.execute",
|
||||||
|
"priority": 4
|
||||||
|
}
|
||||||
|
],
|
||||||
|
// 控制相关文件嵌套展示
|
||||||
"explorer.fileNesting.enabled": true,
|
"explorer.fileNesting.enabled": true,
|
||||||
"explorer.fileNesting.expand": false,
|
"explorer.fileNesting.expand": false,
|
||||||
"explorer.fileNesting.patterns": {
|
"explorer.fileNesting.patterns": {
|
||||||
"*.ts": "$(capture).test.ts, $(capture).test.tsx",
|
"*.ts": "$(capture).test.ts, $(capture).test.tsx",
|
||||||
"*.tsx": "$(capture).test.ts, $(capture).test.tsx",
|
"*.tsx": "$(capture).test.ts, $(capture).test.tsx",
|
||||||
"*.env": "$(capture).env.*",
|
"*.env": "$(capture).env.*",
|
||||||
"CHANGELOG.md": "CHANGELOG*",
|
"package.json": "pnpm-lock.yaml,yarn.lock,LICENSE,README*,CHANGELOG*,CNAME,.gitattributes,.gitignore,prettier.config.js,stylelint.config.js,commitlint.config.js,.stylelintignore,.prettierignore,.gitpod.yml,.eslintrc.js,.eslintignore"
|
||||||
"package.json": "pnpm-lock.yaml,pnpm-workspace.yaml,LICENSE,.gitattributes,.gitignore,.gitpod.yml,CNAME,README*,.npmrc,.browserslistrc,vite.config.*,windi.*,tailwind.*,tsconfig.*,postcss*",
|
},
|
||||||
".eslintrc.js": ".eslintignore,.eslintrc-*,.prettierignore,.stylelintignore,.commitlintrc.js,.prettierrc.js,.stylelint*,stylelint*,prettier.*,.editorconfig"
|
"terminal.integrated.scrollback": 10000
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
12
README.md
12
README.md
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
## 🐶 新手必读
|
## 🐶 新手必读
|
||||||
|
|
||||||
* nodejs > 16.0.0 && pnpm > 7.30.0
|
* nodejs > 16.0.0 && pnpm > 8.6.0 (强制使用pnpm)
|
||||||
* 演示地址【Vue3 + element-plus】:<http://dashboard-vue3.yudao.iocoder.cn>
|
* 演示地址【Vue3 + element-plus】:<http://dashboard-vue3.yudao.iocoder.cn>
|
||||||
* 演示地址【Vue3 + vben(ant-design-vue)】:<http://dashboard-vben.yudao.iocoder.cn>
|
* 演示地址【Vue3 + vben(ant-design-vue)】:<http://dashboard-vben.yudao.iocoder.cn>
|
||||||
* 演示地址【Vue2 + element-ui】:<http://dashboard.yudao.iocoder.cn>
|
* 演示地址【Vue2 + element-ui】:<http://dashboard.yudao.iocoder.cn>
|
||||||
|
@ -39,11 +39,11 @@
|
||||||
| 框架 | 说明 | 版本 |
|
| 框架 | 说明 | 版本 |
|
||||||
|----------------------------------------------------------------------|------------------|--------|
|
|----------------------------------------------------------------------|------------------|--------|
|
||||||
| [Vue](https://staging-cn.vuejs.org/) | Vue 框架 | 3.3.4 |
|
| [Vue](https://staging-cn.vuejs.org/) | Vue 框架 | 3.3.4 |
|
||||||
| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 4.3.8 |
|
| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 4.3.9 |
|
||||||
| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.3.4 |
|
| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.3.7 |
|
||||||
| [TypeScript](https://www.typescriptlang.org/docs/) | JavaScript 的超集 | 5.0.4 |
|
| [TypeScript](https://www.typescriptlang.org/docs/) | JavaScript 的超集 | 5.0.4 |
|
||||||
| [pinia](https://pinia.vuejs.org/) | Vue 存储库 替代 vuex5 | 2.1.3 |
|
| [pinia](https://pinia.vuejs.org/) | Vue 存储库 替代 vuex5 | 2.1.4 |
|
||||||
| [vueuse](https://vueuse.org/) | 常用工具集 | 10.1.2 |
|
| [vueuse](https://vueuse.org/) | 常用工具集 | 10.2.0 |
|
||||||
| [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 9.2.2 |
|
| [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 9.2.2 |
|
||||||
| [vue-router](https://router.vuejs.org/) | Vue 路由 | 4.2.1 |
|
| [vue-router](https://router.vuejs.org/) | Vue 路由 | 4.2.1 |
|
||||||
| [windicss](https://cn.windicss.org/) | 下一代工具优先的 CSS 框架 | 3.5.6 |
|
| [windicss](https://cn.windicss.org/) | 下一代工具优先的 CSS 框架 | 3.5.6 |
|
||||||
|
@ -136,7 +136,7 @@ ps:核心功能已经实现,正在对接微信小程序中...
|
||||||
| | 表单构建 | 拖动表单元素生成相应的 HTML 代码,支持导出 JSON、Vue 文件 |
|
| | 表单构建 | 拖动表单元素生成相应的 HTML 代码,支持导出 JSON、Vue 文件 |
|
||||||
| 🚀 | 配置管理 | 对系统动态配置常用参数,支持 SpringBoot 加载 |
|
| 🚀 | 配置管理 | 对系统动态配置常用参数,支持 SpringBoot 加载 |
|
||||||
| ⭐️ | 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志 |
|
| ⭐️ | 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志 |
|
||||||
| 🚀 | 文件服务 | 支持将文件存储到 S3(MinIO、阿里云、腾讯云、七牛云)、本地、FTP、数据库等 |
|
| 🚀 | 文件服务 | 支持将文件存储到 S3(MinIO、阿里云、腾讯云、七牛云)、本地、FTP、数据库等 |
|
||||||
| 🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 |
|
| 🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 |
|
||||||
| | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 |
|
| | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 |
|
||||||
| | Redis 监控 | 监控 Redis 数据库的使用情况,使用的 Redis Key 管理 |
|
| | Redis 监控 | 监控 Redis 数据库的使用情况,使用的 Redis Key 管理 |
|
||||||
|
|
|
@ -13,7 +13,6 @@ import Components from 'unplugin-vue-components/vite'
|
||||||
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
|
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
|
||||||
import viteCompression from 'vite-plugin-compression'
|
import viteCompression from 'vite-plugin-compression'
|
||||||
import topLevelAwait from 'vite-plugin-top-level-await'
|
import topLevelAwait from 'vite-plugin-top-level-await'
|
||||||
import vueSetupExtend from 'vite-plugin-vue-setup-extend-plus'
|
|
||||||
import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'
|
import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'
|
||||||
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
|
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
|
||||||
|
|
||||||
|
@ -31,7 +30,6 @@ export function createVitePlugins() {
|
||||||
WindiCSS(),
|
WindiCSS(),
|
||||||
progress(),
|
progress(),
|
||||||
PurgeIcons(),
|
PurgeIcons(),
|
||||||
vueSetupExtend(),
|
|
||||||
ElementPlus({}),
|
ElementPlus({}),
|
||||||
AutoImport({
|
AutoImport({
|
||||||
include: [
|
include: [
|
||||||
|
|
|
@ -12,7 +12,6 @@ const include = [
|
||||||
'vue-router',
|
'vue-router',
|
||||||
'vue-types',
|
'vue-types',
|
||||||
'vue-i18n',
|
'vue-i18n',
|
||||||
'xe-utils',
|
|
||||||
'crypto-js',
|
'crypto-js',
|
||||||
'cropperjs',
|
'cropperjs',
|
||||||
'lodash-es',
|
'lodash-es',
|
||||||
|
|
86
package.json
86
package.json
|
@ -9,12 +9,12 @@
|
||||||
"dev": "vite --mode base",
|
"dev": "vite --mode base",
|
||||||
"front": "vite --mode front",
|
"front": "vite --mode front",
|
||||||
"ts:check": "vue-tsc --noEmit",
|
"ts:check": "vue-tsc --noEmit",
|
||||||
"build:pro": "node --max_old_space_size=8000 ./node_modules/vite/bin/vite.js build --mode pro",
|
"build:pro": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode pro",
|
||||||
"build:dev": "node --max_old_space_size=8000 ./node_modules/vite/bin/vite.js build --mode dev",
|
"build:dev": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode dev",
|
||||||
"build:stage": "node --max_old_space_size=8000 ./node_modules/vite/bin/vite.js build --mode stage",
|
"build:stage": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode stage",
|
||||||
"build:test": "node --max_old_space_size=8000 ./node_modules/vite/bin/vite.js build --mode test",
|
"build:test": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode test",
|
||||||
"build:static": "node --max_old_space_size=8000 ./node_modules/vite/bin/vite.js build --mode static",
|
"build:static": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode static",
|
||||||
"build:front": "node --max_old_space_size=8000 ./node_modules/vite/bin/vite.js build --mode front",
|
"build:front": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode front",
|
||||||
"serve:pro": "vite preview --mode pro",
|
"serve:pro": "vite preview --mode pro",
|
||||||
"serve:dev": "vite preview --mode dev",
|
"serve:dev": "vite preview --mode dev",
|
||||||
"serve:test": "vite preview --mode test",
|
"serve:test": "vite preview --mode test",
|
||||||
|
@ -34,10 +34,10 @@
|
||||||
"@form-create/element-ui": "^3.1.17",
|
"@form-create/element-ui": "^3.1.17",
|
||||||
"@iconify/iconify": "^3.1.0",
|
"@iconify/iconify": "^3.1.0",
|
||||||
"@videojs-player/vue": "^1.0.0",
|
"@videojs-player/vue": "^1.0.0",
|
||||||
"@vueuse/core": "^10.1.2",
|
"@vueuse/core": "^10.2.0",
|
||||||
"@wangeditor/editor": "^5.1.23",
|
"@wangeditor/editor": "^5.1.23",
|
||||||
"@wangeditor/editor-for-vue": "^5.1.10",
|
"@wangeditor/editor-for-vue": "^5.1.10",
|
||||||
"@zxcvbn-ts/core": "^3.0.1",
|
"@zxcvbn-ts/core": "^3.0.2",
|
||||||
"animate.css": "^4.1.1",
|
"animate.css": "^4.1.1",
|
||||||
"axios": "^1.4.0",
|
"axios": "^1.4.0",
|
||||||
"benz-amr-recorder": "^1.1.5",
|
"benz-amr-recorder": "^1.1.5",
|
||||||
|
@ -45,12 +45,12 @@
|
||||||
"camunda-bpmn-moddle": "^7.0.1",
|
"camunda-bpmn-moddle": "^7.0.1",
|
||||||
"cropperjs": "^1.5.13",
|
"cropperjs": "^1.5.13",
|
||||||
"crypto-js": "^4.1.1",
|
"crypto-js": "^4.1.1",
|
||||||
"dayjs": "^1.11.7",
|
"dayjs": "^1.11.8",
|
||||||
"diagram-js": "^11.6.0",
|
"diagram-js": "^11.6.0",
|
||||||
"echarts": "^5.4.2",
|
"echarts": "^5.4.2",
|
||||||
"echarts-wordcloud": "^2.1.0",
|
"echarts-wordcloud": "^2.1.0",
|
||||||
"element-plus": "2.3.4",
|
"element-plus": "2.3.7",
|
||||||
"fast-xml-parser": "^4.2.2",
|
"fast-xml-parser": "^4.2.4",
|
||||||
"highlight.js": "^11.8.0",
|
"highlight.js": "^11.8.0",
|
||||||
"intro.js": "^7.0.1",
|
"intro.js": "^7.0.1",
|
||||||
"jsencrypt": "^3.3.2",
|
"jsencrypt": "^3.3.2",
|
||||||
|
@ -58,82 +58,77 @@
|
||||||
"min-dash": "^4.1.1",
|
"min-dash": "^4.1.1",
|
||||||
"mitt": "^3.0.0",
|
"mitt": "^3.0.0",
|
||||||
"nprogress": "^0.2.0",
|
"nprogress": "^0.2.0",
|
||||||
"pinia": "^2.1.3",
|
"pinia": "^2.1.4",
|
||||||
"qrcode": "^1.5.3",
|
"qrcode": "^1.5.3",
|
||||||
"qs": "^6.11.2",
|
"qs": "^6.11.2",
|
||||||
"steady-xml": "^0.1.0",
|
"steady-xml": "^0.1.0",
|
||||||
"url": "^0.11.0",
|
"url": "^0.11.1",
|
||||||
"video.js": "^8.3.0",
|
"video.js": "^8.3.0",
|
||||||
"vue": "3.3.4",
|
"vue": "3.3.4",
|
||||||
"vue-dompurify-html": "^4.1.4",
|
"vue-dompurify-html": "^4.1.4",
|
||||||
"vue-i18n": "9.2.2",
|
"vue-i18n": "9.2.2",
|
||||||
"vue-router": "^4.2.1",
|
"vue-router": "^4.2.2",
|
||||||
"vue-types": "^5.0.3",
|
"vue-types": "^5.0.4",
|
||||||
"vuedraggable": "^4.1.0",
|
"vuedraggable": "^4.1.0",
|
||||||
"web-storage-cache": "^1.1.1",
|
"web-storage-cache": "^1.1.1",
|
||||||
"xe-utils": "^3.5.7",
|
|
||||||
"xml-js": "^1.6.11"
|
"xml-js": "^1.6.11"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@commitlint/cli": "^17.6.3",
|
"@commitlint/cli": "^17.6.5",
|
||||||
"@commitlint/config-conventional": "^17.6.3",
|
"@commitlint/config-conventional": "^17.6.5",
|
||||||
"@iconify/json": "^2.2.67",
|
"@iconify/json": "^2.2.80",
|
||||||
"@intlify/unplugin-vue-i18n": "^0.10.0",
|
"@intlify/unplugin-vue-i18n": "^0.11.0",
|
||||||
"@purge-icons/generated": "^0.9.0",
|
"@purge-icons/generated": "^0.9.0",
|
||||||
"@types/intro.js": "^5.1.1",
|
"@types/intro.js": "^5.1.1",
|
||||||
"@types/lodash-es": "^4.17.7",
|
"@types/lodash-es": "^4.17.7",
|
||||||
"@types/node": "^18.16.0",
|
"@types/node": "^20.3.1",
|
||||||
"@types/nprogress": "^0.2.0",
|
"@types/nprogress": "^0.2.0",
|
||||||
"@types/qrcode": "^1.5.0",
|
"@types/qrcode": "^1.5.0",
|
||||||
"@types/qs": "^6.9.7",
|
"@types/qs": "^6.9.7",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.59.6",
|
"@typescript-eslint/eslint-plugin": "^5.59.11",
|
||||||
"@typescript-eslint/parser": "^5.59.6",
|
"@typescript-eslint/parser": "^5.59.11",
|
||||||
"@vitejs/plugin-legacy": "^4.0.3",
|
"@vitejs/plugin-legacy": "^4.0.4",
|
||||||
"@vitejs/plugin-vue": "^4.2.3",
|
"@vitejs/plugin-vue": "^4.2.3",
|
||||||
"@vitejs/plugin-vue-jsx": "^3.0.1",
|
"@vitejs/plugin-vue-jsx": "^3.0.1",
|
||||||
"autoprefixer": "^10.4.14",
|
"autoprefixer": "^10.4.14",
|
||||||
"bpmn-js": "^8.9.0",
|
"bpmn-js": "^8.9.0",
|
||||||
"bpmn-js-properties-panel": "^0.46.0",
|
"bpmn-js-properties-panel": "^0.46.0",
|
||||||
"consola": "^3.1.0",
|
"consola": "^3.1.0",
|
||||||
"eslint": "^8.40.0",
|
"eslint": "^8.43.0",
|
||||||
"eslint-config-prettier": "^8.8.0",
|
"eslint-config-prettier": "^8.8.0",
|
||||||
"eslint-define-config": "^1.20.0",
|
"eslint-define-config": "^1.21.0",
|
||||||
"eslint-plugin-prettier": "^4.2.1",
|
"eslint-plugin-prettier": "^4.2.1",
|
||||||
"eslint-plugin-vue": "^9.13.0",
|
"eslint-plugin-vue": "^9.15.0",
|
||||||
"lint-staged": "^13.2.2",
|
"lint-staged": "^13.2.2",
|
||||||
"postcss": "^8.4.23",
|
"postcss": "^8.4.24",
|
||||||
"postcss-html": "^1.5.0",
|
"postcss-html": "^1.5.0",
|
||||||
"postcss-scss": "^4.0.6",
|
"postcss-scss": "^4.0.6",
|
||||||
"prettier": "^2.8.8",
|
"prettier": "^2.8.8",
|
||||||
"rimraf": "^5.0.1",
|
"rimraf": "^5.0.1",
|
||||||
"rollup": "^3.22.0",
|
"rollup": "^3.25.1",
|
||||||
"sass": "^1.62.1",
|
"sass": "^1.63.5",
|
||||||
"stylelint": "^15.6.2",
|
"stylelint": "^15.8.0",
|
||||||
"stylelint-config-html": "^1.1.0",
|
|
||||||
"stylelint-config-recommended": "^12.0.0",
|
"stylelint-config-recommended": "^12.0.0",
|
||||||
|
"stylelint-config-recommended-vue": "^1.4.0",
|
||||||
"stylelint-config-standard": "^33.0.0",
|
"stylelint-config-standard": "^33.0.0",
|
||||||
"stylelint-order": "^6.0.3",
|
"stylelint-order": "^6.0.3",
|
||||||
"terser": "^5.17.4",
|
"terser": "^5.18.1",
|
||||||
"typescript": "5.0.4",
|
"typescript": "5.0.4",
|
||||||
"unplugin-auto-import": "^0.16.0",
|
"unplugin-auto-import": "^0.16.4",
|
||||||
"unplugin-element-plus": "^0.7.1",
|
"unplugin-element-plus": "^0.7.1",
|
||||||
"unplugin-vue-components": "^0.24.1",
|
"unplugin-vue-components": "^0.25.1",
|
||||||
"vite": "4.3.8",
|
"vite": "4.3.9",
|
||||||
"vite-plugin-compression": "^0.5.1",
|
"vite-plugin-compression": "^0.5.1",
|
||||||
"vite-plugin-ejs": "^1.6.4",
|
"vite-plugin-ejs": "^1.6.4",
|
||||||
"vite-plugin-eslint": "^1.8.1",
|
"vite-plugin-eslint": "^1.8.1",
|
||||||
"vite-plugin-progress": "^0.0.7",
|
"vite-plugin-progress": "^0.0.7",
|
||||||
"vite-plugin-purge-icons": "^0.9.2",
|
"vite-plugin-purge-icons": "^0.9.2",
|
||||||
"vite-plugin-svg-icons": "^2.0.1",
|
"vite-plugin-svg-icons": "^2.0.1",
|
||||||
"vite-plugin-top-level-await": "^1.3.0",
|
"vite-plugin-top-level-await": "^1.3.1",
|
||||||
"vite-plugin-vue-setup-extend-plus": "^0.1.0",
|
|
||||||
"vite-plugin-windicss": "^1.9.0",
|
"vite-plugin-windicss": "^1.9.0",
|
||||||
"vue-tsc": "^1.6.5",
|
"vue-tsc": "^1.8.1",
|
||||||
"windicss": "^3.5.6"
|
"windicss": "^3.5.6"
|
||||||
},
|
},
|
||||||
"engines": {
|
|
||||||
"node": ">=16.0.0"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
@ -142,5 +137,10 @@
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://gitee.com/yudaocode/yudao-ui-admin-vue3/issues"
|
"url": "https://gitee.com/yudaocode/yudao-ui-admin-vue3/issues"
|
||||||
},
|
},
|
||||||
"homepage": "https://gitee.com/yudaocode/yudao-ui-admin-vue3"
|
"homepage": "https://gitee.com/yudaocode/yudao-ui-admin-vue3",
|
||||||
|
"packageManager": "pnpm@8.6.0",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 16.0.0",
|
||||||
|
"pnpm": ">=8.6.0"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
<script lang="ts" name="APP" setup>
|
<script lang="ts" setup>
|
||||||
import { isDark } from '@/utils/is'
|
import { isDark } from '@/utils/is'
|
||||||
import { useAppStore } from '@/store/modules/app'
|
import { useAppStore } from '@/store/modules/app'
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
|
import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
|
||||||
import routerSearch from '@/components/RouterSearch/index.vue'
|
import routerSearch from '@/components/RouterSearch/index.vue'
|
||||||
|
|
||||||
|
defineOptions({ name: 'APP' })
|
||||||
|
|
||||||
const { getPrefixCls } = useDesign()
|
const { getPrefixCls } = useDesign()
|
||||||
const prefixCls = getPrefixCls('app')
|
const prefixCls = getPrefixCls('app')
|
||||||
const appStore = useAppStore()
|
const appStore = useAppStore()
|
||||||
|
@ -38,10 +40,11 @@ $prefix-cls: #{$namespace}-app;
|
||||||
|
|
||||||
html,
|
html,
|
||||||
body {
|
body {
|
||||||
|
@extend .size;
|
||||||
|
|
||||||
padding: 0 !important;
|
padding: 0 !important;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
@extend .size;
|
|
||||||
|
|
||||||
#app {
|
#app {
|
||||||
@extend .size;
|
@extend .size;
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
<script lang="ts" name="BackTop" setup>
|
<script lang="ts" setup>
|
||||||
import { ElBacktop } from 'element-plus'
|
import { ElBacktop } from 'element-plus'
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
|
|
||||||
|
defineOptions({ name: 'BackTop' })
|
||||||
|
|
||||||
const { getPrefixCls, variables } = useDesign()
|
const { getPrefixCls, variables } = useDesign()
|
||||||
|
|
||||||
const prefixCls = getPrefixCls('backtop')
|
const prefixCls = getPrefixCls('backtop')
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<script lang="ts" name="ConfigGlobal" setup>
|
<script lang="ts" setup>
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import { useLocaleStore } from '@/store/modules/locale'
|
import { useLocaleStore } from '@/store/modules/locale'
|
||||||
import { useAppStore } from '@/store/modules/app'
|
import { useAppStore } from '@/store/modules/app'
|
||||||
|
@ -7,6 +7,8 @@ import { useDesign } from '@/hooks/web/useDesign'
|
||||||
import { ElementPlusSize } from '@/types/elementPlus'
|
import { ElementPlusSize } from '@/types/elementPlus'
|
||||||
import { useWindowSize } from '@vueuse/core'
|
import { useWindowSize } from '@vueuse/core'
|
||||||
|
|
||||||
|
defineOptions({ name: 'ConfigGlobal' })
|
||||||
|
|
||||||
const { variables } = useDesign()
|
const { variables } = useDesign()
|
||||||
|
|
||||||
const appStore = useAppStore()
|
const appStore = useAppStore()
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
<script lang="ts" name="ContentDetailWrap" setup>
|
<script lang="ts" setup>
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
|
|
||||||
|
defineOptions({ name: 'ContentDetailWrap' })
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
const { getPrefixCls } = useDesign()
|
const { getPrefixCls } = useDesign()
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
<script lang="ts" name="ContentWrap" setup>
|
<script lang="ts" setup>
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
|
|
||||||
|
defineOptions({ name: 'ContentWrap' })
|
||||||
|
|
||||||
const { getPrefixCls } = useDesign()
|
const { getPrefixCls } = useDesign()
|
||||||
|
|
||||||
const prefixCls = getPrefixCls('content-wrap')
|
const prefixCls = getPrefixCls('content-wrap')
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
<script lang="ts" name="CountTo" setup>
|
<script lang="ts" setup>
|
||||||
import { PropType } from 'vue'
|
import { PropType } from 'vue'
|
||||||
import { isNumber } from '@/utils/is'
|
import { isNumber } from '@/utils/is'
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
|
|
||||||
|
defineOptions({ name: 'CountTo' })
|
||||||
|
|
||||||
const { getPrefixCls } = useDesign()
|
const { getPrefixCls } = useDesign()
|
||||||
|
|
||||||
const prefixCls = getPrefixCls('count-to')
|
const prefixCls = getPrefixCls('count-to')
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
<script lang="ts" name="Crontab" setup>
|
<script lang="ts" setup>
|
||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
import { PropType } from 'vue'
|
import { PropType } from 'vue'
|
||||||
|
|
||||||
|
defineOptions({ name: 'Crontab' })
|
||||||
|
|
||||||
interface shortcutsType {
|
interface shortcutsType {
|
||||||
text: string
|
text: string
|
||||||
value: string
|
value: string
|
||||||
|
@ -966,37 +968,37 @@ const submit = () => {
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.sc-cron:deep(.el-tabs__item) {
|
.sc-cron:deep(.el-tabs__item) {
|
||||||
height: auto;
|
height: auto;
|
||||||
line-height: 1;
|
|
||||||
padding: 0 7px;
|
padding: 0 7px;
|
||||||
|
line-height: 1;
|
||||||
vertical-align: bottom;
|
vertical-align: bottom;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sc-cron-num {
|
.sc-cron-num {
|
||||||
text-align: center;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sc-cron-num h2 {
|
.sc-cron-num h2 {
|
||||||
font-size: 12px;
|
|
||||||
margin-bottom: 15px;
|
margin-bottom: 15px;
|
||||||
|
font-size: 12px;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sc-cron-num h4 {
|
.sc-cron-num h4 {
|
||||||
display: block;
|
display: block;
|
||||||
height: 32px;
|
|
||||||
line-height: 30px;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
font-size: 12px;
|
height: 32px;
|
||||||
padding: 0 15px;
|
padding: 0 15px;
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 30px;
|
||||||
background: var(--el-color-primary-light-9);
|
background: var(--el-color-primary-light-9);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sc-cron:deep(.el-tabs__item.is-active) .sc-cron-num h4 {
|
.sc-cron:deep(.el-tabs__item.is-active) .sc-cron-num h4 {
|
||||||
background: var(--el-color-primary);
|
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
background: var(--el-color-primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
[data-theme='dark'] .sc-cron-num h4 {
|
[data-theme='dark'] .sc-cron-num h4 {
|
||||||
|
|
|
@ -113,7 +113,7 @@
|
||||||
</Dialog>
|
</Dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="CopperModal" setup>
|
<script lang="ts" setup>
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
import { dataURLtoBlob } from '@/utils/filt'
|
import { dataURLtoBlob } from '@/utils/filt'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
|
@ -121,6 +121,8 @@ import type { CropendResult, Cropper } from './types'
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import { CropperImage } from '@/components/Cropper'
|
import { CropperImage } from '@/components/Cropper'
|
||||||
|
|
||||||
|
defineOptions({ name: 'CopperModal' })
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
srcValue: propTypes.string.def(''),
|
srcValue: propTypes.string.def(''),
|
||||||
circled: propTypes.bool.def(true)
|
circled: propTypes.bool.def(true)
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="Cropper" setup>
|
<script lang="ts" setup>
|
||||||
import { CSSProperties, PropType } from 'vue'
|
import { CSSProperties, PropType } from 'vue'
|
||||||
import Cropper from 'cropperjs'
|
import Cropper from 'cropperjs'
|
||||||
import 'cropperjs/dist/cropper.css'
|
import 'cropperjs/dist/cropper.css'
|
||||||
|
@ -18,6 +18,8 @@ import { useDesign } from '@/hooks/web/useDesign'
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import { useDebounceFn } from '@vueuse/core'
|
import { useDebounceFn } from '@vueuse/core'
|
||||||
|
|
||||||
|
defineOptions({ name: 'Cropper' })
|
||||||
|
|
||||||
type Options = Cropper.Options
|
type Options = Cropper.Options
|
||||||
|
|
||||||
const defaultOptions: Options = {
|
const defaultOptions: Options = {
|
||||||
|
|
|
@ -11,13 +11,15 @@
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="CropperAvatar" setup>
|
<script lang="ts" setup>
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
|
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
import CopperModal from './CopperModal.vue'
|
import CopperModal from './CopperModal.vue'
|
||||||
|
|
||||||
|
defineOptions({ name: 'CropperAvatar' })
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
width: propTypes.string.def('200px'),
|
width: propTypes.string.def('200px'),
|
||||||
value: propTypes.string.def(''),
|
value: propTypes.string.def(''),
|
||||||
|
@ -83,14 +85,14 @@ $prefix-cls: #{$namespace}--cropper-avatar;
|
||||||
}
|
}
|
||||||
|
|
||||||
&-image-mask {
|
&-image-mask {
|
||||||
opacity: 0%;
|
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: inherit;
|
width: inherit;
|
||||||
height: inherit;
|
height: inherit;
|
||||||
border-radius: inherit;
|
|
||||||
border: inherit;
|
|
||||||
background: rgb(0 0 0 / 40%);
|
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
background: rgb(0 0 0 / 40%);
|
||||||
|
border: inherit;
|
||||||
|
border-radius: inherit;
|
||||||
|
opacity: 0;
|
||||||
transition: opacity 0.4s;
|
transition: opacity 0.4s;
|
||||||
|
|
||||||
::v-deep(svg) {
|
::v-deep(svg) {
|
||||||
|
@ -99,7 +101,7 @@ $prefix-cls: #{$namespace}--cropper-avatar;
|
||||||
}
|
}
|
||||||
|
|
||||||
&-image-mask:hover {
|
&-image-mask:hover {
|
||||||
opacity: 4000%;
|
opacity: 40;
|
||||||
}
|
}
|
||||||
|
|
||||||
&-upload-btn {
|
&-upload-btn {
|
||||||
|
@ -121,21 +123,18 @@ $prefix-cls: #{$namespace}--cropper-avatar;
|
||||||
height: 120px;
|
height: 120px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.user-info-head:hover:after {
|
.user-info-head:hover::after {
|
||||||
content: '+';
|
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 0;
|
inset: 0;
|
||||||
right: 0;
|
|
||||||
top: 0;
|
|
||||||
bottom: 0;
|
|
||||||
color: #eee;
|
|
||||||
background: rgba(0, 0, 0, 0.5);
|
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
font-style: normal;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
cursor: pointer;
|
font-style: normal;
|
||||||
line-height: 110px;
|
line-height: 110px;
|
||||||
|
color: #eee;
|
||||||
|
cursor: pointer;
|
||||||
|
background: rgb(0 0 0 / 50%);
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
|
content: '+';
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<script lang="ts" name="Descriptions" setup>
|
<script lang="ts" setup>
|
||||||
import { PropType } from 'vue'
|
import { PropType } from 'vue'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
|
@ -6,6 +6,8 @@ import { propTypes } from '@/utils/propTypes'
|
||||||
import { useAppStore } from '@/store/modules/app'
|
import { useAppStore } from '@/store/modules/app'
|
||||||
import { DescriptionsSchema } from '@/types/descriptions'
|
import { DescriptionsSchema } from '@/types/descriptions'
|
||||||
|
|
||||||
|
defineOptions({ name: 'Descriptions' })
|
||||||
|
|
||||||
const appStore = useAppStore()
|
const appStore = useAppStore()
|
||||||
|
|
||||||
const mobile = computed(() => appStore.getMobile)
|
const mobile = computed(() => appStore.getMobile)
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
<script lang="ts" name="Dialog" setup>
|
<script lang="ts" setup>
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import { isNumber } from '@/utils/is'
|
import { isNumber } from '@/utils/is'
|
||||||
|
|
||||||
|
// eslint-disable-next-line vue/no-reserved-component-names
|
||||||
|
defineOptions({ name: 'Dialog' })
|
||||||
|
|
||||||
const slots = useSlots()
|
const slots = useSlots()
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
|
|
@ -5,9 +5,11 @@
|
||||||
</template>
|
</template>
|
||||||
</el-alert>
|
</el-alert>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="tsx" name="DocAlert">
|
<script setup lang="tsx">
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
|
|
||||||
|
defineOptions({ name: 'DocAlert' })
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
title: propTypes.string,
|
title: propTypes.string,
|
||||||
url: propTypes.string
|
url: propTypes.string
|
||||||
|
@ -25,8 +27,8 @@ const getEnable = () => {
|
||||||
</script>
|
</script>
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.el-alert--success.is-light {
|
.el-alert--success.is-light {
|
||||||
border: 1px solid green;
|
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
border: 1px solid green;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<script lang="ts" name="EChart" setup>
|
<script lang="ts" setup>
|
||||||
import type { EChartsOption } from 'echarts'
|
import type { EChartsOption } from 'echarts'
|
||||||
import echarts from '@/plugins/echarts'
|
import echarts from '@/plugins/echarts'
|
||||||
import { debounce } from 'lodash-es'
|
import { debounce } from 'lodash-es'
|
||||||
|
@ -9,6 +9,8 @@ import { useAppStore } from '@/store/modules/app'
|
||||||
import { isString } from '@/utils/is'
|
import { isString } from '@/utils/is'
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
|
|
||||||
|
defineOptions({ name: 'EChart' })
|
||||||
|
|
||||||
const { getPrefixCls, variables } = useDesign()
|
const { getPrefixCls, variables } = useDesign()
|
||||||
|
|
||||||
const prefixCls = getPrefixCls('echart')
|
const prefixCls = getPrefixCls('echart')
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<script lang="ts" name="Editor" setup>
|
<script lang="ts" setup>
|
||||||
import { PropType } from 'vue'
|
import { PropType } from 'vue'
|
||||||
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
|
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
|
||||||
import { i18nChangeLanguage, IDomEditor, IEditorConfig } from '@wangeditor/editor'
|
import { i18nChangeLanguage, IDomEditor, IEditorConfig } from '@wangeditor/editor'
|
||||||
|
@ -8,6 +8,8 @@ import { ElMessage } from 'element-plus'
|
||||||
import { useLocaleStore } from '@/store/modules/locale'
|
import { useLocaleStore } from '@/store/modules/locale'
|
||||||
import { getAccessToken, getTenantId } from '@/utils/auth'
|
import { getAccessToken, getTenantId } from '@/utils/auth'
|
||||||
|
|
||||||
|
defineOptions({ name: 'Editor' })
|
||||||
|
|
||||||
type InsertFnType = (url: string, alt: string, href: string) => void
|
type InsertFnType = (url: string, alt: string, href: string) => void
|
||||||
|
|
||||||
const localeStore = useLocaleStore()
|
const localeStore = useLocaleStore()
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
<script lang="ts" name="Error" setup>
|
<script lang="ts" setup>
|
||||||
import pageError from '@/assets/svgs/404.svg'
|
import pageError from '@/assets/svgs/404.svg'
|
||||||
import networkError from '@/assets/svgs/500.svg'
|
import networkError from '@/assets/svgs/500.svg'
|
||||||
import noPermission from '@/assets/svgs/403.svg'
|
import noPermission from '@/assets/svgs/403.svg'
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
|
|
||||||
|
defineOptions({ name: 'Error' })
|
||||||
|
|
||||||
interface ErrorMap {
|
interface ErrorMap {
|
||||||
url: string
|
url: string
|
||||||
message: string
|
message: string
|
||||||
|
|
|
@ -27,6 +27,7 @@ const { getPrefixCls } = useDesign()
|
||||||
const prefixCls = getPrefixCls('form')
|
const prefixCls = getPrefixCls('form')
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
|
// eslint-disable-next-line vue/no-reserved-component-names
|
||||||
name: 'Form',
|
name: 'Form',
|
||||||
props: {
|
props: {
|
||||||
// 生成Form的布局结构数组
|
// 生成Form的布局结构数组
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
<script lang="ts" name="IFrame" setup>
|
<script lang="ts" setup>
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
|
|
||||||
|
defineOptions({ name: 'IFrame' })
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
src: propTypes.string.def('')
|
src: propTypes.string.def('')
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
<script lang="ts" name="Icon" setup>
|
<script lang="ts" setup>
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import Iconify from '@purge-icons/generated'
|
import Iconify from '@purge-icons/generated'
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
|
|
||||||
|
defineOptions({ name: 'Icon' })
|
||||||
|
|
||||||
const { getPrefixCls } = useDesign()
|
const { getPrefixCls } = useDesign()
|
||||||
|
|
||||||
const prefixCls = getPrefixCls('icon')
|
const prefixCls = getPrefixCls('icon')
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
<script lang="ts" name="IconSelect" setup>
|
<script lang="ts" setup>
|
||||||
import { CSSProperties } from 'vue'
|
import { CSSProperties } from 'vue'
|
||||||
import { cloneDeep } from 'lodash-es'
|
import { cloneDeep } from 'lodash-es'
|
||||||
import { IconJson } from '@/components/Icon/src/data'
|
import { IconJson } from '@/components/Icon/src/data'
|
||||||
|
|
||||||
|
defineOptions({ name: 'IconSelect' })
|
||||||
|
|
||||||
type ParameterCSSProperties = (item?: string) => CSSProperties | undefined
|
type ParameterCSSProperties = (item?: string) => CSSProperties | undefined
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
@ -189,10 +191,10 @@ watch(
|
||||||
|
|
||||||
.icon-item {
|
.icon-item {
|
||||||
&:hover {
|
&:hover {
|
||||||
border-color: var(--el-color-primary);
|
|
||||||
color: var(--el-color-primary);
|
color: var(--el-color-primary);
|
||||||
transition: all 0.4s;
|
border-color: var(--el-color-primary);
|
||||||
transform: scaleX(1.05);
|
transform: scaleX(1.05);
|
||||||
|
transition: all 0.4s;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -213,15 +215,15 @@ watch(
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-tabs__item) {
|
:deep(.el-tabs__item) {
|
||||||
|
height: 30px;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
height: 30px;
|
|
||||||
line-height: 30px;
|
line-height: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-tabs__header),
|
:deep(.el-tabs__header),
|
||||||
:deep(.el-tabs__nav-wrap) {
|
:deep(.el-tabs__nav-wrap) {
|
||||||
margin: 0;
|
|
||||||
position: static;
|
position: static;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
<script lang="ts" name="ImageViewer" setup>
|
<script lang="ts" setup>
|
||||||
import { PropType } from 'vue'
|
import { PropType } from 'vue'
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
|
|
||||||
|
defineOptions({ name: 'ImageViewer' })
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
urlList: {
|
urlList: {
|
||||||
type: Array as PropType<string[]>,
|
type: Array as PropType<string[]>,
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
<script lang="ts" name="InfoTip" setup>
|
<script lang="ts" setup>
|
||||||
import { PropType } from 'vue'
|
import { PropType } from 'vue'
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import { TipSchema } from '@/types/infoTip'
|
import { TipSchema } from '@/types/infoTip'
|
||||||
|
|
||||||
|
defineOptions({ name: 'InfoTip' })
|
||||||
|
|
||||||
const { getPrefixCls } = useDesign()
|
const { getPrefixCls } = useDesign()
|
||||||
|
|
||||||
const prefixCls = getPrefixCls('infotip')
|
const prefixCls = getPrefixCls('infotip')
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
<script lang="ts" name="InputPassword" setup>
|
<script lang="ts" setup>
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import { useConfigGlobal } from '@/hooks/web/useConfigGlobal'
|
import { useConfigGlobal } from '@/hooks/web/useConfigGlobal'
|
||||||
import type { ZxcvbnResult } from '@zxcvbn-ts/core'
|
import type { ZxcvbnResult } from '@zxcvbn-ts/core'
|
||||||
import { zxcvbn } from '@zxcvbn-ts/core'
|
import { zxcvbn } from '@zxcvbn-ts/core'
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
|
|
||||||
|
defineOptions({ name: 'InputPassword' })
|
||||||
|
|
||||||
const { getPrefixCls } = useDesign()
|
const { getPrefixCls } = useDesign()
|
||||||
|
|
||||||
const prefixCls = getPrefixCls('input-password')
|
const prefixCls = getPrefixCls('input-password')
|
||||||
|
@ -94,7 +96,7 @@ $prefix-cls: #{$namespace}-input-password;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
border-color: var(--el-color-white);
|
border-color: var(--el-color-white);
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
border-width: 0 5px 0 5px;
|
border-width: 0 5px;
|
||||||
content: '';
|
content: '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,9 +14,11 @@
|
||||||
@current-change="handleCurrentChange"
|
@current-change="handleCurrentChange"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
<script name="Pagination" setup>
|
<script lang="ts" setup>
|
||||||
import { computed } from 'vue'
|
import { computed } from 'vue'
|
||||||
|
|
||||||
|
defineOptions({ name: 'Pagination' })
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
// 总条目数
|
// 总条目数
|
||||||
total: {
|
total: {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<script lang="ts" name="Qrcode" setup>
|
<script lang="ts" setup>
|
||||||
import { computed, nextTick, PropType, ref, unref, watch } from 'vue'
|
import { computed, nextTick, PropType, ref, unref, watch } from 'vue'
|
||||||
import QRCode, { QRCodeRenderersOptions } from 'qrcode'
|
import QRCode, { QRCodeRenderersOptions } from 'qrcode'
|
||||||
import { cloneDeep } from 'lodash-es'
|
import { cloneDeep } from 'lodash-es'
|
||||||
|
@ -7,6 +7,8 @@ import { useDesign } from '@/hooks/web/useDesign'
|
||||||
import { isString } from '@/utils/is'
|
import { isString } from '@/utils/is'
|
||||||
import { QrcodeLogo } from '@/types/qrcode'
|
import { QrcodeLogo } from '@/types/qrcode'
|
||||||
|
|
||||||
|
defineOptions({ name: 'Qrcode' })
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
// img 或者 canvas,img不支持logo嵌套
|
// img 或者 canvas,img不支持logo嵌套
|
||||||
tag: propTypes.string.validate((v: string) => ['canvas', 'img'].includes(v)).def('canvas'),
|
tag: propTypes.string.validate((v: string) => ['canvas', 'img'].includes(v)).def('canvas'),
|
||||||
|
@ -241,7 +243,7 @@ $prefix-cls: #{$namespace}-qrcode;
|
||||||
|
|
||||||
.#{$prefix-cls} {
|
.#{$prefix-cls} {
|
||||||
&--disabled {
|
&--disabled {
|
||||||
background: rgba(255, 255, 255, 0.95);
|
background: rgb(255 255 255 / 95%);
|
||||||
|
|
||||||
& > div {
|
& > div {
|
||||||
transform: translate(-50%, -50%);
|
transform: translate(-50%, -50%);
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
</ElDialog>
|
</ElDialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script lang="ts" setup>
|
||||||
const router = useRouter() // 路由对象
|
const router = useRouter() // 路由对象
|
||||||
const showSearch = ref(false) // 是否显示弹框
|
const showSearch = ref(false) // 是否显示弹框
|
||||||
const value: Ref = ref('') // 用户输入的值
|
const value: Ref = ref('') // 用户输入的值
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<script lang="ts" name="Search" setup>
|
<script lang="ts" setup>
|
||||||
import { PropType } from 'vue'
|
import { PropType } from 'vue'
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@ import { findIndex } from '@/utils'
|
||||||
import { cloneDeep } from 'lodash-es'
|
import { cloneDeep } from 'lodash-es'
|
||||||
import { FormSchema } from '@/types/form'
|
import { FormSchema } from '@/types/form'
|
||||||
|
|
||||||
|
defineOptions({ name: 'Search' })
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
<script lang="ts" name="Sticky" setup>
|
<script lang="ts" setup>
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import { isClient, useEventListener, useWindowSize } from '@vueuse/core'
|
import { isClient, useEventListener, useWindowSize } from '@vueuse/core'
|
||||||
import type { CSSProperties } from 'vue'
|
import type { CSSProperties } from 'vue'
|
||||||
|
|
||||||
|
defineOptions({ name: 'Sticky' })
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
// 距离顶部或者底部的距离(单位px)
|
// 距离顶部或者底部的距离(单位px)
|
||||||
offset: propTypes.number.def(0),
|
offset: propTypes.number.def(0),
|
||||||
|
|
|
@ -9,6 +9,7 @@ import { set } from 'lodash-es'
|
||||||
import { Pagination, TableColumn, TableSetPropsType, TableSlotDefault } from '@/types/table'
|
import { Pagination, TableColumn, TableSetPropsType, TableSlotDefault } from '@/types/table'
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
|
// eslint-disable-next-line vue/no-reserved-component-names
|
||||||
name: 'Table',
|
name: 'Table',
|
||||||
props: {
|
props: {
|
||||||
pageSize: propTypes.number.def(10),
|
pageSize: propTypes.number.def(10),
|
||||||
|
@ -302,6 +303,7 @@ export default defineComponent({
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
padding: 8px 4px;
|
padding: 8px 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-button.is-link) {
|
:deep(.el-button.is-link) {
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
padding: 8px 4px;
|
padding: 8px 4px;
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
<script lang="ts" name="Tooltip" setup>
|
<script lang="ts" setup>
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
|
|
||||||
|
defineOptions({ name: 'Tooltip' })
|
||||||
|
|
||||||
defineProps({
|
defineProps({
|
||||||
titel: propTypes.string.def(''),
|
titel: propTypes.string.def(''),
|
||||||
message: propTypes.string.def(''),
|
message: propTypes.string.def(''),
|
||||||
|
|
|
@ -32,13 +32,15 @@
|
||||||
</el-upload>
|
</el-upload>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts" name="UploadFile">
|
<script lang="ts" setup>
|
||||||
import { PropType } from 'vue'
|
import { PropType } from 'vue'
|
||||||
|
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import { getAccessToken, getTenantId } from '@/utils/auth'
|
import { getAccessToken, getTenantId } from '@/utils/auth'
|
||||||
import type { UploadInstance, UploadUserFile, UploadProps, UploadRawFile } from 'element-plus'
|
import type { UploadInstance, UploadUserFile, UploadProps, UploadRawFile } from 'element-plus'
|
||||||
|
|
||||||
|
defineOptions({ name: 'UploadFile' })
|
||||||
|
|
||||||
const message = useMessage() // 消息弹窗
|
const message = useMessage() // 消息弹窗
|
||||||
const emit = defineEmits(['update:modelValue'])
|
const emit = defineEmits(['update:modelValue'])
|
||||||
|
|
||||||
|
@ -143,21 +145,25 @@ const listToString = (list: UploadUserFile[], separator?: string) => {
|
||||||
.upload-file-uploader {
|
.upload-file-uploader {
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.upload-file-list .el-upload-list__item) {
|
:deep(.upload-file-list .el-upload-list__item) {
|
||||||
border: 1px solid #e4e7ed;
|
border: 1px solid #e4e7ed;
|
||||||
line-height: 2;
|
line-height: 2;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-upload-list__item-file-name) {
|
:deep(.el-upload-list__item-file-name) {
|
||||||
max-width: 250px;
|
max-width: 250px;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.upload-file-list .ele-upload-list__item-content) {
|
:deep(.upload-file-list .ele-upload-list__item-content) {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
color: inherit;
|
color: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.ele-upload-list__item-content-action .el-link) {
|
:deep(.ele-upload-list__item-content-action .el-link) {
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,13 +50,15 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="UploadImg">
|
<script lang="ts" setup>
|
||||||
import type { UploadProps } from 'element-plus'
|
import type { UploadProps } from 'element-plus'
|
||||||
|
|
||||||
import { generateUUID } from '@/utils'
|
import { generateUUID } from '@/utils'
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import { getAccessToken, getTenantId } from '@/utils/auth'
|
import { getAccessToken, getTenantId } from '@/utils/auth'
|
||||||
|
|
||||||
|
defineOptions({ name: 'UploadImg' })
|
||||||
|
|
||||||
type FileTypes =
|
type FileTypes =
|
||||||
| 'image/apng'
|
| 'image/apng'
|
||||||
| 'image/bmp'
|
| 'image/bmp'
|
||||||
|
@ -79,7 +81,7 @@ const props = defineProps({
|
||||||
fileType: propTypes.array.def(['image/jpeg', 'image/png', 'image/gif']), // 图片类型限制 ==> 非必传(默认为 ["image/jpeg", "image/png", "image/gif"])
|
fileType: propTypes.array.def(['image/jpeg', 'image/png', 'image/gif']), // 图片类型限制 ==> 非必传(默认为 ["image/jpeg", "image/png", "image/gif"])
|
||||||
height: propTypes.string.def('150px'), // 组件高度 ==> 非必传(默认为 150px)
|
height: propTypes.string.def('150px'), // 组件高度 ==> 非必传(默认为 150px)
|
||||||
width: propTypes.string.def('150px'), // 组件宽度 ==> 非必传(默认为 150px)
|
width: propTypes.string.def('150px'), // 组件宽度 ==> 非必传(默认为 150px)
|
||||||
borderRadius: propTypes.string.def('8px') // 组件边框圆角 ==> 非必传(默认为 8px)
|
borderradius: propTypes.string.def('8px') // 组件边框圆角 ==> 非必传(默认为 8px)
|
||||||
})
|
})
|
||||||
const { t } = useI18n() // 国际化
|
const { t } = useI18n() // 国际化
|
||||||
const message = useMessage() // 消息弹窗
|
const message = useMessage() // 消息弹窗
|
||||||
|
@ -130,29 +132,34 @@ const uploadError = () => {
|
||||||
:deep(.el-upload),
|
:deep(.el-upload),
|
||||||
:deep(.el-upload-dragger) {
|
:deep(.el-upload-dragger) {
|
||||||
border: 1px dashed var(--el-color-danger) !important;
|
border: 1px dashed var(--el-color-danger) !important;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
border-color: var(--el-color-primary) !important;
|
border-color: var(--el-color-primary) !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.disabled) {
|
:deep(.disabled) {
|
||||||
.el-upload,
|
.el-upload,
|
||||||
.el-upload-dragger {
|
.el-upload-dragger {
|
||||||
cursor: not-allowed !important;
|
cursor: not-allowed !important;
|
||||||
background: var(--el-disabled-bg-color);
|
background: var(--el-disabled-bg-color);
|
||||||
border: 1px dashed var(--el-border-color-darker) !important;
|
border: 1px dashed var(--el-border-color-darker) !important;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
border: 1px dashed var(--el-border-color-darker) !important;
|
border: 1px dashed var(--el-border-color-darker) !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.upload-box {
|
.upload-box {
|
||||||
.no-border {
|
.no-border {
|
||||||
:deep(.el-upload) {
|
:deep(.el-upload) {
|
||||||
border: none !important;
|
border: none !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.upload) {
|
:deep(.upload) {
|
||||||
.el-upload {
|
.el-upload {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -163,14 +170,17 @@ const uploadError = () => {
|
||||||
height: v-bind(height);
|
height: v-bind(height);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
border: 1px dashed var(--el-border-color-darker);
|
border: 1px dashed var(--el-border-color-darker);
|
||||||
border-radius: v-bind(borderRadius);
|
border-radius: v-bind(borderradius);
|
||||||
transition: var(--el-transition-duration-fast);
|
transition: var(--el-transition-duration-fast);
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
border-color: var(--el-color-primary);
|
border-color: var(--el-color-primary);
|
||||||
|
|
||||||
.upload-handle {
|
.upload-handle {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-upload-dragger {
|
.el-upload-dragger {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
@ -181,20 +191,24 @@ const uploadError = () => {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
border: 1px dashed var(--el-border-color-darker);
|
border: 1px dashed var(--el-border-color-darker);
|
||||||
border-radius: v-bind(borderRadius);
|
border-radius: v-bind(borderradius);
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
border: 1px dashed var(--el-color-primary);
|
border: 1px dashed var(--el-color-primary);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-upload-dragger.is-dragover {
|
.el-upload-dragger.is-dragover {
|
||||||
background-color: var(--el-color-primary-light-9);
|
background-color: var(--el-color-primary-light-9);
|
||||||
border: 2px dashed var(--el-color-primary) !important;
|
border: 2px dashed var(--el-color-primary) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.upload-image {
|
.upload-image {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
object-fit: contain;
|
object-fit: contain;
|
||||||
}
|
}
|
||||||
|
|
||||||
.upload-empty {
|
.upload-empty {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -204,11 +218,13 @@ const uploadError = () => {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
line-height: 30px;
|
line-height: 30px;
|
||||||
color: var(--el-color-info);
|
color: var(--el-color-info);
|
||||||
|
|
||||||
.el-icon {
|
.el-icon {
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
color: var(--el-text-color-secondary);
|
color: var(--el-text-color-secondary);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.upload-handle {
|
.upload-handle {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
|
@ -223,6 +239,7 @@ const uploadError = () => {
|
||||||
background: rgb(0 0 0 / 60%);
|
background: rgb(0 0 0 / 60%);
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
transition: var(--el-transition-duration-fast);
|
transition: var(--el-transition-duration-fast);
|
||||||
|
|
||||||
.handle-icon {
|
.handle-icon {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
@ -230,11 +247,13 @@ const uploadError = () => {
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
padding: 0 6%;
|
padding: 0 6%;
|
||||||
color: aliceblue;
|
color: aliceblue;
|
||||||
|
|
||||||
.el-icon {
|
.el-icon {
|
||||||
margin-bottom: 40%;
|
margin-bottom: 40%;
|
||||||
font-size: 130%;
|
font-size: 130%;
|
||||||
line-height: 130%;
|
line-height: 130%;
|
||||||
}
|
}
|
||||||
|
|
||||||
span {
|
span {
|
||||||
font-size: 85%;
|
font-size: 85%;
|
||||||
line-height: 85%;
|
line-height: 85%;
|
||||||
|
@ -243,6 +262,7 @@ const uploadError = () => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-upload__tip {
|
.el-upload__tip {
|
||||||
line-height: 18px;
|
line-height: 18px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="UploadImgs" setup>
|
<script lang="ts" setup>
|
||||||
import { PropType } from 'vue'
|
import { PropType } from 'vue'
|
||||||
import type { UploadFile, UploadProps, UploadUserFile } from 'element-plus'
|
import type { UploadFile, UploadProps, UploadUserFile } from 'element-plus'
|
||||||
import { ElNotification } from 'element-plus'
|
import { ElNotification } from 'element-plus'
|
||||||
|
@ -53,6 +53,8 @@ import { ElNotification } from 'element-plus'
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import { getAccessToken, getTenantId } from '@/utils/auth'
|
import { getAccessToken, getTenantId } from '@/utils/auth'
|
||||||
|
|
||||||
|
defineOptions({ name: 'UploadImgs' })
|
||||||
|
|
||||||
const message = useMessage() // 消息弹窗
|
const message = useMessage() // 消息弹窗
|
||||||
|
|
||||||
type FileTypes =
|
type FileTypes =
|
||||||
|
@ -80,7 +82,7 @@ const props = defineProps({
|
||||||
fileType: propTypes.array.def(['image/jpeg', 'image/png', 'image/gif']), // 图片类型限制 ==> 非必传(默认为 ["image/jpeg", "image/png", "image/gif"])
|
fileType: propTypes.array.def(['image/jpeg', 'image/png', 'image/gif']), // 图片类型限制 ==> 非必传(默认为 ["image/jpeg", "image/png", "image/gif"])
|
||||||
height: propTypes.string.def('150px'), // 组件高度 ==> 非必传(默认为 150px)
|
height: propTypes.string.def('150px'), // 组件高度 ==> 非必传(默认为 150px)
|
||||||
width: propTypes.string.def('150px'), // 组件宽度 ==> 非必传(默认为 150px)
|
width: propTypes.string.def('150px'), // 组件宽度 ==> 非必传(默认为 150px)
|
||||||
borderRadius: propTypes.string.def('8px') // 组件边框圆角 ==> 非必传(默认为 8px)
|
borderradius: propTypes.string.def('8px') // 组件边框圆角 ==> 非必传(默认为 8px)
|
||||||
})
|
})
|
||||||
|
|
||||||
const uploadHeaders = ref({
|
const uploadHeaders = ref({
|
||||||
|
@ -88,7 +90,7 @@ const uploadHeaders = ref({
|
||||||
'tenant-id': getTenantId()
|
'tenant-id': getTenantId()
|
||||||
})
|
})
|
||||||
|
|
||||||
const fileList = ref<UploadUserFile[]>()
|
const fileList = ref<UploadUserFile[]>([])
|
||||||
// fix: 改为动态监听赋值解决图片回显问题
|
// fix: 改为动态监听赋值解决图片回显问题
|
||||||
watch(
|
watch(
|
||||||
() => props.modelValue,
|
() => props.modelValue,
|
||||||
|
@ -216,7 +218,7 @@ const handlePictureCardPreview: UploadProps['onPreview'] = (uploadFile) => {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
border: 1px dashed var(--el-border-color-darker);
|
border: 1px dashed var(--el-border-color-darker);
|
||||||
border-radius: v-bind(borderRadius);
|
border-radius: v-bind(borderradius);
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
border: 1px dashed var(--el-color-primary);
|
border: 1px dashed var(--el-color-primary);
|
||||||
|
@ -233,7 +235,7 @@ const handlePictureCardPreview: UploadProps['onPreview'] = (uploadFile) => {
|
||||||
width: v-bind(width);
|
width: v-bind(width);
|
||||||
height: v-bind(height);
|
height: v-bind(height);
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
border-radius: v-bind(borderRadius);
|
border-radius: v-bind(borderradius);
|
||||||
}
|
}
|
||||||
|
|
||||||
.upload-image {
|
.upload-image {
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -57,7 +57,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script name="VerifyPoints" setup type="text/babel">
|
<script setup type="text/babel">
|
||||||
/**
|
/**
|
||||||
* VerifyPoints
|
* VerifyPoints
|
||||||
* @description 点选
|
* @description 点选
|
||||||
|
|
|
@ -71,7 +71,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script name="VerifySlide" setup type="text/babel">
|
<script setup type="text/babel">
|
||||||
/**
|
/**
|
||||||
* VerifySlide
|
* VerifySlide
|
||||||
* @description 滑块
|
* @description 滑块
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
<script lang="ts" name="XButton" setup>
|
<script lang="ts" setup>
|
||||||
import { PropType } from 'vue'
|
import { PropType } from 'vue'
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
|
|
||||||
|
defineOptions({ name: 'XButton' })
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
modelValue: propTypes.bool.def(false),
|
modelValue: propTypes.bool.def(false),
|
||||||
loading: propTypes.bool.def(false),
|
loading: propTypes.bool.def(false),
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
<script lang="ts" name="XTextButton" setup>
|
<script lang="ts" setup>
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import { PropType } from 'vue'
|
import { PropType } from 'vue'
|
||||||
|
|
||||||
|
defineOptions({ name: 'XTextButton' })
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
modelValue: propTypes.bool.def(false),
|
modelValue: propTypes.bool.def(false),
|
||||||
loading: propTypes.bool.def(false),
|
loading: propTypes.bool.def(false),
|
||||||
|
|
|
@ -206,7 +206,7 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="MyProcessDesigner">
|
<script lang="ts" setup>
|
||||||
// import 'bpmn-js/dist/assets/diagram-js.css' // 左边工具栏以及编辑节点的样式
|
// import 'bpmn-js/dist/assets/diagram-js.css' // 左边工具栏以及编辑节点的样式
|
||||||
// import 'bpmn-js/dist/assets/bpmn-font/css/bpmn.css'
|
// import 'bpmn-js/dist/assets/bpmn-font/css/bpmn.css'
|
||||||
// import 'bpmn-js/dist/assets/bpmn-font/css/bpmn-codes.css'
|
// import 'bpmn-js/dist/assets/bpmn-font/css/bpmn-codes.css'
|
||||||
|
@ -244,6 +244,9 @@ import { XmlNode, XmlNodeType, parseXmlString } from 'steady-xml'
|
||||||
// const eventName = reactive({
|
// const eventName = reactive({
|
||||||
// name: ''
|
// name: ''
|
||||||
// })
|
// })
|
||||||
|
|
||||||
|
defineOptions({ name: 'MyProcessDesigner' })
|
||||||
|
|
||||||
const bpmnCanvas = ref()
|
const bpmnCanvas = ref()
|
||||||
const refFile = ref()
|
const refFile = ref()
|
||||||
const emit = defineEmits([
|
const emit = defineEmits([
|
||||||
|
|
|
@ -6,10 +6,14 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="MyProcessViewer">
|
<script lang="ts" setup>
|
||||||
import BpmnViewer from 'bpmn-js/lib/Viewer'
|
import BpmnViewer from 'bpmn-js/lib/Viewer'
|
||||||
import DefaultEmptyXML from './plugins/defaultEmpty'
|
import DefaultEmptyXML from './plugins/defaultEmpty'
|
||||||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||||
|
import { formatDate } from '@/utils/formatTime'
|
||||||
|
|
||||||
|
defineOptions({ name: 'MyProcessViewer' })
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
value: {
|
value: {
|
||||||
// BPMN XML 字符串
|
// BPMN XML 字符串
|
||||||
|
@ -403,6 +407,7 @@ watch(
|
||||||
stroke-dasharray: 4px !important;
|
stroke-dasharray: 4px !important;
|
||||||
fill-opacity: 0.2 !important;
|
fill-opacity: 0.2 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.highlight-todo.djs-shape .djs-visual > :nth-child(1) {
|
.highlight-todo.djs-shape .djs-visual > :nth-child(1) {
|
||||||
fill: #1890ff !important;
|
fill: #1890ff !important;
|
||||||
stroke: #1890ff !important;
|
stroke: #1890ff !important;
|
||||||
|
@ -414,8 +419,9 @@ watch(
|
||||||
stroke: #1890ff !important;
|
stroke: #1890ff !important;
|
||||||
stroke-dasharray: 4px !important;
|
stroke-dasharray: 4px !important;
|
||||||
fill-opacity: 0.2 !important;
|
fill-opacity: 0.2 !important;
|
||||||
marker-end: url(#sequenceflow-end-_E7DFDF-_E7DFDF-803g1kf6zwzmcig1y2ulm5egr);
|
marker-end: url('#sequenceflow-end-_E7DFDF-_E7DFDF-803g1kf6zwzmcig1y2ulm5egr');
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.highlight-todo.djs-shape .djs-visual > :nth-child(1)) {
|
:deep(.highlight-todo.djs-shape .djs-visual > :nth-child(1)) {
|
||||||
fill: #1890ff !important;
|
fill: #1890ff !important;
|
||||||
stroke: #1890ff !important;
|
stroke: #1890ff !important;
|
||||||
|
@ -429,14 +435,17 @@ watch(
|
||||||
stroke: green !important;
|
stroke: green !important;
|
||||||
fill-opacity: 0.2 !important;
|
fill-opacity: 0.2 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.highlight.djs-shape .djs-visual > :nth-child(2) {
|
.highlight.djs-shape .djs-visual > :nth-child(2) {
|
||||||
fill: green !important;
|
fill: green !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.highlight.djs-shape .djs-visual > path {
|
.highlight.djs-shape .djs-visual > path {
|
||||||
fill: green !important;
|
fill: green !important;
|
||||||
fill-opacity: 0.2 !important;
|
fill-opacity: 0.2 !important;
|
||||||
stroke: green !important;
|
stroke: green !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.highlight.djs-connection > .djs-visual > path {
|
.highlight.djs-connection > .djs-visual > path {
|
||||||
stroke: green !important;
|
stroke: green !important;
|
||||||
}
|
}
|
||||||
|
@ -450,14 +459,17 @@ watch(
|
||||||
stroke: green !important;
|
stroke: green !important;
|
||||||
fill-opacity: 0.2 !important;
|
fill-opacity: 0.2 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.highlight.djs-shape .djs-visual > :nth-child(2)) {
|
:deep(.highlight.djs-shape .djs-visual > :nth-child(2)) {
|
||||||
fill: green !important;
|
fill: green !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.highlight.djs-shape .djs-visual > path) {
|
:deep(.highlight.djs-shape .djs-visual > path) {
|
||||||
fill: green !important;
|
fill: green !important;
|
||||||
fill-opacity: 0.2 !important;
|
fill-opacity: 0.2 !important;
|
||||||
stroke: green !important;
|
stroke: green !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.highlight.djs-connection > .djs-visual > path) {
|
:deep(.highlight.djs-connection > .djs-visual > path) {
|
||||||
stroke: green !important;
|
stroke: green !important;
|
||||||
}
|
}
|
||||||
|
@ -468,14 +480,17 @@ watch(
|
||||||
stroke: red !important;
|
stroke: red !important;
|
||||||
fill-opacity: 0.2 !important;
|
fill-opacity: 0.2 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.highlight-reject.djs-shape .djs-visual > :nth-child(2) {
|
.highlight-reject.djs-shape .djs-visual > :nth-child(2) {
|
||||||
fill: red !important;
|
fill: red !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.highlight-reject.djs-shape .djs-visual > path {
|
.highlight-reject.djs-shape .djs-visual > path {
|
||||||
fill: red !important;
|
fill: red !important;
|
||||||
fill-opacity: 0.2 !important;
|
fill-opacity: 0.2 !important;
|
||||||
stroke: red !important;
|
stroke: red !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.highlight-reject.djs-connection > .djs-visual > path {
|
.highlight-reject.djs-connection > .djs-visual > path {
|
||||||
stroke: red !important;
|
stroke: red !important;
|
||||||
}
|
}
|
||||||
|
@ -489,14 +504,17 @@ watch(
|
||||||
stroke: red !important;
|
stroke: red !important;
|
||||||
fill-opacity: 0.2 !important;
|
fill-opacity: 0.2 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.highlight-reject.djs-shape .djs-visual > :nth-child(2)) {
|
:deep(.highlight-reject.djs-shape .djs-visual > :nth-child(2)) {
|
||||||
fill: red !important;
|
fill: red !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.highlight-reject.djs-shape .djs-visual > path) {
|
:deep(.highlight-reject.djs-shape .djs-visual > path) {
|
||||||
fill: red !important;
|
fill: red !important;
|
||||||
fill-opacity: 0.2 !important;
|
fill-opacity: 0.2 !important;
|
||||||
stroke: red !important;
|
stroke: red !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.highlight-reject.djs-connection > .djs-visual > path) {
|
:deep(.highlight-reject.djs-connection > .djs-visual > path) {
|
||||||
stroke: red !important;
|
stroke: red !important;
|
||||||
}
|
}
|
||||||
|
@ -507,14 +525,17 @@ watch(
|
||||||
stroke: grey !important;
|
stroke: grey !important;
|
||||||
fill-opacity: 0.2 !important;
|
fill-opacity: 0.2 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.highlight-cancel.djs-shape .djs-visual > :nth-child(2) {
|
.highlight-cancel.djs-shape .djs-visual > :nth-child(2) {
|
||||||
fill: grey !important;
|
fill: grey !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.highlight-cancel.djs-shape .djs-visual > path {
|
.highlight-cancel.djs-shape .djs-visual > path {
|
||||||
fill: grey !important;
|
fill: grey !important;
|
||||||
fill-opacity: 0.2 !important;
|
fill-opacity: 0.2 !important;
|
||||||
stroke: grey !important;
|
stroke: grey !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.highlight-cancel.djs-connection > .djs-visual > path {
|
.highlight-cancel.djs-connection > .djs-visual > path {
|
||||||
stroke: grey !important;
|
stroke: grey !important;
|
||||||
}
|
}
|
||||||
|
@ -528,14 +549,17 @@ watch(
|
||||||
stroke: grey !important;
|
stroke: grey !important;
|
||||||
fill-opacity: 0.2 !important;
|
fill-opacity: 0.2 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.highlight-cancel.djs-shape .djs-visual > :nth-child(2)) {
|
:deep(.highlight-cancel.djs-shape .djs-visual > :nth-child(2)) {
|
||||||
fill: grey !important;
|
fill: grey !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.highlight-cancel.djs-shape .djs-visual > path) {
|
:deep(.highlight-cancel.djs-shape .djs-visual > path) {
|
||||||
fill: grey !important;
|
fill: grey !important;
|
||||||
fill-opacity: 0.2 !important;
|
fill-opacity: 0.2 !important;
|
||||||
stroke: grey !important;
|
stroke: grey !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.highlight-cancel.djs-connection > .djs-visual > path) {
|
:deep(.highlight-cancel.djs-connection > .djs-visual > path) {
|
||||||
stroke: grey !important;
|
stroke: grey !important;
|
||||||
}
|
}
|
||||||
|
@ -543,7 +567,7 @@ watch(
|
||||||
.element-overlays {
|
.element-overlays {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
background: rgba(0, 0, 0, 0.6);
|
background: rgb(0 0 0 / 60%);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
color: #fafafa;
|
color: #fafafa;
|
||||||
width: 200px;
|
width: 200px;
|
||||||
|
|
|
@ -5,9 +5,11 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="MyProcessPalette">
|
<script lang="ts" setup>
|
||||||
import { assign } from 'min-dash'
|
import { assign } from 'min-dash'
|
||||||
|
|
||||||
|
defineOptions({ name: 'MyProcessPalette' })
|
||||||
|
|
||||||
const bpmnInstances = () => (window as any).bpmnInstances
|
const bpmnInstances = () => (window as any).bpmnInstances
|
||||||
const addTask = (event, options: any = {}) => {
|
const addTask = (event, options: any = {}) => {
|
||||||
const ElementFactory = bpmnInstances().elementFactory
|
const ElementFactory = bpmnInstances().elementFactory
|
||||||
|
@ -30,12 +32,13 @@ const addTask = (event, options: any = {}) => {
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.my-process-palette {
|
.my-process-palette {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding: 80px 20px 20px 20px;
|
padding: 80px 20px 20px;
|
||||||
|
|
||||||
.test-button {
|
.test-button {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding: 8px 16px;
|
padding: 8px 16px;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
border: 1px solid rgba(24, 144, 255, 0.8);
|
border: 1px solid rgb(24 144 255 / 80%);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@
|
||||||
</el-collapse>
|
</el-collapse>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts" name="MyPropertiesPanel">
|
<script lang="ts" setup>
|
||||||
import ElementBaseInfo from './base/ElementBaseInfo.vue'
|
import ElementBaseInfo from './base/ElementBaseInfo.vue'
|
||||||
import ElementOtherConfig from './other/ElementOtherConfig.vue'
|
import ElementOtherConfig from './other/ElementOtherConfig.vue'
|
||||||
import ElementTask from './task/ElementTask.vue'
|
import ElementTask from './task/ElementTask.vue'
|
||||||
|
@ -73,6 +73,9 @@ import ElementListeners from './listeners/ElementListeners.vue'
|
||||||
import ElementProperties from './properties/ElementProperties.vue'
|
import ElementProperties from './properties/ElementProperties.vue'
|
||||||
// import ElementForm from './form/ElementForm.vue'
|
// import ElementForm from './form/ElementForm.vue'
|
||||||
import UserTaskListeners from './listeners/UserTaskListeners.vue'
|
import UserTaskListeners from './listeners/UserTaskListeners.vue'
|
||||||
|
|
||||||
|
defineOptions({ name: 'MyPropertiesPanel' })
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 侧边栏
|
* 侧边栏
|
||||||
* @Author MiyueFE
|
* @Author MiyueFE
|
||||||
|
|
|
@ -7,8 +7,9 @@
|
||||||
href="https://doc.iocoder.cn/bpm/#_3-%E6%B5%81%E7%A8%8B%E5%9B%BE%E7%A4%BA%E4%BE%8B"
|
href="https://doc.iocoder.cn/bpm/#_3-%E6%B5%81%E7%A8%8B%E5%9B%BE%E7%A4%BA%E4%BE%8B"
|
||||||
type="danger"
|
type="danger"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
>如何实现实现会签、或签?</el-link
|
|
||||||
>
|
>
|
||||||
|
如何实现实现会签、或签?
|
||||||
|
</el-link>
|
||||||
<el-form-item label="流程标识" prop="id">
|
<el-form-item label="流程标识" prop="id">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="needProps.id"
|
v-model="needProps.id"
|
||||||
|
@ -37,7 +38,9 @@
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts" name="ElementBaseInfo">
|
<script lang="ts" setup>
|
||||||
|
defineOptions({ name: 'ElementBaseInfo' })
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
businessObject: {
|
businessObject: {
|
||||||
type: Object,
|
type: Object,
|
||||||
|
|
|
@ -62,7 +62,9 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="FlowCondition">
|
<script lang="ts" setup>
|
||||||
|
defineOptions({ name: 'FlowCondition' })
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
businessObject: Object,
|
businessObject: Object,
|
||||||
type: String
|
type: String
|
||||||
|
|
|
@ -222,7 +222,9 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="ElementForm">
|
<script lang="ts" setup>
|
||||||
|
defineOptions({ name: 'ElementForm' })
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
id: String,
|
id: String,
|
||||||
type: String
|
type: String
|
||||||
|
|
|
@ -241,10 +241,13 @@
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts" name="ElementListeners">
|
<script lang="ts" setup>
|
||||||
import { ElMessageBox } from 'element-plus'
|
import { ElMessageBox } from 'element-plus'
|
||||||
import { createListenerObject, updateElementExtensions } from '../../utils'
|
import { createListenerObject, updateElementExtensions } from '../../utils'
|
||||||
import { initListenerType, initListenerForm, listenerType, fieldType } from './utilSelf'
|
import { initListenerType, initListenerForm, listenerType, fieldType } from './utilSelf'
|
||||||
|
|
||||||
|
defineOptions({ name: 'ElementListeners' })
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
id: String,
|
id: String,
|
||||||
type: String
|
type: String
|
||||||
|
|
|
@ -287,10 +287,13 @@
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts" name="UserTaskListeners">
|
<script lang="ts" setup>
|
||||||
import { ElMessageBox } from 'element-plus'
|
import { ElMessageBox } from 'element-plus'
|
||||||
import { createListenerObject, updateElementExtensions } from '../../utils'
|
import { createListenerObject, updateElementExtensions } from '../../utils'
|
||||||
import { initListenerForm, initListenerType, eventType, listenerType, fieldType } from './utilSelf'
|
import { initListenerForm, initListenerType, eventType, listenerType, fieldType } from './utilSelf'
|
||||||
|
|
||||||
|
defineOptions({ name: 'UserTaskListeners' })
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
id: String,
|
id: String,
|
||||||
type: String
|
type: String
|
||||||
|
|
|
@ -66,7 +66,9 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="ElementMultiInstance">
|
<script lang="ts" setup>
|
||||||
|
defineOptions({ name: 'ElementMultiInstance' })
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
businessObject: Object,
|
businessObject: Object,
|
||||||
type: String
|
type: String
|
||||||
|
|
|
@ -16,7 +16,8 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="ElementOtherConfig">
|
<script lang="ts" setup>
|
||||||
|
defineOptions({ name: 'ElementOtherConfig' })
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
id: String
|
id: String
|
||||||
})
|
})
|
||||||
|
|
|
@ -6,17 +6,18 @@
|
||||||
<el-table-column label="属性值" prop="value" min-width="100px" show-overflow-tooltip />
|
<el-table-column label="属性值" prop="value" min-width="100px" show-overflow-tooltip />
|
||||||
<el-table-column label="操作" width="110px">
|
<el-table-column label="操作" width="110px">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button link @click="openAttributesForm(scope.row, scope.$index)" size="small"
|
<el-button link @click="openAttributesForm(scope.row, scope.$index)" size="small">
|
||||||
>编辑</el-button
|
编辑
|
||||||
>
|
</el-button>
|
||||||
<el-divider direction="vertical" />
|
<el-divider direction="vertical" />
|
||||||
<el-button
|
<el-button
|
||||||
link
|
link
|
||||||
size="small"
|
size="small"
|
||||||
style="color: #ff4d4f"
|
style="color: #ff4d4f"
|
||||||
@click="removeAttributes(scope.row, scope.$index)"
|
@click="removeAttributes(scope.row, scope.$index)"
|
||||||
>移除</el-button
|
|
||||||
>
|
>
|
||||||
|
移除
|
||||||
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
@ -52,8 +53,9 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="ElementProperties">
|
<script lang="ts" setup>
|
||||||
import { ElMessageBox } from 'element-plus'
|
import { ElMessageBox } from 'element-plus'
|
||||||
|
defineOptions({ name: 'ElementProperties' })
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
id: String,
|
id: String,
|
||||||
type: String
|
type: String
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="panel-tab__content">
|
<div class="panel-tab__content">
|
||||||
<div class="panel-tab__content--title">
|
<div class="panel-tab__content--title">
|
||||||
<span><Icon icon="ep:menu" style="margin-right: 8px; color: #555555" />消息列表</span>
|
<span><Icon icon="ep:menu" style="margin-right: 8px; color: #555" />消息列表</span>
|
||||||
<XButton type="primary" title="创建新消息" preIcon="ep:plus" @click="openModel('message')" />
|
<XButton type="primary" title="创建新消息" preIcon="ep:plus" @click="openModel('message')" />
|
||||||
</div>
|
</div>
|
||||||
<el-table :data="messageList" border>
|
<el-table :data="messageList" border>
|
||||||
|
@ -11,9 +11,9 @@
|
||||||
</el-table>
|
</el-table>
|
||||||
<div
|
<div
|
||||||
class="panel-tab__content--title"
|
class="panel-tab__content--title"
|
||||||
style="padding-top: 8px; margin-top: 8px; border-top: 1px solid #eeeeee"
|
style="padding-top: 8px; margin-top: 8px; border-top: 1px solid #eee"
|
||||||
>
|
>
|
||||||
<span><Icon icon="ep:menu" style="margin-right: 8px; color: #555555" />信号列表</span>
|
<span><Icon icon="ep:menu" style="margin-right: 8px; color: #555" />信号列表</span>
|
||||||
<XButton type="primary" title="创建新信号" preIcon="ep:plus" @click="openModel('signal')" />
|
<XButton type="primary" title="创建新信号" preIcon="ep:plus" @click="openModel('signal')" />
|
||||||
</div>
|
</div>
|
||||||
<el-table :data="signalList" border>
|
<el-table :data="signalList" border>
|
||||||
|
@ -45,7 +45,9 @@
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts" name="SignalAndMassage">
|
<script lang="ts" setup>
|
||||||
|
defineOptions({ name: 'SignalAndMassage' })
|
||||||
|
|
||||||
const message = useMessage()
|
const message = useMessage()
|
||||||
const signalList = ref<any[]>([])
|
const signalList = ref<any[]>([])
|
||||||
const messageList = ref<any[]>([])
|
const messageList = ref<any[]>([])
|
||||||
|
|
|
@ -20,11 +20,13 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="ElementTaskConfig">
|
<script lang="ts" setup>
|
||||||
import UserTask from './task-components/UserTask.vue'
|
import UserTask from './task-components/UserTask.vue'
|
||||||
import ScriptTask from './task-components/ScriptTask.vue'
|
import ScriptTask from './task-components/ScriptTask.vue'
|
||||||
import ReceiveTask from './task-components/ReceiveTask.vue'
|
import ReceiveTask from './task-components/ReceiveTask.vue'
|
||||||
|
|
||||||
|
defineOptions({ name: 'ElementTaskConfig' })
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
id: String,
|
id: String,
|
||||||
type: String
|
type: String
|
||||||
|
|
|
@ -48,7 +48,8 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="ReceiveTask">
|
<script lang="ts" setup>
|
||||||
|
defineOptions({ name: 'ReceiveTask' })
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
id: String,
|
id: String,
|
||||||
type: String
|
type: String
|
||||||
|
|
|
@ -44,7 +44,8 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="ScriptTask">
|
<script lang="ts" setup>
|
||||||
|
defineOptions({ name: 'ScriptTask' })
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
id: String,
|
id: String,
|
||||||
type: String
|
type: String
|
||||||
|
|
|
@ -37,7 +37,8 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="UserTask">
|
<script lang="ts" setup>
|
||||||
|
defineOptions({ name: 'UserTask' })
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
id: String,
|
id: String,
|
||||||
type: String
|
type: String
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
<script lang="ts" name="AppView" setup>
|
<script lang="ts" setup>
|
||||||
import { useTagsViewStore } from '@/store/modules/tagsView'
|
import { useTagsViewStore } from '@/store/modules/tagsView'
|
||||||
import { useAppStore } from '@/store/modules/app'
|
import { useAppStore } from '@/store/modules/app'
|
||||||
import { Footer } from '@/layout/components/Footer'
|
import { Footer } from '@/layout/components/Footer'
|
||||||
|
|
||||||
|
defineOptions({ name: 'AppView' })
|
||||||
|
|
||||||
const appStore = useAppStore()
|
const appStore = useAppStore()
|
||||||
|
|
||||||
const layout = computed(() => appStore.getLayout)
|
const layout = computed(() => appStore.getLayout)
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
<script lang="ts" name="Collapse" setup>
|
<script lang="ts" setup>
|
||||||
import { useAppStore } from '@/store/modules/app'
|
import { useAppStore } from '@/store/modules/app'
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
|
|
||||||
|
defineOptions({ name: 'Collapse' })
|
||||||
|
|
||||||
const { getPrefixCls } = useDesign()
|
const { getPrefixCls } = useDesign()
|
||||||
|
|
||||||
const prefixCls = getPrefixCls('collapse')
|
const prefixCls = getPrefixCls('collapse')
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<script lang="ts" name="ContextMenu" setup>
|
<script lang="ts" setup>
|
||||||
import { PropType } from 'vue'
|
import { PropType } from 'vue'
|
||||||
|
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
|
@ -6,6 +6,8 @@ import type { RouteLocationNormalizedLoaded } from 'vue-router'
|
||||||
import { contextMenuSchema } from '@/types/contextMenu'
|
import { contextMenuSchema } from '@/types/contextMenu'
|
||||||
import type { ElDropdown } from 'element-plus'
|
import type { ElDropdown } from 'element-plus'
|
||||||
|
|
||||||
|
defineOptions({ name: 'ContextMenu' })
|
||||||
|
|
||||||
const { getPrefixCls } = useDesign()
|
const { getPrefixCls } = useDesign()
|
||||||
|
|
||||||
const prefixCls = getPrefixCls('context-menu')
|
const prefixCls = getPrefixCls('context-menu')
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
<script lang="ts" name="Footer" setup>
|
<script lang="ts" setup>
|
||||||
import { useAppStore } from '@/store/modules/app'
|
import { useAppStore } from '@/store/modules/app'
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
|
|
||||||
|
// eslint-disable-next-line vue/no-reserved-component-names
|
||||||
|
defineOptions({ name: 'Footer' })
|
||||||
|
|
||||||
const { getPrefixCls } = useDesign()
|
const { getPrefixCls } = useDesign()
|
||||||
|
|
||||||
const prefixCls = getPrefixCls('footer')
|
const prefixCls = getPrefixCls('footer')
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
<script lang="ts" name="LocaleDropdown" setup>
|
<script lang="ts" setup>
|
||||||
import { useLocaleStore } from '@/store/modules/locale'
|
import { useLocaleStore } from '@/store/modules/locale'
|
||||||
import { useLocale } from '@/hooks/web/useLocale'
|
import { useLocale } from '@/hooks/web/useLocale'
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
|
|
||||||
|
defineOptions({ name: 'LocaleDropdown' })
|
||||||
|
|
||||||
const { getPrefixCls } = useDesign()
|
const { getPrefixCls } = useDesign()
|
||||||
|
|
||||||
const prefixCls = getPrefixCls('locale-dropdown')
|
const prefixCls = getPrefixCls('locale-dropdown')
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
<script lang="ts" name="Logo" setup>
|
<script lang="ts" setup>
|
||||||
import { computed, onMounted, ref, unref, watch } from 'vue'
|
import { computed, onMounted, ref, unref, watch } from 'vue'
|
||||||
import { useAppStore } from '@/store/modules/app'
|
import { useAppStore } from '@/store/modules/app'
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
|
|
||||||
|
defineOptions({ name: 'Logo' })
|
||||||
|
|
||||||
const { getPrefixCls } = useDesign()
|
const { getPrefixCls } = useDesign()
|
||||||
|
|
||||||
const prefixCls = getPrefixCls('logo')
|
const prefixCls = getPrefixCls('logo')
|
||||||
|
|
|
@ -13,6 +13,7 @@ const { getPrefixCls } = useDesign()
|
||||||
const prefixCls = getPrefixCls('menu')
|
const prefixCls = getPrefixCls('menu')
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
|
// eslint-disable-next-line vue/no-reserved-component-names
|
||||||
name: 'Menu',
|
name: 'Menu',
|
||||||
props: {
|
props: {
|
||||||
menuSelect: {
|
menuSelect: {
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
<script lang="ts" name="Message" setup>
|
<script lang="ts" setup>
|
||||||
import { formatDate } from '@/utils/formatTime'
|
import { formatDate } from '@/utils/formatTime'
|
||||||
import * as NotifyMessageApi from '@/api/system/notify/message'
|
import * as NotifyMessageApi from '@/api/system/notify/message'
|
||||||
|
|
||||||
|
defineOptions({ name: 'Message' })
|
||||||
|
|
||||||
const { push } = useRouter()
|
const { push } = useRouter()
|
||||||
const activeName = ref('notice')
|
const activeName = ref('notice')
|
||||||
const unreadCount = ref(0) // 未读消息数量
|
const unreadCount = ref(0) // 未读消息数量
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
<script lang="ts" name="ScreenFull" setup>
|
<script lang="ts" setup>
|
||||||
import { Icon } from '@/components/Icon'
|
import { Icon } from '@/components/Icon'
|
||||||
import { useFullscreen } from '@vueuse/core'
|
import { useFullscreen } from '@vueuse/core'
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
|
|
||||||
|
defineOptions({ name: 'ScreenFull' })
|
||||||
|
|
||||||
const { getPrefixCls } = useDesign()
|
const { getPrefixCls } = useDesign()
|
||||||
|
|
||||||
const prefixCls = getPrefixCls('screenfull')
|
const prefixCls = getPrefixCls('screenfull')
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<script lang="ts" name="Setting" setup>
|
<script lang="ts" setup>
|
||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
import { useClipboard, useCssVar } from '@vueuse/core'
|
import { useClipboard, useCssVar } from '@vueuse/core'
|
||||||
|
|
||||||
|
@ -13,6 +13,8 @@ import ColorRadioPicker from './components/ColorRadioPicker.vue'
|
||||||
import InterfaceDisplay from './components/InterfaceDisplay.vue'
|
import InterfaceDisplay from './components/InterfaceDisplay.vue'
|
||||||
import LayoutRadioPicker from './components/LayoutRadioPicker.vue'
|
import LayoutRadioPicker from './components/LayoutRadioPicker.vue'
|
||||||
|
|
||||||
|
defineOptions({ name: 'Setting' })
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const appStore = useAppStore()
|
const appStore = useAppStore()
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
<script lang="ts" name="ColorRadioPicker" setup>
|
<script lang="ts" setup>
|
||||||
import { PropType } from 'vue'
|
import { PropType } from 'vue'
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
|
|
||||||
|
defineOptions({ name: 'ColorRadioPicker' })
|
||||||
|
|
||||||
const { getPrefixCls } = useDesign()
|
const { getPrefixCls } = useDesign()
|
||||||
|
|
||||||
const prefixCls = getPrefixCls('color-radio-picker')
|
const prefixCls = getPrefixCls('color-radio-picker')
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
<script lang="ts" name="InterfaceDisplay" setup>
|
<script lang="ts" setup>
|
||||||
import { setCssVar } from '@/utils'
|
import { setCssVar } from '@/utils'
|
||||||
|
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
import { useWatermark } from '@/hooks/web/useWatermark'
|
import { useWatermark } from '@/hooks/web/useWatermark'
|
||||||
import { useAppStore } from '@/store/modules/app'
|
import { useAppStore } from '@/store/modules/app'
|
||||||
|
|
||||||
|
defineOptions({ name: 'InterfaceDisplay' })
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const { getPrefixCls } = useDesign()
|
const { getPrefixCls } = useDesign()
|
||||||
const { setWatermark } = useWatermark()
|
const { setWatermark } = useWatermark()
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
<script lang="ts" name="LayoutRadioPicker" setup>
|
<script lang="ts" setup>
|
||||||
import { useAppStore } from '@/store/modules/app'
|
import { useAppStore } from '@/store/modules/app'
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
|
|
||||||
|
defineOptions({ name: 'LayoutRadioPicker' })
|
||||||
|
|
||||||
const { getPrefixCls } = useDesign()
|
const { getPrefixCls } = useDesign()
|
||||||
|
|
||||||
const prefixCls = getPrefixCls('layout-radio-picker')
|
const prefixCls = getPrefixCls('layout-radio-picker')
|
||||||
|
@ -66,7 +68,7 @@ $prefix-cls: #{$namespace}-layout-radio-picker;
|
||||||
border: 2px solid #e5e7eb;
|
border: 2px solid #e5e7eb;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
|
|
||||||
&:before {
|
&::before {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
|
@ -78,14 +80,14 @@ $prefix-cls: #{$namespace}-layout-radio-picker;
|
||||||
content: '';
|
content: '';
|
||||||
}
|
}
|
||||||
|
|
||||||
&:after {
|
&::after {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 25%;
|
height: 25%;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
border-radius: 4px 4px 0 4px;
|
border-radius: 4px 4px 0;
|
||||||
content: '';
|
content: '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -94,7 +96,7 @@ $prefix-cls: #{$namespace}-layout-radio-picker;
|
||||||
border: 2px solid #e5e7eb;
|
border: 2px solid #e5e7eb;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
|
|
||||||
&:before {
|
&::before {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
|
@ -106,7 +108,7 @@ $prefix-cls: #{$namespace}-layout-radio-picker;
|
||||||
content: '';
|
content: '';
|
||||||
}
|
}
|
||||||
|
|
||||||
&:after {
|
&::after {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
|
@ -122,7 +124,7 @@ $prefix-cls: #{$namespace}-layout-radio-picker;
|
||||||
border: 2px solid #e5e7eb;
|
border: 2px solid #e5e7eb;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
|
|
||||||
&:before {
|
&::before {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
|
@ -139,7 +141,7 @@ $prefix-cls: #{$namespace}-layout-radio-picker;
|
||||||
border: 2px solid #e5e7eb;
|
border: 2px solid #e5e7eb;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
|
|
||||||
&:before {
|
&::before {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
|
@ -151,7 +153,7 @@ $prefix-cls: #{$namespace}-layout-radio-picker;
|
||||||
content: '';
|
content: '';
|
||||||
}
|
}
|
||||||
|
|
||||||
&:after {
|
&::after {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
<script lang="ts" name="SizeDropdown" setup>
|
<script lang="ts" setup>
|
||||||
import { useAppStore } from '@/store/modules/app'
|
import { useAppStore } from '@/store/modules/app'
|
||||||
|
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
import { ElementPlusSize } from '@/types/elementPlus'
|
import { ElementPlusSize } from '@/types/elementPlus'
|
||||||
|
|
||||||
|
defineOptions({ name: 'SizeDropdown' })
|
||||||
|
|
||||||
const { getPrefixCls } = useDesign()
|
const { getPrefixCls } = useDesign()
|
||||||
|
|
||||||
const prefixCls = getPrefixCls('size-dropdown')
|
const prefixCls = getPrefixCls('size-dropdown')
|
||||||
|
|
|
@ -217,7 +217,7 @@ $prefix-cls: #{$namespace}-tab-menu;
|
||||||
.#{$prefix-cls} {
|
.#{$prefix-cls} {
|
||||||
transition: all var(--transition-time-02);
|
transition: all var(--transition-time-02);
|
||||||
|
|
||||||
&:after {
|
&::after {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<script lang="ts" name="TagsView" setup>
|
<script lang="ts" setup>
|
||||||
import type { RouteLocationNormalizedLoaded, RouterLinkProps } from 'vue-router'
|
import type { RouteLocationNormalizedLoaded, RouterLinkProps } from 'vue-router'
|
||||||
import { usePermissionStore } from '@/store/modules/permission'
|
import { usePermissionStore } from '@/store/modules/permission'
|
||||||
import { useTagsViewStore } from '@/store/modules/tagsView'
|
import { useTagsViewStore } from '@/store/modules/tagsView'
|
||||||
|
@ -11,6 +11,8 @@ import { ElScrollbar } from 'element-plus'
|
||||||
import { useScrollTo } from '@/hooks/event/useScrollTo'
|
import { useScrollTo } from '@/hooks/event/useScrollTo'
|
||||||
import { useTemplateRefsList } from '@vueuse/core'
|
import { useTemplateRefsList } from '@vueuse/core'
|
||||||
|
|
||||||
|
defineOptions({ name: 'TagsView' })
|
||||||
|
|
||||||
const { getPrefixCls } = useDesign()
|
const { getPrefixCls } = useDesign()
|
||||||
|
|
||||||
const prefixCls = getPrefixCls('tags-view')
|
const prefixCls = getPrefixCls('tags-view')
|
||||||
|
@ -483,7 +485,7 @@ $prefix-cls: #{$namespace}-tags-view;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&:after {
|
&::after {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 1px;
|
top: 1px;
|
||||||
left: 0;
|
left: 0;
|
||||||
|
@ -502,7 +504,7 @@ $prefix-cls: #{$namespace}-tags-view;
|
||||||
padding-right: 16px;
|
padding-right: 16px;
|
||||||
margin-left: 4px;
|
margin-left: 4px;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
border-radius: 3px 3px 3px 3px;
|
border-radius: 3px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
border: 1px solid #d9d9d9;
|
border: 1px solid #d9d9d9;
|
||||||
|
|
||||||
|
@ -549,7 +551,7 @@ $prefix-cls: #{$namespace}-tags-view;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&:after {
|
&::after {
|
||||||
border-right: 1px solid var(--el-border-color);
|
border-right: 1px solid var(--el-border-color);
|
||||||
border-left: 1px solid var(--el-border-color);
|
border-left: 1px solid var(--el-border-color);
|
||||||
}
|
}
|
||||||
|
@ -561,7 +563,7 @@ $prefix-cls: #{$namespace}-tags-view;
|
||||||
height: calc(100% - 4px);
|
height: calc(100% - 4px);
|
||||||
padding-right: 16px;
|
padding-right: 16px;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
border-radius: 3px 3px 3px 3px;
|
border-radius: 3px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
border: 1px solid var(--el-border-color);
|
border: 1px solid var(--el-border-color);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
<script lang="ts" name="ThemeSwitch" setup>
|
<script lang="ts" setup>
|
||||||
import { useAppStore } from '@/store/modules/app'
|
import { useAppStore } from '@/store/modules/app'
|
||||||
import { useIcon } from '@/hooks/web/useIcon'
|
import { useIcon } from '@/hooks/web/useIcon'
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
|
|
||||||
|
defineOptions({ name: 'ThemeSwitch' })
|
||||||
|
|
||||||
const { getPrefixCls } = useDesign()
|
const { getPrefixCls } = useDesign()
|
||||||
|
|
||||||
const prefixCls = getPrefixCls('theme-switch')
|
const prefixCls = getPrefixCls('theme-switch')
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<script lang="ts" name="UserInfo" setup>
|
<script lang="ts" setup>
|
||||||
import { ElMessageBox } from 'element-plus'
|
import { ElMessageBox } from 'element-plus'
|
||||||
|
|
||||||
import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
|
import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
|
||||||
|
@ -7,6 +7,8 @@ import avatarImg from '@/assets/imgs/avatar.gif'
|
||||||
import { useUserStore } from '@/store/modules/user'
|
import { useUserStore } from '@/store/modules/user'
|
||||||
import { useTagsViewStore } from '@/store/modules/tagsView'
|
import { useTagsViewStore } from '@/store/modules/tagsView'
|
||||||
|
|
||||||
|
defineOptions({ name: 'UserInfo' })
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
const { wsCache } = useCache()
|
const { wsCache } = useCache()
|
||||||
|
|
|
@ -20,7 +20,7 @@ export const getRefreshToken = () => {
|
||||||
|
|
||||||
// 设置token
|
// 设置token
|
||||||
export const setToken = (token: TokenType) => {
|
export const setToken = (token: TokenType) => {
|
||||||
wsCache.set(RefreshTokenKey, token.refreshToken, { exp: token.expiresTime })
|
wsCache.set(RefreshTokenKey, token.refreshToken)
|
||||||
wsCache.set(AccessTokenKey, token.accessToken)
|
wsCache.set(AccessTokenKey, token.accessToken)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
<template>
|
<template>
|
||||||
<Error type="403" @error-click="push('/')" />
|
<Error type="403" @error-click="push('/')" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="Error403" setup>
|
<script lang="ts" setup>
|
||||||
|
defineOptions({ name: 'Error403' })
|
||||||
|
|
||||||
const { push } = useRouter()
|
const { push } = useRouter()
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<Error @error-click="push('/')" />
|
<Error @error-click="push('/')" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="Error404" setup>
|
<script lang="ts" setup>
|
||||||
|
defineOptions({ name: 'Error404' })
|
||||||
const { push } = useRouter()
|
const { push } = useRouter()
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<Error type="500" @error-click="push('/')" />
|
<Error type="500" @error-click="push('/')" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="Error500" setup>
|
<script lang="ts" setup>
|
||||||
|
defineOptions({ name: 'Error500' })
|
||||||
const { push } = useRouter()
|
const { push } = useRouter()
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -160,7 +160,7 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts" name="Home">
|
<script lang="ts" setup>
|
||||||
import { set } from 'lodash-es'
|
import { set } from 'lodash-es'
|
||||||
import { EChartsOption } from 'echarts'
|
import { EChartsOption } from 'echarts'
|
||||||
import { formatTime } from '@/utils'
|
import { formatTime } from '@/utils'
|
||||||
|
@ -171,6 +171,8 @@ import avatarImg from '@/assets/imgs/avatar.gif'
|
||||||
import type { WorkplaceTotal, Project, Notice, Shortcut } from './types'
|
import type { WorkplaceTotal, Project, Notice, Shortcut } from './types'
|
||||||
import { pieOptions, barOptions } from './echarts-data'
|
import { pieOptions, barOptions } from './echarts-data'
|
||||||
|
|
||||||
|
defineOptions({ name: 'Home' })
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
const { setWatermark } = useWatermark()
|
const { setWatermark } = useWatermark()
|
||||||
|
|
|
@ -140,7 +140,7 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="Home2" setup>
|
<script lang="ts" setup>
|
||||||
import { set } from 'lodash-es'
|
import { set } from 'lodash-es'
|
||||||
import { EChartsOption } from 'echarts'
|
import { EChartsOption } from 'echarts'
|
||||||
|
|
||||||
|
@ -148,6 +148,8 @@ import { useDesign } from '@/hooks/web/useDesign'
|
||||||
import type { AnalysisTotalTypes } from './types'
|
import type { AnalysisTotalTypes } from './types'
|
||||||
import { barOptions, lineOptions, pieOptions } from './echarts-data'
|
import { barOptions, lineOptions, pieOptions } from './echarts-data'
|
||||||
|
|
||||||
|
defineOptions({ name: 'Home2' })
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
const { getPrefixCls } = useDesign()
|
const { getPrefixCls } = useDesign()
|
||||||
|
|
|
@ -60,7 +60,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="Login" setup>
|
<script lang="ts" setup>
|
||||||
import { underlineToHump } from '@/utils'
|
import { underlineToHump } from '@/utils'
|
||||||
|
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
|
@ -70,6 +70,8 @@ import { LocaleDropdown } from '@/layout/components/LocaleDropdown'
|
||||||
|
|
||||||
import { LoginForm, MobileForm, QrCodeForm, RegisterForm, SSOLoginVue } from './components'
|
import { LoginForm, MobileForm, QrCodeForm, RegisterForm, SSOLoginVue } from './components'
|
||||||
|
|
||||||
|
defineOptions({ name: 'Login' })
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const appStore = useAppStore()
|
const appStore = useAppStore()
|
||||||
const { getPrefixCls } = useDesign()
|
const { getPrefixCls } = useDesign()
|
||||||
|
|
|
@ -143,7 +143,7 @@
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="LoginForm" setup>
|
<script lang="ts" setup>
|
||||||
import { ElLoading } from 'element-plus'
|
import { ElLoading } from 'element-plus'
|
||||||
import LoginFormTitle from './LoginFormTitle.vue'
|
import LoginFormTitle from './LoginFormTitle.vue'
|
||||||
import type { RouteLocationNormalizedLoaded } from 'vue-router'
|
import type { RouteLocationNormalizedLoaded } from 'vue-router'
|
||||||
|
@ -155,6 +155,8 @@ import { usePermissionStore } from '@/store/modules/permission'
|
||||||
import * as LoginApi from '@/api/login'
|
import * as LoginApi from '@/api/login'
|
||||||
import { LoginStateEnum, useFormValid, useLoginState } from './useLogin'
|
import { LoginStateEnum, useFormValid, useLoginState } from './useLogin'
|
||||||
|
|
||||||
|
defineOptions({ name: 'LoginForm' })
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const message = useMessage()
|
const message = useMessage()
|
||||||
const iconHouse = useIcon({ icon: 'ep:house' })
|
const iconHouse = useIcon({ icon: 'ep:house' })
|
||||||
|
|
|
@ -3,9 +3,11 @@
|
||||||
{{ getFormTitle }}
|
{{ getFormTitle }}
|
||||||
</h2>
|
</h2>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="LoginFormTitle" setup>
|
<script lang="ts" setup>
|
||||||
import { LoginStateEnum, useLoginState } from './useLogin'
|
import { LoginStateEnum, useLoginState } from './useLogin'
|
||||||
|
|
||||||
|
defineOptions({ name: 'LoginFormTitle' })
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
const { getLoginState } = useLoginState()
|
const { getLoginState } = useLoginState()
|
||||||
|
|
|
@ -92,7 +92,7 @@
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="MobileForm" setup>
|
<script lang="ts" setup>
|
||||||
import type { RouteLocationNormalizedLoaded } from 'vue-router'
|
import type { RouteLocationNormalizedLoaded } from 'vue-router'
|
||||||
|
|
||||||
import { useIcon } from '@/hooks/web/useIcon'
|
import { useIcon } from '@/hooks/web/useIcon'
|
||||||
|
@ -103,6 +103,8 @@ import { getTenantIdByName, sendSmsCode, smsLogin } from '@/api/login'
|
||||||
import LoginFormTitle from './LoginFormTitle.vue'
|
import LoginFormTitle from './LoginFormTitle.vue'
|
||||||
import { LoginStateEnum, useFormValid, useLoginState } from './useLogin'
|
import { LoginStateEnum, useFormValid, useLoginState } from './useLogin'
|
||||||
|
|
||||||
|
defineOptions({ name: 'MobileForm' })
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const message = useMessage()
|
const message = useMessage()
|
||||||
const permissionStore = usePermissionStore()
|
const permissionStore = usePermissionStore()
|
||||||
|
|
|
@ -16,12 +16,14 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="QrCodeForm" setup>
|
<script lang="ts" setup>
|
||||||
import logoImg from '@/assets/imgs/logo.png'
|
import logoImg from '@/assets/imgs/logo.png'
|
||||||
|
|
||||||
import LoginFormTitle from './LoginFormTitle.vue'
|
import LoginFormTitle from './LoginFormTitle.vue'
|
||||||
import { LoginStateEnum, useLoginState } from './useLogin'
|
import { LoginStateEnum, useLoginState } from './useLogin'
|
||||||
|
|
||||||
|
defineOptions({ name: 'QrCodeForm' })
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const { handleBackLogin, getLoginState } = useLoginState()
|
const { handleBackLogin, getLoginState } = useLoginState()
|
||||||
const getShow = computed(() => unref(getLoginState) === LoginStateEnum.QR_CODE)
|
const getShow = computed(() => unref(getLoginState) === LoginStateEnum.QR_CODE)
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
</template>
|
</template>
|
||||||
</Form>
|
</Form>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="RegisterForm" setup>
|
<script lang="ts" setup>
|
||||||
import type { FormRules } from 'element-plus'
|
import type { FormRules } from 'element-plus'
|
||||||
|
|
||||||
import { useForm } from '@/hooks/web/useForm'
|
import { useForm } from '@/hooks/web/useForm'
|
||||||
|
@ -44,6 +44,8 @@ import LoginFormTitle from './LoginFormTitle.vue'
|
||||||
import { LoginStateEnum, useLoginState } from './useLogin'
|
import { LoginStateEnum, useLoginState } from './useLogin'
|
||||||
import { FormSchema } from '@/types/form'
|
import { FormSchema } from '@/types/form'
|
||||||
|
|
||||||
|
defineOptions({ name: 'RegisterForm' })
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const { required } = useValidator()
|
const { required } = useValidator()
|
||||||
const { register, elFormRef } = useForm()
|
const { register, elFormRef } = useForm()
|
||||||
|
|
|
@ -38,11 +38,14 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="SSOLogin" setup>
|
<script lang="ts" setup>
|
||||||
import LoginFormTitle from './LoginFormTitle.vue'
|
import LoginFormTitle from './LoginFormTitle.vue'
|
||||||
import * as OAuth2Api from '@/api/login/oauth2'
|
import * as OAuth2Api from '@/api/login/oauth2'
|
||||||
import { LoginStateEnum, useLoginState } from './useLogin'
|
import { LoginStateEnum, useLoginState } from './useLogin'
|
||||||
import type { RouteLocationNormalizedLoaded } from 'vue-router'
|
import type { RouteLocationNormalizedLoaded } from 'vue-router'
|
||||||
|
|
||||||
|
defineOptions({ name: 'SSOLogin' })
|
||||||
|
|
||||||
const route = useRoute() // 路由
|
const route = useRoute() // 路由
|
||||||
const { currentRoute } = useRouter() // 路由
|
const { currentRoute } = useRouter() // 路由
|
||||||
const { getLoginState, setLoginState } = useLoginState()
|
const { getLoginState, setLoginState } = useLoginState()
|
||||||
|
|
|
@ -39,21 +39,25 @@ const activeName = ref('basicInfo')
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.user {
|
.user {
|
||||||
max-height: 960px;
|
max-height: 960px;
|
||||||
padding: 15px 20px 20px 20px;
|
padding: 15px 20px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-header {
|
.card-header {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-card .el-card__header, .el-card .el-card__body) {
|
:deep(.el-card .el-card__header, .el-card .el-card__body) {
|
||||||
padding: 15px !important;
|
padding: 15px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.profile-tabs > .el-tabs__content {
|
.profile-tabs > .el-tabs__content {
|
||||||
padding: 32px;
|
padding: 32px;
|
||||||
color: #6b778c;
|
color: #6b778c;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-tabs--left .el-tabs__content {
|
.el-tabs--left .el-tabs__content {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,10 +10,8 @@
|
||||||
<XButton :title="t('common.save')" @click="submit()" />
|
<XButton :title="t('common.save')" @click="submit()" />
|
||||||
<XButton :title="t('common.reset')" type="danger" @click="init()" />
|
<XButton :title="t('common.reset')" type="danger" @click="init()" />
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="BasicInfo" setup>
|
<script lang="ts" setup>
|
||||||
import type { FormRules } from 'element-plus'
|
import type { FormRules } from 'element-plus'
|
||||||
import { ElMessage } from 'element-plus'
|
|
||||||
|
|
||||||
import { FormSchema } from '@/types/form'
|
import { FormSchema } from '@/types/form'
|
||||||
import type { FormExpose } from '@/components/Form'
|
import type { FormExpose } from '@/components/Form'
|
||||||
import {
|
import {
|
||||||
|
@ -22,7 +20,10 @@ import {
|
||||||
UserProfileUpdateReqVO
|
UserProfileUpdateReqVO
|
||||||
} from '@/api/system/user/profile'
|
} from '@/api/system/user/profile'
|
||||||
|
|
||||||
|
defineOptions({ name: 'BasicInfo' })
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
const message = useMessage() // 消息弹窗
|
||||||
// 表单校验
|
// 表单校验
|
||||||
const rules = reactive<FormRules>({
|
const rules = reactive<FormRules>({
|
||||||
nickname: [{ required: true, message: t('profile.rules.nickname'), trigger: 'blur' }],
|
nickname: [{ required: true, message: t('profile.rules.nickname'), trigger: 'blur' }],
|
||||||
|
@ -74,7 +75,7 @@ const submit = () => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
const data = unref(formRef)?.formModel as UserProfileUpdateReqVO
|
const data = unref(formRef)?.formModel as UserProfileUpdateReqVO
|
||||||
await updateUserProfile(data)
|
await updateUserProfile(data)
|
||||||
ElMessage.success(t('common.updateSuccess'))
|
message.success(t('common.updateSuccess'))
|
||||||
await init()
|
await init()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -46,12 +46,14 @@
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="ProfileUser" setup>
|
<script lang="ts" setup>
|
||||||
import { formatDate } from '@/utils/formatTime'
|
import { formatDate } from '@/utils/formatTime'
|
||||||
import UserAvatar from './UserAvatar.vue'
|
import UserAvatar from './UserAvatar.vue'
|
||||||
|
|
||||||
import { getUserProfile, ProfileVO } from '@/api/system/user/profile'
|
import { getUserProfile, ProfileVO } from '@/api/system/user/profile'
|
||||||
|
|
||||||
|
defineOptions({ name: 'ProfileUser' })
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const userInfo = ref<ProfileVO>()
|
const userInfo = ref<ProfileVO>()
|
||||||
const getUserInfo = async () => {
|
const getUserInfo = async () => {
|
||||||
|
@ -79,7 +81,7 @@ onMounted(async () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
.list-group {
|
.list-group {
|
||||||
padding-left: 0px;
|
padding-left: 0;
|
||||||
list-style: none;
|
list-style: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,7 +89,7 @@ onMounted(async () => {
|
||||||
border-bottom: 1px solid #e7eaec;
|
border-bottom: 1px solid #e7eaec;
|
||||||
border-top: 1px solid #e7eaec;
|
border-top: 1px solid #e7eaec;
|
||||||
margin-bottom: -1px;
|
margin-bottom: -1px;
|
||||||
padding: 11px 0px;
|
padding: 11px 0;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,12 +15,14 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="ResetPwd" setup>
|
<script lang="ts" setup>
|
||||||
import type { FormInstance, FormRules } from 'element-plus'
|
import type { FormInstance, FormRules } from 'element-plus'
|
||||||
|
|
||||||
import { InputPassword } from '@/components/InputPassword'
|
import { InputPassword } from '@/components/InputPassword'
|
||||||
import { updateUserPassword } from '@/api/system/user/profile'
|
import { updateUserPassword } from '@/api/system/user/profile'
|
||||||
|
|
||||||
|
defineOptions({ name: 'ResetPwd' })
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const message = useMessage()
|
const message = useMessage()
|
||||||
const formRef = ref<FormInstance>()
|
const formRef = ref<FormInstance>()
|
||||||
|
|
|
@ -10,10 +10,12 @@
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="UserAvatar" setup>
|
<script lang="ts" setup>
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import { uploadAvatar } from '@/api/system/user/profile'
|
import { uploadAvatar } from '@/api/system/user/profile'
|
||||||
|
|
||||||
|
defineOptions({ name: 'UserAvatar' })
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
img: propTypes.string.def('')
|
img: propTypes.string.def('')
|
||||||
})
|
})
|
||||||
|
|
|
@ -21,11 +21,13 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" name="UserSocial" setup>
|
<script lang="ts" setup>
|
||||||
import { SystemUserSocialTypeEnum } from '@/utils/constants'
|
import { SystemUserSocialTypeEnum } from '@/utils/constants'
|
||||||
import { getUserProfile, ProfileVO } from '@/api/system/user/profile'
|
import { getUserProfile, ProfileVO } from '@/api/system/user/profile'
|
||||||
import { socialAuthRedirect, socialBind, socialUnbind } from '@/api/system/user/socialUser'
|
import { socialAuthRedirect, socialBind, socialUnbind } from '@/api/system/user/socialUser'
|
||||||
|
|
||||||
|
defineOptions({ name: 'UserSocial' })
|
||||||
|
|
||||||
const message = useMessage()
|
const message = useMessage()
|
||||||
const socialUsers = ref<any[]>([])
|
const socialUsers = ref<any[]>([])
|
||||||
const userInfo = ref<ProfileVO>()
|
const userInfo = ref<ProfileVO>()
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
<template>
|
<template>
|
||||||
<div></div>
|
<div></div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts" name="Redirect">
|
<script lang="ts" setup>
|
||||||
|
defineOptions({ name: 'Redirect' })
|
||||||
|
|
||||||
const { currentRoute, replace } = useRouter()
|
const { currentRoute, replace } = useRouter()
|
||||||
const { params, query } = unref(currentRoute)
|
const { params, query } = unref(currentRoute)
|
||||||
const { path, _redirect_type = 'path' } = params
|
const { path, _redirect_type = 'path' } = params
|
||||||
|
|
|
@ -94,12 +94,15 @@
|
||||||
</Dialog>
|
</Dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="BpmProcessDefinition">
|
<script lang="ts" setup>
|
||||||
import { DICT_TYPE } from '@/utils/dict'
|
import { DICT_TYPE } from '@/utils/dict'
|
||||||
import { dateFormatter } from '@/utils/formatTime'
|
import { dateFormatter } from '@/utils/formatTime'
|
||||||
import { MyProcessViewer } from '@/components/bpmnProcessDesigner/package'
|
import { MyProcessViewer } from '@/components/bpmnProcessDesigner/package'
|
||||||
import * as DefinitionApi from '@/api/bpm/definition'
|
import * as DefinitionApi from '@/api/bpm/definition'
|
||||||
import { setConfAndFields2 } from '@/utils/formCreate'
|
import { setConfAndFields2 } from '@/utils/formCreate'
|
||||||
|
|
||||||
|
defineOptions({ name: 'BpmProcessDefinition' })
|
||||||
|
|
||||||
const { push } = useRouter() // 路由
|
const { push } = useRouter() // 路由
|
||||||
const { query } = useRoute() // 查询参数
|
const { query } = useRoute() // 查询参数
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue