zant-admin 2.0.1 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/.editorconfig +6 -0
  2. package/.env.development +3 -0
  3. package/.env.production +1 -0
  4. package/.env.test +1 -0
  5. package/.gitignore +36 -0
  6. package/.prettierrc.json +9 -0
  7. package/README.en.md +461 -272
  8. package/README.md +4 -3
  9. package/bin/cli.js +1 -1
  10. package/bin/prompts.js +17 -53
  11. package/eslint.config.js +30 -0
  12. package/index.html +13 -0
  13. package/jsconfig.json +8 -0
  14. package/package.json +12 -2
  15. package/src/App.vue +16 -16
  16. package/src/api/methods/logError.js +8 -8
  17. package/src/api/methods/logOperation.js +8 -8
  18. package/src/api/methods/login.js +6 -6
  19. package/src/api/methods/quartz.js +36 -36
  20. package/src/api/methods/region.js +16 -16
  21. package/src/api/methods/sysAccount.js +29 -29
  22. package/src/api/methods/sysDict.js +29 -29
  23. package/src/api/methods/sysDictItem.js +26 -26
  24. package/src/api/methods/sysMenu.js +42 -42
  25. package/src/api/methods/sysRole.js +35 -35
  26. package/src/api/methods/sysUser.js +25 -25
  27. package/src/api/methods/system.js +15 -15
  28. package/src/api/request.js +225 -225
  29. package/src/assets/css/zcui.css +1023 -1023
  30. package/src/components/IconPicker.vue +351 -351
  31. package/src/components/MainPage.vue +838 -838
  32. package/src/components/details/logErrorDetails.vue +58 -58
  33. package/src/components/details/logOperationDetails.vue +76 -76
  34. package/src/components/edit/QuartzEdit.vue +221 -221
  35. package/src/components/edit/SysAccountEdit.vue +185 -185
  36. package/src/components/edit/SysDictEdit.vue +116 -116
  37. package/src/components/edit/SysDictItemEdit.vue +136 -136
  38. package/src/components/edit/SysRoleEdit.vue +111 -111
  39. package/src/config/index.js +74 -74
  40. package/src/directives/permission.js +49 -49
  41. package/src/main.js +37 -37
  42. package/src/stores/config.js +43 -43
  43. package/src/stores/dict.js +33 -33
  44. package/src/stores/menu.js +81 -81
  45. package/src/stores/user.js +21 -21
  46. package/src/utils/baseEcharts.js +661 -661
  47. package/src/utils/dictTemplate.js +26 -26
  48. package/src/utils/regionUtils.js +173 -173
  49. package/src/utils/useFormCRUD.js +59 -59
  50. package/src/views/baiscstatis/center.vue +474 -474
  51. package/src/views/baiscstatis/iframePage.vue +29 -29
  52. package/src/views/baiscstatis/notFound.vue +192 -192
  53. package/src/views/console.vue +821 -821
  54. package/src/views/demo/button.vue +269 -269
  55. package/src/views/demo/importexport.vue +119 -119
  56. package/src/views/demo/region.vue +322 -322
  57. package/src/views/demo/statistics.vue +214 -214
  58. package/src/views/home.vue +6 -6
  59. package/src/views/operations/log/logError.vue +78 -78
  60. package/src/views/operations/log/logLogin.vue +66 -66
  61. package/src/views/operations/log/logOperation.vue +103 -103
  62. package/src/views/operations/log/logQuartz.vue +56 -56
  63. package/src/views/operations/quartz.vue +179 -179
  64. package/src/views/operations/serviceMonitoring.vue +134 -134
  65. package/src/views/system/sysAccount.vue +128 -128
  66. package/src/views/system/sysDict.vue +159 -159
  67. package/src/views/system/sysDictItem.vue +118 -118
  68. package/src/views/system/sysMenu.vue +225 -225
  69. package/src/views/system/sysRole.vue +207 -207
  70. package/vite.config.js +33 -0
package/README.md CHANGED
@@ -245,10 +245,11 @@ zant-admin/
245
245
  ### 安装 CLI 脚手架(推荐)
246
246
 
247
247
  ```bash
248
- # 全局安装脚手架
249
- npm install -g zant-admin
248
+ # 使用 npx 快速创建项目(推荐,无需全局安装)
249
+ npx zant-admin create my-project
250
250
 
251
- # 创建新项目
251
+ # 或者全局安装后使用
252
+ npm install -g zant-admin
252
253
  zant-admin create my-project
253
254
 
254
255
  # 进入项目目录
package/bin/cli.js CHANGED
@@ -16,7 +16,7 @@ const program = new Command();
16
16
  program
17
17
  .name('zant-admin')
18
18
  .description('基于 Vue 3.5 + Vite + Ant Design Vue 的前端管理系统脚手架')
19
- .version('2.0.1');
19
+ .version('2.0.3');
20
20
 
21
21
  // 创建项目命令
22
22
  program
package/bin/prompts.js CHANGED
@@ -12,7 +12,7 @@ export function createPromptInterface() {
12
12
  input: process.stdin,
13
13
  output: process.stdout
14
14
  });
15
-
15
+
16
16
  return rl;
17
17
  }
18
18
 
@@ -37,33 +37,32 @@ export function closePrompt(rl) {
37
37
  */
38
38
  export async function collectProjectConfig(projectName) {
39
39
  const rl = createPromptInterface();
40
-
40
+
41
41
  console.log('\n🎯 项目配置向导');
42
42
  console.log('='.repeat(50));
43
-
43
+
44
44
  const config = {
45
45
  projectName,
46
46
  description: '',
47
47
  author: '',
48
- template: 'default',
49
- features: []
48
+ template: 'default'
50
49
  };
51
-
50
+
52
51
  try {
53
52
  // 询问项目描述
54
53
  config.description = await question(rl, '📝 请输入项目描述: ') || '基于 Vue 3 + Vite + Ant Design Vue 的前端管理系统';
55
-
54
+
56
55
  // 询问作者名称
57
56
  config.author = await question(rl, '👤 请输入作者名称 (可选): ');
58
-
57
+
59
58
  // 选择模板类型
60
59
  console.log('\n📋 请选择项目模板:');
61
60
  console.log('1. 默认模板 (推荐) - 包含完整的管理系统功能');
62
61
  console.log('2. 基础模板 - 仅包含核心功能');
63
62
  console.log('3. 完整模板 - 包含所有示例和高级功能');
64
-
63
+
65
64
  const templateChoice = await question(rl, '请选择 (1-3, 默认 1): ');
66
-
65
+
67
66
  switch (templateChoice) {
68
67
  case '2':
69
68
  config.template = 'basic';
@@ -74,58 +73,23 @@ export async function collectProjectConfig(projectName) {
74
73
  default:
75
74
  config.template = 'default';
76
75
  }
77
-
78
- // 选择功能特性
79
- console.log('\n✨ 请选择要包含的功能特性 (可多选):');
80
- console.log('1. 用户管理模块');
81
- console.log('2. 权限管理模块');
82
- console.log('3. 数据可视化图表');
83
- console.log('4. 文件上传功能');
84
- console.log('5. 国际化支持');
85
-
86
- const featureChoices = await question(rl, '请输入功能编号 (用逗号分隔, 如 1,3,5): ');
87
-
88
- if (featureChoices) {
89
- const choices = featureChoices.split(',').map(c => c.trim());
90
-
91
- choices.forEach(choice => {
92
- switch (choice) {
93
- case '1':
94
- config.features.push('user-management');
95
- break;
96
- case '2':
97
- config.features.push('permission-management');
98
- break;
99
- case '3':
100
- config.features.push('data-visualization');
101
- break;
102
- case '4':
103
- config.features.push('file-upload');
104
- break;
105
- case '5':
106
- config.features.push('i18n-support');
107
- break;
108
- }
109
- });
110
- }
111
-
76
+
112
77
  // 确认配置
113
78
  console.log('\n📊 配置摘要:');
114
79
  console.log(` 项目名称: ${config.projectName}`);
115
80
  console.log(` 项目描述: ${config.description}`);
116
81
  console.log(` 作者名称: ${config.author || '未指定'}`);
117
82
  console.log(` 项目模板: ${getTemplateName(config.template)}`);
118
- console.log(` 功能特性: ${config.features.length > 0 ? config.features.join(', ') : '默认功能'}`);
119
-
83
+
120
84
  const confirm = await question(rl, '\n✅ 确认创建项目? (y/N): ');
121
-
85
+
122
86
  if (confirm.toLowerCase() !== 'y' && confirm.toLowerCase() !== 'yes') {
123
87
  console.log('❌ 项目创建已取消');
124
88
  process.exit(0);
125
89
  }
126
-
90
+
127
91
  return config;
128
-
92
+
129
93
  } finally {
130
94
  closePrompt(rl);
131
95
  }
@@ -140,7 +104,7 @@ function getTemplateName(template) {
140
104
  'basic': '基础模板',
141
105
  'full': '完整模板'
142
106
  };
143
-
107
+
144
108
  return templates[template] || template;
145
109
  }
146
110
 
@@ -149,11 +113,11 @@ function getTemplateName(template) {
149
113
  */
150
114
  export async function askSkipInstall() {
151
115
  const rl = createPromptInterface();
152
-
116
+
153
117
  try {
154
118
  const answer = await question(rl, '\n📦 是否跳过依赖安装? (y/N): ');
155
119
  return answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes';
156
120
  } finally {
157
121
  closePrompt(rl);
158
122
  }
159
- }
123
+ }
@@ -0,0 +1,30 @@
1
+ import js from '@eslint/js'
2
+ import pluginVue from 'eslint-plugin-vue'
3
+ import skipFormatting from '@vue/eslint-config-prettier/skip-formatting'
4
+
5
+ export default [
6
+ {
7
+ name: 'app/files-to-lint',
8
+ files: ['**/*.{js,mjs,jsx,vue}'],
9
+ },
10
+
11
+ {
12
+ name: 'app/files-to-ignore',
13
+ ignores: ['**/dist/**', '**/dist-ssr/**', '**/coverage/**'],
14
+ },
15
+
16
+ js.configs.recommended,
17
+ ...pluginVue.configs['flat/essential'],
18
+ skipFormatting,
19
+ {
20
+ env: {
21
+ node: true, // 使 ESLint 识别 Node.js 中的全局变量,如 process
22
+ },
23
+ // 自定义的 ESLint 规则
24
+ rules: {
25
+ 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
26
+ 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
27
+ 'vue/multi-word-component-names': 'off',
28
+ },
29
+ }
30
+ ]
package/index.html ADDED
@@ -0,0 +1,13 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" href="/logo.png" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>ZAntAdmin</title>
8
+ </head>
9
+ <body>
10
+ <div id="app"></div>
11
+ <script type="module" src="/src/main.js"></script>
12
+ </body>
13
+ </html>
package/jsconfig.json ADDED
@@ -0,0 +1,8 @@
1
+ {
2
+ "compilerOptions": {
3
+ "paths": {
4
+ "@/*": ["./src/*"]
5
+ }
6
+ },
7
+ "exclude": ["node_modules", "dist"]
8
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zant-admin",
3
- "version": "2.0.1",
3
+ "version": "2.0.3",
4
4
  "description": "基于 Vue 3.5 + Vite + Ant Design Vue 的前端管理系统脚手架",
5
5
  "main": "bin/cli.js",
6
6
  "bin": {
@@ -66,7 +66,17 @@
66
66
  "src/",
67
67
  "public/",
68
68
  "README.md",
69
- "SCAFFOLD_README.md"
69
+ "SCAFFOLD_README.md",
70
+ ".editorconfig",
71
+ ".env.development",
72
+ ".env.test",
73
+ ".env.production",
74
+ "eslint.config.js",
75
+ "index.html",
76
+ "jsconfig.json",
77
+ "vite.config.js",
78
+ ".prettierrc.json",
79
+ ".gitignore"
70
80
  ],
71
81
  "publishConfig": {
72
82
  "access": "public"
package/src/App.vue CHANGED
@@ -1,16 +1,16 @@
1
- <template>
2
- <a-config-provider :locale="localeStore.locale">
3
- <section id="app">
4
- <router-view />
5
- </section>
6
- </a-config-provider>
7
- </template>
8
- <style></style>
9
-
10
- <script setup>
11
- import { configStore } from './stores/config'
12
- import { dictStore } from './stores/dict'
13
- const localeStore = configStore()
14
- const dict = dictStore()
15
- dict.initDictList()
16
- </script>
1
+ <template>
2
+ <a-config-provider :locale="localeStore.locale">
3
+ <section id="app">
4
+ <router-view />
5
+ </section>
6
+ </a-config-provider>
7
+ </template>
8
+ <style></style>
9
+
10
+ <script setup>
11
+ import { configStore } from './stores/config'
12
+ import { dictStore } from './stores/dict'
13
+ const localeStore = configStore()
14
+ const dict = dictStore()
15
+ dict.initDictList()
16
+ </script>
@@ -1,8 +1,8 @@
1
- import { get } from '@/api/request'
2
- const logError = {
3
- //根据id获取信息
4
- detail(params) {
5
- return get('logError/detail', params)
6
- },
7
- }
8
- export default logError
1
+ import { get } from '@/api/request'
2
+ const logError = {
3
+ //根据id获取信息
4
+ detail(params) {
5
+ return get('logError/detail', params)
6
+ },
7
+ }
8
+ export default logError
@@ -1,8 +1,8 @@
1
- import { get } from '@/api/request'
2
- const logOperation = {
3
- //根据id获取信息
4
- detail(params) {
5
- return get('logOperation/detail', params)
6
- },
7
- }
8
- export default logOperation
1
+ import { get } from '@/api/request'
2
+ const logOperation = {
3
+ //根据id获取信息
4
+ detail(params) {
5
+ return get('logOperation/detail', params)
6
+ },
7
+ }
8
+ export default logOperation
@@ -1,6 +1,6 @@
1
- import { post } from '@/api/request'
2
-
3
- // 登录
4
- export function login(params) {
5
- return post('sysAccount/login', params)
6
- }
1
+ import { post } from '@/api/request'
2
+
3
+ // 登录
4
+ export function login(params) {
5
+ return post('sysAccount/login', params)
6
+ }
@@ -1,36 +1,36 @@
1
- import { get, post } from '@/api/request'
2
- const quartz = {
3
- //根据id获取信息
4
- get(params) {
5
- return get('quartz/get', params)
6
- },
7
- //添加任务
8
- add(params) {
9
- return post('quartz/add', params)
10
- },
11
- //修改
12
- update(params) {
13
- return post('quartz/update', params)
14
- },
15
- //暂停任务
16
- pauseTask(params) {
17
- return get('quartz/pauseTask', params)
18
- },
19
- //恢复任务
20
- resumeTask(params) {
21
- return get('quartz/resumeTask', params)
22
- },
23
- //删除任务
24
- delete(params) {
25
- return get('quartz/delete', params)
26
- },
27
- //立即执行
28
- triggerTask(params) {
29
- return get('quartz/triggerTask', params)
30
- },
31
- //获取程序集和类名
32
- getAssembly(params) {
33
- return get('quartz/getAssembly', params)
34
- },
35
- }
36
- export default quartz
1
+ import { get, post } from '@/api/request'
2
+ const quartz = {
3
+ //根据id获取信息
4
+ get(params) {
5
+ return get('quartz/get', params)
6
+ },
7
+ //添加任务
8
+ add(params) {
9
+ return post('quartz/add', params)
10
+ },
11
+ //修改
12
+ update(params) {
13
+ return post('quartz/update', params)
14
+ },
15
+ //暂停任务
16
+ pauseTask(params) {
17
+ return get('quartz/pauseTask', params)
18
+ },
19
+ //恢复任务
20
+ resumeTask(params) {
21
+ return get('quartz/resumeTask', params)
22
+ },
23
+ //删除任务
24
+ delete(params) {
25
+ return get('quartz/delete', params)
26
+ },
27
+ //立即执行
28
+ triggerTask(params) {
29
+ return get('quartz/triggerTask', params)
30
+ },
31
+ //获取程序集和类名
32
+ getAssembly(params) {
33
+ return get('quartz/getAssembly', params)
34
+ },
35
+ }
36
+ export default quartz
@@ -1,16 +1,16 @@
1
- import { get } from '@/api/request'
2
- const region = {
3
- //获取所有省份
4
- getAllProvince() {
5
- return get('region/getAllProvince')
6
- },
7
- //获取所有城市
8
- getAllCity() {
9
- return get('region/getAllCity')
10
- },
11
- //获取所有区域(区/县)
12
- getAllAreas() {
13
- return get('region/getAllAreas')
14
- },
15
- }
16
- export default region
1
+ import { get } from '@/api/request'
2
+ const region = {
3
+ //获取所有省份
4
+ getAllProvince() {
5
+ return get('region/getAllProvince')
6
+ },
7
+ //获取所有城市
8
+ getAllCity() {
9
+ return get('region/getAllCity')
10
+ },
11
+ //获取所有区域(区/县)
12
+ getAllAreas() {
13
+ return get('region/getAllAreas')
14
+ },
15
+ }
16
+ export default region
@@ -1,29 +1,29 @@
1
- import { post, get } from '@/api/request'
2
-
3
- const sysAccount = {
4
- //根据id获取信息
5
- get(params) {
6
- return get('sysAccount/get', params)
7
- },
8
- //新增
9
- add(params) {
10
- return post('sysAccount/add', params, true)
11
- },
12
- //修改
13
- update(params) {
14
- return post('sysAccount/update', params, true)
15
- },
16
- //修改是否启用
17
- updateIsEnabled(params) {
18
- return get('sysAccount/updateIsEnabled', params)
19
- },
20
- //发送短信
21
- sendCode(params) {
22
- return get('sysAccount/sendCode', params)
23
- },
24
- //修改密码
25
- updatePwd(params) {
26
- return get('sysAccount/updatePwd', params)
27
- },
28
- }
29
- export default sysAccount
1
+ import { post, get } from '@/api/request'
2
+
3
+ const sysAccount = {
4
+ //根据id获取信息
5
+ get(params) {
6
+ return get('sysAccount/get', params)
7
+ },
8
+ //新增
9
+ add(params) {
10
+ return post('sysAccount/add', params, true)
11
+ },
12
+ //修改
13
+ update(params) {
14
+ return post('sysAccount/update', params, true)
15
+ },
16
+ //修改是否启用
17
+ updateIsEnabled(params) {
18
+ return get('sysAccount/updateIsEnabled', params)
19
+ },
20
+ //发送短信
21
+ sendCode(params) {
22
+ return get('sysAccount/sendCode', params)
23
+ },
24
+ //修改密码
25
+ updatePwd(params) {
26
+ return get('sysAccount/updatePwd', params)
27
+ },
28
+ }
29
+ export default sysAccount
@@ -1,29 +1,29 @@
1
- import { post, get } from '@/api/request'
2
-
3
- const sysDict = {
4
- //根据id获取信息
5
- get(params) {
6
- return get('sysDict/get', params)
7
- },
8
- //保存
9
- save(params) {
10
- return post('sysDict/save', params)
11
- },
12
- //修改是否启用
13
- updateIsEnabled(params) {
14
- return get('sysDict/updateIsEnabled', params)
15
- },
16
- //新增
17
- add(params) {
18
- return post('sysDict/add', params)
19
- },
20
- //更新
21
- update(params) {
22
- return post('sysDict/update', params)
23
- }, //查询字典值
24
- getDictList() {
25
- return get('sysDict/getDictList')
26
- },
27
- }
28
- // 获取字典分页信息
29
- export default sysDict
1
+ import { post, get } from '@/api/request'
2
+
3
+ const sysDict = {
4
+ //根据id获取信息
5
+ get(params) {
6
+ return get('sysDict/get', params)
7
+ },
8
+ //保存
9
+ save(params) {
10
+ return post('sysDict/save', params)
11
+ },
12
+ //修改是否启用
13
+ updateIsEnabled(params) {
14
+ return get('sysDict/updateIsEnabled', params)
15
+ },
16
+ //新增
17
+ add(params) {
18
+ return post('sysDict/add', params)
19
+ },
20
+ //更新
21
+ update(params) {
22
+ return post('sysDict/update', params)
23
+ }, //查询字典值
24
+ getDictList() {
25
+ return get('sysDict/getDictList')
26
+ },
27
+ }
28
+ // 获取字典分页信息
29
+ export default sysDict
@@ -1,26 +1,26 @@
1
- import { post, get } from '@/api/request'
2
-
3
- const sysDictItem = {
4
- //根据id获取信息
5
- get(params) {
6
- return get('sysDictItem/get', params, true)
7
- },
8
- //保存
9
- save(params) {
10
- return post('sysDictItem/save', params)
11
- },
12
- //新增
13
- add(params) {
14
- return post('sysDictItem/add', params, true)
15
- },
16
- //更新
17
- update(params) {
18
- return post('sysDictItem/update', params, true)
19
- },
20
- //修改是否启用
21
- updateIsEnabled(params) {
22
- return get('sysDictItem/updateIsEnabled', params)
23
- },
24
- }
25
- // 获取字典分页信息
26
- export default sysDictItem
1
+ import { post, get } from '@/api/request'
2
+
3
+ const sysDictItem = {
4
+ //根据id获取信息
5
+ get(params) {
6
+ return get('sysDictItem/get', params, true)
7
+ },
8
+ //保存
9
+ save(params) {
10
+ return post('sysDictItem/save', params)
11
+ },
12
+ //新增
13
+ add(params) {
14
+ return post('sysDictItem/add', params, true)
15
+ },
16
+ //更新
17
+ update(params) {
18
+ return post('sysDictItem/update', params, true)
19
+ },
20
+ //修改是否启用
21
+ updateIsEnabled(params) {
22
+ return get('sysDictItem/updateIsEnabled', params)
23
+ },
24
+ }
25
+ // 获取字典分页信息
26
+ export default sysDictItem