From 306d167a55f34234479c2a42847730222ecfcd72 Mon Sep 17 00:00:00 2001 From: "Ray.Hao" <1490493387@qq.com> Date: Fri, 13 Mar 2026 00:04:42 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=95=8C=E9=9D=A2=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F=E9=87=8D=E6=9E=84=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components.d.ts | 5 +- package.json | 2 +- skills-lock.json | 10 + src/api/dict.ts | 126 ++++++ src/api/menu.ts | 123 ++++++ src/api/role.ts | 6 +- src/components/custom-tree/index.vue | 425 +++++++++++++++++++ src/config/menu.ts | 69 ++- src/layouts/tabbar.vue | 18 +- src/pages.json | 40 ++ src/pages/index/index.vue | 193 +++------ src/pages/webview/index.vue | 32 ++ src/pages/work/config/index.vue | 471 +++++++++------------ src/pages/work/dept/index.vue | 604 +++++++++++++-------------- src/pages/work/dict/index.vue | 255 +++++++++++ src/pages/work/dict/item/index.vue | 280 +++++++++++++ src/pages/work/index.vue | 20 + src/pages/work/log/index.vue | 220 +++++----- src/pages/work/menu/index.vue | 409 +++++++++++++++++- src/pages/work/monitor/index.vue | 26 ++ src/pages/work/notice/index.vue | 590 +++++++++++++++----------- src/pages/work/role/assign-perm.vue | 294 +++++++++++++ src/pages/work/role/index.vue | 524 ++++++++++------------- src/pages/work/user/index.vue | 17 +- src/static/icons/api.svg | 1 + src/static/icons/bell.svg | 1 + src/static/icons/browser.png | Bin 3592 -> 0 bytes src/static/icons/browser.svg | 2 +- src/static/icons/category.svg | 1 + src/static/icons/company.svg | 1 + src/static/icons/dashboard.svg | 1 + src/static/icons/file.svg | 1 + src/static/icons/git.svg | 1 + src/static/icons/log.png | Bin 5404 -> 0 bytes src/static/icons/log.svg | 1 + src/static/icons/more.svg | 1 + src/static/icons/notice.png | Bin 5237 -> 0 bytes src/static/icons/role.png | Bin 5637 -> 0 bytes src/static/icons/role.svg | 1 + src/static/icons/setting.png | Bin 5628 -> 0 bytes src/static/icons/setting.svg | 4 - src/static/icons/settings.svg | 1 + src/static/icons/tree.svg | 24 ++ src/static/icons/user.png | Bin 5597 -> 0 bytes src/static/icons/user.svg | 1 + src/static/icons/visitor.png | Bin 2318 -> 0 bytes src/static/icons/visitor.svg | 2 +- src/styles/index.scss | 31 +- src/types/auto-imports.d.ts | 4 + src/types/uni-pages.d.ts | 7 +- tsconfig.json | 4 +- vite.config.ts | 1 + 52 files changed, 3391 insertions(+), 1459 deletions(-) create mode 100644 skills-lock.json create mode 100644 src/api/dict.ts create mode 100644 src/api/menu.ts create mode 100644 src/components/custom-tree/index.vue create mode 100644 src/pages/webview/index.vue create mode 100644 src/pages/work/dict/index.vue create mode 100644 src/pages/work/dict/item/index.vue create mode 100644 src/pages/work/monitor/index.vue create mode 100644 src/pages/work/role/assign-perm.vue create mode 100644 src/static/icons/api.svg create mode 100644 src/static/icons/bell.svg delete mode 100644 src/static/icons/browser.png create mode 100644 src/static/icons/category.svg create mode 100644 src/static/icons/company.svg create mode 100644 src/static/icons/dashboard.svg create mode 100644 src/static/icons/file.svg create mode 100644 src/static/icons/git.svg delete mode 100644 src/static/icons/log.png create mode 100644 src/static/icons/log.svg create mode 100644 src/static/icons/more.svg delete mode 100644 src/static/icons/notice.png delete mode 100644 src/static/icons/role.png create mode 100644 src/static/icons/role.svg delete mode 100644 src/static/icons/setting.png delete mode 100644 src/static/icons/setting.svg create mode 100644 src/static/icons/settings.svg create mode 100644 src/static/icons/tree.svg delete mode 100644 src/static/icons/user.png create mode 100644 src/static/icons/user.svg delete mode 100644 src/static/icons/visitor.png diff --git a/components.d.ts b/components.d.ts index b22f1b5..0f8c824 100644 --- a/components.d.ts +++ b/components.d.ts @@ -8,8 +8,8 @@ export {} declare module 'vue' { export interface GlobalComponents { CuDateQuery: typeof import('./src/components/cu-date-query/index.vue')['default'] - CuPicker: typeof import('./src/components/cu-picker/index.vue')['default'] CustomNavbar: typeof import('./src/components/custom-navbar/index.vue')['default'] + CustomTree: typeof import('./src/components/custom-tree/index.vue')['default'] Loading1: typeof import('./src/components/qiun-loading/loading1.vue')['default'] Loading2: typeof import('./src/components/qiun-loading/loading2.vue')['default'] Loading3: typeof import('./src/components/qiun-loading/loading3.vue')['default'] @@ -27,11 +27,11 @@ declare module 'vue' { WdCheckbox: typeof import('wot-design-uni/components/wd-checkbox/wd-checkbox.vue')['default'] WdCollapse: typeof import('wot-design-uni/components/wd-collapse/wd-collapse.vue')['default'] WdCollapseItem: typeof import('wot-design-uni/components/wd-collapse-item/wd-collapse-item.vue')['default'] + WdColPicker: typeof import('wot-design-uni/components/wd-col-picker/wd-col-picker.vue')['default'] WdConfigProvider: typeof import('wot-design-uni/components/wd-config-provider/wd-config-provider.vue')['default'] WdDivider: typeof import('wot-design-uni/components/wd-divider/wd-divider.vue')['default'] WdDropMenu: typeof import('wot-design-uni/components/wd-drop-menu/wd-drop-menu.vue')['default'] WdDropMenuItem: typeof import('wot-design-uni/components/wd-drop-menu-item/wd-drop-menu-item.vue')['default'] - WdFab: typeof import('wot-design-uni/components/wd-fab/wd-fab.vue')['default'] WdForm: typeof import('wot-design-uni/components/wd-form/wd-form.vue')['default'] WdFormItem: typeof import('wot-design-uni/components/wd-form-item/wd-form-item.vue')['default'] WdGrid: typeof import('wot-design-uni/components/wd-grid/wd-grid.vue')['default'] @@ -45,7 +45,6 @@ declare module 'vue' { WdLoadmore: typeof import('wot-design-uni/components/wd-loadmore/wd-loadmore.vue')['default'] WdMessageBox: typeof import('wot-design-uni/components/wd-message-box/wd-message-box.vue')['default'] WdNotify: typeof import('wot-design-uni/components/wd-notify/wd-notify.vue')['default'] - WdPicker: typeof import('wot-design-uni/components/wd-picker/wd-picker.vue')['default'] WdPopup: typeof import('wot-design-uni/components/wd-popup/wd-popup.vue')['default'] WdProgress: typeof import('wot-design-uni/components/wd-progress/wd-progress.vue')['default'] WdRadio: typeof import('wot-design-uni/components/wd-radio/wd-radio.vue')['default'] diff --git a/package.json b/package.json index 85bff78..5ff97b8 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "@vueuse/core": "9.13.0", "pinia": "^2.3.1", "vue": "^3.5.22", - "wot-design-uni": "^1.13.0" + "wot-design-uni": "^1.14.0" }, "devDependencies": { "@commitlint/cli": "^19.8.1", diff --git a/skills-lock.json b/skills-lock.json new file mode 100644 index 0000000..4a3686e --- /dev/null +++ b/skills-lock.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "skills": { + "wot-ui": { + "source": "wot-ui/wot-starter", + "sourceType": "github", + "computedHash": "b4f8b0577871b28dd12278f26961d015e378d7d4f11435599631f1ee6860c8eb" + } + } +} diff --git a/src/api/dict.ts b/src/api/dict.ts new file mode 100644 index 0000000..bade754 --- /dev/null +++ b/src/api/dict.ts @@ -0,0 +1,126 @@ +import request from "@/utils/request"; + +const DICT_BASE_URL = "/api/v1/dicts"; + +const DictAPI = { + getPage(queryParams: DictTypePageQuery) { + return request({ + url: `${DICT_BASE_URL}`, + method: "GET", + data: queryParams, + }); + }, + + getFormData(id: string | number) { + return request({ + url: `${DICT_BASE_URL}/${id}/form`, + method: "GET", + }); + }, + + create(data: DictTypeForm) { + return request({ + url: `${DICT_BASE_URL}`, + method: "POST", + data, + }); + }, + + update(id: string | number, data: DictTypeForm) { + return request({ + url: `${DICT_BASE_URL}/${id}`, + method: "PUT", + data, + }); + }, + + deleteByIds(ids: string) { + return request({ + url: `${DICT_BASE_URL}/${ids}`, + method: "DELETE", + }); + }, + + getItemPage(dictCode: string, queryParams: DictItemPageQuery) { + return request({ + url: `${DICT_BASE_URL}/${dictCode}/items`, + method: "GET", + data: queryParams, + }); + }, + + getItemFormData(dictCode: string, id: string | number) { + return request({ + url: `${DICT_BASE_URL}/${dictCode}/items/${id}/form`, + method: "GET", + }); + }, + + createItem(dictCode: string, data: DictItemForm) { + return request({ + url: `${DICT_BASE_URL}/${dictCode}/items`, + method: "POST", + data, + }); + }, + + updateItem(dictCode: string, id: string | number, data: DictItemForm) { + return request({ + url: `${DICT_BASE_URL}/${dictCode}/items/${id}`, + method: "PUT", + data, + }); + }, + + deleteItems(dictCode: string, ids: string) { + return request({ + url: `${DICT_BASE_URL}/${dictCode}/items/${ids}`, + method: "DELETE", + }); + }, +}; + +export default DictAPI; + +export interface DictTypePageQuery extends PageQuery { + keywords?: string; + status?: number; +} + +export interface DictTypeForm { + id?: string; + name?: string; + dictCode?: string; + status?: number; + remark?: string; +} + +export interface DictTypePageVO { + id?: string; + name?: string; + dictCode?: string; + status?: number; + remark?: string; +} + +export interface DictItemPageQuery extends PageQuery { + keywords?: string; +} + +export interface DictItemForm { + id?: string; + dictCode?: string; + label?: string; + value?: string; + sort?: number; + status?: number; +} + +export interface DictItemPageVO { + id?: string; + dictCode?: string; + label?: string; + value?: string; + sort?: number; + status?: number; +} diff --git a/src/api/menu.ts b/src/api/menu.ts new file mode 100644 index 0000000..8293a95 --- /dev/null +++ b/src/api/menu.ts @@ -0,0 +1,123 @@ +import request from "@/utils/request"; + +const MENU_BASE_URL = "/api/v1/menus"; + +const MenuAPI = { + /** 获取菜单列表 */ + getList(queryParams?: MenuQuery) { + return request({ + url: `${MENU_BASE_URL}`, + method: "GET", + data: queryParams, + }); + }, + + /** 获取菜单下拉选项 */ + getOptions(includeButton = false) { + return request({ + url: `${MENU_BASE_URL}/options`, + method: "GET", + data: { includeButton }, + }); + }, + + /** 获取菜单表单数据 */ + getFormData(id: string) { + return request({ + url: `${MENU_BASE_URL}/${id}/form`, + method: "GET", + }); + }, + + /** 新增菜单 */ + add(data: MenuForm) { + return request({ + url: `${MENU_BASE_URL}`, + method: "POST", + data, + }); + }, + + /** 修改菜单 */ + update(id: string, data: MenuForm) { + return request({ + url: `${MENU_BASE_URL}/${id}`, + method: "PUT", + data, + }); + }, + + /** 删除菜单 */ + deleteById(id: string) { + return request({ + url: `${MENU_BASE_URL}/${id}`, + method: "DELETE", + }); + }, +}; + +export default MenuAPI; + +/** 菜单查询参数 */ +export interface MenuQuery { + /** 搜索关键字 */ + keywords?: string; + /** 状态 */ + visible?: number; +} + +/** 菜单类型 */ +export interface MenuVO { + /** 子菜单 */ + children?: MenuVO[]; + /** 组件路径 */ + component?: string; + /** 创建时间 */ + createTime?: Date; + /** 图标 */ + icon?: string; + /** 菜单ID */ + id?: string; + /** 菜单名称 */ + name?: string; + /** 父菜单ID */ + parentId?: string; + /** 权限标识 */ + perm?: string; + /** 路由名称 */ + routeName?: string; + /** 路由路径 */ + routePath?: string; + /** 排序 */ + sort?: number; + /** 状态(1:显示;0:隐藏) */ + visible?: number; + /** 菜单类型(C:目录;M:菜单;B:按钮) */ + type?: string | number; +} + +/** 菜单表单类型 */ +export interface MenuForm { + /** 菜单ID(新增不填) */ + id?: string; + /** 菜单名称 */ + name?: string; + /** 父菜单ID */ + parentId: string; + /** 菜单类型(C:目录;M:菜单;B:按钮) */ + type: string | number; + /** 路由名称 */ + routeName?: string; + /** 路由路径 */ + routePath?: string; + /** 组件路径 */ + component?: string; + /** 权限标识 */ + perm?: string; + /** 图标 */ + icon?: string; + /** 排序 */ + sort?: number; + /** 状态(1:显示;0:隐藏) */ + visible?: number; +} diff --git a/src/api/role.ts b/src/api/role.ts index f4e7ea0..b18fda6 100644 --- a/src/api/role.ts +++ b/src/api/role.ts @@ -28,7 +28,7 @@ const RoleAPI = { */ getRoleMenuIds(roleId: number) { return request({ - url: `${ROLE_BASE_URL}/${roleId}/menuIds`, + url: `${ROLE_BASE_URL}/${roleId}/menu-ids`, method: "GET", }); }, @@ -116,6 +116,10 @@ export interface RolePageVO { sort?: number; /** 角色状态 */ status?: number; + /** 数据权限(1-所有数据 2-部门及子部门数据 3-本部门数据 4-本人数据 5-自定义部门数据) */ + dataScope?: number; + /** 数据权限标签 */ + dataScopeLabel?: string; /** 创建时间 */ createTime?: string; /** 修改时间 */ diff --git a/src/components/custom-tree/index.vue b/src/components/custom-tree/index.vue new file mode 100644 index 0000000..6e339bc --- /dev/null +++ b/src/components/custom-tree/index.vue @@ -0,0 +1,425 @@ + + + + + diff --git a/src/config/menu.ts b/src/config/menu.ts index 59b257e..3f67238 100644 --- a/src/config/menu.ts +++ b/src/config/menu.ts @@ -19,40 +19,93 @@ export const menuConfig: WorkMenuGroup[] = [ title: "系统管理", children: [ { - icon: "/static/icons/user.png", + icon: "/static/icons/user.svg", title: "用户管理", url: "/pages/work/user/index", perm: "sys:user:list", }, { - icon: "/static/icons/role.png", + icon: "/static/icons/role.svg", title: "角色管理", url: "/pages/work/role/index", perm: "sys:role:list", }, { - icon: "/static/icons/notice.png", - title: "通知公告", - url: "/pages/work/notice/index", - perm: "sys:notice:list", + icon: "/static/icons/company.svg", + title: "部门管理", + url: "/pages/work/dept/index", + perm: "sys:dept:list", }, { - icon: "/static/icons/setting.png", + icon: "/static/icons/settings.svg", title: "系统配置", url: "/pages/work/config/index", perm: "sys:config:list", }, + { + icon: "/static/icons/file.svg", + title: "字典管理", + url: "/pages/work/dict/index", + perm: "sys:dict:list", + }, + { + icon: "/static/icons/tree.svg", + title: "菜单管理", + url: "/pages/work/menu/index", + perm: "sys:menu:list", + }, + { + icon: "/static/icons/bell.svg", + title: "通知公告", + url: "/pages/work/notice/index", + perm: "sys:notice:list", + }, ], }, { title: "系统监控", children: [ { - icon: "/static/icons/log.png", + icon: "/static/icons/log.svg", title: "系统日志", url: "/pages/work/log/index", perm: "sys:log:list", }, + { + icon: "/static/icons/dashboard.svg", + title: "应用监控", + url: "https://www.baidu.com", + perm: "", + }, + ], + }, + { + title: "项目链接", + children: [ + { + icon: "/static/icons/company.svg", + title: "官网", + url: "https://www.youlai.tech/", + perm: "", + }, + { + icon: "/static/icons/file.svg", + title: "文档", + url: "https://youlai.blog.csdn.net/article/details/143222890", + perm: "", + }, + { + icon: "/static/icons/api.svg", + title: "接口", + url: "https://youlai.apifox.cn/", + perm: "", + }, + { + icon: "/static/icons/git.svg", + title: "仓库", + url: "https://atomgit.com/youlai/youlai-app", + perm: "", + }, ], }, ]; diff --git a/src/layouts/tabbar.vue b/src/layouts/tabbar.vue index 184cbbd..5cd071d 100644 --- a/src/layouts/tabbar.vue +++ b/src/layouts/tabbar.vue @@ -4,7 +4,7 @@ :custom-class="`page-wraper ${theme}`" :theme="theme" :style="{ - '--status-bar-height': statusBarHeight + 'px', + '--status-bar-height': statusBarHeight + 'px', }" > @@ -51,6 +51,17 @@ function handleTabbarChange({ value }: { value: string }) { router.pushTab({ name: value }); } +// 监听路由变化更新 tabbar 激活状态 +watch( + () => route.name, + (name) => { + if (name && name !== activeTabbar.value.name) { + setTabbarItemActive(name); + } + }, + { immediate: true } +); + onMounted(() => { const systemInfo = uni.getSystemInfoSync(); statusBarHeight.value = systemInfo.statusBarHeight || 0; @@ -58,11 +69,6 @@ onMounted(() => { // #ifdef APP-PLUS uni.hideTabBar(); // #endif - nextTick(() => { - if (route.name && route.name !== activeTabbar.value.name) { - setTabbarItemActive(route.name); - } - }); }); diff --git a/src/pages.json b/src/pages.json index 427acf4..6ee3c03 100644 --- a/src/pages.json +++ b/src/pages.json @@ -27,6 +27,14 @@ }, "layout": "tabbar" }, + { + "path": "pages/webview/index", + "type": "page", + "name": "webview", + "style": { + "navigationBarTitleText": "网页" + } + }, { "path": "pages/work/index", "type": "page", @@ -95,6 +103,14 @@ "navigationBarTitleText": "部门管理" } }, + { + "path": "pages/work/dict/index", + "type": "page", + "name": "dict", + "style": { + "navigationBarTitleText": "字典管理" + } + }, { "path": "pages/work/log/index", "type": "page", @@ -111,6 +127,14 @@ "navigationBarTitleText": "菜单管理" } }, + { + "path": "pages/work/monitor/index", + "type": "page", + "name": "monitor", + "style": { + "navigationBarTitleText": "应用监控" + } + }, { "path": "pages/work/notice/index", "type": "page", @@ -119,6 +143,14 @@ "navigationBarTitleText": "通知公告" } }, + { + "path": "pages/work/role/assign-perm", + "type": "page", + "name": "role-assign-perm", + "style": { + "navigationBarTitleText": "分配权限" + } + }, { "path": "pages/work/role/index", "type": "page", @@ -162,6 +194,14 @@ "style": { "navigationBarTitleText": "主题设置" } + }, + { + "path": "pages/work/dict/item/index", + "type": "page", + "name": "dict-item", + "style": { + "navigationBarTitleText": "字典数据" + } } ], "globalStyle": { diff --git a/src/pages/index/index.vue b/src/pages/index/index.vue index 5f456a3..6708813 100644 --- a/src/pages/index/index.vue +++ b/src/pages/index/index.vue @@ -45,9 +45,7 @@ - - - + 访客数 @@ -57,9 +55,7 @@ - - - + 浏览量 @@ -69,9 +65,6 @@ - - - 应用版本 @@ -108,23 +101,6 @@ + + + + +{ + "name": "webview", + "style": { "navigationBarTitleText": "网页" } +} + diff --git a/src/pages/work/config/index.vue b/src/pages/work/config/index.vue index d740c84..bb6820f 100644 --- a/src/pages/work/config/index.vue +++ b/src/pages/work/config/index.vue @@ -1,298 +1,240 @@ + + { "name": "config", @@ -301,34 +243,3 @@ onLoad(() => { } } - - diff --git a/src/pages/work/dept/index.vue b/src/pages/work/dept/index.vue index 1bd61d8..7d9cb4a 100644 --- a/src/pages/work/dept/index.vue +++ b/src/pages/work/dept/index.vue @@ -1,363 +1,345 @@ @@ -216,7 +213,7 @@ const deptOptions = ref([]); // 部门多列选择器数据 const deptSelected = ref<(string | number)[]>([]); -const deptColumns = ref[]>([]); +const deptColumns = ref[][]>([]); // 格式化部门展示 const displayDeptFormat = (selectedItems: Record[]) => { diff --git a/src/static/icons/api.svg b/src/static/icons/api.svg new file mode 100644 index 0000000..f361cd7 --- /dev/null +++ b/src/static/icons/api.svg @@ -0,0 +1 @@ +</> diff --git a/src/static/icons/bell.svg b/src/static/icons/bell.svg new file mode 100644 index 0000000..4c1282e --- /dev/null +++ b/src/static/icons/bell.svg @@ -0,0 +1 @@ + diff --git a/src/static/icons/browser.png b/src/static/icons/browser.png deleted file mode 100644 index fbadaa02974f2538215000e029b69b36a6b04afc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3592 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 + diff --git a/src/static/icons/category.svg b/src/static/icons/category.svg new file mode 100644 index 0000000..32fccfd --- /dev/null +++ b/src/static/icons/category.svg @@ -0,0 +1 @@ + diff --git a/src/static/icons/company.svg b/src/static/icons/company.svg new file mode 100644 index 0000000..2d05d43 --- /dev/null +++ b/src/static/icons/company.svg @@ -0,0 +1 @@ + diff --git a/src/static/icons/dashboard.svg b/src/static/icons/dashboard.svg new file mode 100644 index 0000000..61eeafc --- /dev/null +++ b/src/static/icons/dashboard.svg @@ -0,0 +1 @@ + diff --git a/src/static/icons/file.svg b/src/static/icons/file.svg new file mode 100644 index 0000000..18a86ff --- /dev/null +++ b/src/static/icons/file.svg @@ -0,0 +1 @@ + diff --git a/src/static/icons/git.svg b/src/static/icons/git.svg new file mode 100644 index 0000000..f8b39af --- /dev/null +++ b/src/static/icons/git.svg @@ -0,0 +1 @@ + diff --git a/src/static/icons/log.png b/src/static/icons/log.png deleted file mode 100644 index e9777dbf5176f99dae0a328732daca68e3835d75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5404 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 diff --git a/src/static/icons/more.svg b/src/static/icons/more.svg new file mode 100644 index 0000000..f215c92 --- /dev/null +++ b/src/static/icons/more.svg @@ -0,0 +1 @@ + diff --git a/src/static/icons/notice.png b/src/static/icons/notice.png deleted file mode 100644 index ebde0284ce093c89a4de1c8d6615e4e0c6552b34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5237 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 diff --git a/src/static/icons/role.png b/src/static/icons/role.png deleted file mode 100644 index 890d96fc1b11984b79a20bf3d1a042abff151ccf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5637 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 diff --git a/src/static/icons/role.svg b/src/static/icons/role.svg new file mode 100644 index 0000000..206832c --- /dev/null +++ b/src/static/icons/role.svg @@ -0,0 +1 @@ + diff --git a/src/static/icons/setting.png b/src/static/icons/setting.png deleted file mode 100644 index 45c0c1e84b2abe3409d85ef792f85f8c4cc3e9ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5628 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 WReMG&br&800000 - - - diff --git a/src/static/icons/settings.svg b/src/static/icons/settings.svg new file mode 100644 index 0000000..0fad12a --- /dev/null +++ b/src/static/icons/settings.svg @@ -0,0 +1 @@ + diff --git a/src/static/icons/tree.svg b/src/static/icons/tree.svg new file mode 100644 index 0000000..bb29a92 --- /dev/null +++ b/src/static/icons/tree.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/static/icons/user.png b/src/static/icons/user.png deleted file mode 100644 index 9f58ed01e1bb81b84b0a850b248c63018861956c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5597 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 diff --git a/src/static/icons/user.svg b/src/static/icons/user.svg new file mode 100644 index 0000000..6290e97 --- /dev/null +++ b/src/static/icons/user.svg @@ -0,0 +1 @@ + diff --git a/src/static/icons/visitor.png b/src/static/icons/visitor.png deleted file mode 100644 index cf23b9209b65a88f3c50833b4d488e08a2cbcfc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2318 zcmcImX*|@68h-yXgPEbM;Tk8hgfy8Fy0)1ZLW+io>`FOOp~k-bZE;kHoVaAPoFq#Q zXM~YZQHWByp)pF?vQ`+AvZ3%5LQe0Q_@X`hMpKujw0Rmq}J~D1TsFfa(S|ucG)$$S$dU#d7}$Ja{ss2`AWj(s zm+=OkBhGWB+dikCVpom@AS@CDk1>2>9eQMc^qqc+jp3c!!i9ouIIfT$a%)tS=GbYu z)Df5xn%ug4&;$-lzsnH2$Tnc9qrtNb-_`W5xL-wvt75AqfmErx-{mI;AMTk-BS8}> zUV>TWvdffHAzuC0!f9mq9&doSt?u{QkYn{!GgwD- z7+}zW6hEX6nOC-9I}n?}CH{0_%k}B#tMZvWTdm@aO#JOijXe98SBT}K-(I?BI-G-K zwneF%K2P-BcNR$PQv2{~&cz|#{qy2UuGkoUvDo=fb9-kZ92T%to7cQ2g|~Q#OS9`c zLmjM%M$o|2W>y?h(h-4@NGv{hN-yT-M`_5^OZFK&`p{yH~jGq(fZ_xg8CH)(C&YEh+o1fOC(km(&FCd# zA5z>cKM**nH%VIpP;$B;T!>9B#%JkaSh{10T0;?vVefDoM!fcmu&bWvu3cY=dY>8> zelC6K*}A%*24^tIwvpL5^z7Gaw#r*Dt_xN_BY5ASHkuckx^sxvsEDth4an!jdW!jv3PLJzFq&C;wBS1JvQR04xrdpvsx_5b3 zyqaBPJFv>p7)-M?WN$jc=fm@l?z+aK4u^$ljR)4;aF<&=_K%e$vO6C%Kg-o}(x2}e z$?-P!6*Rh96`t&mnpPUQGR9;VN*GH>5YRujO7=W%b-Mp*_RDBUsY0mu_VVp@Yr>bY z-TS=mm|62;7)gbTAXxN{AJvpjIp2A$puMleeM~ZHoa?_|Qq2z;d7%qAnn z^~%v1VT*-H(Y`ZoOBfuAhc~hYcB?Oa{Ig!$58EPmG~hxT*UxMwUf@^81B4<1y5JG< zLGKe857Oj(ohORxfeSzgNkwkHz}oBNgUz$T@fn}|a-Tx6W~_X#SK{C+#of&xvd<2T z+7CH+(y|Si_96$`YxX`ilgcCb0fpmH)+>PKG!r>$3iHMrPc*%B_%*@PLO=3yfX~fn z1&-p0PXVtdHD)g;!L=_7t;UTF=MOW=bMxJU)QXb?cpHtm^ zqhP%?^PsCYR?#p8^7Ki1By9s+_h*cwf@QI8VK_TPNtxp6^E!T5wiU66Zy zl|0INmm%Ax(s61NrUao)H$D>XRK=Hn<;FWu1%i(}5=4Hur8ys~mZKl%aWR#bFt49< zLyTq<+MANs=5j+w9^5msJ0TS`>fnmYs49D4NY% zaz2VJOccmEZbog4eB>Z(efHa2ki5p(5cE6K?-*{EGdG(`Bq^YQHV*Hs^8BDZ1z3g8)C7PmXf#P9=bwut0|e`S%G~dGE=L!GSHr}a#w~|Yg7~Xd@J0e zhPFS@I%e6GVojn}BvIC+PL`hjEO6z5ViIjn`b>P2NH};aPGLk*kC2sF>7ZK)Q(fVr zNiFN#D@9{1)Nn8sd^w_S%_in>O!izA%bUjys0Bz%dy-G^u@VL~b2r5q_cifnUSjbD z0iWZzxoc+QQB1G#Fw2#h2O;5Q3?ehMegtv0r7ze7ppeCIStQCre@*E%Iu5j%)Om=wrVpO9IbF + diff --git a/src/styles/index.scss b/src/styles/index.scss index 5e3e9b2..71faf8e 100644 --- a/src/styles/index.scss +++ b/src/styles/index.scss @@ -46,6 +46,7 @@ body, } .page--pt { + box-sizing: border-box; padding-top: 16rpx; } @@ -95,14 +96,28 @@ body, } // ========================================================================== -// 浮动按钮 +// 浮动新增按钮 // ========================================================================== -.wd-button.fab-btn { - box-sizing: border-box !important; - width: 80rpx !important; - min-width: 80rpx !important; - height: 80rpx !important; - padding: 0 !important; - border-radius: 40rpx !important; +.fab-add { + position: fixed; + right: 32rpx; + bottom: 120rpx; + z-index: 99; + display: flex; + align-items: center; + justify-content: center; + width: 88rpx; + height: 88rpx; + background: var(--color-primary); + border-radius: 50%; + box-shadow: 0 8rpx 24rpx rgba(0, 0, 0, 0.15); + + &:active { + opacity: 0.8; + } + + .wd-icon { + color: #fff; + } } diff --git a/src/types/auto-imports.d.ts b/src/types/auto-imports.d.ts index e07162d..84925a2 100644 --- a/src/types/auto-imports.d.ts +++ b/src/types/auto-imports.d.ts @@ -32,6 +32,7 @@ declare global { const defineComponent: typeof import('vue')['defineComponent'] const defineStore: typeof import('pinia')['defineStore'] const dept: typeof import('../api/dept')['default'] + const dict: typeof import('../api/dict')['default'] const effectScope: typeof import('vue')['effectScope'] const file: typeof import('../api/file')['default'] const getAccessToken: typeof import('../utils/auth')['getAccessToken'] @@ -61,6 +62,7 @@ declare global { const mapStores: typeof import('pinia')['mapStores'] const mapWritableState: typeof import('pinia')['mapWritableState'] const markRaw: typeof import('vue')['markRaw'] + const menu: typeof import('../api/menu')['default'] const nextTick: typeof import('vue')['nextTick'] const notice: typeof import('../api/notice')['default'] const onActivated: typeof import('vue')['onActivated'] @@ -235,6 +237,7 @@ declare module 'vue' { readonly defineComponent: UnwrapRef readonly defineStore: UnwrapRef readonly dept: UnwrapRef + readonly dict: UnwrapRef readonly effectScope: UnwrapRef readonly file: UnwrapRef readonly getAccessToken: UnwrapRef @@ -262,6 +265,7 @@ declare module 'vue' { readonly mapStores: UnwrapRef readonly mapWritableState: UnwrapRef readonly markRaw: UnwrapRef + readonly menu: UnwrapRef readonly nextTick: UnwrapRef readonly notice: UnwrapRef readonly onActivated: UnwrapRef diff --git a/src/types/uni-pages.d.ts b/src/types/uni-pages.d.ts index c6b7409..0fb54af 100644 --- a/src/types/uni-pages.d.ts +++ b/src/types/uni-pages.d.ts @@ -7,6 +7,7 @@ interface NavigateToOptions { url: "/pages/index/index" | "/pages/login/index" | "/pages/mine/index" | + "/pages/webview/index" | "/pages/work/index" | "/pages/mine/about/index" | "/pages/mine/account/index" | @@ -17,15 +18,19 @@ interface NavigateToOptions { "/pages/mine/settings/index" | "/pages/work/config/index" | "/pages/work/dept/index" | + "/pages/work/dict/index" | "/pages/work/log/index" | "/pages/work/menu/index" | + "/pages/work/monitor/index" | "/pages/work/notice/index" | + "/pages/work/role/assign-perm" | "/pages/work/role/index" | "/pages/work/user/index" | "/pages/mine/settings/agreement/index" | "/pages/mine/settings/network/index" | "/pages/mine/settings/privacy/index" | - "/pages/mine/settings/theme/index"; + "/pages/mine/settings/theme/index" | + "/pages/work/dict/item/index"; } interface RedirectToOptions extends NavigateToOptions {} diff --git a/tsconfig.json b/tsconfig.json index 44f5887..f21ef92 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,7 +19,9 @@ // 调整 Volar(Vue 语言服务工具)解析行为,用于为 uni-app 组件提供 TypeScript 类型 "plugins": ["@uni-helper/uni-types/volar-plugin"], // 禁用原生组件严格类型检查(uni-app 原生组件与 Volar 的兼容性问题) - "nativeTags": ["block", "component", "template", "slot"] + "nativeTags": ["block", "component", "template", "slot"], + // 忽略 slot props 隐式 any 类型错误(递归组件 slot 转发的已知限制) + "strictTemplates": false }, "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], "exclude": ["node_modules", "dist"] diff --git a/vite.config.ts b/vite.config.ts index 7fc3579..709ea23 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -55,6 +55,7 @@ export default defineConfig(async ({ mode }: ConfigEnv): Promise => }), Components({ resolvers: [WotResolver()], + dirs: ["src/components"], }), AutoImport({