- ServiceItemEdit.vue:新增「服务承诺」区块(协办部门/经办人/办理时段/跑动次数/快递/收费) - ServiceItemList.vue:列表新增承诺时限、跑动次数两列 - SvcItemSaveRequest 类型补 7 字段,去掉原来的 & Record<string,any> 兜底 - .gitignore 忽略 vite.config.ts.timestamp-* 临时文件
This commit is contained in:
@@ -27,3 +27,6 @@ yarn.lock
|
|||||||
|
|
||||||
# scratch
|
# scratch
|
||||||
.temp
|
.temp
|
||||||
|
|
||||||
|
# Vite 配置热重载产生的临时文件(构建时自动生成,勿入库)
|
||||||
|
vite.config.ts.timestamp-*
|
||||||
|
|||||||
@@ -130,6 +130,14 @@ export interface SvcItemSaveRequest {
|
|||||||
formCode?: string;
|
formCode?: string;
|
||||||
flowGuid?: string;
|
flowGuid?: string;
|
||||||
applyUrl?: string;
|
applyUrl?: string;
|
||||||
|
// ===== 服务承诺(P1-1):与后端 SvcModels.SvcItemSaveRequest 同名,勿改 =====
|
||||||
|
coopDepts?: string;
|
||||||
|
handlerName?: string;
|
||||||
|
handleTimeDesc?: string;
|
||||||
|
runCount?: number;
|
||||||
|
expressFlag?: number;
|
||||||
|
feeDesc?: string;
|
||||||
|
feeBasis?: string;
|
||||||
sortNo?: number;
|
sortNo?: number;
|
||||||
attachmentIds?: number[];
|
attachmentIds?: number[];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,13 +25,20 @@ const saveRules = {
|
|||||||
title: [{ required: true, message: "请填写红色星号内容!", trigger: "blur" }],
|
title: [{ required: true, message: "请填写红色星号内容!", trigger: "blur" }],
|
||||||
};
|
};
|
||||||
|
|
||||||
const form = ref<SvcItemSaveRequest & Record<string, any>>({
|
const form = ref<SvcItemSaveRequest>({
|
||||||
siteCode: "",
|
siteCode: "",
|
||||||
itemCode: "",
|
itemCode: "",
|
||||||
title: "",
|
title: "",
|
||||||
handleMode: 1,
|
handleMode: 1,
|
||||||
onlineFlag: 1,
|
onlineFlag: 1,
|
||||||
sortNo: 0,
|
sortNo: 0,
|
||||||
|
coopDepts: "",
|
||||||
|
handlerName: "",
|
||||||
|
handleTimeDesc: "",
|
||||||
|
runCount: undefined,
|
||||||
|
expressFlag: undefined,
|
||||||
|
feeDesc: "",
|
||||||
|
feeBasis: "",
|
||||||
});
|
});
|
||||||
const objects = ref<{ dictKey: string; dictName: string }[]>([]);
|
const objects = ref<{ dictKey: string; dictName: string }[]>([]);
|
||||||
const categories = ref<{ dictKey: string; dictName: string }[]>([]);
|
const categories = ref<{ dictKey: string; dictName: string }[]>([]);
|
||||||
@@ -225,6 +232,7 @@ onMounted(loadAll);
|
|||||||
<Col span="8">
|
<Col span="8">
|
||||||
<FormItem label="承诺时限">
|
<FormItem label="承诺时限">
|
||||||
<Input v-model="form.promiseTimeLimit" :maxlength="64" />
|
<Input v-model="form.promiseTimeLimit" :maxlength="64" />
|
||||||
|
<div class="tip">建议填纯数字(天),详情页会用它推算预计完成日期</div>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Col>
|
</Col>
|
||||||
<Col span="8">
|
<Col span="8">
|
||||||
@@ -239,6 +247,53 @@ onMounted(loadAll);
|
|||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
|
|
||||||
|
<div class="section-title">
|
||||||
|
<span>服务承诺</span><span class="new-tag">新增</span>
|
||||||
|
</div>
|
||||||
|
<Row :gutter="16">
|
||||||
|
<Col span="12">
|
||||||
|
<FormItem label="协办部门">
|
||||||
|
<Input v-model="form.coopDepts" :maxlength="500" placeholder="多个部门用顿号分隔" />
|
||||||
|
</FormItem>
|
||||||
|
</Col>
|
||||||
|
<Col span="12">
|
||||||
|
<FormItem label="经办人员">
|
||||||
|
<Input v-model="form.handlerName" :maxlength="64" />
|
||||||
|
</FormItem>
|
||||||
|
</Col>
|
||||||
|
<Col span="12">
|
||||||
|
<FormItem label="办理时间(时段)">
|
||||||
|
<Input v-model="form.handleTimeDesc" :maxlength="200" placeholder="工作日 08:00–11:45" />
|
||||||
|
<div class="tip">区别于办理时限,指窗口办公时段</div>
|
||||||
|
</FormItem>
|
||||||
|
</Col>
|
||||||
|
<Col span="12">
|
||||||
|
<FormItem label="跑现场次数">
|
||||||
|
<InputNumber v-model="form.runCount" :min="0" style="width: 100%" />
|
||||||
|
<div class="tip">0 = 零跑动</div>
|
||||||
|
</FormItem>
|
||||||
|
</Col>
|
||||||
|
<Col span="12">
|
||||||
|
<FormItem label="是否快递送达">
|
||||||
|
<Select v-model="form.expressFlag" clearable>
|
||||||
|
<Option :value="0">否</Option>
|
||||||
|
<Option :value="1">是(到付)</Option>
|
||||||
|
<Option :value="2">是(学校承担)</Option>
|
||||||
|
</Select>
|
||||||
|
</FormItem>
|
||||||
|
</Col>
|
||||||
|
<Col span="12">
|
||||||
|
<FormItem label="收费标准">
|
||||||
|
<Input v-model="form.feeDesc" :maxlength="200" />
|
||||||
|
</FormItem>
|
||||||
|
</Col>
|
||||||
|
<Col span="12">
|
||||||
|
<FormItem label="收费依据">
|
||||||
|
<Input v-model="form.feeBasis" :maxlength="200" />
|
||||||
|
</FormItem>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
|
||||||
<Divider orientation="left">在线办理绑定</Divider>
|
<Divider orientation="left">在线办理绑定</Divider>
|
||||||
<Row :gutter="16">
|
<Row :gutter="16">
|
||||||
<Col span="12">
|
<Col span="12">
|
||||||
@@ -346,6 +401,26 @@ onMounted(loadAll);
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
.section-title {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
margin: 24px 0 16px;
|
||||||
|
padding-bottom: 8px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #17233d;
|
||||||
|
border-bottom: 1px solid #e8eaec;
|
||||||
|
}
|
||||||
|
.new-tag {
|
||||||
|
padding: 0 8px;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: 18px;
|
||||||
|
color: #808695;
|
||||||
|
border: 1px solid #dcdee2;
|
||||||
|
border-radius: 9px;
|
||||||
|
}
|
||||||
.flow-select {
|
.flow-select {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
|
|||||||
@@ -21,6 +21,10 @@ const dataParams = ref<{ status?: number; keyword: string }>({ status: undefined
|
|||||||
|
|
||||||
const handleModeName = (m: number) => (m === 1 ? "线上" : m === 2 ? "线下" : "线上线下");
|
const handleModeName = (m: number) => (m === 1 ? "线上" : m === 2 ? "线下" : "线上线下");
|
||||||
|
|
||||||
|
// 表头"新增"标记(验收识别用,灰色小字)
|
||||||
|
const titleWithNew = (h: any, text: string) =>
|
||||||
|
h("span", [text, h("span", { style: { marginLeft: "4px", fontSize: "10px", color: "#808695" } }, "新增")]);
|
||||||
|
|
||||||
const columns = [
|
const columns = [
|
||||||
{ title: "序号", type: "index", width: 70, align: "center" },
|
{ title: "序号", type: "index", width: 70, align: "center" },
|
||||||
{ title: "编码", key: "itemCode", width: 140 },
|
{ title: "编码", key: "itemCode", width: 140 },
|
||||||
@@ -28,6 +32,10 @@ const columns = [
|
|||||||
{ title: "类别", key: "categoryName", width: 110 },
|
{ title: "类别", key: "categoryName", width: 110 },
|
||||||
{ title: "部门", key: "deptName", width: 130 },
|
{ title: "部门", key: "deptName", width: 130 },
|
||||||
{ title: "办理方式", width: 90, align: "center", render: (h: any, p: any) => h("span", handleModeName(p.row.handleMode)) },
|
{ title: "办理方式", width: 90, align: "center", render: (h: any, p: any) => h("span", handleModeName(p.row.handleMode)) },
|
||||||
|
{ title: "承诺时限", width: 110, align: "center", renderHeader: (h: any) => titleWithNew(h, "承诺时限"),
|
||||||
|
render: (h: any, p: any) => h("span", p.row.promiseTimeLimit || "—") },
|
||||||
|
{ title: "跑动", width: 100, align: "center", renderHeader: (h: any) => titleWithNew(h, "跑动"),
|
||||||
|
render: (h: any, p: any) => h("span", p.row.runCount === null || p.row.runCount === undefined ? "—" : (p.row.runCount === 0 ? "零跑动" : `${p.row.runCount} 次`)) },
|
||||||
{ title: "在线办理", width: 110, align: "center", render: (h: any, p: any) =>
|
{ title: "在线办理", width: 110, align: "center", render: (h: any, p: any) =>
|
||||||
p.row.onlineFlag === 1
|
p.row.onlineFlag === 1
|
||||||
? h(Tag, { color: "green" }, () => "可在线办理")
|
? h(Tag, { color: "green" }, () => "可在线办理")
|
||||||
|
|||||||
Reference in New Issue
Block a user