- 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
|
||||
.temp
|
||||
|
||||
# Vite 配置热重载产生的临时文件(构建时自动生成,勿入库)
|
||||
vite.config.ts.timestamp-*
|
||||
|
||||
@@ -130,6 +130,14 @@ export interface SvcItemSaveRequest {
|
||||
formCode?: string;
|
||||
flowGuid?: string;
|
||||
applyUrl?: string;
|
||||
// ===== 服务承诺(P1-1):与后端 SvcModels.SvcItemSaveRequest 同名,勿改 =====
|
||||
coopDepts?: string;
|
||||
handlerName?: string;
|
||||
handleTimeDesc?: string;
|
||||
runCount?: number;
|
||||
expressFlag?: number;
|
||||
feeDesc?: string;
|
||||
feeBasis?: string;
|
||||
sortNo?: number;
|
||||
attachmentIds?: number[];
|
||||
}
|
||||
|
||||
@@ -25,13 +25,20 @@ const saveRules = {
|
||||
title: [{ required: true, message: "请填写红色星号内容!", trigger: "blur" }],
|
||||
};
|
||||
|
||||
const form = ref<SvcItemSaveRequest & Record<string, any>>({
|
||||
const form = ref<SvcItemSaveRequest>({
|
||||
siteCode: "",
|
||||
itemCode: "",
|
||||
title: "",
|
||||
handleMode: 1,
|
||||
onlineFlag: 1,
|
||||
sortNo: 0,
|
||||
coopDepts: "",
|
||||
handlerName: "",
|
||||
handleTimeDesc: "",
|
||||
runCount: undefined,
|
||||
expressFlag: undefined,
|
||||
feeDesc: "",
|
||||
feeBasis: "",
|
||||
});
|
||||
const objects = ref<{ dictKey: string; dictName: string }[]>([]);
|
||||
const categories = ref<{ dictKey: string; dictName: string }[]>([]);
|
||||
@@ -225,6 +232,7 @@ onMounted(loadAll);
|
||||
<Col span="8">
|
||||
<FormItem label="承诺时限">
|
||||
<Input v-model="form.promiseTimeLimit" :maxlength="64" />
|
||||
<div class="tip">建议填纯数字(天),详情页会用它推算预计完成日期</div>
|
||||
</FormItem>
|
||||
</Col>
|
||||
<Col span="8">
|
||||
@@ -239,6 +247,53 @@ onMounted(loadAll);
|
||||
</Col>
|
||||
</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>
|
||||
<Row :gutter="16">
|
||||
<Col span="12">
|
||||
@@ -346,6 +401,26 @@ onMounted(loadAll);
|
||||
</template>
|
||||
|
||||
<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 {
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
|
||||
@@ -21,6 +21,10 @@ const dataParams = ref<{ status?: number; keyword: string }>({ status: undefined
|
||||
|
||||
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 = [
|
||||
{ title: "序号", type: "index", width: 70, align: "center" },
|
||||
{ title: "编码", key: "itemCode", width: 140 },
|
||||
@@ -28,6 +32,10 @@ const columns = [
|
||||
{ title: "类别", key: "categoryName", width: 110 },
|
||||
{ title: "部门", key: "deptName", width: 130 },
|
||||
{ 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) =>
|
||||
p.row.onlineFlag === 1
|
||||
? h(Tag, { color: "green" }, () => "可在线办理")
|
||||
|
||||
Reference in New Issue
Block a user