优化
This commit is contained in:
parent
c04ed4acb1
commit
8e5cb49da5
65
src/sql.ts
65
src/sql.ts
@ -39,6 +39,25 @@ const normalizeTaskTexts = (tasks: unknown): string[] => {
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
const normalizeServiceTaskGroups = (tasks: unknown): Array<{ serviceid?: number; process?: number; text: string[] }> => {
|
||||
if (!Array.isArray(tasks)) return [];
|
||||
const groups: Array<{ serviceid?: number; process?: number; text: string[] }> = [];
|
||||
tasks.forEach(item => {
|
||||
if (!item || typeof item !== 'object') return;
|
||||
const taskItem = item as { serviceid?: unknown; process?: unknown; text?: unknown };
|
||||
const text = normalizeTaskTexts(Array.isArray(taskItem.text) ? taskItem.text : [taskItem.text]);
|
||||
if (!text.length) return;
|
||||
const serviceid = Number(taskItem.serviceid);
|
||||
const process = Number(taskItem.process);
|
||||
groups.push({
|
||||
serviceid: Number.isFinite(serviceid) ? serviceid : undefined,
|
||||
process: Number.isFinite(process) ? process : undefined,
|
||||
text
|
||||
});
|
||||
});
|
||||
return groups;
|
||||
}
|
||||
export type WorkType = '基本工作' | '可选工作' | '日常顾问' | '专项顾问' | '附加工作' | '自定义'
|
||||
|
||||
export const TYPE_LABEL_MAP: Record<number, WorkType> = {
|
||||
@ -853,9 +872,14 @@ async function generateTemplate(data) {
|
||||
await workbook.xlsx.load(buf);
|
||||
|
||||
// 生成表格
|
||||
let fm_sheet = workbook.getWorksheet('封面');
|
||||
let ml_sheet = workbook.getWorksheet('目录');
|
||||
let yz01_sheet = workbook.getWorksheet('预总01表');
|
||||
const mustGetWorksheet = (name: string) => {
|
||||
const sheet = workbook.getWorksheet(name);
|
||||
if (!sheet) throw new Error(`模板缺少工作表: ${name}`);
|
||||
return sheet;
|
||||
};
|
||||
let fm_sheet = mustGetWorksheet('封面');
|
||||
let ml_sheet = mustGetWorksheet('目录');
|
||||
let yz01_sheet = mustGetWorksheet('预总01表');
|
||||
yz01_sheet.headerFooter.oddHeader = yz01_sheet.headerFooter.oddHeader.replace(/×××/g, data.name);
|
||||
|
||||
// 更新封面
|
||||
@ -1882,7 +1906,7 @@ async function generateTemplate(data) {
|
||||
// 编辑辅01/02/03表内容
|
||||
// 辅01表
|
||||
if (Object.keys(allMajors).length) {
|
||||
let f01_sheet = workbook.getWorksheet('辅01表');
|
||||
let f01_sheet = mustGetWorksheet('辅01表');
|
||||
let f01Mod = (data.contracts.length + 1) % 3;
|
||||
let f01Num = (data.contracts.length + 1 - f01Mod) / 3;
|
||||
switch (f01Mod) {
|
||||
@ -2004,7 +2028,7 @@ async function generateTemplate(data) {
|
||||
|
||||
// 辅02/03表
|
||||
if (data.serviceCoes?.length) {
|
||||
let f02_sheet = workbook.getWorksheet('辅02表');
|
||||
let f02_sheet = mustGetWorksheet('辅02表');
|
||||
let num_f02 = 1;
|
||||
data.serviceCoes.sort((a, b) => serviceList[a.serviceid].order - serviceList[b.serviceid].order).forEach(scoei => {
|
||||
let serviceCoeX = serviceList[scoei.serviceid];
|
||||
@ -2023,7 +2047,7 @@ async function generateTemplate(data) {
|
||||
workbook.removeWorksheet('辅02表');
|
||||
}
|
||||
if (data.majorCoes?.length) {
|
||||
let f03_sheet = workbook.getWorksheet('辅03表');
|
||||
let f03_sheet = mustGetWorksheet('辅03表');
|
||||
let num_f03 = 1;
|
||||
data.majorCoes.sort((a, b) => (a < 0 ? a : majorList[a.majorid].order) - (b < 0 ? b : majorList[b.majorid].order)).forEach(mcoei => {
|
||||
let majorCoeX = majorList[mcoei.majorid];
|
||||
@ -2058,7 +2082,7 @@ async function generateTemplate(data) {
|
||||
const titleHeiDet = { fir: 11.25, els: 22.5 };
|
||||
const textHeiDet = { fir: 6.75, els: 13.5 };
|
||||
|
||||
const descSheet = workbook.getWorksheet('编制说明');
|
||||
const descSheet = mustGetWorksheet('编制说明');
|
||||
let descRowNum = 1;
|
||||
let titleArr = paragraphLineBreakFor1112(data.name, ctx, 0);
|
||||
descSheet.getRow(descRowNum).getCell(1).value = titleArr[0];
|
||||
@ -2403,16 +2427,23 @@ async function generateTemplate(data) {
|
||||
});
|
||||
}
|
||||
ci.services.forEach((si, sindex) => {
|
||||
let siTextArr = paragraphLineBreakFor1112(` (${ciTastNum})${si.process == null ? '' : (si.process == 1 ? '审核' : '编制')}${serviceList[si.id].name},具体工作内容包括:`, ctx);
|
||||
siTextArr.forEach(ti => {
|
||||
let flag = false;
|
||||
const taskGroups = normalizeServiceTaskGroups(si.tasks);
|
||||
if (taskGroups.length) {
|
||||
taskGroups.forEach(tsi => {
|
||||
flag = true;
|
||||
let sx = tsi.serviceid == null
|
||||
? { id: si.id, process: si.process }
|
||||
: { id: tsi.serviceid, process: tsi.process };
|
||||
let tsiTextArr = paragraphLineBreakFor1112(` (${ciTastNum})${sx.process == null ? '完成' : (sx.process == 1 ? '审核' : '编制')}${serviceList[sx.id].name},具体工作内容包括:`, ctx);
|
||||
tsiTextArr.forEach(ti => {
|
||||
cusInsertRowFunc(descRowNum3, [descSheet.getRow(descRowNum3 - 1)], descSheet, (targetRow) => {
|
||||
descRowNum3++;
|
||||
targetRow.getCell(1).value = ti;
|
||||
ciTastNum++;
|
||||
});
|
||||
});
|
||||
if (si.tasks?.length) {
|
||||
si.tasks.forEach((sti, stindex) => {
|
||||
tsi.text.forEach((sti, stindex) => {
|
||||
let stiTextArr = paragraphLineBreakFor1112(` ${stindex + 1})${sti}。`, ctx);
|
||||
stiTextArr.forEach(ti => {
|
||||
cusInsertRowFunc(descRowNum3, [descSheet.getRow(descRowNum3 - 1)], descSheet, (targetRow) => {
|
||||
@ -2421,7 +2452,17 @@ async function generateTemplate(data) {
|
||||
});
|
||||
});
|
||||
});
|
||||
} else {
|
||||
});
|
||||
}
|
||||
if (!flag) {
|
||||
let siTextArr = paragraphLineBreakFor1112(` (${ciTastNum})${si.process == null ? '完成' : (si.process == 1 ? '审核' : '编制')}${serviceList[si.id].name},具体工作内容包括:`, ctx);
|
||||
siTextArr.forEach(ti => {
|
||||
cusInsertRowFunc(descRowNum3, [descSheet.getRow(descRowNum3 - 1)], descSheet, (targetRow) => {
|
||||
descRowNum3++;
|
||||
targetRow.getCell(1).value = ti;
|
||||
ciTastNum++;
|
||||
});
|
||||
});
|
||||
cusInsertRowFunc(descRowNum3, [descSheet.getRow(descRowNum3 - 1)], descSheet, (targetRow) => {
|
||||
descRowNum3++;
|
||||
targetRow.getCell(1).value = ' 1)×××××。';
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user