From 75fc4de6bd628133c146e24cf316696e2e0a065c Mon Sep 17 00:00:00 2001
From: zcx <377075991@qq.com>
Date: Thu, 29 Jan 2026 16:47:05 +0800
Subject: [PATCH] =?UTF-8?q?=E7=A7=9F=E6=88=B7=E5=B9=B3=E5=8F=B0=E7=AE=A1?=
=?UTF-8?q?=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.env.base | 4 +-
.vscode/settings.json | 5 +
src/api/system/menu/index.ts | 4 +-
src/api/system/tenant/index.ts | 76 ++++
src/api/system/tenantInstance/index.ts | 77 ++++
src/api/system/tenantPackage/index.ts | 51 +++
src/components/Table/src/Table.vue | 2 +-
src/layout/components/Logo/src/Logo.vue | 2 +-
src/router/modules/remaining.ts | 44 +--
src/store/modules/app.ts | 4 +-
src/store/modules/user.ts | 20 +-
src/utils/dict.ts | 4 +-
src/views/system/menu/MenuForm.vue | 279 +++++++++++++
src/views/system/menu/index.vue | 201 ++++++++++
src/views/system/role/RoleAssignMenuForm.vue | 153 ++++++++
.../system/role/RoleDataPermissionForm.vue | 169 ++++++++
src/views/system/role/RoleForm.vue | 126 ++++++
src/views/system/role/index.vue | 299 ++++++++++++++
src/views/system/tenant/TenantForm.vue | 225 +++++++++++
src/views/system/tenant/index.vue | 332 ++++++++++++++++
.../tenantInstance/TenantInstanceForm.vue | 286 ++++++++++++++
src/views/system/tenantInstance/index.vue | 369 ++++++++++++++++++
.../tenantPackage/TenantPackageForm.vue | 227 +++++++++++
src/views/system/tenantPackage/index.vue | 248 ++++++++++++
src/views/system/user/DeptTree.vue | 48 +++
src/views/system/user/UserAssignRoleForm.vue | 96 +++++
src/views/system/user/UserForm.vue | 271 +++++++++++++
src/views/system/user/UserImportForm.vue | 138 +++++++
src/views/system/user/index.vue | 279 +++++++++++++
29 files changed, 3998 insertions(+), 41 deletions(-)
create mode 100644 .vscode/settings.json
create mode 100644 src/api/system/tenant/index.ts
create mode 100644 src/api/system/tenantInstance/index.ts
create mode 100644 src/api/system/tenantPackage/index.ts
create mode 100644 src/views/system/menu/MenuForm.vue
create mode 100644 src/views/system/menu/index.vue
create mode 100644 src/views/system/role/RoleAssignMenuForm.vue
create mode 100644 src/views/system/role/RoleDataPermissionForm.vue
create mode 100644 src/views/system/role/RoleForm.vue
create mode 100644 src/views/system/role/index.vue
create mode 100644 src/views/system/tenant/TenantForm.vue
create mode 100644 src/views/system/tenant/index.vue
create mode 100644 src/views/system/tenantInstance/TenantInstanceForm.vue
create mode 100644 src/views/system/tenantInstance/index.vue
create mode 100644 src/views/system/tenantPackage/TenantPackageForm.vue
create mode 100644 src/views/system/tenantPackage/index.vue
create mode 100644 src/views/system/user/DeptTree.vue
create mode 100644 src/views/system/user/UserAssignRoleForm.vue
create mode 100644 src/views/system/user/UserForm.vue
create mode 100644 src/views/system/user/UserImportForm.vue
create mode 100644 src/views/system/user/index.vue
diff --git a/.env.base b/.env.base
index 176d569..fe5783c 100644
--- a/.env.base
+++ b/.env.base
@@ -4,11 +4,11 @@ VITE_NODE_ENV=development
VITE_DEV=true
# 请求路径
-# VITE_BASE_URL='http://localhost:48080'
+VITE_BASE_URL='http://localhost:48080'
# VITE_BASE_URL='http://47.98.161.246:48080'
# VITE_BASE_URL='http://114.55.169.15:48080'
-VITE_BASE_URL='http://114.215.207.150:48080'
+# VITE_BASE_URL='http://114.215.207.150:48080'
# 上传路径
VITE_UPLOAD_URL='http://47.98.161.246:48080/admin-api/system/file/upload'
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..4e71344
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,5 @@
+{
+ "i18n-ally.localesPaths": [
+ "src/locales"
+ ]
+}
\ No newline at end of file
diff --git a/src/api/system/menu/index.ts b/src/api/system/menu/index.ts
index 39cdb91..7f8cb41 100644
--- a/src/api/system/menu/index.ts
+++ b/src/api/system/menu/index.ts
@@ -24,8 +24,8 @@ export const getServiceAppList = () => {
}
// 查询菜单(精简)列表
-export const getSimpleMenusList = () => {
- return request.get({ url: '/admin-api/system/menu/list-all-simple' })
+export const getSimpleMenusList = (params?) => {
+ return request.get({ url: '/admin-api/system/menu/list-all-simple', params })
}
// 查询菜单列表
diff --git a/src/api/system/tenant/index.ts b/src/api/system/tenant/index.ts
new file mode 100644
index 0000000..b883979
--- /dev/null
+++ b/src/api/system/tenant/index.ts
@@ -0,0 +1,76 @@
+import request from '@/config/axios'
+
+export interface TenantVO {
+ id: number
+ name: string
+ contactName: string
+ contactMobile: string
+ status: number
+ domain: string
+ packageId: number
+ username: string
+ password: string
+ expireTime: Date
+ accountCount: number
+ websites: string[]
+ createTime: Date
+}
+
+export interface TenantPageReqVO extends PageParam {
+ name?: string
+ contactName?: string
+ contactMobile?: string
+ status?: number
+ createTime?: Date[]
+}
+
+export interface TenantExportReqVO {
+ name?: string
+ contactName?: string
+ contactMobile?: string
+ status?: number
+ createTime?: Date[]
+}
+
+// 查询租户列表
+export const getTenantPage = (params: TenantPageReqVO) => {
+ return request.get({ url: '/admin-api/system/tenant/page', params })
+}
+
+// 查询租户详情
+export const getTenant = (id: number) => {
+ return request.get({ url: '/admin-api/system/tenant/get?id=' + id })
+}
+
+// 获取租户精简信息列表
+export const getTenantList = () => {
+ return request.get({ url: '/admin-api/system/tenant/simple-list' })
+}
+
+// 新增租户
+export const createTenant = (data: TenantVO) => {
+ return request.post({ url: '/admin-api/system/tenant/create', data })
+}
+
+// 修改租户
+export const updateTenant = (data: TenantVO) => {
+ return request.put({ url: '/admin-api/system/tenant/update', data })
+}
+
+// 删除租户
+export const deleteTenant = (id: number) => {
+ return request.delete({ url: '/admin-api/system/tenant/delete?id=' + id })
+}
+
+// 批量删除租户
+export const deleteTenantList = (ids: number[]) => {
+ return request.delete({
+ url: '/admin-api/system/tenant/delete-list',
+ params: { ids: ids.join(',') }
+ })
+}
+
+// 导出租户
+export const exportTenant = (params: TenantExportReqVO) => {
+ return request.download({ url: '/admin-api/system/tenant/export-excel', params })
+}
diff --git a/src/api/system/tenantInstance/index.ts b/src/api/system/tenantInstance/index.ts
new file mode 100644
index 0000000..484cdab
--- /dev/null
+++ b/src/api/system/tenantInstance/index.ts
@@ -0,0 +1,77 @@
+import request from '@/config/axios'
+
+export interface TenantInstanceVO {
+ instanceId: number
+ tenantId: number
+ serviceId: number
+ instanceName: string
+ menuIds: string
+ instanceType: number
+ instanceIcon: string
+ dbUrl: string
+ dbName: string
+ dbUsername: string
+ dbPassword: string
+ status: number
+ creator: string
+ createTime: Date
+ updater: string
+ updateTime: Date
+ deleted: boolean
+}
+
+export interface TenantInstancePageReqVO extends PageParam {
+ tenantId?: number
+ serviceId?: number
+ instanceName?: string
+ status?: number
+ createTime?: Date[]
+}
+
+export interface TenantInstanceExportReqVO {
+ tenantId?: number
+ serviceId?: number
+ instanceName?: string
+ status?: number
+ createTime?: Date[]
+}
+
+// 查询租户实例列表
+export const getTenantInstancePage = (params: TenantInstancePageReqVO) => {
+ return request.get({ url: '/admin-api/system/serviceInstance/all/page', params })
+}
+
+// 查询租户实例详情
+export const getTenantInstance = (instanceId: number) => {
+ return request.get({ url: '/admin-api/system/serviceInstance/get?instanceId=' + instanceId })
+}
+
+// 新增租户实例
+export const createTenantInstance = (data: TenantInstanceVO) => {
+ return request.post({ url: '/admin-api/system/serviceInstance/create', data })
+}
+
+// 修改租户实例
+export const updateTenantInstance = (data: TenantInstanceVO) => {
+ return request.put({ url: '/admin-api/system/serviceInstance/update', data })
+}
+
+// 删除租户实例
+export const deleteTenantInstance = (instanceId: number) => {
+ return request.delete({
+ url: '/admin-api/system/serviceInstance/delete?instanceId=' + instanceId
+ })
+}
+
+// 批量删除租户实例
+export const deleteTenantInstanceList = (instanceIds: number[]) => {
+ return request.delete({
+ url: '/admin-api/system/serviceInstance/delete-list',
+ params: { instanceIds: instanceIds.join(',') }
+ })
+}
+
+// 导出租户实例
+export const exportTenantInstance = (params: TenantInstanceExportReqVO) => {
+ return request.download({ url: '/admin-api/system/serviceInstance/export-excel', params })
+}
diff --git a/src/api/system/tenantPackage/index.ts b/src/api/system/tenantPackage/index.ts
new file mode 100644
index 0000000..875c5f9
--- /dev/null
+++ b/src/api/system/tenantPackage/index.ts
@@ -0,0 +1,51 @@
+import request from '@/config/axios'
+
+export interface TenantPackageVO {
+ id: number
+ name: string
+ status: number
+ remark: string
+ creator: string
+ updater: string
+ updateTime: string
+ menuIds: number[]
+ createTime: Date
+}
+
+// 查询租户套餐列表
+export const getTenantPackagePage = (params: PageParam) => {
+ return request.get({ url: '/admin-api/system/tenant-package/page', params })
+}
+
+// 获得租户套餐
+export const getTenantPackage = (id: number) => {
+ return request.get({ url: '/admin-api/system/tenant-package/get?id=' + id })
+}
+
+// 新增租户套餐
+export const createTenantPackage = (data: TenantPackageVO) => {
+ return request.post({ url: '/admin-api/system/tenant-package/create', data })
+}
+
+// 修改租户套餐
+export const updateTenantPackage = (data: TenantPackageVO) => {
+ return request.put({ url: '/admin-api/system/tenant-package/update', data })
+}
+
+// 删除租户套餐
+export const deleteTenantPackage = (id: number) => {
+ return request.delete({ url: '/admin-api/system/tenant-package/delete?id=' + id })
+}
+
+// 批量删除租户套餐
+export const deleteTenantPackageList = (ids: number[]) => {
+ return request.delete({
+ url: '/admin-api/system/tenant-package/delete-list',
+ params: { ids: ids.join(',') }
+ })
+}
+
+// 获取租户套餐精简信息列表
+export const getTenantPackageList = () => {
+ return request.get({ url: '/admin-api/system/tenant-package/simple-list' })
+}
diff --git a/src/components/Table/src/Table.vue b/src/components/Table/src/Table.vue
index 8ca5968..e4ac697 100644
--- a/src/components/Table/src/Table.vue
+++ b/src/components/Table/src/Table.vue
@@ -55,7 +55,7 @@ export default defineComponent({
// 注册
onMounted(() => {
const tableRef = unref(elTableRef)
- emit('register', tableRef?.$parent, elTableRef)
+ emit('register', tableRef?.$parent, elTableRef.value)
})
const pageSizeRef = ref(props.pageSize)
diff --git a/src/layout/components/Logo/src/Logo.vue b/src/layout/components/Logo/src/Logo.vue
index 7ae9c02..2beeb4d 100644
--- a/src/layout/components/Logo/src/Logo.vue
+++ b/src/layout/components/Logo/src/Logo.vue
@@ -78,7 +78,7 @@ watch(
}
]"
>
- 莳松云
+ 莳松云
diff --git a/src/router/modules/remaining.ts b/src/router/modules/remaining.ts
index 9896640..566c2ff 100644
--- a/src/router/modules/remaining.ts
+++ b/src/router/modules/remaining.ts
@@ -33,23 +33,23 @@ const { t } = useI18n()
}
**/
const remainingRouter: AppRouteRecordRaw[] = [
- {
- path: '/redirect',
- component: Layout,
- name: 'Redirect',
- children: [
- {
- path: '/redirect/:path(.*)',
- name: 'Redirect',
- component: () => import('@/views/Redirect/Redirect.vue'),
- meta: {}
- }
- ],
- meta: {
- hidden: true,
- noTagsView: true
- }
- },
+ // {
+ // path: '/redirect',
+ // component: Layout,
+ // name: 'Redirect',
+ // children: [
+ // {
+ // path: '/redirect/:path(.*)',
+ // name: 'Redirect',
+ // component: () => import('@/views/Redirect/Redirect.vue'),
+ // meta: {}
+ // }
+ // ],
+ // meta: {
+ // hidden: true,
+ // noTagsView: true
+ // }
+ // },
{
path: '/',
component: Layout,
@@ -107,17 +107,17 @@ const remainingRouter: AppRouteRecordRaw[] = [
]
},
// {
- // path: '/Basic',
+ // path: '/system',
// component: Layout,
- // name: 'Basic',
+ // name: 'system',
// meta: {
- // title: '菜单管理'
+ // title: '系统管理'
// },
- // redirect: '/Basic/menu',
+ // redirect: 'system/menu',
// children: [
// {
// path: 'menu',
- // component: () => import('@/views/Basic/Menu/index.vue'),
+ // component: () => import('@/views/system/Menu/index.vue'),
// name: 'Menu',
// meta: {
// canTo: true,
diff --git a/src/store/modules/app.ts b/src/store/modules/app.ts
index 326518b..d6d685a 100644
--- a/src/store/modules/app.ts
+++ b/src/store/modules/app.ts
@@ -172,7 +172,7 @@ export const useAppStore = defineStore('app', {
},
getFooter(): boolean {
return this.footer
- },
+ }
},
actions: {
setBreadcrumb(breadcrumb: boolean) {
@@ -264,7 +264,7 @@ export const useAppStore = defineStore('app', {
},
setFooter(footer: boolean) {
this.footer = footer
- },
+ }
}
})
diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts
index 0110c0f..16185d4 100644
--- a/src/store/modules/user.ts
+++ b/src/store/modules/user.ts
@@ -2,7 +2,7 @@ import { store } from '../index'
import { defineStore } from 'pinia'
import { getAccessToken, removeToken } from '@/utils/auth'
import { CACHE_KEY } from '@/hooks/web/useCache'
-import { loginOut } from '@/api/login'
+import { getInfo, loginOut } from '@/api/login'
import { getUserProfile as getUserInfo } from '@/api/system/user/profile'
import cache from '@/plugins/cache'
@@ -51,16 +51,16 @@ export const useUserStore = defineStore('admin-user', {
return null
}
let userInfo = cache.local.get(CACHE_KEY.USER)
- // if (!userInfo || !userInfo?.menus || userInfo.menus.length == 0) {
- // userInfo = await getInfo({})
- // }
- if (!userInfo?.user) {
- userInfo = {
- user: await getUserInfo()
- }
+ if (!userInfo || !userInfo?.menus || userInfo.menus.length == 0) {
+ userInfo = await getInfo({})
}
- // this.permissions = userInfo.permissions
- // this.roles = userInfo.roles
+ // if (!userInfo?.user) {
+ // userInfo = {
+ // user: await getUserInfo()
+ // }
+ // }
+ this.permissions = userInfo.permissions
+ this.roles = userInfo.roles
this.user = userInfo.user
this.isSetUser = true
cache.local.set(CACHE_KEY.USER, userInfo)
diff --git a/src/utils/dict.ts b/src/utils/dict.ts
index 594c5b2..fb50700 100644
--- a/src/utils/dict.ts
+++ b/src/utils/dict.ts
@@ -114,5 +114,7 @@ export enum DICT_TYPE {
PRODUCT_UNIT = 'product_unit', // 商品单位
PRODUCT_SPU_STATUS = 'product_spu_status', //商品状态
// ========== 驾校管理 ==========
- LINCENSE_TYPE = 'license_type' //驾照类型
+ LINCENSE_TYPE = 'license_type', //驾照类型
+ // ========== 租户实例 ==========
+ INSTANCE_TYPE = 'instance_type' // 实例类型
}
diff --git a/src/views/system/menu/MenuForm.vue b/src/views/system/menu/MenuForm.vue
new file mode 100644
index 0000000..2d0408e
--- /dev/null
+++ b/src/views/system/menu/MenuForm.vue
@@ -0,0 +1,279 @@
+
+
+
+
diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue
new file mode 100644
index 0000000..cd10ea8
--- /dev/null
+++ b/src/views/system/menu/index.vue
@@ -0,0 +1,201 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+ 重置
+
+
+
+ 新增
+
+
+
+ 展开/折叠
+
+
+
+ 刷新菜单缓存
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getServiceName(row.serviceId) }}
+
+
+
+
+
+ 修改
+
+
+ 新增
+
+ 删除
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/role/RoleAssignMenuForm.vue b/src/views/system/role/RoleAssignMenuForm.vue
new file mode 100644
index 0000000..05f193c
--- /dev/null
+++ b/src/views/system/role/RoleAssignMenuForm.vue
@@ -0,0 +1,153 @@
+
+
+
+
diff --git a/src/views/system/role/RoleDataPermissionForm.vue b/src/views/system/role/RoleDataPermissionForm.vue
new file mode 100644
index 0000000..1243435
--- /dev/null
+++ b/src/views/system/role/RoleDataPermissionForm.vue
@@ -0,0 +1,169 @@
+
+
+
+
diff --git a/src/views/system/role/RoleForm.vue b/src/views/system/role/RoleForm.vue
new file mode 100644
index 0000000..af60b47
--- /dev/null
+++ b/src/views/system/role/RoleForm.vue
@@ -0,0 +1,126 @@
+
+
+
+
diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue
new file mode 100644
index 0000000..91c68e3
--- /dev/null
+++ b/src/views/system/role/index.vue
@@ -0,0 +1,299 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+ 重置
+
+
+
+ 新增
+
+
+
+ 导出
+
+
+
+ 批量删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+ 菜单权限
+
+
+ 数据权限
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/tenant/TenantForm.vue b/src/views/system/tenant/TenantForm.vue
new file mode 100644
index 0000000..0c939e2
--- /dev/null
+++ b/src/views/system/tenant/TenantForm.vue
@@ -0,0 +1,225 @@
+
+
+
+
diff --git a/src/views/system/tenant/index.vue b/src/views/system/tenant/index.vue
new file mode 100644
index 0000000..8d86e4c
--- /dev/null
+++ b/src/views/system/tenant/index.vue
@@ -0,0 +1,332 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+ 重置
+
+
+
+ 新增
+
+
+
+ 导出
+
+
+
+ 批量删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 系统租户
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+ {{ scope.row.accountCount }}
+
+
+
+
+
+
+ {{ website }}
+
+ -
+
+
+
+
+
+ {{ benefit }}
+
+ -
+
+
+
+
+
+ {{ scope.row.distributionEnabled ? '是' : '否' }}
+
+
+
+
+
+
+ {{ scope.row.giftMemberEnabled ? '是' : '否' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/tenantInstance/TenantInstanceForm.vue b/src/views/system/tenantInstance/TenantInstanceForm.vue
new file mode 100644
index 0000000..2b11fff
--- /dev/null
+++ b/src/views/system/tenantInstance/TenantInstanceForm.vue
@@ -0,0 +1,286 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/tenantInstance/index.vue b/src/views/system/tenantInstance/index.vue
new file mode 100644
index 0000000..5c99cb3
--- /dev/null
+++ b/src/views/system/tenantInstance/index.vue
@@ -0,0 +1,369 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+ 重置
+
+
+
+ 新增
+
+
+
+ 导出
+
+
+
+ 批量删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ service.serviceName }}
+
+
+
+
+
+
+
+ {{ getInstanceTypeName(scope.row.instanceType) }}
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+ {{ getStatusName(scope.row.status) }}
+
+
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/tenantPackage/TenantPackageForm.vue b/src/views/system/tenantPackage/TenantPackageForm.vue
new file mode 100644
index 0000000..2f85a72
--- /dev/null
+++ b/src/views/system/tenantPackage/TenantPackageForm.vue
@@ -0,0 +1,227 @@
+
+
+
+
diff --git a/src/views/system/tenantPackage/index.vue b/src/views/system/tenantPackage/index.vue
new file mode 100644
index 0000000..ad2923d
--- /dev/null
+++ b/src/views/system/tenantPackage/index.vue
@@ -0,0 +1,248 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+ 新增
+
+
+
+ 批量删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getServiceName(scope.row.serviceId) }}
+
+
+
+
+
+
+
+
+
+
+
+
+ 修改
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/user/DeptTree.vue b/src/views/system/user/DeptTree.vue
new file mode 100644
index 0000000..3a3a028
--- /dev/null
+++ b/src/views/system/user/DeptTree.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
diff --git a/src/views/system/user/UserAssignRoleForm.vue b/src/views/system/user/UserAssignRoleForm.vue
new file mode 100644
index 0000000..d39aaa4
--- /dev/null
+++ b/src/views/system/user/UserAssignRoleForm.vue
@@ -0,0 +1,96 @@
+
+
+
+
diff --git a/src/views/system/user/UserForm.vue b/src/views/system/user/UserForm.vue
new file mode 100644
index 0000000..5218b4a
--- /dev/null
+++ b/src/views/system/user/UserForm.vue
@@ -0,0 +1,271 @@
+
+
+
+
diff --git a/src/views/system/user/UserImportForm.vue b/src/views/system/user/UserImportForm.vue
new file mode 100644
index 0000000..5cf1129
--- /dev/null
+++ b/src/views/system/user/UserImportForm.vue
@@ -0,0 +1,138 @@
+
+
+
+
diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
new file mode 100644
index 0000000..8b41bd8
--- /dev/null
+++ b/src/views/system/user/index.vue
@@ -0,0 +1,279 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 启用
+ 禁用
+
+
+
+ 搜索
+ 重置
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 修改
+
+
+ 删除
+
+
+ 重置密码
+
+
+
+
+
+
+
+
+
+
+
+