yxk-20260520-党委会:新增议题序号字段

序号自动生成,明确生成逻辑(先选日期再选议题),20260520-1
This commit is contained in:
ye1023
2026-05-20 10:14:41 +08:00
parent 48f3d5fb37
commit 19d8d19bb5
7 changed files with 187 additions and 58 deletions
@@ -40,7 +40,12 @@
</a-col>
<a-col :span="12">
<a-form-item label="序号" name="number">
<a-input v-model:value="mainForm.number" :disabled="mainDisabled" allow-clear />
<a-input v-model:value="mainForm.number" :disabled="mainDisabled" :readonly="true" />
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="议题序号" name="itemNumber">
<a-input-number v-model:value="mainForm.itemNumber" :disabled="mainDisabled" style="width: 100%" allow-clear />
</a-form-item>
</a-col>
<a-col :span="12">
@@ -238,12 +243,14 @@
const feedbackAttachmentRefreshKey = ref(0);
const subApproveUser = ref('');
const isEnd = ref(0);
const lastGeneratedNumber = ref('');
const mainForm = reactive<Record<string, any>>({
id: '',
year: '',
secretLevel: '',
number: '',
itemNumber: undefined,
matterTime: '',
title: '',
content: '',
@@ -320,6 +327,14 @@
{ immediate: true }
);
// 根据会议时间和议题序号自动生成业务序号,例如:2026-05-20 + 2 => 20260520-2。
watch(
() => [mainForm.matterTime, mainForm.itemNumber],
() => {
syncGeneratedNumber();
}
);
async function initFormData() {
const dataId = props.formData?.dataId;
if (!dataId) {
@@ -342,6 +357,48 @@
});
}
function syncGeneratedNumber() {
const generatedNumber = buildGeneratedNumber(mainForm.matterTime, mainForm.itemNumber);
if (generatedNumber) {
mainForm.number = generatedNumber;
lastGeneratedNumber.value = generatedNumber;
return;
}
if (lastGeneratedNumber.value && mainForm.number === lastGeneratedNumber.value) {
mainForm.number = '';
lastGeneratedNumber.value = '';
}
}
// 只在两个必要字段都填写后生成,避免用户未填完整时写入半截序号。
function buildGeneratedNumber(matterTime, itemNumber) {
const dateText = formatMatterTime(matterTime);
if (!dateText || itemNumber === undefined || itemNumber === null || itemNumber === '') {
return '';
}
return `${dateText}-${itemNumber}`;
}
// 兼容日期选择器返回的字符串、Date、dayjs/moment 对象。
function formatMatterTime(value) {
if (!value) {
return '';
}
if (typeof value === 'string') {
return value.slice(0, 10).replace(/-/g, '');
}
if (value instanceof Date) {
const year = value.getFullYear();
const month = String(value.getMonth() + 1).padStart(2, '0');
const day = String(value.getDate()).padStart(2, '0');
return `${year}${month}${day}`;
}
if (typeof value.format === 'function') {
return value.format('YYYYMMDD');
}
return '';
}
async function loadFeedbackList() {
const bpmProcessId = processInfo.value.processInstanceId;
if (!mainForm.id || !bpmProcessId) {