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