From 78d85e8aacb66f03cb499a86678499cd9dbfafad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=82=A5=E7=BE=8A?= <1048382248@qq.com> Date: Fri, 8 Aug 2025 18:32:04 +0800 Subject: [PATCH] =?UTF-8?q?=20=E6=96=B0=E5=A2=9E=20=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E7=95=8C=E9=9D=A2[=E5=BE=85=E5=AE=8C=E5=96=84]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/enum.ts | 19 + src/api/hTable.ts | 31 ++ src/api/menu.ts | 24 ++ src/components/hTable/hTable.ts | 182 ++++++++ src/components/hTable/hTableEdit.vue | 218 ++++++++++ src/components/hTable/index.vue | 597 +++++++++++++++++++++++++++ src/router/modules/home.ts | 18 + src/store/modules/permission.ts | 1 - src/views/menu/index.vue | 236 +++++++++++ src/views/school/index.vue | 120 ++++++ 10 files changed, 1445 insertions(+), 1 deletion(-) create mode 100644 src/api/enum.ts create mode 100644 src/api/hTable.ts create mode 100644 src/api/menu.ts create mode 100644 src/components/hTable/hTable.ts create mode 100644 src/components/hTable/hTableEdit.vue create mode 100644 src/components/hTable/index.vue create mode 100644 src/views/menu/index.vue create mode 100644 src/views/school/index.vue diff --git a/src/api/enum.ts b/src/api/enum.ts new file mode 100644 index 0000000..21e3c72 --- /dev/null +++ b/src/api/enum.ts @@ -0,0 +1,19 @@ +import { http } from "@/utils/http"; +import type { Res } from "@/utils/http/types"; + +/** + * @description 获取枚举下拉 + * @param {string} type 枚举类型 type=StatusEnum + * @return {object} + */ +export function getenum(type) { + return http.request>("get", `public/enum/${type}`); +} +/** + * @description 获取枚举对象 + * @param {string} type 枚举类型 type=StatusEnum + * @return {object} + */ +export function getenumDic(type) { + return http.request>("get", `public/enum/${type}/Dic`); +} diff --git a/src/api/hTable.ts b/src/api/hTable.ts new file mode 100644 index 0000000..8839c3b --- /dev/null +++ b/src/api/hTable.ts @@ -0,0 +1,31 @@ +import { http } from "@/utils/http"; +import type { Res } from "@/utils/http/types"; + +export class hTableAPI { + url = ""; + /** 构造函数 */ + constructor(url) { + this.url = url; + } + PageList(data = {}) { + return http.request>("post", `${this.url}/PageList`, { data }); + } + Info(id, tag = {}) { + const pUrl = `${this.url}/${id}`; + let getUrl = pUrl; + for (const key in tag) { + const el = tag[key]; + getUrl += (getUrl === pUrl ? "?" : "&") + key + "=" + el; + } + return http.request>("get", getUrl); + } + edit(data) { + return http.request>("post", `${this.url}/Edit`, { data }); + } + delete(data) { + return http.request>("post", `${this.url}/Del`, { data }); + } + querycombo(data) { + return http.request>("post", `${this.url}/QueryCombo`, { data }); + } +} diff --git a/src/api/menu.ts b/src/api/menu.ts new file mode 100644 index 0000000..dffe752 --- /dev/null +++ b/src/api/menu.ts @@ -0,0 +1,24 @@ +import { http } from "@/utils/http"; +import type { Res } from "@/utils/http/types"; + +// 定义菜单项接口 +export interface MenuItem { + id: number; + name: string; + path?: string; + isButton: boolean; + title: string; + icon?: string; + auths?: string; + rank: number; + showLink: boolean; + parentId: number; + children?: MenuItem[]; +} +/** + * @description 获取所有的菜单 + * @return {object} + */ +export function MenuAll() { + return http.request>("get", `Menu/All`); +} diff --git a/src/components/hTable/hTable.ts b/src/components/hTable/hTable.ts new file mode 100644 index 0000000..eb1a905 --- /dev/null +++ b/src/components/hTable/hTable.ts @@ -0,0 +1,182 @@ +export interface Dialog { + /* 对话框是否可见 */ + visible: boolean; + /* 是否显示关闭按钮 */ + close: boolean; + /* 对话框标题 */ + title: string; + /* 对话框宽度 */ + width: string; + /**自定义弹窗数据 */ + custom: { + /* 自定义对话框高度 */ + height: string; + /* 自定义对话框数据 */ + data: any[]; + /* 自定义组件路径 */ + src?: string; + /* 自定义配置项 */ + custom: Record; + /* 自定义对话框是否可见 */ + visible: boolean; + /* 异步加载组件 */ + component: any; + }; + edit: { + /* 编辑项ID */ + id: number; + /* 编辑对话框标题 */ + title: string; + /* 编辑对话框是否可见 */ + visible: boolean; + row?: any; + tagData?: any; + }; +} + +/* 按钮自定义配置 */ +export interface ButtonCustomConfig { + /* 弹出框标题 */ + title: string; + /* 组件路径 */ + src: string; + /* 弹框宽度 */ + width: string; + /* 弹框高度 */ + height: string; +} + +/* 操作按钮配置 */ +export interface OperationButton { + /* 是否为头部按钮 */ + topBtn: boolean; + /* 是否显示 */ + show?: boolean; + /* 按钮文本 */ + label: string; + /* 按钮类型 */ + btnType: "add" | "edit" | "del" | "custom"; + /* 按钮样式 */ + btnStyle?: "success" | "danger"; + /* 自定义按钮配置 */ + custom?: ButtonCustomConfig; +} + +/* 字段设置项 */ +export interface FieldSetting { + /**map 时Value的取值的属性 */ + mapValue?: string; + /**map 时label的取值的属性 */ + maplabel?: string; + /** 数据源 请求方式 */ + datasourceStr?: string; + /** + * 图片地址 获取方式 + * @param value 当前值 + * @param row 当前行值 + * @returns 预期返回有效图片地址url + */ + imgUrl?: (value: any, row: any) => string; + /* 数据源 */ + datasource?: Array<{ + Value: any; + Text: string; + }>; +} +///* 表格列配置 */ +//export interface TableEditColumn {} + +/* 表格列配置 */ +export interface TableColumn { + /* 显示标签 */ + label: string; + /* 是否可搜索 */ + search: boolean; + /* 搜索类型 */ + searchType?: + | "Equal" + | "NoEqual" + | "Like" + | "GreaterThan" + | "LessThan" + | "NoLike"; + /* 是否允许添加 */ + add: boolean; + /* 是否允许修改 */ + edit: boolean; + /* 列宽度 */ + width?: string; + /* 字段类型 */ + type?: string; + /** 是否多选 */ + multiple?: boolean; + /** 编辑时显示列 */ + editShow?: boolean; + rules?: any | Array; + /** 显示列 */ + show?: boolean; + /* 字段设置 */ + setting?: FieldSetting; + /* 修改时的编辑值 */ + valueE?: Array | string; + /* 查询值 */ + value?: Array | string; + /** textarea编辑时的行数 */ + editRows?: number; + /**编辑时值发生变化 */ + change?: () => void; + /**列值初始化时 如何获取默认取对应列*/ + custom?: (row: any) => string; +} + +/* 分页数据 */ +export interface PageData { + /* 总条数 */ + total: number; +} + +/* 搜索条件 */ +export interface SearchConditions { + /* 是否显示搜索 */ + show: boolean; + /* 当前页码 */ + PageIndex: number; + /* 每页大小 */ + PageSize: number; + /* 排序字段 */ + OrderBy: string; + /* 默认查询条件 */ + defaultConditions: any[]; + /* 查询条件 */ + Conditions: any[]; +} + +/* 表格配置 */ +export interface TableConfig { + /* 搜索回调函数 */ + searchCallback?: (s: SearchConditions) => void; + /* 新增/修改回调函数 */ + editCallback?: (from: any) => void; + /* API地址 */ + apiUrl: string; + /* 是否显示选择列 */ + selectColumn: boolean; + /* 搜索配置 */ + search: SearchConditions; + /* 是否显示操作列 */ + operationColumn: boolean; + /* 操作按钮配置 */ + operationColumnData: OperationButton[]; + /* 列配置 */ + column: Record; + /* 表格数据 */ + data: any[]; + /**显示头部操作按钮 */ + operationTop?: boolean; + /* 分页数据 */ + pageData: PageData; + /* 选中行 */ + selectRows: any[]; + /* 是否显示边框 */ + border: boolean; +} diff --git a/src/components/hTable/hTableEdit.vue b/src/components/hTable/hTableEdit.vue new file mode 100644 index 0000000..f35ec13 --- /dev/null +++ b/src/components/hTable/hTableEdit.vue @@ -0,0 +1,218 @@ + + + diff --git a/src/components/hTable/index.vue b/src/components/hTable/index.vue new file mode 100644 index 0000000..ba33a09 --- /dev/null +++ b/src/components/hTable/index.vue @@ -0,0 +1,597 @@ + + + + + diff --git a/src/router/modules/home.ts b/src/router/modules/home.ts index 1cc1a4f..a9172f9 100644 --- a/src/router/modules/home.ts +++ b/src/router/modules/home.ts @@ -20,6 +20,24 @@ export default { title: "首页", showLink: VITE_HIDE_HOME === "true" ? false : true } + }, + { + path: "/school", + name: "school", + component: () => import("@/views/school/index.vue"), + meta: { + title: "学校", + showLink: true + } + }, + { + path: "/menu", + name: "Menu", + component: () => import("@/views/menu/index.vue"), + meta: { + title: "菜单", + showLink: true + } } ] } satisfies RouteConfigsTable; diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts index ca5f8f0..97bc7cd 100644 --- a/src/store/modules/permission.ts +++ b/src/store/modules/permission.ts @@ -26,7 +26,6 @@ export const usePermissionStore = defineStore("pure-permission", { actions: { /** 组装整体路由生成的菜单 */ handleWholeMenus(routes: any[]) { - debugger; this.wholeMenus = filterNoPermissionTree( filterTree(ascending(this.constantMenus.concat(routes))) ); diff --git a/src/views/menu/index.vue b/src/views/menu/index.vue new file mode 100644 index 0000000..07f3da1 --- /dev/null +++ b/src/views/menu/index.vue @@ -0,0 +1,236 @@ + + + + + diff --git a/src/views/school/index.vue b/src/views/school/index.vue new file mode 100644 index 0000000..902ea25 --- /dev/null +++ b/src/views/school/index.vue @@ -0,0 +1,120 @@ + + +