@yyp92-cli/template-vue-pc 1.2.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 (113) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/package.json +15 -0
  3. package/template/.env.development +2 -0
  4. package/template/.env.production +2 -0
  5. package/template/.env.test +2 -0
  6. package/template/README.md +30 -0
  7. package/template/auto-imports.d.ts +11 -0
  8. package/template/components.d.ts +67 -0
  9. package/template/index.html +16 -0
  10. package/template/package.json +43 -0
  11. package/template/pnpm-lock.yaml +2830 -0
  12. package/template/public/vite.svg +1 -0
  13. package/template/src/App.vue +26 -0
  14. package/template/src/assets/img/login-bg.jpg +0 -0
  15. package/template/src/assets/img/logo.svg +15 -0
  16. package/template/src/components/layout/header-crumb/index.vue +38 -0
  17. package/template/src/components/layout/header-info/index.vue +181 -0
  18. package/template/src/components/layout/index.vue +83 -0
  19. package/template/src/components/layout/main-header/index.vue +85 -0
  20. package/template/src/components/layout/main-menu/index.vue +166 -0
  21. package/template/src/components/layout-horizontal/header-crumb/index.vue +38 -0
  22. package/template/src/components/layout-horizontal/header-info/index.vue +185 -0
  23. package/template/src/components/layout-horizontal/index.vue +55 -0
  24. package/template/src/components/layout-horizontal/main-header/index.vue +86 -0
  25. package/template/src/components/layout-horizontal/main-menu/index.vue +135 -0
  26. package/template/src/global/constants.ts +4 -0
  27. package/template/src/global/register-icons.ts +10 -0
  28. package/template/src/main.ts +16 -0
  29. package/template/src/mock/index.ts +8 -0
  30. package/template/src/mock/login.ts +5 -0
  31. package/template/src/mock/userDepartmentList.ts +85 -0
  32. package/template/src/mock/userInfoMock.ts +24 -0
  33. package/template/src/mock/userList.ts +115 -0
  34. package/template/src/mock/userListDelete.ts +1 -0
  35. package/template/src/mock/userMenuList.ts +466 -0
  36. package/template/src/mock/userMenus.ts +374 -0
  37. package/template/src/mock/userRoleList.ts +1846 -0
  38. package/template/src/router/index.ts +41 -0
  39. package/template/src/router/routes.ts +189 -0
  40. package/template/src/service/api/index.ts +90 -0
  41. package/template/src/service/request/index.ts +268 -0
  42. package/template/src/service/request/type.ts +5 -0
  43. package/template/src/store/counter.ts +19 -0
  44. package/template/src/store/index.ts +14 -0
  45. package/template/src/store/login/index.ts +142 -0
  46. package/template/src/store/main/index.ts +54 -0
  47. package/template/src/store/main/system/index.ts +88 -0
  48. package/template/src/store/main/system/type.ts +19 -0
  49. package/template/src/styles/global.scss +33 -0
  50. package/template/src/styles/index.scss +4 -0
  51. package/template/src/styles/reset.scss +17 -0
  52. package/template/src/theme/darkTheme.scss +51 -0
  53. package/template/src/theme/lightTheme.scss +53 -0
  54. package/template/src/types/index.ts +1 -0
  55. package/template/src/types/login.ts +4 -0
  56. package/template/src/utils/cache.ts +44 -0
  57. package/template/src/utils/download.ts +27 -0
  58. package/template/src/utils/format.ts +10 -0
  59. package/template/src/utils/index.ts +14 -0
  60. package/template/src/utils/map-menus.ts +174 -0
  61. package/template/src/views/403/index.vue +22 -0
  62. package/template/src/views/login/component/login-panel.vue +138 -0
  63. package/template/src/views/login/component/panel-account.vue +138 -0
  64. package/template/src/views/login/component/panel-phone.vue +56 -0
  65. package/template/src/views/login/index.vue +28 -0
  66. package/template/src/views/main/analysis/dashboard/index.vue +19 -0
  67. package/template/src/views/main/analysis/overview/index.vue +25 -0
  68. package/template/src/views/main/detail/index.vue +19 -0
  69. package/template/src/views/main/fullScreen/images/bg.png +0 -0
  70. package/template/src/views/main/fullScreen/images/contrast-bg.png +0 -0
  71. package/template/src/views/main/fullScreen/images/dataScreen-alarm.png +0 -0
  72. package/template/src/views/main/fullScreen/images/dataScreen-header-btn-bg-l.png +0 -0
  73. package/template/src/views/main/fullScreen/images/dataScreen-header-btn-bg-r.png +0 -0
  74. package/template/src/views/main/fullScreen/images/dataScreen-header-center-bg.png +0 -0
  75. package/template/src/views/main/fullScreen/images/dataScreen-header-left-bg.png +0 -0
  76. package/template/src/views/main/fullScreen/images/dataScreen-header-right-bg.png +0 -0
  77. package/template/src/views/main/fullScreen/images/dataScreen-header-warn-bg.png +0 -0
  78. package/template/src/views/main/fullScreen/images/dataScreen-main-cb.png +0 -0
  79. package/template/src/views/main/fullScreen/images/dataScreen-main-lb.png +0 -0
  80. package/template/src/views/main/fullScreen/images/dataScreen-main-lc.png +0 -0
  81. package/template/src/views/main/fullScreen/images/dataScreen-main-lt.png +0 -0
  82. package/template/src/views/main/fullScreen/images/dataScreen-main-rb.png +0 -0
  83. package/template/src/views/main/fullScreen/images/dataScreen-main-rc.png +0 -0
  84. package/template/src/views/main/fullScreen/images/dataScreen-main-rt.png +0 -0
  85. package/template/src/views/main/fullScreen/images/dataScreen-title.png +0 -0
  86. package/template/src/views/main/fullScreen/images/dataScreen-warn-bg.png +0 -0
  87. package/template/src/views/main/fullScreen/images/line-bg.png +0 -0
  88. package/template/src/views/main/fullScreen/images/man-bg.png +0 -0
  89. package/template/src/views/main/fullScreen/images/man.png +0 -0
  90. package/template/src/views/main/fullScreen/images/map-title-bg.png +0 -0
  91. package/template/src/views/main/fullScreen/images/rankingChart-bg.png +0 -0
  92. package/template/src/views/main/fullScreen/images/total.png +0 -0
  93. package/template/src/views/main/fullScreen/images/woman-bg.png +0 -0
  94. package/template/src/views/main/fullScreen/images/woman.png +0 -0
  95. package/template/src/views/main/fullScreen/index.vue +33 -0
  96. package/template/src/views/main/index.vue +24 -0
  97. package/template/src/views/main/product/category/index.vue +19 -0
  98. package/template/src/views/main/product/goods/index.vue +19 -0
  99. package/template/src/views/main/story/chat/index.vue +70 -0
  100. package/template/src/views/main/story/list/index.vue +19 -0
  101. package/template/src/views/main/system/department/index.vue +20 -0
  102. package/template/src/views/main/system/menu/index.vue +19 -0
  103. package/template/src/views/main/system/role/index.vue +20 -0
  104. package/template/src/views/main/system/user/index.vue +141 -0
  105. package/template/src/views/main/system/user/user-comp/UserContent.vue +211 -0
  106. package/template/src/views/main/system/user/user-comp/UserModal.vue +225 -0
  107. package/template/src/views/main/system/user/user-comp/UserSearch.vue +147 -0
  108. package/template/src/views/not-found/index.vue +22 -0
  109. package/template/src/vite-env.d.ts +9 -0
  110. package/template/tsconfig.app.json +26 -0
  111. package/template/tsconfig.json +7 -0
  112. package/template/tsconfig.node.json +25 -0
  113. package/template/vite.config.ts +66 -0
@@ -0,0 +1,185 @@
1
+ <template>
2
+ <div class="header-info">
3
+ <div class="operation">
4
+ <span>
5
+ <el-tooltip
6
+ content="切换主题"
7
+ >
8
+ <el-switch
9
+ v-model="theme"
10
+ inactive-action-icon="Sunny"
11
+ active-action-icon="Moon"
12
+ />
13
+ </el-tooltip>
14
+ </span>
15
+
16
+ <span>
17
+ <el-tooltip
18
+ content="全屏"
19
+ >
20
+ <el-button
21
+ size="small"
22
+ icon="FullScreen"
23
+ circle
24
+ @click="handleFullScreen"
25
+ ></el-button>
26
+ </el-tooltip>
27
+ </span>
28
+ </div>
29
+
30
+ <div class="info">
31
+ <el-dropdown
32
+ :hide-on-click="false"
33
+ >
34
+ <span class="user-info">
35
+ <el-avatar
36
+ :size="30"
37
+ src="https://upload.jianshu.io/users/upload_avatars/1102036/c3628b478f06.jpeg"
38
+ />
39
+
40
+ <span class="name">{{ userInfo.name }}</span>
41
+ </span>
42
+
43
+ <template #dropdown>
44
+ <el-dropdown-menu>
45
+ <el-dropdown-item
46
+ @click="handleExitClick"
47
+ >
48
+ <el-icon>
49
+ <CircleCheck />
50
+ </el-icon>
51
+
52
+ <span>退出系统</span>
53
+ </el-dropdown-item>
54
+
55
+ <el-dropdown-item divided>
56
+ <el-icon>
57
+ <InfoFilled />
58
+ </el-icon>
59
+
60
+ <span>个人信息</span>
61
+ </el-dropdown-item>
62
+
63
+ <el-dropdown-item>
64
+ <el-icon>
65
+ <Lock />
66
+ </el-icon>
67
+
68
+ <span>修改密码</span>
69
+ </el-dropdown-item>
70
+ </el-dropdown-menu>
71
+ </template>
72
+ </el-dropdown>
73
+ </div>
74
+ </div>
75
+ </template>
76
+
77
+ <script
78
+ setup
79
+ lang="ts"
80
+ name="HeaderInfo"
81
+ >
82
+ import {ref, watch} from 'vue'
83
+ import { useRouter } from 'vue-router'
84
+ import { LOGIN_TOKEN, USER_INFO, USER_MENUS } from '@/global/constants'
85
+ import { localCache } from '@/utils/cache'
86
+ import useLoginStore from '@/store/login'
87
+ import {changeTheme} from '@/utils'
88
+
89
+ const router = useRouter()
90
+ const userStore = useLoginStore()
91
+ const userInfo = userStore.userInfo
92
+
93
+ const theme = ref(false)
94
+
95
+ const handleExitClick = () => {
96
+ localCache.removeCache(LOGIN_TOKEN)
97
+ localCache.removeCache(USER_INFO)
98
+ localCache.removeCache(USER_MENUS)
99
+
100
+ router.push('/login')
101
+ }
102
+
103
+ const handleFullScreen = () => {
104
+ // dom对象的一个属性:可以用来判断当前是不是全屏模式
105
+ // 全屏:true, 不是全屏:false
106
+ const full = document.fullscreenElement
107
+
108
+ if (!full) {
109
+ document.documentElement.requestFullscreen()
110
+ }
111
+ else {
112
+ document.exitFullscreen()
113
+ }
114
+ }
115
+
116
+ watch(theme, (newValue) => {
117
+ changeTheme(newValue)
118
+ console.log('newValue', newValue)
119
+ })
120
+ </script>
121
+
122
+ <style
123
+ scoped
124
+ lang="scss"
125
+ >
126
+ .header-info {
127
+ margin-left: 20px;
128
+ width: 200px;
129
+ flex-shrink: 0;
130
+ display: flex;
131
+ align-items: center;
132
+ }
133
+
134
+ .operation {
135
+ display: flex;
136
+ margin-right: 10px;
137
+
138
+ & > span {
139
+ position: relative;
140
+ display: flex;
141
+ justify-content: center;
142
+ align-items: center;
143
+ margin-right: 12px;
144
+ cursor: pointer;
145
+
146
+ i {
147
+ font-size: 20px;
148
+ }
149
+
150
+ .dot {
151
+ position: absolute;
152
+ top: 0px;
153
+ right: -5px;
154
+ z-index: 10;
155
+ width: 6px;
156
+ height: 6px;
157
+ background: red;
158
+ border-radius: 100%;
159
+ }
160
+ }
161
+ }
162
+
163
+ .info {
164
+ .user-info {
165
+ display: flex;
166
+ align-items: center;
167
+ cursor: pointer;
168
+
169
+ .name {
170
+ margin-left: 5px;
171
+ color: var(--text-color);
172
+ }
173
+ }
174
+
175
+ :global(.el-dropdown-menu__item) {
176
+ line-height: 36px !important;
177
+ padding: 6px 22px;
178
+ }
179
+ }
180
+
181
+ :deep(.el-switch__action) {
182
+ background-color: transparent !important;
183
+ color: var(--primary-text-color) !important;
184
+ }
185
+ </style>
@@ -0,0 +1,55 @@
1
+ <template>
2
+ <div class="layout-container">
3
+ <template v-if="route.meta.showFullScreen">
4
+ <router-view></router-view>
5
+ </template>
6
+
7
+ <el-container
8
+ class="main-inner"
9
+ v-else
10
+ >
11
+ <el-header
12
+ height="50px"
13
+ >
14
+ <MainHeader />
15
+ </el-header>
16
+
17
+ <el-main>
18
+ <div class="content">
19
+ <router-view></router-view>
20
+ </div>
21
+ </el-main>
22
+ </el-container>
23
+ </div>
24
+ </template>
25
+
26
+ <script
27
+ setup
28
+ lang="ts"
29
+ name="Layout"
30
+ >
31
+ import { useRoute } from 'vue-router'
32
+ import MainHeader from './main-header/index.vue'
33
+
34
+ const route = useRoute()
35
+ </script>
36
+
37
+ <style
38
+ scoped
39
+ lang="scss"
40
+ >
41
+ .layout-container,
42
+ .main-inner {
43
+ width: 100%;
44
+ height: 100%;
45
+
46
+ .el-header {
47
+ --el-header-padding: 0;
48
+ border-bottom: 1px solid var(--border-color-base);
49
+ }
50
+
51
+ .el-main {
52
+ --el-main-padding: 16px;
53
+ }
54
+ }
55
+ </style>
@@ -0,0 +1,86 @@
1
+ <template>
2
+ <div class="main-header">
3
+ <div class="left">
4
+ <div class="logo">
5
+ <img
6
+ class="img"
7
+ src="@/assets/img/logo.svg"
8
+ alt=""
9
+ />
10
+
11
+ <h2
12
+ class="title"
13
+ >后台管理系统</h2>
14
+ </div>
15
+ </div>
16
+
17
+ <div class="right">
18
+ <MainMenu />
19
+
20
+ <HeaderInfo />
21
+ </div>
22
+ </div>
23
+ </template>
24
+
25
+ <script
26
+ setup
27
+ lang="ts"
28
+ name="MainHeader"
29
+ >
30
+ import HeaderInfo from '../header-info/index.vue'
31
+ import MainMenu from '../main-menu/index.vue'
32
+ </script>
33
+
34
+ <style
35
+ scoped
36
+ lang="scss"
37
+ >
38
+ .main-header {
39
+ box-sizing: border-box;
40
+ display: flex;
41
+ justify-content: space-between;
42
+ align-items: center;
43
+ font-size: 14px;
44
+ line-height: 20px;
45
+ overflow: hidden;
46
+
47
+ .left,
48
+ .right {
49
+ display: flex;
50
+ align-items: center;
51
+ }
52
+
53
+ .left {
54
+ width: 180px;
55
+ flex-shrink: 0;
56
+
57
+ .logo {
58
+ box-sizing: border-box;
59
+ display: flex;
60
+ flex-direction: row;
61
+ justify-content: flex-start;
62
+ align-items: center;
63
+ height: 50px;
64
+ padding: 12px 10px 8px 10px;
65
+ overflow: hidden;
66
+
67
+ .img {
68
+ height: 100%;
69
+ margin: 0 10px;
70
+ }
71
+
72
+ .title {
73
+ font-size: 16px;
74
+ font-weight: 700;
75
+ color: var(--text-color);
76
+ white-space: nowrap;
77
+ }
78
+ }
79
+ }
80
+
81
+ .right {
82
+ flex: 1;
83
+ justify-content: space-between;
84
+ }
85
+ }
86
+ </style>
@@ -0,0 +1,135 @@
1
+ <template>
2
+ <el-scrollbar
3
+ class="main-menu"
4
+ :height="48"
5
+ >
6
+ <el-menu
7
+ :default-active="defaultActive"
8
+ mode="horizontal"
9
+ :ellipsis="false"
10
+ >
11
+ <template
12
+ v-for="item in userMenus"
13
+ :key="item.path"
14
+ >
15
+ <el-sub-menu
16
+ :index="item.path"
17
+ v-if="item.children"
18
+ >
19
+ <template #title>
20
+ <el-icon>
21
+ <component :is="item.icon.split('-icon-')[1]" />
22
+ </el-icon>
23
+
24
+ <span>{{ item.title }}</span>
25
+ </template>
26
+
27
+ <template
28
+ v-for="subItem in item.children"
29
+ :key="subItem.path"
30
+ >
31
+ <el-menu-item
32
+ :index="subItem.path"
33
+ @click="handleItemClick(subItem)"
34
+ >{{ subItem.title }}</el-menu-item>
35
+ </template>
36
+ </el-sub-menu>
37
+
38
+ <el-menu-item
39
+ v-else-if="!item.children && !item.hideMenu"
40
+ :index="item.path"
41
+ @click="handleItemClick(item)"
42
+ >
43
+ <template #title>
44
+ <el-icon>
45
+ <component :is="item.icon.split('-icon-')[1]" />
46
+ </el-icon>
47
+
48
+ <span>{{ item.title }}</span>
49
+ </template>
50
+ </el-menu-item>
51
+ </template>
52
+ </el-menu>
53
+ </el-scrollbar>
54
+ </template>
55
+
56
+ <script
57
+ setup
58
+ lang="ts"
59
+ name="MainMenu"
60
+ >
61
+ import { useRoute, useRouter } from 'vue-router'
62
+ import { computed } from 'vue'
63
+ import useLoginStore from '@/store/login'
64
+ import { mapPathToMenu } from '@/utils/map-menus'
65
+
66
+ const router = useRouter()
67
+ // 1. 获取动态菜单
68
+ const loginStore = useLoginStore()
69
+ const userMenus = loginStore.userMenus
70
+
71
+ const handleItemClick = (item: any) => {
72
+ const url = item.path
73
+ router.push(url)
74
+ }
75
+
76
+ // menu 的默认菜单
77
+ const route = useRoute()
78
+
79
+ const defaultActive = computed(() => {
80
+ const pathMenu = mapPathToMenu(route.path, userMenus)
81
+ return pathMenu?.path
82
+ })
83
+ </script>
84
+
85
+ <style
86
+ scoped
87
+ lang="scss"
88
+ >
89
+ .main-menu {
90
+ width: 0;
91
+ flex: 1;
92
+ background: var(--bg-white-color);
93
+ overflow-y: hidden;
94
+ overflow-x: auto;
95
+ }
96
+
97
+ .el-menu {
98
+ --el-menu-horizontal-height: 48px;
99
+ --el-menu-item-height: 48px;
100
+ border-right: none;
101
+ background: var(--bg-white-color);
102
+ }
103
+
104
+ .el-menu--horizontal.el-menu {
105
+ border-bottom: none !important;
106
+ }
107
+
108
+ .el-sub-menu,
109
+ .el-popper {
110
+ --el-menu-text-color: var(--text-color);
111
+ --el-menu-hover-bg-color: var(--bg-grey-color);
112
+
113
+ .el-menu-item {
114
+ padding-left: 50px !important;
115
+ }
116
+
117
+ .el-menu-item.is-active {
118
+ color: var(--primary-text-color);
119
+ background-color: var(--primary-color);
120
+ }
121
+ }
122
+
123
+ .el-menu-item {
124
+ --el-menu-text-color: var(--text-color);
125
+ background-color: var(--bg-white-color);
126
+
127
+ &:hover {
128
+ background-color: var(--bg-grey-color);
129
+ }
130
+ }
131
+
132
+ /* :deep(.el-scrollbar__bar.is-vertical) {
133
+ display: none;
134
+ } */
135
+ </style>
@@ -0,0 +1,4 @@
1
+ export const LOGIN_TOKEN = 'login/token'
2
+ export const USER_INFO = 'userInfo'
3
+ export const USER_MENUS = 'userMenus'
4
+ export const PERMISSION = 'permission'
@@ -0,0 +1,10 @@
1
+ import type {App} from 'vue'
2
+ import * as ElementPlusIconsVue from '@element-plus/icons-vue'
3
+
4
+ function registerIcons(app: App<Element>) {
5
+ for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
6
+ app.component(key, component)
7
+ }
8
+ }
9
+
10
+ export default registerIcons
@@ -0,0 +1,16 @@
1
+ import { createApp } from 'vue'
2
+ import router from '@/router'
3
+ import store from '@/store'
4
+ import App from './App.vue'
5
+ import registerIcons from './global/register-icons'
6
+
7
+ import 'normalize.css'
8
+ import './styles/index.scss'
9
+
10
+ const app = createApp(App)
11
+
12
+ // 注册图标全局组件
13
+ app.use(registerIcons)
14
+ app.use(store)
15
+ app.use(router)
16
+ app.mount('#app')
@@ -0,0 +1,8 @@
1
+ export * from './login'
2
+ export * from './userInfoMock'
3
+ export * from './userMenus'
4
+ export * from './userList'
5
+ export * from './userListDelete'
6
+ export * from './userDepartmentList'
7
+ export * from './userRoleList'
8
+ export * from './userMenuList'
@@ -0,0 +1,5 @@
1
+ export const loginData = {
2
+ "id": 1,
3
+ "name": "coderwhy",
4
+ "token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwibmFtZSI6ImNvZGVyd2h5Iiwicm9sZSI6eyJpZCI6MSwibmFtZSI6Iui2hee6p-euoeeQhuWRmCJ9LCJpYXQiOjE3NTQ1NTM2MDgsImV4cCI6MTc1NzE0NTYwOH0.mN_-Rob5Wz0TZ7Q95Ak9SVetGragcAH_xLnIBE1n4OE2ZjwPqldYfJLp8GGwJYkZBYXx-W8LaNSvB3WID3XaOECCykg0bdo-4q6Lktnf8_qPUCgt3QMzF2XNorNSsZXhmTL3-yoXF8ywYvDOaEl2tQC4YHI2E3UKxkj3Ss1oeWI"
5
+ }
@@ -0,0 +1,85 @@
1
+ export const userDepartmentList = {
2
+ "list": [
3
+ {
4
+ "id": 8401,
5
+ "name": "测试开发",
6
+ "parentId": 8384,
7
+ "createAt": "2025-08-27T07:37:17.000Z",
8
+ "updateAt": "2025-08-27T08:34:49.000Z",
9
+ "leader": "小李!!!"
10
+ },
11
+ {
12
+ "id": 8400,
13
+ "name": "测试部门",
14
+ "parentId": 8384,
15
+ "createAt": "2025-08-27T07:26:12.000Z",
16
+ "updateAt": "2025-08-27T07:26:12.000Z",
17
+ "leader": "开发部"
18
+ },
19
+ {
20
+ "id": 8384,
21
+ "name": "IT部门",
22
+ "parentId": 2,
23
+ "createAt": "2025-08-22T10:34:59.000Z",
24
+ "updateAt": "2025-08-27T07:24:51.000Z",
25
+ "leader": "张头"
26
+ },
27
+ {
28
+ "id": 8379,
29
+ "name": "每以啊啊",
30
+ "parentId": 1,
31
+ "createAt": "2025-08-21T06:38:47.000Z",
32
+ "updateAt": "2025-08-24T14:51:27.000Z",
33
+ "leader": "aaa"
34
+ },
35
+ {
36
+ "id": 8376,
37
+ "name": "cba",
38
+ "parentId": 5,
39
+ "createAt": "2025-08-21T06:08:15.000Z",
40
+ "updateAt": "2025-08-21T06:08:15.000Z",
41
+ "leader": "cba"
42
+ },
43
+ {
44
+ "id": 8374,
45
+ "name": "学术部",
46
+ "parentId": 5,
47
+ "createAt": "2025-08-21T03:51:04.000Z",
48
+ "updateAt": "2025-08-21T04:42:36.000Z",
49
+ "leader": "杨景媛"
50
+ },
51
+ {
52
+ "id": 8371,
53
+ "name": "医学部",
54
+ "parentId": 1,
55
+ "createAt": "2025-08-20T05:49:46.000Z",
56
+ "updateAt": "2025-08-22T10:24:21.000Z",
57
+ "leader": "董袭颖"
58
+ },
59
+ {
60
+ "id": 5,
61
+ "name": "人事部",
62
+ "parentId": 1,
63
+ "createAt": "2021-01-02T10:04:02.000Z",
64
+ "updateAt": "2021-05-02T07:33:08.000Z",
65
+ "leader": "lily"
66
+ },
67
+ {
68
+ "id": 4,
69
+ "name": "客服部",
70
+ "parentId": 2,
71
+ "createAt": "2021-01-02T10:04:02.000Z",
72
+ "updateAt": "2021-08-03T11:14:32.000Z",
73
+ "leader": "lily"
74
+ },
75
+ {
76
+ "id": 3,
77
+ "name": "运营部",
78
+ "parentId": 1,
79
+ "createAt": "2021-01-02T10:03:42.000Z",
80
+ "updateAt": "2021-01-05T08:25:52.000Z",
81
+ "leader": "lucy"
82
+ }
83
+ ],
84
+ "totalCount": 13
85
+ }
@@ -0,0 +1,24 @@
1
+ export const userInfoMock = {
2
+ "id": 1,
3
+ "name": "coderwhy",
4
+ "realname": "coderwhy",
5
+ "cellphone": 18812345678,
6
+ "enable": 1,
7
+ "createAt": "2021-01-02T10:20:26.000Z",
8
+ "updateAt": "2021-01-03T04:50:13.000Z",
9
+ "role": {
10
+ "id": 1,
11
+ "name": "超级管理员",
12
+ "intro": "所有权限",
13
+ "createAt": "2021-01-02T10:01:52.000Z",
14
+ "updateAt": "2021-01-02T10:01:52.000Z"
15
+ },
16
+ "department": {
17
+ "id": 1,
18
+ "name": "总裁办",
19
+ "parentId": null,
20
+ "createAt": "2021-01-02T10:03:09.000Z",
21
+ "updateAt": "2021-01-05T08:25:46.000Z",
22
+ "leader": "coderwhy"
23
+ }
24
+ }