vue3-admin-gpt 1.0.0

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 (118) hide show
  1. package/.env.development +14 -0
  2. package/.env.production +14 -0
  3. package/LICENSE +21 -0
  4. package/README.en.md +106 -0
  5. package/README.md +104 -0
  6. package/build-zip.cjs +53 -0
  7. package/cli.js +110 -0
  8. package/jsconfig.json +9 -0
  9. package/package.json +92 -0
  10. package/public/index.html +20 -0
  11. package/public/robots.txt +2 -0
  12. package/rspack.config.js +282 -0
  13. package/rspack.js +162 -0
  14. package/src/App.vue +9 -0
  15. package/src/api/icon.js +9 -0
  16. package/src/api/router.js +9 -0
  17. package/src/api/table.js +25 -0
  18. package/src/api/tree.js +9 -0
  19. package/src/api/user.js +34 -0
  20. package/src/assets/error_images/401.png +0 -0
  21. package/src/assets/error_images/404.png +0 -0
  22. package/src/assets/error_images/cloud.png +0 -0
  23. package/src/assets/login_images/background.jpg +0 -0
  24. package/src/assets/logo.png +0 -0
  25. package/src/assets/qr_logo/lqr_logo.png +0 -0
  26. package/src/assets/vuejs-fill.svg +4 -0
  27. package/src/components/VabPageHeader/index.vue +133 -0
  28. package/src/config/index.js +7 -0
  29. package/src/config/net.config.js +20 -0
  30. package/src/config/permission.js +136 -0
  31. package/src/config/setting.config.js +62 -0
  32. package/src/config/settings.js +6 -0
  33. package/src/config/theme.config.js +14 -0
  34. package/src/layouts/EmptyLayout.vue +3 -0
  35. package/src/layouts/components/VabAppMain/index.vue +109 -0
  36. package/src/layouts/components/VabAvatar/index.vue +255 -0
  37. package/src/layouts/components/VabBreadcrumb/index.vue +61 -0
  38. package/src/layouts/components/VabFullScreen/index.vue +61 -0
  39. package/src/layouts/components/VabLogo/index.vue +94 -0
  40. package/src/layouts/components/VabNav/index.vue +176 -0
  41. package/src/layouts/components/VabSide/components/VabMenuItem.vue +80 -0
  42. package/src/layouts/components/VabSide/components/VabSideItem.vue +100 -0
  43. package/src/layouts/components/VabSide/components/VabSubmenu.vue +56 -0
  44. package/src/layouts/components/VabSide/index.vue +123 -0
  45. package/src/layouts/components/VabTabs/index.vue +500 -0
  46. package/src/layouts/components/VabTheme/index.vue +603 -0
  47. package/src/layouts/components/VabTop/index.vue +286 -0
  48. package/src/layouts/export.js +29 -0
  49. package/src/layouts/index.vue +339 -0
  50. package/src/main.js +40 -0
  51. package/src/plugins/echarts.js +4 -0
  52. package/src/plugins/index.js +44 -0
  53. package/src/plugins/support.js +16 -0
  54. package/src/router/index.js +400 -0
  55. package/src/store/index.js +26 -0
  56. package/src/store/modules/errorLog.js +27 -0
  57. package/src/store/modules/routes.js +60 -0
  58. package/src/store/modules/settings.js +73 -0
  59. package/src/store/modules/table.js +22 -0
  60. package/src/store/modules/tabsBar.js +109 -0
  61. package/src/store/modules/user.js +131 -0
  62. package/src/styles/element-variables.scss +13 -0
  63. package/src/styles/loading.scss +345 -0
  64. package/src/styles/nav-icons.scss +52 -0
  65. package/src/styles/normalize.scss +353 -0
  66. package/src/styles/spinner/dots.css +68 -0
  67. package/src/styles/spinner/gauge.css +104 -0
  68. package/src/styles/spinner/inner-circles.css +51 -0
  69. package/src/styles/spinner/plus.css +341 -0
  70. package/src/styles/themes/default.scss +1 -0
  71. package/src/styles/transition.scss +18 -0
  72. package/src/styles/vab.scss +476 -0
  73. package/src/styles/variables.scss +69 -0
  74. package/src/utils/accessToken.js +56 -0
  75. package/src/utils/eventBus.js +8 -0
  76. package/src/utils/handleRoutes.js +100 -0
  77. package/src/utils/index.js +231 -0
  78. package/src/utils/message.js +67 -0
  79. package/src/utils/pageTitle.js +11 -0
  80. package/src/utils/password.js +43 -0
  81. package/src/utils/permission.js +19 -0
  82. package/src/utils/request.js +187 -0
  83. package/src/utils/static.js +81 -0
  84. package/src/utils/vab.js +218 -0
  85. package/src/utils/validate.js +48 -0
  86. package/src/views/401.vue +302 -0
  87. package/src/views/404.vue +302 -0
  88. package/src/views/demo/index.vue +591 -0
  89. package/src/views/index/index.vue +1489 -0
  90. package/src/views/login/index.vue +456 -0
  91. package/src/views/register/index.vue +524 -0
  92. package/src/views/vab/calendar.vue +488 -0
  93. package/src/views/vab/campaign.vue +1006 -0
  94. package/src/views/vab/chart.vue +189 -0
  95. package/src/views/vab/customer.vue +666 -0
  96. package/src/views/vab/editor.vue +84 -0
  97. package/src/views/vab/form.vue +151 -0
  98. package/src/views/vab/help.vue +390 -0
  99. package/src/views/vab/icon.vue +113 -0
  100. package/src/views/vab/knowledge.vue +820 -0
  101. package/src/views/vab/nested/menu1/menu2/menu3.vue +29 -0
  102. package/src/views/vab/nested/menu1/menu2.vue +33 -0
  103. package/src/views/vab/nested/menu1.vue +33 -0
  104. package/src/views/vab/nested.vue +97 -0
  105. package/src/views/vab/notification.vue +416 -0
  106. package/src/views/vab/order.vue +507 -0
  107. package/src/views/vab/permissions.vue +214 -0
  108. package/src/views/vab/product.vue +724 -0
  109. package/src/views/vab/project.vue +559 -0
  110. package/src/views/vab/settings.vue +319 -0
  111. package/src/views/vab/statistics.vue +431 -0
  112. package/src/views/vab/table.vue +110 -0
  113. package/src/views/vab/task.vue +613 -0
  114. package/src/views/vab/team.vue +662 -0
  115. package/src/views/vab/tree.vue +44 -0
  116. package/src/views/vab/upload.vue +180 -0
  117. package/src/views/vab/vue3Demo/index.vue +103 -0
  118. package/src/views/vab/workflow.vue +863 -0
@@ -0,0 +1,180 @@
1
+ <template>
2
+ <div class="upload-container">
3
+ <el-card shadow="never">
4
+ <template #header>
5
+ <div class="card-header">
6
+ <span>文件上传</span>
7
+ </div>
8
+ </template>
9
+
10
+ <el-row :gutter="20">
11
+ <el-col :span="12">
12
+ <el-card shadow="hover">
13
+ <div class="upload-demo">
14
+ <h3>点击上传</h3>
15
+ <el-upload
16
+ class="upload-demo"
17
+ drag
18
+ action="https://jsonplaceholder.typicode.com/posts/"
19
+ multiple
20
+ :on-success="handleSuccess"
21
+ :on-error="handleError"
22
+ :before-remove="beforeRemove"
23
+ :on-exceed="handleExceed"
24
+ :file-list="fileList"
25
+ >
26
+ <el-icon class="el-icon--upload"><upload-filled /></el-icon>
27
+ <div class="el-upload__text">
28
+ 将文件拖到此处,或<em>点击上传</em>
29
+ </div>
30
+ <template #tip>
31
+ <div class="el-upload__tip">
32
+ 只能上传jpg/png文件,且不超过500kb
33
+ </div>
34
+ </template>
35
+ </el-upload>
36
+ </div>
37
+ </el-card>
38
+ </el-col>
39
+
40
+ <el-col :span="12">
41
+ <el-card shadow="hover">
42
+ <div class="upload-demo">
43
+ <h3>照片墙</h3>
44
+ <el-upload
45
+ action="https://jsonplaceholder.typicode.com/posts/"
46
+ list-type="picture-card"
47
+ :on-preview="handlePictureCardPreview"
48
+ :on-success="handleAvatarSuccess"
49
+ :file-list="imageList"
50
+ >
51
+ <el-icon><Plus /></el-icon>
52
+ </el-upload>
53
+
54
+ <el-dialog v-model="dialogVisible">
55
+ <img w-full :src="dialogImageUrl" alt="Preview Image" />
56
+ </el-dialog>
57
+ </div>
58
+ </el-card>
59
+ </el-col>
60
+ </el-row>
61
+
62
+ <el-row :gutter="20" style="margin-top: 20px">
63
+ <el-col :span="24">
64
+ <el-card shadow="hover">
65
+ <div class="upload-demo">
66
+ <h3>手动上传</h3>
67
+ <el-upload
68
+ ref="uploadRef"
69
+ class="upload-demo"
70
+ action="https://jsonplaceholder.typicode.com/posts/"
71
+ :auto-upload="false"
72
+ :on-change="handleChange"
73
+ :file-list="manualFiles"
74
+ >
75
+ <template #trigger>
76
+ <el-button type="primary">选取文件</el-button>
77
+ </template>
78
+ <el-button
79
+ class="ml-3"
80
+ type="success"
81
+ @click="submitUpload"
82
+ :loading="uploadLoading"
83
+ >
84
+ 上传到服务器
85
+ </el-button>
86
+ <template #tip>
87
+ <div class="el-upload__tip">
88
+ 文件会先保存到本地,点击上传按钮后才会上传到服务器
89
+ </div>
90
+ </template>
91
+ </el-upload>
92
+ </div>
93
+ </el-card>
94
+ </el-col>
95
+ </el-row>
96
+ </el-card>
97
+ </div>
98
+ </template>
99
+
100
+ <script>
101
+ import { UploadFilled, Plus } from "@element-plus/icons-vue";
102
+
103
+ export default {
104
+ name: "Upload",
105
+ components: {
106
+ UploadFilled,
107
+ Plus
108
+ },
109
+ data() {
110
+ return {
111
+ fileList: [],
112
+ imageList: [],
113
+ manualFiles: [],
114
+ dialogImageUrl: "",
115
+ dialogVisible: false,
116
+ uploadLoading: false,
117
+ uploadRef: null
118
+ };
119
+ },
120
+ methods: {
121
+ handleSuccess(response, file, fileList) {
122
+ this.$message.success("文件上传成功");
123
+ console.log("上传成功:", response, file, fileList);
124
+ },
125
+ handleError(error, file, fileList) {
126
+ this.$message.error("文件上传失败");
127
+ console.error("上传失败:", error, file, fileList);
128
+ },
129
+ beforeRemove(uploadFile, uploadFiles) {
130
+ return this.$confirm(`确定移除 ${uploadFile.name}?`);
131
+ },
132
+ handleExceed(files, fileList) {
133
+ this.$message.warning(`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
134
+ },
135
+ handlePictureCardPreview(uploadFile) {
136
+ this.dialogImageUrl = uploadFile.url;
137
+ this.dialogVisible = true;
138
+ },
139
+ handleAvatarSuccess(response, uploadFile) {
140
+ this.$message.success("图片上传成功");
141
+ console.log("图片上传成功:", response, uploadFile);
142
+ },
143
+ handleChange(file, fileList) {
144
+ this.manualFiles = fileList;
145
+ },
146
+ async submitUpload() {
147
+ this.uploadLoading = true;
148
+ // 模拟上传过程
149
+ await new Promise(resolve => setTimeout(resolve, 2000));
150
+ this.uploadLoading = false;
151
+ this.$message.success("手动上传成功");
152
+ }
153
+ }
154
+ };
155
+ </script>
156
+
157
+ <style lang="scss" scoped>
158
+ .upload-container {
159
+ padding: 20px;
160
+
161
+ .card-header {
162
+ font-weight: bold;
163
+ }
164
+
165
+ .upload-demo {
166
+ h3 {
167
+ margin-bottom: 20px;
168
+ color: #333;
169
+ }
170
+
171
+ :deep(.el-upload-dragger) {
172
+ width: 100%;
173
+ }
174
+
175
+ :deep(.el-upload-list__item) {
176
+ transition: none !important;
177
+ }
178
+ }
179
+ }
180
+ </style>
@@ -0,0 +1,103 @@
1
+ <template>
2
+ <div class="vue3-demo-container">
3
+ <el-card class="box-card">
4
+ <template #header>
5
+ <div class="card-header">
6
+ <h3>Vue 3 setup 语法糖示例</h3>
7
+ </div>
8
+ </template>
9
+ <div>
10
+ <p>计数器: {{ count }}</p>
11
+ <el-button type="primary" @click="increment"> 增加 </el-button>
12
+ <el-button type="danger" @click="decrement"> 减少 </el-button>
13
+ </div>
14
+ <el-divider />
15
+ <div>
16
+ <h4>用户信息</h4>
17
+ <p>用户名: {{ user.name }}</p>
18
+ <p>邮箱: {{ user.email }}</p>
19
+ <el-input v-model="user.name" placeholder="输入用户名" />
20
+ <el-input v-model="user.email" placeholder="输入邮箱" />
21
+ </div>
22
+ <el-divider />
23
+ <div>
24
+ <h4>计算属性示例</h4>
25
+ <p>全名: {{ fullName }}</p>
26
+ </div>
27
+ <el-divider />
28
+ <div>
29
+ <h4>Element Plus组件示例</h4>
30
+ <el-date-picker v-model="date" type="date" placeholder="选择日期" />
31
+ <div style="margin-top: 20px">
32
+ <el-tag v-if="date"> 选择的日期: {{ formatDate(date) }} </el-tag>
33
+ </div>
34
+ </div>
35
+ </el-card>
36
+ </div>
37
+ </template>
38
+
39
+ <script setup>
40
+ import { ref, reactive, computed } from "vue";
41
+ import { ElMessage } from "element-plus";
42
+ import dayjs from "dayjs";
43
+
44
+ // 定义组件名,用于 keep-alive 缓存匹配
45
+ defineOptions({
46
+ name: "Vue3Demo",
47
+ });
48
+
49
+ // 响应式变量
50
+ const count = ref(0);
51
+ const date = ref("");
52
+
53
+ // 响应式对象
54
+ const user = reactive({
55
+ name: "张三",
56
+ email: "zhangsan@example.com",
57
+ });
58
+
59
+ // 计算属性
60
+ const fullName = computed(() => {
61
+ return `${user.name} (${user.email})`;
62
+ });
63
+
64
+ // 方法
65
+ const increment = () => {
66
+ count.value++;
67
+ ElMessage.success(`计数器增加到: ${count.value}`);
68
+ };
69
+
70
+ const decrement = () => {
71
+ if (count.value > 0) {
72
+ count.value--;
73
+ ElMessage.info(`计数器减少到: ${count.value}`);
74
+ } else {
75
+ ElMessage.warning("计数器已经为0");
76
+ }
77
+ };
78
+
79
+ const formatDate = (date) => {
80
+ return dayjs(date).format("YYYY-MM-DD");
81
+ };
82
+ </script>
83
+
84
+ <style lang="scss" scoped>
85
+ .vue3-demo-container {
86
+ padding: 20px;
87
+
88
+ .box-card {
89
+ max-width: 600px;
90
+ margin: 0 auto;
91
+
92
+ .card-header {
93
+ display: flex;
94
+ justify-content: space-between;
95
+ align-items: center;
96
+ }
97
+
98
+ .el-input {
99
+ margin-bottom: 10px;
100
+ }
101
+ }
102
+ }
103
+ </style>