|
@@ -94,9 +94,9 @@ export const genExamineExcel = (
|
|
|
for (let i = 0; i < tableData.length; i++) {
|
|
|
const data = [
|
|
|
i + 1,
|
|
|
- tableData[i].content,
|
|
|
- tableData[i].standard,
|
|
|
- tableData[i].isOk,
|
|
|
+ tableData[i].content || "",
|
|
|
+ tableData[i].standard || "",
|
|
|
+ tableData[i].isOk || "",
|
|
|
];
|
|
|
for (let j = 0; j < data.length; j++) {
|
|
|
const td = tbody[j];
|
|
@@ -280,9 +280,9 @@ export const genRespondExcel = (
|
|
|
for (let i = 0; i < tableData.length; i++) {
|
|
|
const data = [
|
|
|
i + 1,
|
|
|
- tableData[i].content,
|
|
|
- tableData[i].standard,
|
|
|
- tableData[i].isOk,
|
|
|
+ tableData[i].content || "",
|
|
|
+ tableData[i].standard || "",
|
|
|
+ tableData[i].isOk || "",
|
|
|
];
|
|
|
for (let j = 0; j < data.length; j++) {
|
|
|
const td = tbody[j];
|
|
@@ -479,11 +479,11 @@ export const genTechExcel = (
|
|
|
for (let i = 0; i < tableData.length; i++) {
|
|
|
const data = [
|
|
|
i + 1,
|
|
|
- tableData[i].content,
|
|
|
- tableData[i].value,
|
|
|
- tableData[i].standard,
|
|
|
- tableData[i].score,
|
|
|
- tableData[i].reason,
|
|
|
+ tableData[i].content || "",
|
|
|
+ tableData[i].value || "",
|
|
|
+ tableData[i].standard || "",
|
|
|
+ tableData[i].score || "",
|
|
|
+ tableData[i].reason || "",
|
|
|
];
|
|
|
for (let j = 0; j < data.length; j++) {
|
|
|
const td = tbody[j];
|
|
@@ -575,7 +575,7 @@ export const genTechExcel = (
|
|
|
* @param {*} workbook ExcelJs对象
|
|
|
* @param {*} tableData 数据
|
|
|
*/
|
|
|
-export const genBidScoreExcel = (workbook, tableData) => {
|
|
|
+export const genBidScoreExcel = (workbook, tableData, materialId) => {
|
|
|
const worksheet = workbook.addWorksheet("报价得分");
|
|
|
const columnWidth = [5, 34.5, 21.13, 21.13, 21.13, 21.13];
|
|
|
for (let cw = 1; cw <= columnWidth.length; cw++) {
|
|
@@ -630,11 +630,11 @@ export const genBidScoreExcel = (workbook, tableData) => {
|
|
|
for (let i = 0; i < tableData.length; i++) {
|
|
|
const data = [
|
|
|
i + 1,
|
|
|
- tableData[i].hName,
|
|
|
- tableData[i].quotePrice,
|
|
|
- tableData[i].level,
|
|
|
- tableData[i].percent,
|
|
|
- tableData[i].score,
|
|
|
+ tableData[i].hName || "",
|
|
|
+ tableData[i].quotePrice || "",
|
|
|
+ tableData[i].level || "",
|
|
|
+ tableData[i].percent || "",
|
|
|
+ tableData[i].score || "",
|
|
|
];
|
|
|
for (let j = 0; j < data.length; j++) {
|
|
|
const td = tbody[j];
|
|
@@ -666,20 +666,27 @@ export const genBidScoreExcel = (workbook, tableData) => {
|
|
|
vertical: "middle",
|
|
|
wrapText: true,
|
|
|
};
|
|
|
+
|
|
|
+ const materialIds = [39, 40, 41, 42];
|
|
|
+ let text = "";
|
|
|
+ if (materialIds.indexOf(materialId) != -1) {
|
|
|
+ text = `投标报价:
|
|
|
+其中价格分统一采用低价优先法计算,即满足招标文件要求且投标价格
|
|
|
+最低的投标报价为评标基准价,其价格分为满分 10 分,其他投标人的价
|
|
|
+格分统一按下列公式计算:
|
|
|
+投标报价得分=(评标基准价/投标报价)×10%×100`;
|
|
|
+ } else {
|
|
|
+ text = `投标报价:
|
|
|
+其中价格分统一采用低价优先法计算,即满足招标文件要求且投标价格
|
|
|
+最低的投标报价为评标基准价,其价格分为满分 30 分,其他投标人的价
|
|
|
+格分统一按下列公式计算:
|
|
|
+投标报价得分=(评标基准价/投标报价)×30%×100`;
|
|
|
+ }
|
|
|
worksheet.getCell(`A${huiZhongRowNum}`).value = {
|
|
|
richText: [
|
|
|
{
|
|
|
font: { name: "宋体", family: 4, size: 11 },
|
|
|
- text: `1、以评标标准值为基准,投标人的投标报价等于评标标准值得满分7分;
|
|
|
-2、每低于评标标准值的1%扣0.5分;
|
|
|
-3、每高于评标标准值的1%扣0.6分;
|
|
|
-4、中间值按插入法计算,所有计算得分最终保留小数点后2位,第3位将四舍五入。
|
|
|
-5、评标基准价计算方法:通过初步评审的投标报价参加报价得分计算。
|
|
|
-(1)有效投标报价<5家时,取所有有效投标报价的算数平均值为评标标准值;
|
|
|
-(2)有效投标报价≥5家时,去掉最高投标报价和最低投标报价后,其余有效投标报价的算数平均值为评标标准值。
|
|
|
-(3)分数值保留至小数点后两位,第三位四舍五入。
|
|
|
-6、投标报价的偏差率计算公式:
|
|
|
-偏差率=(投标报价−评标基准价)/评标基准价×100%`,
|
|
|
+ text: text,
|
|
|
},
|
|
|
],
|
|
|
};
|
|
@@ -829,17 +836,17 @@ export const genTotalScoreExcel = (workbook, tableData, zjNames) => {
|
|
|
|
|
|
let zhongbiaoren = "";
|
|
|
for (let i = 0; i < tableData.length; i++) {
|
|
|
- const techList = tableData[i].techList;
|
|
|
- const data = [i + 1, tableData[i].hName];
|
|
|
+ const techList = tableData[i].techList || "";
|
|
|
+ const data = [i + 1, tableData[i].hName] || "";
|
|
|
if (i == 0) {
|
|
|
- zhongbiaoren = tableData[i].hName;
|
|
|
+ zhongbiaoren = tableData[i].hName || "";
|
|
|
}
|
|
|
for (let j = 0; j < techList.length; j++) {
|
|
|
- data.push(techList[j].score);
|
|
|
+ data.push(techList[j].score || "");
|
|
|
}
|
|
|
- data.push(tableData[i].averScore);
|
|
|
- data.push(tableData[i].priceScore);
|
|
|
- data.push(tableData[i].totalScore);
|
|
|
+ data.push(tableData[i].averScore || "");
|
|
|
+ data.push(tableData[i].priceScore || "");
|
|
|
+ data.push(tableData[i].totalScore || "");
|
|
|
data.push(i + 1);
|
|
|
for (let j = 0; j < data.length; j++) {
|
|
|
const td = tbody[j];
|
|
@@ -910,3 +917,75 @@ export const genTotalScoreExcel = (workbook, tableData, zjNames) => {
|
|
|
rowLast.height = 28;
|
|
|
rowLast.font = { name: "宋体", family: 4, size: 12 };
|
|
|
};
|
|
|
+
|
|
|
+/**
|
|
|
+ * 得分汇总
|
|
|
+ * @param {*} workbook ExcelJs对象
|
|
|
+ * @param {*} tableData 数据
|
|
|
+ */
|
|
|
+export const genIdeaExcel = (
|
|
|
+ workbook,
|
|
|
+ sName,
|
|
|
+ kaibiaoTime,
|
|
|
+ kaibiaoAddress,
|
|
|
+ idea
|
|
|
+) => {
|
|
|
+ const worksheet = workbook.addWorksheet("评委意见表");
|
|
|
+ const columnWidth = [40.97, 39.63];
|
|
|
+ for (let cw = 1; cw <= columnWidth.length; cw++) {
|
|
|
+ worksheet.getColumn(cw).width = columnWidth[cw - 1] + 0.62;
|
|
|
+ }
|
|
|
+ worksheet.addRow(["评委评价意见表"]);
|
|
|
+ worksheet.mergeCells("A1:B1");
|
|
|
+ worksheet.getCell("A1").alignment = {
|
|
|
+ vertical: "middle",
|
|
|
+ horizontal: "center",
|
|
|
+ };
|
|
|
+ const row1 = worksheet.getRow(1);
|
|
|
+ row1.height = 45;
|
|
|
+ row1.font = { name: "宋体", family: 4, size: 14, bold: true };
|
|
|
+
|
|
|
+ worksheet.addRow([`项目名称:${sName}`]);
|
|
|
+ worksheet.mergeCells("A2:B2");
|
|
|
+ worksheet.getCell("A2").alignment = { vertical: "middle" };
|
|
|
+ const row2 = worksheet.getRow(2);
|
|
|
+ row2.height = 28;
|
|
|
+ row2.font = { name: "宋体", family: 4, size: 10 };
|
|
|
+
|
|
|
+ worksheet.addRow([
|
|
|
+ `开标时间:${dayjs(kaibiaoTime).format("YYYY年MM月DD日HH时mm分")}`,
|
|
|
+ ]);
|
|
|
+
|
|
|
+ worksheet.getCell("A3").alignment = { vertical: "middle" };
|
|
|
+ const row3 = worksheet.getRow(3);
|
|
|
+ row3.height = 28;
|
|
|
+ row3.font = { name: "宋体", family: 4, size: 10 };
|
|
|
+
|
|
|
+ worksheet.addRow([`开标地点:${kaibiaoAddress}`]);
|
|
|
+ worksheet.mergeCells("A4:B4");
|
|
|
+ worksheet.getCell("A4").alignment = { vertical: "middle" };
|
|
|
+ const row4 = worksheet.getRow(4);
|
|
|
+ row4.height = 28;
|
|
|
+ row4.font = { name: "宋体", family: 4, size: 10 };
|
|
|
+
|
|
|
+ let value = "";
|
|
|
+ const alignment = { vertical: "top" };
|
|
|
+ console.log({ idea });
|
|
|
+ if (idea) {
|
|
|
+ value = {
|
|
|
+ richText: [{ font: { name: "宋体", family: 4, size: 10 }, text: idea }],
|
|
|
+ };
|
|
|
+ }
|
|
|
+ worksheet.mergeCells("A5:B5");
|
|
|
+ worksheet.getCell(`A5`).alignment = alignment;
|
|
|
+ worksheet.getCell(`A5`).value = value;
|
|
|
+ const row5 = worksheet.getRow(5);
|
|
|
+ row5.height = 521.3;
|
|
|
+
|
|
|
+ worksheet.addRow(["评审小组成员签字:"]);
|
|
|
+ worksheet.mergeCells(`A6:B6`);
|
|
|
+ worksheet.getCell(`A6`).alignment = { vertical: "middle" };
|
|
|
+ const rowLast = worksheet.getRow(6);
|
|
|
+ rowLast.height = 36.75;
|
|
|
+ rowLast.font = { name: "宋体", family: 4, size: 10 };
|
|
|
+};
|