From 18ddb1737499cfaaa6fa8f7d43e70b946ec1d626 Mon Sep 17 00:00:00 2001 From: chenxing Date: Sun, 20 Sep 2026 02:50:36 +0800 Subject: [PATCH] =?UTF-8?q?refactor(admin):=20=E5=85=AD=E9=A1=B5=E5=AF=B9?= =?UTF-8?q?=E9=BD=90=20bsch/ysch=20=E5=BA=94=E7=94=A8=E9=A1=B5=E8=A7=84?= =?UTF-8?q?=E8=8C=83=EF=BC=8809-18=20=E5=8D=87=E7=BA=A7=E8=A1=A5=E5=85=A5?= =?UTF-8?q?=E5=BA=93=EF=BC=8C=E4=B8=8E=20flow-center=20=E5=90=8C=E6=89=B9?= =?UTF-8?q?=E6=AC=A1=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - types/index.ts 补 OperatorEnum(此前 import 悬空,接入 TablePage* 即构建失败) - TablePageAlovaNew 对齐 flow-center 版:页长记忆 localStorage.customPageCount + 重载清空勾选 + watch(tableHeight) 跟随页面侧 ResizeObserver 重算 - ServiceItemList/ApplyManage:三段式骨架 + search-wrap(下拉+关键字 200px 即输即搜)+ TablePageAlovaNew + Utils.operatingHandle 图标操作列(编辑/发布 icon-fasong/下架 icon-stop/删除/详情 icon-browse)+ MyConfirm + 增删后智能翻页 - ServiceDictManage:tabs-wrapper + card Tabs 双容器 v-show + 定高 + 弹窗校验 统一文案「请填写红色星号内容!」 - ServiceFormManage:无分页定高 + 前端过滤 + 按状态条件图标 - ServiceItemEdit:page-wrapper 根容器 + 必填红星 - 状态 Tag 色常量迁 api 层(APPLY_STATUS_COLOR/ITEM_STATUS_COLOR) - dataApi 返回 alova Method 不调 .send();分页 formatResponse 适配 {total,list} - vite build 通过(27s) --- src/api/module/svc.ts | 20 ++ src/components/TablePageAlovaNew.vue | 22 +- src/types/index.ts | 7 + src/views/svc/ApplyManage.vue | 125 ++++----- src/views/svc/ServiceDictManage.vue | 165 ++++++++---- src/views/svc/ServiceFormManage.vue | 131 ++++++---- src/views/svc/ServiceItemEdit.vue | 376 ++++++++++++++------------- src/views/svc/ServiceItemList.vue | 213 +++++++-------- 8 files changed, 580 insertions(+), 479 deletions(-) create mode 100644 src/types/index.ts diff --git a/src/api/module/svc.ts b/src/api/module/svc.ts index b561cac..354ebdf 100644 --- a/src/api/module/svc.ts +++ b/src/api/module/svc.ts @@ -29,6 +29,26 @@ const APPLY = "/api/apply"; const FILE = "/api/file"; +/** 办件流程状态(文案与 Tag 色和用户面 hall 同口径) */ +export const APPLY_STATUS: Record = { + 0: "待提交", + 10: "审批中", + 20: "已完成", + 30: "已拒绝", + 40: "已撤回", +}; +export const APPLY_STATUS_COLOR: Record = { + 0: "default", + 10: "primary", + 20: "success", + 30: "error", + 40: "warning", +}; + +/** 事项发布状态(0 草稿 / 1 已发布 / 2 已下架) */ +export const ITEM_STATUS: Record = { 0: "草稿", 1: "已发布", 2: "已下架" }; +export const ITEM_STATUS_COLOR: Record = { 0: "default", 1: "success", 2: "warning" }; + /** GET 请求 */ function get(url: string, params?: Record): Method { return new Method("GET", alovaInstance, url, { params }); diff --git a/src/components/TablePageAlovaNew.vue b/src/components/TablePageAlovaNew.vue index 410ebdc..b02ffca 100644 --- a/src/components/TablePageAlovaNew.vue +++ b/src/components/TablePageAlovaNew.vue @@ -21,7 +21,7 @@ \ No newline at end of file + diff --git a/src/views/svc/ServiceItemEdit.vue b/src/views/svc/ServiceItemEdit.vue index 0de2878..2f09d86 100644 --- a/src/views/svc/ServiceItemEdit.vue +++ b/src/views/svc/ServiceItemEdit.vue @@ -17,6 +17,13 @@ import RichTextEditor from "@/components/RichTextEditor.vue"; const route = useRoute(); const router = useRouter(); const { currentSiteCode, loadSites } = useSite(); +const formRef = ref(null); + +// 必填校验(bsch应用页规范 §1:校验失败提示统一"请填写红色星号内容!") +const saveRules = { + itemCode: [{ required: true, message: "请填写红色星号内容!", trigger: "blur" }], + title: [{ required: true, message: "请填写红色星号内容!", trigger: "blur" }], +}; const form = ref>({ siteCode: "", @@ -109,6 +116,11 @@ async function uploadGuide(file: File) { } async function save(publishAfter: boolean) { + const valid = await new Promise(resolve => formRef.value?.validate(resolve)); + if (!valid) { + Message.warning("请填写红色星号内容!"); + return; + } const payload: SvcItemSaveRequest = { ...form.value, id: route.query.id ? Number(route.query.id) : undefined, @@ -139,195 +151,197 @@ onMounted(loadAll); diff --git a/src/views/svc/ServiceItemList.vue b/src/views/svc/ServiceItemList.vue index 4fdb2ac..34d0486 100644 --- a/src/views/svc/ServiceItemList.vue +++ b/src/views/svc/ServiceItemList.vue @@ -1,92 +1,101 @@ - -