From 20cbc5b7b8a2983d9832505ad7da8e49acc1f439 Mon Sep 17 00:00:00 2001 From: tiananlin Date: Mon, 25 Aug 2025 15:30:48 +0800 Subject: [PATCH 01/21] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20Dockerfiles/Dockerfi?= =?UTF-8?q?le-staging/default.conf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfiles/Dockerfile-staging/default.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfiles/Dockerfile-staging/default.conf b/Dockerfiles/Dockerfile-staging/default.conf index f761306..3de8a37 100644 --- a/Dockerfiles/Dockerfile-staging/default.conf +++ b/Dockerfiles/Dockerfile-staging/default.conf @@ -32,7 +32,7 @@ server { # API 代理配置 location /api/ { - proxy_pass http://learn-archives-api-svc/api/; + proxy_pass http://learn-archives-api-svc:8080/api/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; -- 2.40.1 From 96a74b0107a673a27484d12ae372a212d68f8692 Mon Sep 17 00:00:00 2001 From: tiananlin Date: Tue, 26 Aug 2025 15:16:55 +0800 Subject: [PATCH 02/21] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20Dockerfiles/Dockerfi?= =?UTF-8?q?le-production/Dockerfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfiles/Dockerfile-production/Dockerfile | 41 ++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Dockerfiles/Dockerfile-production/Dockerfile diff --git a/Dockerfiles/Dockerfile-production/Dockerfile b/Dockerfiles/Dockerfile-production/Dockerfile new file mode 100644 index 0000000..24483ae --- /dev/null +++ b/Dockerfiles/Dockerfile-production/Dockerfile @@ -0,0 +1,41 @@ +# 构建阶段 +FROM m.daocloud.io/docker.io/library/node:22.14.0 AS builder + +# 设置工作目录 +WORKDIR /app + +# 设置 npm 镜像源 +RUN npm config set registry https://registry.npmmirror.com/ +RUN npm config set fetch-retries 3 +RUN npm config set fetch-retry-mintimeout 5000 +RUN npm config set fetch-retry-maxtimeout 60000 + +# 安装pnpm +RUN npm install -g pnpm + +# 复制源代码 +COPY . . + +# 设置 pnpm 下载源 +RUN pnpm config set registry https://registry.npmmirror.com/ + +# 安装依赖 +RUN pnpm i --fetch-timeout 300000 + +# 构建项目 +RUN pnpm build:prod + +# 部署阶段 +FROM m.daocloud.io/docker.io/library/nginx:alpine + +# 复制构建产物到 Nginx 目录 +COPY --from=builder --chown=nginx:nginx /app/dist /usr/share/nginx/html + +# 复制 Nginx 配置 +COPY Dockerfiles/Dockerfile-staging/default.conf /etc/nginx/conf.d/default.conf + +# 暴露端口 +EXPOSE 80 + +# 启动 Nginx +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file -- 2.40.1 From 4a77cebe9345dd782410c627a795bdeea9757a52 Mon Sep 17 00:00:00 2001 From: tiananlin Date: Tue, 26 Aug 2025 15:17:23 +0800 Subject: [PATCH 03/21] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20Dockerfiles/Dockerfi?= =?UTF-8?q?le-production/default.conf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dockerfile-production/default.conf | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 Dockerfiles/Dockerfile-production/default.conf diff --git a/Dockerfiles/Dockerfile-production/default.conf b/Dockerfiles/Dockerfile-production/default.conf new file mode 100644 index 0000000..3de8a37 --- /dev/null +++ b/Dockerfiles/Dockerfile-production/default.conf @@ -0,0 +1,47 @@ +server { + listen 80; + server_name localhost; + + # 基础设置 + root /usr/share/nginx/html; + index index.html index.htm; + try_files $uri $uri/ /index.html; + + client_max_body_size 100m; + + # 错误页面配置 + error_page 500 502 503 504 /50x.html; + location = /50x.html { + internal; # 仅用于内部错误请求 + } + + # Gzip 压缩设置 + gzip on; + gzip_min_length 1k; + gzip_comp_level 6; + gzip_types text/plain text/css text/javascript application/json + application/javascript application/x-javascript application/xml; + gzip_vary on; + gzip_disable "MSIE [1-6]\."; + + # 静态资源缓存优化 + location ~* \.(jpg|jpeg|gif|ico|css|js)$ { + expires 7d; + add_header Cache-Control "public, no-transform"; + } + + # API 代理配置 + location /api/ { + proxy_pass http://learn-archives-api-svc:8080/api/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; # 添加协议头 + + # 优化代理性能 + proxy_connect_timeout 30s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; + proxy_buffering on; + } +} \ No newline at end of file -- 2.40.1 From bf49072325188546c5b500009dccd35a84c59f21 Mon Sep 17 00:00:00 2001 From: tiananlin Date: Tue, 26 Aug 2025 15:22:12 +0800 Subject: [PATCH 04/21] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20Dockerfiles/Dockerfi?= =?UTF-8?q?le-production/Dockerfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfiles/Dockerfile-production/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfiles/Dockerfile-production/Dockerfile b/Dockerfiles/Dockerfile-production/Dockerfile index 24483ae..85c3a70 100644 --- a/Dockerfiles/Dockerfile-production/Dockerfile +++ b/Dockerfiles/Dockerfile-production/Dockerfile @@ -23,7 +23,7 @@ RUN pnpm config set registry https://registry.npmmirror.com/ RUN pnpm i --fetch-timeout 300000 # 构建项目 -RUN pnpm build:prod +RUN pnpm build # 部署阶段 FROM m.daocloud.io/docker.io/library/nginx:alpine -- 2.40.1 From eb306eab72f03e95f4c54c8b64f98407aa9674c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=82=A5=E7=BE=8A?= <1048382248@qq.com> Date: Mon, 1 Sep 2025 17:56:58 +0800 Subject: [PATCH 05/21] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E8=81=8C=E4=BD=8D=E6=97=B6=E7=9A=84=E9=87=8D=E7=BD=AE=E6=8C=89?= =?UTF-8?q?=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 8 ++++++-- src/views/teacher/positionForm.vue | 19 +++++++++++-------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/.env.development b/.env.development index f8eaae4..b58a810 100644 --- a/.env.development +++ b/.env.development @@ -7,8 +7,12 @@ VITE_PUBLIC_PATH = / # 开发环境路由历史模式(Hash模式传"hash"、HTML5模式传"h5"、Hash模式带base参数传"hash,base参数"、HTML5模式带base参数传"h5,base参数") VITE_ROUTER_HISTORY = "hash" -VITE_API_BASEURL = "http://192.168.2.33:5199/api" +# # 接口地址 +# VITE_API_BASEURL = "http://192.168.2.33:5199/api" +# #数据中心后台地址 +# VITE_API_USERCENTER_URL = "https://dca.w.23544.com:8843/api" + # 接口地址 -# VITE_API_BASEURL = "http://localhost:5199/api" +VITE_API_BASEURL = "https://learn-archives-admin-dev.23544.com/api" #数据中心后台地址 VITE_API_USERCENTER_URL = "https://dca.w.23544.com:8843/api" diff --git a/src/views/teacher/positionForm.vue b/src/views/teacher/positionForm.vue index 98693d0..641f0d3 100644 --- a/src/views/teacher/positionForm.vue +++ b/src/views/teacher/positionForm.vue @@ -163,19 +163,19 @@ -
+
{{ userType == 1 ? "就读班级" : "已选职位" }}[{{ selectPositions.length }}] - 提交分配职位 + +
+ 重置 + 提交分配职位 +
{ } }; +const reload = () => { + selectPositions.value = []; +}; const handleConfirm = () => { if (selectPositions.value.length === 0) { ElMessage.warning("请选择要分配的职位"); -- 2.40.1 From 85a4ee0ef6a40f26ca1a0aeeb56acd68dc8117f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=82=A5=E7=BE=8A?= <1048382248@qq.com> Date: Tue, 2 Sep 2025 18:07:28 +0800 Subject: [PATCH 06/21] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E8=A1=A8=E5=8D=95=E7=9A=84=E9=85=8D=E7=BD=AE=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/hTable/hTable.ts | 209 +++++++++++++++++++++++---- src/components/hTable/hTableEdit.vue | 57 ++++---- src/components/hTable/index.vue | 107 ++++---------- src/utils/rules.ts | 8 + src/views/class/index.vue | 114 +++++---------- src/views/school/index.vue | 30 ++-- 6 files changed, 304 insertions(+), 221 deletions(-) diff --git a/src/components/hTable/hTable.ts b/src/components/hTable/hTable.ts index c650c2b..449063d 100644 --- a/src/components/hTable/hTable.ts +++ b/src/components/hTable/hTable.ts @@ -93,13 +93,18 @@ export enum ConditionalType { } /** 字段设置项 */ -export interface FieldSetting { +export class FieldSetting { + + constructor() { + this.datasource = []; + this.mapValue= "value", + this.maplabel= "text" + + } /**map 时Value的取值的属性 */ mapValue?: string; /**map 时label的取值的属性 */ maplabel?: string; - /** 数据源 请求方式 */ - datasourceStr?: string; /** * 图片地址 获取方式 * @param value 当前值 @@ -116,44 +121,152 @@ export interface ComboModel { value: any; text: string; } -/** 表格列配置 */ -export interface TableColumn { - /** 显示标签 */ - label: string; - /** 是否可搜索 */ - search: boolean; - /** 搜索类型 */ - searchType?: ConditionalType; +/** 新增修改的配置 */ +export class TableColumnEdit { + /** + * + * @param add 字段可以添加 + * @param edit 字段可以修改 + * @param multiple [type=dropdown]是否多选 + * @param editShow 编辑时显示列 + * @param editRows [type=textarea]编辑时的行数 + * @param rules 校验规则 + */ + constructor( + add: boolean = false, + edit: boolean = false, + multiple: boolean = false, + editShow: boolean = true, + editRows: number = 3, + editDefault: any = "", + rules: any | Array = null, + change: () => void = null + ) { + this.add = add; + this.edit = edit; + this.multiple = multiple; + this.editShow = editShow; + this.editRows = editRows; + this.editDefault = editDefault; + this.rules = rules; + this.change = change; + } /** 是否允许添加 [false]*/ add?: boolean; /** 是否允许修改 [false]*/ edit?: boolean; - /** 列宽度 [auto]*/ - width?: string; - /** 字段类型 */ - type?: "string" | "dropdown" | "switch" | "img" | "datetime" | "textarea"; - /** 是否多选 */ + /** [type=dropdown]是否多选 */ multiple?: boolean; /** 编辑时显示列 */ editShow?: boolean; /**校验规则 */ rules?: any | Array; - /** 显示列 */ + /** [type=textarea]编辑时的行数 */ + editRows?: number; + + /** 新增编辑时的缓存值 */ + valueE?: Array | string | number | boolean | Date; + /** 新增编辑时的默认 */ + editDefault?: Array | string | number | boolean | Date; + + /**编辑时值发生变化 */ + change?: () => void; +} +/** 查询的配置 */ +export class TableColumnSearch { + /** + * + * @param yes 列是否可以查询 + * @param sort 列是否可以排序 + * @param searchType 查询时候的值比较类型 + */ + constructor(yes: boolean = false, + searchType: ConditionalType = ConditionalType.Like,sort: boolean = false,){ + this.yes = yes; + this.sort = sort; + this.searchType = searchType; + } + /**可以查询 [false] */ + yes?: boolean; + /** 可以排序 [false]*/ + sort?: boolean; + /** 搜索类型 */ + searchType?: ConditionalType; + /** 查询缓存值 */ + value?: Array | string | number | boolean | Date; +} + +/** 表格列配置 */ +export class TableColumn { + constructor( + ) { + + this.type = "string"; + this.show = true; + this.search = new TableColumnSearch(); + this.edit = new TableColumnEdit(); + this.setting = {}; + } + + /** 显示标签 */ + label: string; + /** 查询配置 */ + search?: TableColumnSearch; + /** 编辑配置 */ + edit?: TableColumnEdit; + /** Table中展示宽度 [auto]*/ + width?: string; + /** 字段类型 */ + type?: "string" | "dropdown" | "switch" | "img" | "datetime" | "textarea"; + /** 显示列 [不会动态计算]*/ show?: boolean; /** 字段设置 */ setting?: FieldSetting; - /** 修改时的编辑值 */ - valueE?: Array | string | number | boolean | Date; - /** 查询值 */ - value?: Array | string | number | boolean | Date; - /** textarea编辑时的行数 */ - editRows?: number; - /**编辑时值发生变化 */ - change?: () => void; /**列值初始化时 如何获取默认取对应列*/ custom?: (row: any) => string; } + + +/** 表格列配置 */ +// export interface TableColumn { +// /** 显示标签 */ +// label: string; + +// /** 是否可搜索 */ +// search: boolean; +// /** 搜索类型 */ +// searchType?: ConditionalType; +// /** 是否允许添加 [false]*/ +// add?: boolean; +// /** 是否允许修改 [false]*/ +// edit?: boolean; +// /** Table中展示宽度 [auto]*/ +// width?: string; +// /** 字段类型 */ +// type?: "string" | "dropdown" | "switch" | "img" | "datetime" | "textarea"; +// /** 是否多选 */ +// multiple?: boolean; +// /** 编辑时显示列 */ +// editShow?: boolean; +// /**校验规则 */ +// rules?: any | Array; +// /** 显示列 */ +// show?: boolean; +// /** 字段设置 */ +// setting?: FieldSetting; +// /** 修改时的编辑值 */ +// valueE?: Array | string | number | boolean | Date; +// /** 查询值 */ +// value?: Array | string | number | boolean | Date; +// /** textarea编辑时的行数 */ +// editRows?: number; +// /**编辑时值发生变化 */ +// change?: () => void; +// /**列值初始化时 如何获取默认取对应列*/ +// custom?: (row: any) => string; +// } + /** 分页数据 */ export interface PageData { /** 总条数 */ @@ -224,3 +337,49 @@ export interface TableConfig { /**是否显示 */ show?: boolean; } +/** 初始化表格数据 */ +export function intTableData(tValue: TableConfig): TableConfig { + if (!tValue.data) tValue.data = []; + if (!tValue.selectRows) tValue.selectRows = []; + if (tValue.border == null) tValue.border = true; + if (!tValue.pageData) tValue.pageData = { total: 0 }; + if (tValue.operationTop === undefined) tValue.operationTop = true; + + // 处理 column 的属性 + for (const key in tValue.column) { + tValue.column[key] = { ...new TableColumn(), ...tValue.column[key] }; + const element = tValue.column[key]; + + element.edit = { ...new TableColumnEdit(), ...element.edit }; + element.search = { ...new TableColumnSearch(), ...element.search }; + element.setting = { ...new FieldSetting(), ...element.setting }; + + if ( + element.custom == undefined && + (element.type === "switch" || + element.type === "dropdown" || + element.type === "string" || + element.type === undefined) + ) { + if (element.type === "string" || element.type === undefined) + element.custom = row => row[key]; + else { + element.custom = row => { + let sc = element.setting.datasource.find( + s => s[element.setting.mapValue] + "" == row[key] + "" + ); + return !sc ? row[key] : sc[element.setting.maplabel]; + }; + } + } else if (element.custom == undefined) { + element.custom = row => row[key]; + } + } + + // 处理 operationColumnData 的属性 + for (const key in tValue.operationColumnData) { + const element = tValue.operationColumnData[key]; + if (element.show === undefined) element.show = true; + } + return tValue; +} \ No newline at end of file diff --git a/src/components/hTable/hTableEdit.vue b/src/components/hTable/hTableEdit.vue index 3e84f98..4131bb6 100644 --- a/src/components/hTable/hTableEdit.vue +++ b/src/components/hTable/hTableEdit.vue @@ -55,11 +55,11 @@ function intiColumn() { for (const key in editData.value.table.column) { const element = editData.value.table.column[key]; if (editData.value.isedit) { - if (element.edit) { + if (element.edit.edit) { column.value[key] = element; } } else { - if (element.add) { + if (element.edit.add) { column.value[key] = element; } } @@ -81,8 +81,8 @@ function handleSubmitForm() { } else form.id = 0; for (const key in column.value) { const element = column.value[key]; - if (element.valueE !== null && element.valueE !== "") { - form[key] = element.valueE; + if (element.edit.valueE !== null && element.edit.valueE !== "") { + form[key] = element.edit.valueE; } } if (editData.value.table.editCallback) { @@ -102,14 +102,15 @@ function handleSubmitForm() { function handleResetForm() { for (const key in column.value) { let item = column.value[key]; - if (Array.isArray(item.valueE)) { - item.valueE = []; - } else if (typeof item.valueE === "number") { - item.valueE = ""; - } else if (typeof item.valueE === "boolean") { - item.valueE = false; + if (item.edit.editDefault != null) item.edit.valueE = item.edit.editDefault; + else if (Array.isArray(item.edit.valueE)) { + item.edit.valueE = []; + } else if (typeof item.edit.valueE === "number") { + item.edit.valueE = ""; + } else if (typeof item.edit.valueE === "boolean") { + item.edit.valueE = false; } else { - item.valueE = ""; + item.edit.valueE = ""; } } } @@ -123,7 +124,7 @@ function fetchFormData() { editData.value.frorm = res.data; for (const key in column.value) { const element = column.value[key]; - element.valueE = res.data[key]; + element.edit.valueE = res.data[key]; } } editData.value.loading = true; @@ -145,32 +146,32 @@ function fetchFormData() { >
- +
diff --git a/src/components/hTable/index.vue b/src/components/hTable/index.vue index e832ba8..ab7339b 100644 --- a/src/components/hTable/index.vue +++ b/src/components/hTable/index.vue @@ -21,7 +21,10 @@ import { ButtonCustomConfig, ConditionalType, Dialog, + intTableData, TableColumn, + TableColumnEdit, + TableColumnSearch, TableConfig, } from "./hTable"; import hTableEdit from "./hTableEdit.vue"; @@ -107,36 +110,7 @@ function appStyle() { } function intdata() { - if (!table.value.data) table.value.data = []; - if (!table.value.selectRows) table.value.selectRows = []; - if (table.value.border == null) table.value.border = true; - if (!table.value.pageData) table.value.pageData = { total: 0 }; - if (table.value.operationTop === undefined) table.value.operationTop = true; - - // 处理 column 的属性 - for (const key in table.value.column) { - const element = table.value.column[key]; - if (element.add === undefined) element.add = false; - if (element.edit === undefined) element.edit = false; - // Vue 3 中直接赋值即可,不需要 $set - if (element.valueE === undefined) element.valueE = element.multiple ? [] : ""; - if (element.value === undefined) element.value = element.multiple ? [] : ""; - if (!element.type) element.type = "string"; - if (element.show === undefined) element.show = true; - if (element.editShow === undefined) element.editShow = true; - if (!element.setting) - element.setting = { datasource: [], mapValue: "value", maplabel: "text" }; - if (!element.setting.mapValue) element.setting.mapValue = "value"; - if (!element.setting.maplabel) element.setting.maplabel = "text"; - - if (!element.change) element.change = () => {}; - } - - // 处理 operationColumnData 的属性 - for (const key in table.value.operationColumnData) { - const element = table.value.operationColumnData[key]; - if (element.show === undefined) element.show = true; - } + intTableData(table.value); } function rowKeyFun(row) { @@ -256,13 +230,13 @@ function handleAddCallback() { function handleResetForm() { for (const key in table.value.column) { let item = table.value.column[key]; - if (Array.isArray(item.valueE)) { - item.valueE = []; - } else if (typeof item.valueE === "number") { - item.valueE = ""; - } else if (typeof item.valueE === "boolean") { + if (Array.isArray(item.edit.valueE)) { + item.edit.valueE = []; + } else if (typeof item.edit.valueE === "number") { + item.edit.valueE = ""; + } else if (typeof item.edit.valueE === "boolean") { } else { - item.valueE = ""; + item.edit.valueE = ""; } } } @@ -287,13 +261,13 @@ function searchReload() { for (let name in table.value.column) { if ( !table.value.column[name].search || - table.value.column[name].value === undefined || - table.value.column[name].value === null || - table.value.column[name].value === "" + table.value.column[name].search.value === undefined || + table.value.column[name].search.value === null || + table.value.column[name].search.value === "" ) { continue; } - table.value.column[name].value = ""; + table.value.column[name].search.value = ""; } } // 查询 @@ -306,9 +280,9 @@ function handleReloadPaged(reload = true) { for (let name in table.value.column) { if ( !table.value.column[name].search || - table.value.column[name].value === undefined || - table.value.column[name].value === null || - table.value.column[name].value === "" + table.value.column[name].search.value === undefined || + table.value.column[name].search.value === null || + table.value.column[name].search.value === "" ) { continue; } @@ -323,10 +297,10 @@ function handleReloadPaged(reload = true) { } else data.ConditionalType = ConditionalType.Equal; data.FieldName = name.charAt(0).toUpperCase() + name.slice(1); - data.FieldValue = table.value.column[name].value.toString(); + data.FieldValue = table.value.column[name].search.value.toString(); - if (table.value.column[name].searchType != undefined) { - let v: number = table.value.column[name].searchType || 0; + if (table.value.column[name].search.searchType != undefined) { + let v: number = table.value.column[name].search.searchType || 0; data.ConditionalType = v; } table.value.search.Conditions.push(data); @@ -342,37 +316,6 @@ function handleReloadPaged(reload = true) { } // 加载前置数据(如查询条件的下拉选择数据) async function fetchInitData() { - for (const key in table.value.column) { - const element = table.value.column[key]; - if (element.type === "dropdown") { - if (!element.setting.datasource) { - // 不安全取消 存在值就不处理 - // let rdata = await eval(element.setting.datasourceStr); - // element.setting.datasource = rdata.data; - // console.log(key + " " + element.setting.datasourceStr, rdata); - } - } - if ( - element.custom == undefined && - (element.type === "switch" || - element.type === "dropdown" || - element.type === "string" || - element.type === undefined) - ) { - if (element.type === "string" || element.type === undefined) - element.custom = (row) => row[key]; - else { - element.custom = (row) => { - let sc = element.setting.datasource.find( - (s) => s[element.setting.mapValue] + "" == row[key] + "" - ); - return !sc ? row[key] : sc[element.setting.maplabel]; - }; - } - } else if (element.custom == undefined) { - element.custom = (row) => row[key]; - } - } setTimeout(() => { init.value = true; appStyle(); @@ -418,7 +361,7 @@ function fetchPagedData() {
- + import ahTable from "@/components/hTable/index.vue"; -import { ConditionalType, TableConfig } from "@/components/hTable/hTable"; +import { + ConditionalType, + intTableData, + TableColumn, + TableColumnEdit, + TableColumnSearch, + TableConfig, +} from "@/components/hTable/hTable"; import { onMounted, ref, defineOptions } from "vue"; import { fa } from "element-plus/es/locales.mjs"; import { hTableAPI } from "@/api/hTable"; import { getenum } from "@/api/enum"; -import { ruleRequired } from "@/utils/rules"; +import { ruleClassName, ruleRequired } from "@/utils/rules"; const ControllerName = "classes"; defineOptions({ @@ -16,7 +23,7 @@ const SchoolApi = new hTableAPI("usercenter/back/schools"); function searchCallback(data) {} const table = ref<{ initTable: (config: TableConfig) => void }>(); -const tableData: TableConfig = { +const tableData: TableConfig = intTableData({ apiUrl: "usercenter/back/classes", selectColumn: false, // 列表选择 border: false, // 是否显示表格边框 @@ -66,98 +73,57 @@ const tableData: TableConfig = { // 行数据 id: { label: "编号", - search: true, - add: false, // 字段允许添加 - edit: false, // 字段允许修改 width: "150px", }, schoolId: { label: "学校", - rules: ruleRequired, width: "180px", - search: true, type: "dropdown", - add: true, // 字段允许添加 - edit: true, // 字段允许修改 - setting: {}, - }, - name: { - label: "名称", - rules: ruleRequired, - width: "180px", - search: true, - searchType: ConditionalType.Like, // 搜索类型 - add: true, // 字段允许添加 - edit: true, // 字段允许修改 + search: new TableColumnSearch(true), + edit: { + rules: ruleRequired, + }, }, Grade: { label: "年级", - rules: ruleRequired, - width: "180px", + width: "220px", type: "dropdown", - custom: (row) => `${row.grade ?? ""}`, - // `${row.grade ?? ""} ${row.gradeLevel + row.graduationYear}`, - search: true, - setting: {}, - add: true, // 字段允许添加 - edit: false, // 字段允许修改 + custom: (row) => `${row.grade ?? ""} [${row.gradeLevel + row.graduationYear}]`, + search: new TableColumnSearch(true), + edit: { add: true, edit: false, rules: ruleRequired }, + }, + name: { + label: "名称", + width: "180px", + search: { + yes: true, + searchType: ConditionalType.Like, // 搜索类型 + }, + edit: { + add: true, + edit: true, + rules: ruleClassName, + }, }, - // GradeLevel: { - // label: "年级", - // search: false, - // type: "dropdown", - // searchType: ConditionalType.Like, - // add: true, // 字段允许添加 - // edit: true, // 字段允许修改 - // width: "70px", - // setting: { - // datasource: [ - // { text: "初", value: "初" }, - // { text: "高", value: "高" }, - // { text: "小", value: "小" } - // ] - // } - // }, - // GraduationYear: { - // label: "届", - // search: false, - // add: true, // 字段允许添加 - // edit: true, // 字段允许修改 - // width: "80px" - // }, type: { label: "类型", - rules: ruleRequired, - // width: "150px", type: "dropdown", - search: true, - add: true, // 字段允许添加 - edit: true, // 字段允许修改 - setting: {}, + search: { + yes: true, + }, + edit: { + add: true, + edit: true, + rules: ruleRequired, + }, }, - // createTime: { - // label: "创建时间", - // width: "180px", - // type: "datetime", - // search: true, - // add: false, // 字段允许添加 - // edit: false // 字段允许修改 - // }, - // remark: { - // label: "备注", - // type: "textarea", - // editRows: 3, - // search: false, - // add: true, // 字段允许添加 - // edit: true // 字段允许修改 - // } }, data: [], pageData: { total: 0, }, selectRows: [], -}; +}); const showTable = ref(false); onMounted(async () => { diff --git a/src/views/school/index.vue b/src/views/school/index.vue index 092b7b6..ae74f68 100644 --- a/src/views/school/index.vue +++ b/src/views/school/index.vue @@ -1,6 +1,10 @@ diff --git a/src/views/toschoolinfomanage/index.vue b/src/views/toschoolinfomanage/index.vue index 55a58fa..1803cd3 100644 --- a/src/views/toschoolinfomanage/index.vue +++ b/src/views/toschoolinfomanage/index.vue @@ -23,7 +23,7 @@ v-model="query.grade" placeholder="请选择年级" clearable - style="width: 140px" + style="width: 120px" > - + + 下载模版
- +