备份
This commit is contained in:
parent
fc26a87bee
commit
8a15587d30
1
bun.lock
1
bun.lock
@ -8,6 +8,7 @@
|
|||||||
"@ag-grid-community/locale": "^35.1.0",
|
"@ag-grid-community/locale": "^35.1.0",
|
||||||
"@iconify/vue": "^5.0.0",
|
"@iconify/vue": "^5.0.0",
|
||||||
"@internationalized/date": "^3.12.0",
|
"@internationalized/date": "^3.12.0",
|
||||||
|
"@internationalized/number": "^3.6.5",
|
||||||
"@tailwindcss/vite": "^4.1.18",
|
"@tailwindcss/vite": "^4.1.18",
|
||||||
"@vueuse/core": "^14.2.1",
|
"@vueuse/core": "^14.2.1",
|
||||||
"ag-grid-community": "^35.1.0",
|
"ag-grid-community": "^35.1.0",
|
||||||
|
|||||||
@ -13,6 +13,7 @@
|
|||||||
"@ag-grid-community/locale": "^35.1.0",
|
"@ag-grid-community/locale": "^35.1.0",
|
||||||
"@iconify/vue": "^5.0.0",
|
"@iconify/vue": "^5.0.0",
|
||||||
"@internationalized/date": "^3.12.0",
|
"@internationalized/date": "^3.12.0",
|
||||||
|
"@internationalized/number": "^3.6.5",
|
||||||
"@tailwindcss/vite": "^4.1.18",
|
"@tailwindcss/vite": "^4.1.18",
|
||||||
"@vueuse/core": "^14.2.1",
|
"@vueuse/core": "^14.2.1",
|
||||||
"ag-grid-community": "^35.1.0",
|
"ag-grid-community": "^35.1.0",
|
||||||
|
|||||||
@ -1,120 +1,120 @@
|
|||||||
let majorList = {
|
let majorList = {
|
||||||
0: { ref: 'E1', name: '交通运输工程通用专业', maxCoe: null, minCoe: null, defCoe: null, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, order: 1, hasCost: FALSE, hasArea: FALSE },
|
0: { ref: 'E1', name: '交通运输工程通用专业', maxCoe: null, minCoe: null, defCoe: null, desc: '', isRoad: true, isRailway: true, isWaterway: true, order: 1, hasCost: false, hasArea: false },
|
||||||
1: { ref: 'E1-1', name: '征地(用海)补偿', maxCoe: null, minCoe: null, defCoe: 1, desc: '适用于交通建设项目征地(用海)补偿的施工图预算、招标工程量清单及清单预算(或最高投标限价)、清理概算(仅限铁路工程)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, order: 2, hasCost: TRUE, hasArea: TRUE },
|
1: { ref: 'E1-1', name: '征地(用海)补偿', maxCoe: null, minCoe: null, defCoe: 1, desc: '适用于交通建设项目征地(用海)补偿的施工图预算、招标工程量清单及清单预算(或最高投标限价)、清理概算(仅限铁路工程)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: true, isRailway: true, isWaterway: true, order: 2, hasCost: true, hasArea: true },
|
||||||
2: { ref: 'E1-2', name: '拆迁补偿', maxCoe: null, minCoe: null, defCoe: 2.5, desc: '适用于交通建设项目拆迁补偿的施工图预算、招标工程量清单及清单预算(或最高投标限价)、清理概算(仅限铁路工程)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, order: 3, hasCost: TRUE, hasArea: TRUE },
|
2: { ref: 'E1-2', name: '拆迁补偿', maxCoe: null, minCoe: null, defCoe: 2.5, desc: '适用于交通建设项目拆迁补偿的施工图预算、招标工程量清单及清单预算(或最高投标限价)、清理概算(仅限铁路工程)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: true, isRailway: true, isWaterway: true, order: 3, hasCost: true, hasArea: true },
|
||||||
3: { ref: 'E1-3', name: '迁改工程', maxCoe: null, minCoe: null, defCoe: 2, desc: '适用于交通建设项目迁改工程的施工图预算、招标工程量清单及清单预算(或最高投标限价)、清理概算(仅限铁路工程)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, order: 4, hasCost: TRUE, hasArea: FALSE },
|
3: { ref: 'E1-3', name: '迁改工程', maxCoe: null, minCoe: null, defCoe: 2, desc: '适用于交通建设项目迁改工程的施工图预算、招标工程量清单及清单预算(或最高投标限价)、清理概算(仅限铁路工程)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: true, isRailway: true, isWaterway: true, order: 4, hasCost: true, hasArea: false },
|
||||||
4: { ref: 'E1-4', name: '工程建设其他费', maxCoe: null, minCoe: null, defCoe: 1, desc: '适用于交通建设项目的工程建设其他费的施工图预算、招标工程量清单及清单预算(或最高投标限价)、清理概算(仅限铁路工程)和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, order: 5, hasCost: TRUE, hasArea: FALSE },
|
4: { ref: 'E1-4', name: '工程建设其他费', maxCoe: null, minCoe: null, defCoe: 1, desc: '适用于交通建设项目的工程建设其他费的施工图预算、招标工程量清单及清单预算(或最高投标限价)、清理概算(仅限铁路工程)和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: true, isRailway: true, isWaterway: true, order: 5, hasCost: true, hasArea: false },
|
||||||
5: { ref: 'E1-5', name: '预备费', maxCoe: null, minCoe: null, defCoe: 1, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, order: 6, hasCost: TRUE, hasArea: FALSE },
|
5: { ref: 'E1-5', name: '预备费', maxCoe: null, minCoe: null, defCoe: 1, desc: '', isRoad: true, isRailway: true, isWaterway: true, order: 6, hasCost: true, hasArea: false },
|
||||||
6: { ref: 'E1-6', name: '建设期贷款利息', maxCoe: null, minCoe: null, defCoe: 1, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, order: 7, hasCost: TRUE, hasArea: FALSE },
|
6: { ref: 'E1-6', name: '建设期贷款利息', maxCoe: null, minCoe: null, defCoe: 1, desc: '', isRoad: true, isRailway: true, isWaterway: true, order: 7, hasCost: true, hasArea: false },
|
||||||
7: { ref: 'E2', name: '公路工程专业', maxCoe: null, minCoe: null, defCoe: 1, desc: '适用于公路工程的全过程造价咨询、分阶段造价咨询、投资估算、初步设计概算、竣工决算和调整估算、调整概算(含征地拆迁和工程建设其他费)', isRoad: TRUE, isRailway: FALSE, isWaterway: FALSE, order: 8, hasCost: FALSE, hasArea: FALSE },
|
7: { ref: 'E2', name: '公路工程专业', maxCoe: null, minCoe: null, defCoe: 1, desc: '适用于公路工程的全过程造价咨询、分阶段造价咨询、投资估算、初步设计概算、竣工决算和调整估算、调整概算(含征地拆迁和工程建设其他费)', isRoad: true, isRailway: false, isWaterway: false, order: 8, hasCost: false, hasArea: false },
|
||||||
8: { ref: 'E2-1', name: '临时工程', maxCoe: null, minCoe: null, defCoe: 1, desc: '适用于临时工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: TRUE, isRailway: FALSE, isWaterway: FALSE, order: 9, hasCost: TRUE, hasArea: FALSE },
|
8: { ref: 'E2-1', name: '临时工程', maxCoe: null, minCoe: null, defCoe: 1, desc: '适用于临时工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: true, isRailway: false, isWaterway: false, order: 9, hasCost: true, hasArea: false },
|
||||||
9: { ref: 'E2-2', name: '路基工程', maxCoe: null, minCoe: null, defCoe: 1.2, desc: '适用于路基工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: TRUE, isRailway: FALSE, isWaterway: FALSE, order: 10, hasCost: TRUE, hasArea: FALSE },
|
9: { ref: 'E2-2', name: '路基工程', maxCoe: null, minCoe: null, defCoe: 1.2, desc: '适用于路基工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: true, isRailway: false, isWaterway: false, order: 10, hasCost: true, hasArea: false },
|
||||||
10: { ref: 'E2-3', name: '路面工程', maxCoe: null, minCoe: null, defCoe: 0.8, desc: '适用于路面工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: TRUE, isRailway: FALSE, isWaterway: FALSE, order: 11, hasCost: TRUE, hasArea: FALSE },
|
10: { ref: 'E2-3', name: '路面工程', maxCoe: null, minCoe: null, defCoe: 0.8, desc: '适用于路面工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: true, isRailway: false, isWaterway: false, order: 11, hasCost: true, hasArea: false },
|
||||||
11: { ref: 'E2-4', name: '桥涵工程', maxCoe: null, minCoe: null, defCoe: 0.9, desc: '适用于桥梁涵洞工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: TRUE, isRailway: FALSE, isWaterway: FALSE, order: 12, hasCost: TRUE, hasArea: FALSE },
|
11: { ref: 'E2-4', name: '桥涵工程', maxCoe: null, minCoe: null, defCoe: 0.9, desc: '适用于桥梁涵洞工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: true, isRailway: false, isWaterway: false, order: 12, hasCost: true, hasArea: false },
|
||||||
12: { ref: 'E2-5', name: '隧道工程', maxCoe: null, minCoe: null, defCoe: 1, desc: '适用于隧道工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: TRUE, isRailway: FALSE, isWaterway: FALSE, order: 13, hasCost: TRUE, hasArea: FALSE },
|
12: { ref: 'E2-5', name: '隧道工程', maxCoe: null, minCoe: null, defCoe: 1, desc: '适用于隧道工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: true, isRailway: false, isWaterway: false, order: 13, hasCost: true, hasArea: false },
|
||||||
13: { ref: 'E2-6', name: '交叉工程', maxCoe: null, minCoe: null, defCoe: 1.1, desc: '适用于交叉工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: TRUE, isRailway: FALSE, isWaterway: FALSE, order: 14, hasCost: TRUE, hasArea: FALSE },
|
13: { ref: 'E2-6', name: '交叉工程', maxCoe: null, minCoe: null, defCoe: 1.1, desc: '适用于交叉工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: true, isRailway: false, isWaterway: false, order: 14, hasCost: true, hasArea: false },
|
||||||
14: { ref: 'E2-7', name: '机电工程', maxCoe: null, minCoe: null, defCoe: 1.2, desc: '适用于机电工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: TRUE, isRailway: FALSE, isWaterway: FALSE, order: 15, hasCost: TRUE, hasArea: FALSE },
|
14: { ref: 'E2-7', name: '机电工程', maxCoe: null, minCoe: null, defCoe: 1.2, desc: '适用于机电工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: true, isRailway: false, isWaterway: false, order: 15, hasCost: true, hasArea: false },
|
||||||
15: { ref: 'E2-8', name: '交通安全设施工程', maxCoe: null, minCoe: null, defCoe: 1.2, desc: '适用于交通安全设施工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: TRUE, isRailway: FALSE, isWaterway: FALSE, order: 16, hasCost: TRUE, hasArea: FALSE },
|
15: { ref: 'E2-8', name: '交通安全设施工程', maxCoe: null, minCoe: null, defCoe: 1.2, desc: '适用于交通安全设施工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: true, isRailway: false, isWaterway: false, order: 16, hasCost: true, hasArea: false },
|
||||||
16: { ref: 'E2-9', name: '绿化及环境保护工程', maxCoe: null, minCoe: null, defCoe: 1.2, desc: '适用于绿化工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: TRUE, isRailway: FALSE, isWaterway: FALSE, order: 17, hasCost: TRUE, hasArea: FALSE },
|
16: { ref: 'E2-9', name: '绿化及环境保护工程', maxCoe: null, minCoe: null, defCoe: 1.2, desc: '适用于绿化工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: true, isRailway: false, isWaterway: false, order: 17, hasCost: true, hasArea: false },
|
||||||
17: { ref: 'E2-10', name: '房建工程', maxCoe: null, minCoe: null, defCoe: 2.5, desc: '适用于房建工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: TRUE, isRailway: FALSE, isWaterway: FALSE, order: 18, hasCost: TRUE, hasArea: FALSE },
|
17: { ref: 'E2-10', name: '房建工程', maxCoe: null, minCoe: null, defCoe: 2.5, desc: '适用于房建工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: true, isRailway: false, isWaterway: false, order: 18, hasCost: true, hasArea: false },
|
||||||
18: { ref: 'E3', name: '铁路工程专业', maxCoe: null, minCoe: null, defCoe: 1, desc: '适用于铁路工程的投资估算、初步设计概算、清理概算、竣工决算和调整估算、调整概算(含征地拆迁和工程建设其他费)', isRoad: FALSE, isRailway: TRUE, isWaterway: FALSE, order: 19, hasCost: FALSE, hasArea: FALSE },
|
18: { ref: 'E3', name: '铁路工程专业', maxCoe: null, minCoe: null, defCoe: 1, desc: '适用于铁路工程的投资估算、初步设计概算、清理概算、竣工决算和调整估算、调整概算(含征地拆迁和工程建设其他费)', isRoad: false, isRailway: true, isWaterway: false, order: 19, hasCost: false, hasArea: false },
|
||||||
19: { ref: 'E3-1', name: '大型临时设施和过渡工程', maxCoe: null, minCoe: null, defCoe: 1, desc: '适用于大型临时设施和过渡工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: FALSE, isRailway: TRUE, isWaterway: FALSE, order: 20, hasCost: TRUE, hasArea: FALSE },
|
19: { ref: 'E3-1', name: '大型临时设施和过渡工程', maxCoe: null, minCoe: null, defCoe: 1, desc: '适用于大型临时设施和过渡工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: false, isRailway: true, isWaterway: false, order: 20, hasCost: true, hasArea: false },
|
||||||
20: { ref: 'E3-2', name: '路基工程', maxCoe: null, minCoe: null, defCoe: 1.2, desc: '适用于路基工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: FALSE, isRailway: TRUE, isWaterway: FALSE, order: 21, hasCost: TRUE, hasArea: FALSE },
|
20: { ref: 'E3-2', name: '路基工程', maxCoe: null, minCoe: null, defCoe: 1.2, desc: '适用于路基工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: false, isRailway: true, isWaterway: false, order: 21, hasCost: true, hasArea: false },
|
||||||
21: { ref: 'E3-3', name: '桥涵工程', maxCoe: null, minCoe: null, defCoe: 0.9, desc: '适用于桥涵工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: FALSE, isRailway: TRUE, isWaterway: FALSE, order: 22, hasCost: TRUE, hasArea: FALSE },
|
21: { ref: 'E3-3', name: '桥涵工程', maxCoe: null, minCoe: null, defCoe: 0.9, desc: '适用于桥涵工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: false, isRailway: true, isWaterway: false, order: 22, hasCost: true, hasArea: false },
|
||||||
22: { ref: 'E3-4', name: '隧道及明洞工程', maxCoe: null, minCoe: null, defCoe: 1, desc: '适用于隧道及明洞工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算、竣工决算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: FALSE, isRailway: TRUE, isWaterway: FALSE, order: 23, hasCost: TRUE, hasArea: FALSE },
|
22: { ref: 'E3-4', name: '隧道及明洞工程', maxCoe: null, minCoe: null, defCoe: 1, desc: '适用于隧道及明洞工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算、竣工决算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: false, isRailway: true, isWaterway: false, order: 23, hasCost: true, hasArea: false },
|
||||||
23: { ref: 'E3-5', name: '轨道工程', maxCoe: null, minCoe: null, defCoe: 0.3, desc: '适用于轨道工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: FALSE, isRailway: TRUE, isWaterway: FALSE, order: 24, hasCost: TRUE, hasArea: FALSE },
|
23: { ref: 'E3-5', name: '轨道工程', maxCoe: null, minCoe: null, defCoe: 0.3, desc: '适用于轨道工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: false, isRailway: true, isWaterway: false, order: 24, hasCost: true, hasArea: false },
|
||||||
24: { ref: 'E3-6', name: '通信、信号、信息及灾害监测工程', maxCoe: null, minCoe: null, defCoe: 2, desc: '适用于通信、信号、信息及防灾监测工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: FALSE, isRailway: TRUE, isWaterway: FALSE, order: 25, hasCost: TRUE, hasArea: FALSE },
|
24: { ref: 'E3-6', name: '通信、信号、信息及灾害监测工程', maxCoe: null, minCoe: null, defCoe: 2, desc: '适用于通信、信号、信息及防灾监测工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: false, isRailway: true, isWaterway: false, order: 25, hasCost: true, hasArea: false },
|
||||||
25: { ref: 'E3-7', name: '电力及电力牵引供电工程', maxCoe: null, minCoe: null, defCoe: 1.5, desc: '适用于电力及电力牵引供电工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: FALSE, isRailway: TRUE, isWaterway: FALSE, order: 26, hasCost: TRUE, hasArea: FALSE },
|
25: { ref: 'E3-7', name: '电力及电力牵引供电工程', maxCoe: null, minCoe: null, defCoe: 1.5, desc: '适用于电力及电力牵引供电工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: false, isRailway: true, isWaterway: false, order: 26, hasCost: true, hasArea: false },
|
||||||
26: { ref: 'E3-8', name: '房建工程(房屋建筑及附属工程)', maxCoe: null, minCoe: null, defCoe: 2.5, desc: '适用于房屋建筑及附属工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: FALSE, isRailway: TRUE, isWaterway: FALSE, order: 27, hasCost: TRUE, hasArea: FALSE },
|
26: { ref: 'E3-8', name: '房建工程(房屋建筑及附属工程)', maxCoe: null, minCoe: null, defCoe: 2.5, desc: '适用于房屋建筑及附属工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: false, isRailway: true, isWaterway: false, order: 27, hasCost: true, hasArea: false },
|
||||||
27: { ref: 'E3-9', name: '装饰装修工程', maxCoe: null, minCoe: null, defCoe: 2.7, desc: '适用于装饰装修工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: FALSE, isRailway: TRUE, isWaterway: FALSE, order: 28, hasCost: TRUE, hasArea: FALSE },
|
27: { ref: 'E3-9', name: '装饰装修工程', maxCoe: null, minCoe: null, defCoe: 2.7, desc: '适用于装饰装修工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: false, isRailway: true, isWaterway: false, order: 28, hasCost: true, hasArea: false },
|
||||||
28: { ref: 'E4', name: '水运工程专业', maxCoe: null, minCoe: null, defCoe: 1, desc: '适用于水运工程的投资估算、初步设计概算、竣工决算和调整估算、调整概算(含征地拆迁和工程建设其他费)', isRoad: FALSE, isRailway: FALSE, isWaterway: TRUE, order: 29, hasCost: FALSE, hasArea: FALSE },
|
28: { ref: 'E4', name: '水运工程专业', maxCoe: null, minCoe: null, defCoe: 1, desc: '适用于水运工程的投资估算、初步设计概算、竣工决算和调整估算、调整概算(含征地拆迁和工程建设其他费)', isRoad: false, isRailway: false, isWaterway: true, order: 29, hasCost: false, hasArea: false },
|
||||||
29: { ref: 'E4-1', name: '临时工程', maxCoe: null, minCoe: null, defCoe: 1.1, desc: '适用于临时工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算、竣工决算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: FALSE, isRailway: FALSE, isWaterway: TRUE, order: 30, hasCost: TRUE, hasArea: FALSE },
|
29: { ref: 'E4-1', name: '临时工程', maxCoe: null, minCoe: null, defCoe: 1.1, desc: '适用于临时工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算、竣工决算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: false, isRailway: false, isWaterway: true, order: 30, hasCost: true, hasArea: false },
|
||||||
30: { ref: 'E4-2', name: '土建工程', maxCoe: null, minCoe: null, defCoe: 1, desc: '适用于土建工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算、竣工决算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: FALSE, isRailway: FALSE, isWaterway: TRUE, order: 31, hasCost: TRUE, hasArea: FALSE },
|
30: { ref: 'E4-2', name: '土建工程', maxCoe: null, minCoe: null, defCoe: 1, desc: '适用于土建工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算、竣工决算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: false, isRailway: false, isWaterway: true, order: 31, hasCost: true, hasArea: false },
|
||||||
31: { ref: 'E4-3', name: '机电与金属结构工程', maxCoe: null, minCoe: null, defCoe: 1.5, desc: '适用于机电与金属结构专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: FALSE, isRailway: FALSE, isWaterway: TRUE, order: 32, hasCost: TRUE, hasArea: FALSE },
|
31: { ref: 'E4-3', name: '机电与金属结构工程', maxCoe: null, minCoe: null, defCoe: 1.5, desc: '适用于机电与金属结构专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: false, isRailway: false, isWaterway: true, order: 32, hasCost: true, hasArea: false },
|
||||||
32: { ref: 'E4-4', name: '设备工程', maxCoe: null, minCoe: null, defCoe: 1.5, desc: '适用于设备工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: FALSE, isRailway: FALSE, isWaterway: TRUE, order: 33, hasCost: TRUE, hasArea: FALSE },
|
32: { ref: 'E4-4', name: '设备工程', maxCoe: null, minCoe: null, defCoe: 1.5, desc: '适用于设备工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: false, isRailway: false, isWaterway: true, order: 33, hasCost: true, hasArea: false },
|
||||||
33: { ref: 'E4-5', name: '附属房建工程(房屋建筑及附属工程)', maxCoe: null, minCoe: null, defCoe: 2.5, desc: '适用于房屋建筑与水运附属工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: FALSE, isRailway: FALSE, isWaterway: TRUE, order: 34, hasCost: TRUE, hasArea: FALSE },
|
33: { ref: 'E4-5', name: '附属房建工程(房屋建筑及附属工程)', maxCoe: null, minCoe: null, defCoe: 2.5, desc: '适用于房屋建筑与水运附属工程专业的施工图预算、招标工程量清单及清单预算(或最高投标限价)、合同(工程)结算和造价鉴定、计算工程量、工程变更费用咨询、工程成本测(核)算', isRoad: false, isRailway: false, isWaterway: true, order: 34, hasCost: true, hasArea: false },
|
||||||
};
|
};
|
||||||
|
|
||||||
let serviceList = {
|
let serviceList = {
|
||||||
0: { ref: 'D1', name: '全过程造价咨询', maxCoe: null, minCoe: null, defCoe: 1, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 1, scale: TRUE, onlyCostScale: TRUE, amount: FALSE, workDay: TRUE },
|
0: { ref: 'D1', name: '全过程造价咨询', maxCoe: null, minCoe: null, defCoe: 1, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 1, scale: true, onlyCostScale: true, amount: false, workDay: true },
|
||||||
1: { ref: 'D2', name: '分阶段造价咨询', maxCoe: null, minCoe: null, defCoe: null, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 2, scale: null, onlyCostScale: null, amount: null, workDay: null },
|
1: { ref: 'D2', name: '分阶段造价咨询', maxCoe: null, minCoe: null, defCoe: null, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 2, scale: null, onlyCostScale: null, amount: null, workDay: null },
|
||||||
2: { ref: 'D2-1', name: '前期阶段造价咨询', maxCoe: null, minCoe: null, defCoe: 0.5, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 3, scale: TRUE, onlyCostScale: TRUE, amount: FALSE, workDay: TRUE },
|
2: { ref: 'D2-1', name: '前期阶段造价咨询', maxCoe: null, minCoe: null, defCoe: 0.5, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 3, scale: true, onlyCostScale: true, amount: false, workDay: true },
|
||||||
3: { ref: 'D2-2-1', name: '实施阶段造价咨询(公路、水运)', maxCoe: null, minCoe: null, defCoe: 0.55, desc: '本系数适用于公路和水运工程。', isRoad: TRUE, isRailway: FALSE, isWaterway: TRUE, mutiple: FALSE, order: 4, scale: TRUE, onlyCostScale: TRUE, amount: FALSE, workDay: TRUE },
|
3: { ref: 'D2-2-1', name: '实施阶段造价咨询(公路、水运)', maxCoe: null, minCoe: null, defCoe: 0.55, desc: '本系数适用于公路和水运工程。', isRoad: true, isRailway: false, isWaterway: true, mutiple: false, order: 4, scale: true, onlyCostScale: true, amount: false, workDay: true },
|
||||||
4: { ref: 'D2-2-2', name: '实施阶段造价咨询(铁路)', maxCoe: null, minCoe: null, defCoe: 0.6, desc: '本系数适用于铁路工程。', isRoad: FALSE, isRailway: TRUE, isWaterway: FALSE, mutiple: FALSE, order: 5, scale: TRUE, onlyCostScale: TRUE, amount: FALSE, workDay: TRUE },
|
4: { ref: 'D2-2-2', name: '实施阶段造价咨询(铁路)', maxCoe: null, minCoe: null, defCoe: 0.6, desc: '本系数适用于铁路工程。', isRoad: false, isRailway: true, isWaterway: false, mutiple: false, order: 5, scale: true, onlyCostScale: true, amount: false, workDay: true },
|
||||||
5: { ref: 'D3', name: '基本造价咨询', maxCoe: null, minCoe: null, defCoe: null, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 6, scale: null, onlyCostScale: null, amount: null, workDay: null },
|
5: { ref: 'D3', name: '基本造价咨询', maxCoe: null, minCoe: null, defCoe: null, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 6, scale: null, onlyCostScale: null, amount: null, workDay: null },
|
||||||
6: { ref: 'D3-1', name: '投资估算', maxCoe: null, minCoe: null, defCoe: 0.1, desc: '委托同一咨询人同时负责D3-1和D3-2时,D3-1和D3-2的合计调整系数为0.25。', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 7, scale: TRUE, onlyCostScale: TRUE, amount: FALSE, workDay: TRUE },
|
6: { ref: 'D3-1', name: '投资估算', maxCoe: null, minCoe: null, defCoe: 0.1, desc: '委托同一咨询人同时负责D3-1和D3-2时,D3-1和D3-2的合计调整系数为0.25。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 7, scale: true, onlyCostScale: true, amount: false, workDay: true },
|
||||||
7: { ref: 'D3-2', name: '设计概算', maxCoe: null, minCoe: null, defCoe: 0.2, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 8, scale: TRUE, onlyCostScale: TRUE, amount: FALSE, workDay: TRUE },
|
7: { ref: 'D3-2', name: '设计概算', maxCoe: null, minCoe: null, defCoe: 0.2, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 8, scale: true, onlyCostScale: true, amount: false, workDay: true },
|
||||||
8: { ref: 'D3-3', name: '施工图预算', maxCoe: null, minCoe: null, defCoe: 0.25, desc: '委托同一咨询人同时负责D3-3和D3-4时,D3-3和D3-4的合计调整系数为0.3。', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 9, scale: TRUE, onlyCostScale: FALSE, amount: FALSE, workDay: TRUE },
|
8: { ref: 'D3-3', name: '施工图预算', maxCoe: null, minCoe: null, defCoe: 0.25, desc: '委托同一咨询人同时负责D3-3和D3-4时,D3-3和D3-4的合计调整系数为0.3。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 9, scale: true, onlyCostScale: false, amount: false, workDay: true },
|
||||||
9: { ref: 'D3-4', name: '招标工程量清单及清单预算(或最高投标限价)', maxCoe: null, minCoe: null, defCoe: 0.15, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 10, scale: TRUE, onlyCostScale: FALSE, amount: FALSE, workDay: TRUE },
|
9: { ref: 'D3-4', name: '招标工程量清单及清单预算(或最高投标限价)', maxCoe: null, minCoe: null, defCoe: 0.15, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 10, scale: true, onlyCostScale: false, amount: false, workDay: true },
|
||||||
10: { ref: 'D3-5', name: '清理概算(仅限铁路)', maxCoe: null, minCoe: null, defCoe: 0.2, desc: '本系数适用于铁路工程。', isRoad: FALSE, isRailway: TRUE, isWaterway: FALSE, mutiple: FALSE, order: 11, scale: TRUE, onlyCostScale: TRUE, amount: FALSE, workDay: TRUE },
|
10: { ref: 'D3-5', name: '清理概算(仅限铁路)', maxCoe: null, minCoe: null, defCoe: 0.2, desc: '本系数适用于铁路工程。', isRoad: false, isRailway: true, isWaterway: false, mutiple: false, order: 11, scale: true, onlyCostScale: true, amount: false, workDay: true },
|
||||||
11: { ref: 'D3-6-1', name: '合同(工程)结算', maxCoe: null, minCoe: null, defCoe: 0.3, desc: '本系数适用于公路和水运工程。', isRoad: TRUE, isRailway: FALSE, isWaterway: TRUE, mutiple: FALSE, order: 12, scale: TRUE, onlyCostScale: FALSE, amount: FALSE, workDay: TRUE },
|
11: { ref: 'D3-6-1', name: '合同(工程)结算', maxCoe: null, minCoe: null, defCoe: 0.3, desc: '本系数适用于公路和水运工程。', isRoad: true, isRailway: false, isWaterway: true, mutiple: false, order: 12, scale: true, onlyCostScale: false, amount: false, workDay: true },
|
||||||
12: { ref: 'D3-6-2', name: '合同(工程)结算', maxCoe: null, minCoe: null, defCoe: 0.2, desc: '本系数适用于铁路工程。', isRoad: FALSE, isRailway: TRUE, isWaterway: FALSE, mutiple: FALSE, order: 13, scale: TRUE, onlyCostScale: FALSE, amount: FALSE, workDay: TRUE },
|
12: { ref: 'D3-6-2', name: '合同(工程)结算', maxCoe: null, minCoe: null, defCoe: 0.2, desc: '本系数适用于铁路工程。', isRoad: false, isRailway: true, isWaterway: false, mutiple: false, order: 13, scale: true, onlyCostScale: false, amount: false, workDay: true },
|
||||||
13: { ref: 'D3-7', name: '竣工决算', maxCoe: null, minCoe: null, defCoe: 0.1, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 14, scale: TRUE, onlyCostScale: TRUE, amount: FALSE, workDay: TRUE },
|
13: { ref: 'D3-7', name: '竣工决算', maxCoe: null, minCoe: null, defCoe: 0.1, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 14, scale: true, onlyCostScale: true, amount: false, workDay: true },
|
||||||
14: { ref: 'D4', name: '专项造价咨询', maxCoe: null, minCoe: null, defCoe: null, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 15, scale: null, onlyCostScale: null, amount: null, workDay: null },
|
14: { ref: 'D4', name: '专项造价咨询', maxCoe: null, minCoe: null, defCoe: null, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 15, scale: null, onlyCostScale: null, amount: null, workDay: null },
|
||||||
15: { ref: 'D4-1', name: '工程造价顾问', maxCoe: null, minCoe: null, defCoe: 1, desc: '本表系数适用于采用工作量计价法基准预算的调整系数。', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 16, scale: FALSE, onlyCostScale: null, amount: TRUE, workDay: TRUE },
|
15: { ref: 'D4-1', name: '工程造价顾问', maxCoe: null, minCoe: null, defCoe: 1, desc: '本表系数适用于采用工作量计价法基准预算的调整系数。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 16, scale: false, onlyCostScale: null, amount: true, workDay: true },
|
||||||
16: { ref: 'D4-2', name: '造价政策制(修)订', maxCoe: null, minCoe: null, defCoe: 1, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 17, scale: FALSE, onlyCostScale: null, amount: TRUE, workDay: TRUE },
|
16: { ref: 'D4-2', name: '造价政策制(修)订', maxCoe: null, minCoe: null, defCoe: 1, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 17, scale: false, onlyCostScale: null, amount: true, workDay: true },
|
||||||
17: { ref: 'D4-3', name: '造价科学与技术研究', maxCoe: null, minCoe: null, defCoe: 1, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 18, scale: FALSE, onlyCostScale: null, amount: TRUE, workDay: TRUE },
|
17: { ref: 'D4-3', name: '造价科学与技术研究', maxCoe: null, minCoe: null, defCoe: 1, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 18, scale: false, onlyCostScale: null, amount: true, workDay: true },
|
||||||
18: { ref: 'D4-4', name: '定额测定', maxCoe: null, minCoe: null, defCoe: 1, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 19, scale: FALSE, onlyCostScale: null, amount: TRUE, workDay: TRUE },
|
18: { ref: 'D4-4', name: '定额测定', maxCoe: null, minCoe: null, defCoe: 1, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 19, scale: false, onlyCostScale: null, amount: true, workDay: true },
|
||||||
19: { ref: 'D4-5', name: '造价信息咨询', maxCoe: null, minCoe: null, defCoe: 1, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 20, scale: FALSE, onlyCostScale: null, amount: TRUE, workDay: TRUE },
|
19: { ref: 'D4-5', name: '造价信息咨询', maxCoe: null, minCoe: null, defCoe: 1, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 20, scale: false, onlyCostScale: null, amount: true, workDay: true },
|
||||||
20: { ref: 'D4-6', name: '造价鉴定', maxCoe: null, minCoe: null, defCoe: 0.5, desc: '本表系数适用于采用规模计价法基准预算的调整系数。', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 21, scale: TRUE, onlyCostScale: FALSE, amount: FALSE, workDay: TRUE },
|
20: { ref: 'D4-6', name: '造价鉴定', maxCoe: null, minCoe: null, defCoe: 0.5, desc: '本表系数适用于采用规模计价法基准预算的调整系数。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 21, scale: true, onlyCostScale: false, amount: false, workDay: true },
|
||||||
21: { ref: 'D4-7', name: '工程成本测算', maxCoe: null, minCoe: null, defCoe: 0.1, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 22, scale: TRUE, onlyCostScale: FALSE, amount: FALSE, workDay: TRUE },
|
21: { ref: 'D4-7', name: '工程成本测算', maxCoe: null, minCoe: null, defCoe: 0.1, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 22, scale: true, onlyCostScale: false, amount: false, workDay: true },
|
||||||
22: { ref: 'D4-8', name: '工程成本核算', maxCoe: null, minCoe: null, defCoe: 0.1, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 23, scale: TRUE, onlyCostScale: FALSE, amount: FALSE, workDay: TRUE },
|
22: { ref: 'D4-8', name: '工程成本核算', maxCoe: null, minCoe: null, defCoe: 0.1, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 23, scale: true, onlyCostScale: false, amount: false, workDay: true },
|
||||||
23: { ref: 'D4-9', name: '计算工程量', maxCoe: null, minCoe: null, defCoe: 0.2, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 24, scale: TRUE, onlyCostScale: FALSE, amount: FALSE, workDay: TRUE },
|
23: { ref: 'D4-9', name: '计算工程量', maxCoe: null, minCoe: null, defCoe: 0.2, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 24, scale: true, onlyCostScale: false, amount: false, workDay: true },
|
||||||
24: { ref: 'D4-10', name: '工程变更费用咨询', maxCoe: null, minCoe: null, defCoe: 0.5, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 25, scale: TRUE, onlyCostScale: FALSE, amount: FALSE, workDay: TRUE },
|
24: { ref: 'D4-10', name: '工程变更费用咨询', maxCoe: null, minCoe: null, defCoe: 0.5, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 25, scale: true, onlyCostScale: false, amount: false, workDay: true },
|
||||||
25: { ref: 'D4-11', name: '调整估算', maxCoe: 0.2, minCoe: 0.1, defCoe: 0.15, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 26, scale: TRUE, onlyCostScale: TRUE, amount: FALSE, workDay: TRUE },
|
25: { ref: 'D4-11', name: '调整估算', maxCoe: 0.2, minCoe: 0.1, defCoe: 0.15, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 26, scale: true, onlyCostScale: true, amount: false, workDay: true },
|
||||||
26: { ref: 'D4-12', name: '调整概算', maxCoe: 0.3, minCoe: 0.15, defCoe: 0.225, desc: '本表系数适用于采用规模计价法基准预算的系数;依据其调整时期所在建设阶段和基础资料的不同,其系数取值不同。', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 27, scale: TRUE, onlyCostScale: TRUE, amount: FALSE, workDay: TRUE },
|
26: { ref: 'D4-12', name: '调整概算', maxCoe: 0.3, minCoe: 0.15, defCoe: 0.225, desc: '本表系数适用于采用规模计价法基准预算的系数;依据其调整时期所在建设阶段和基础资料的不同,其系数取值不同。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 27, scale: true, onlyCostScale: true, amount: false, workDay: true },
|
||||||
27: { ref: 'D4-13', name: '造价检查', maxCoe: null, minCoe: null, defCoe: null, desc: '可按照服务工日数量×服务工日人工单价×综合预算系数;也可按照服务工日数量×服务工日综合预算单价。', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 28, scale: FALSE, onlyCostScale: null, amount: FALSE, workDay: TRUE },
|
27: { ref: 'D4-13', name: '造价检查', maxCoe: null, minCoe: null, defCoe: null, desc: '可按照服务工日数量×服务工日人工单价×综合预算系数;也可按照服务工日数量×服务工日综合预算单价。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 28, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
||||||
28: { ref: 'D4-14', name: '其他专项咨询', maxCoe: null, minCoe: null, defCoe: null, desc: '可参照相同或相似服务的系数。', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 29, scale: FALSE, onlyCostScale: null, amount: FALSE, workDay: TRUE },
|
28: { ref: 'D4-14', name: '其他专项咨询', maxCoe: null, minCoe: null, defCoe: null, desc: '可参照相同或相似服务的系数。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 29, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
||||||
29: { ref: 'D4-15-1', name: '造价数据测试验证(估算)', maxCoe: null, minCoe: null, defCoe: 0.04, desc: '委托同一咨询人同时负责D3-1和D3-2时,D3-1和D3-2的合计调整系数为0.25。', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 30, scale: FALSE, onlyCostScale: null, amount: FALSE, workDay: TRUE },
|
29: { ref: 'D4-15-1', name: '造价数据测试验证(估算)', maxCoe: null, minCoe: null, defCoe: 0.04, desc: '委托同一咨询人同时负责D3-1和D3-2时,D3-1和D3-2的合计调整系数为0.25。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 30, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
||||||
30: { ref: 'D4-15-2', name: '造价数据测试验证(概算)', maxCoe: null, minCoe: null, defCoe: 0.08, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 31, scale: FALSE, onlyCostScale: null, amount: FALSE, workDay: TRUE },
|
30: { ref: 'D4-15-2', name: '造价数据测试验证(概算)', maxCoe: null, minCoe: null, defCoe: 0.08, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 31, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
||||||
31: { ref: 'D4-15-3', name: '造价数据测试验证(施工图预算)', maxCoe: null, minCoe: null, defCoe: 0.1, desc: '委托同一咨询人同时负责D3-3和D3-4时,D3-3和D3-4的合计调整系数为0.3。', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 32, scale: FALSE, onlyCostScale: null, amount: FALSE, workDay: TRUE },
|
31: { ref: 'D4-15-3', name: '造价数据测试验证(施工图预算)', maxCoe: null, minCoe: null, defCoe: 0.1, desc: '委托同一咨询人同时负责D3-3和D3-4时,D3-3和D3-4的合计调整系数为0.3。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 32, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
||||||
32: { ref: 'D4-15-4', name: '造价数据测试验证(招标工程量清单及清单预算(或最高投标限价))', maxCoe: null, minCoe: null, defCoe: 0.06, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 33, scale: FALSE, onlyCostScale: null, amount: FALSE, workDay: TRUE },
|
32: { ref: 'D4-15-4', name: '造价数据测试验证(招标工程量清单及清单预算(或最高投标限价))', maxCoe: null, minCoe: null, defCoe: 0.06, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 33, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
||||||
33: { ref: 'D4-15-5', name: '造价数据测试验证(清理概算(仅限铁路))', maxCoe: null, minCoe: null, defCoe: 0.08, desc: '本系数适用于铁路工程。', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 34, scale: FALSE, onlyCostScale: null, amount: FALSE, workDay: TRUE },
|
33: { ref: 'D4-15-5', name: '造价数据测试验证(清理概算(仅限铁路))', maxCoe: null, minCoe: null, defCoe: 0.08, desc: '本系数适用于铁路工程。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 34, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
||||||
34: { ref: 'D4-15-6', name: '造价数据测试验证(合同(工程)结算)', maxCoe: null, minCoe: null, defCoe: 0.12, desc: '本系数适用于公路和水运工程。', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 35, scale: FALSE, onlyCostScale: null, amount: FALSE, workDay: TRUE },
|
34: { ref: 'D4-15-6', name: '造价数据测试验证(合同(工程)结算)', maxCoe: null, minCoe: null, defCoe: 0.12, desc: '本系数适用于公路和水运工程。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 35, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
||||||
35: { ref: 'D4-15-7', name: '造价数据测试验证(合同(工程)结算)', maxCoe: null, minCoe: null, defCoe: 0.08, desc: '本系数适用于铁路工程。', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 36, scale: FALSE, onlyCostScale: null, amount: FALSE, workDay: TRUE },
|
35: { ref: 'D4-15-7', name: '造价数据测试验证(合同(工程)结算)', maxCoe: null, minCoe: null, defCoe: 0.08, desc: '本系数适用于铁路工程。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 36, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
||||||
36: { ref: 'D4-15-8', name: '造价数据测试验证(竣工决算)', maxCoe: null, minCoe: null, defCoe: 0.04, desc: '', isRoad: TRUE, isRailway: TRUE, isWaterway: TRUE, mutiple: FALSE, order: 37, scale: FALSE, onlyCostScale: null, amount: FALSE, workDay: TRUE },
|
36: { ref: 'D4-15-8', name: '造价数据测试验证(竣工决算)', maxCoe: null, minCoe: null, defCoe: 0.04, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 37, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
||||||
};
|
};
|
||||||
|
|
||||||
let taskList = {
|
let taskList = {
|
||||||
0: { serviceID: 15, ref: 'C4-1', name: '工程造价日常顾问', basicParam: '服务月份数', required: TRUE, unit: '万元/月', conversion: 10000, maxPrice: 0.5, minPrice: 0.3, defPrice: 0.4, desc: '' },
|
0: { serviceID: 15, ref: 'C4-1', name: '工程造价日常顾问', basicParam: '服务月份数', required: true, unit: '万元/月', conversion: 10000, maxPrice: 0.5, minPrice: 0.3, defPrice: 0.4, desc: '' },
|
||||||
1: { serviceID: 15, ref: 'C4-2', name: '工程造价专项顾问', basicParam: '服务项目的造价金额', required: TRUE, unit: '%', conversion: 0.01, maxPrice: null, minPrice: null, defPrice: 0.01, desc: '适用于涉及造价费用类的顾问' },
|
1: { serviceID: 15, ref: 'C4-2', name: '工程造价专项顾问', basicParam: '服务项目的造价金额', required: true, unit: '%', conversion: 0.01, maxPrice: null, minPrice: null, defPrice: 0.01, desc: '适用于涉及造价费用类的顾问' },
|
||||||
2: { serviceID: 16, ref: 'C5-1', name: '组织与调研工作', basicParam: '调研次数', required: TRUE, unit: '万元/次', conversion: 10000, maxPrice: 2, minPrice: 1, defPrice: 1.5, desc: '' },
|
2: { serviceID: 16, ref: 'C5-1', name: '组织与调研工作', basicParam: '调研次数', required: true, unit: '万元/次', conversion: 10000, maxPrice: 2, minPrice: 1, defPrice: 1.5, desc: '' },
|
||||||
3: { serviceID: 16, ref: 'C5-2-1', name: '文件编写工作', basicParam: '文件份数', required: TRUE, unit: '万元/份', conversion: 10000, maxPrice: 5, minPrice: 3, defPrice: 4, desc: '主编' },
|
3: { serviceID: 16, ref: 'C5-2-1', name: '文件编写工作', basicParam: '文件份数', required: true, unit: '万元/份', conversion: 10000, maxPrice: 5, minPrice: 3, defPrice: 4, desc: '主编' },
|
||||||
4: { serviceID: 16, ref: 'C5-2-2', name: '文件编写工作', basicParam: '文件份数', required: TRUE, unit: '万元/份', conversion: 10000, maxPrice: 3, minPrice: 1, defPrice: 2, desc: '参编' },
|
4: { serviceID: 16, ref: 'C5-2-2', name: '文件编写工作', basicParam: '文件份数', required: true, unit: '万元/份', conversion: 10000, maxPrice: 3, minPrice: 1, defPrice: 2, desc: '参编' },
|
||||||
5: { serviceID: 16, ref: 'C5-3-1', name: '评审工作', basicParam: '评审次数', required: FALSE, unit: '万元/次', conversion: 10000, maxPrice: 20, minPrice: 8, defPrice: 14, desc: '大型评审' },
|
5: { serviceID: 16, ref: 'C5-3-1', name: '评审工作', basicParam: '评审次数', required: false, unit: '万元/次', conversion: 10000, maxPrice: 20, minPrice: 8, defPrice: 14, desc: '大型评审' },
|
||||||
6: { serviceID: 16, ref: 'C5-3-2', name: '评审工作', basicParam: '评审次数', required: FALSE, unit: '万元/次', conversion: 10000, maxPrice: 10, minPrice: 5, defPrice: 7.5, desc: '中型评审' },
|
6: { serviceID: 16, ref: 'C5-3-2', name: '评审工作', basicParam: '评审次数', required: false, unit: '万元/次', conversion: 10000, maxPrice: 10, minPrice: 5, defPrice: 7.5, desc: '中型评审' },
|
||||||
7: { serviceID: 16, ref: 'C5-3-3', name: '评审工作', basicParam: '评审次数', required: FALSE, unit: '万元/次', conversion: 10000, maxPrice: 6, minPrice: 3, defPrice: 4.5, desc: '小型评审' },
|
7: { serviceID: 16, ref: 'C5-3-3', name: '评审工作', basicParam: '评审次数', required: false, unit: '万元/次', conversion: 10000, maxPrice: 6, minPrice: 3, defPrice: 4.5, desc: '小型评审' },
|
||||||
8: { serviceID: 17, ref: 'C6-1', name: '组织与调研工作', basicParam: '调研次数', required: TRUE, unit: '万元/次', conversion: 10000, maxPrice: 2, minPrice: 1, defPrice: 1.5, desc: '' },
|
8: { serviceID: 17, ref: 'C6-1', name: '组织与调研工作', basicParam: '调研次数', required: true, unit: '万元/次', conversion: 10000, maxPrice: 2, minPrice: 1, defPrice: 1.5, desc: '' },
|
||||||
9: { serviceID: 17, ref: 'C6-2-1', name: '研究及编写报告', basicParam: '文件份数', required: TRUE, unit: '万元/份', conversion: 10000, maxPrice: 50, minPrice: 20, defPrice: 35, desc: '国家级' },
|
9: { serviceID: 17, ref: 'C6-2-1', name: '研究及编写报告', basicParam: '文件份数', required: true, unit: '万元/份', conversion: 10000, maxPrice: 50, minPrice: 20, defPrice: 35, desc: '国家级' },
|
||||||
10: { serviceID: 17, ref: 'C6-2-2', name: '研究及编写报告', basicParam: '文件份数', required: TRUE, unit: '万元/份', conversion: 10000, maxPrice: 20, minPrice: 10, defPrice: 15, desc: '省部级' },
|
10: { serviceID: 17, ref: 'C6-2-2', name: '研究及编写报告', basicParam: '文件份数', required: true, unit: '万元/份', conversion: 10000, maxPrice: 20, minPrice: 10, defPrice: 15, desc: '省部级' },
|
||||||
11: { serviceID: 17, ref: 'C6-2-3', name: '研究及编写报告', basicParam: '文件份数', required: TRUE, unit: '万元/份', conversion: 10000, maxPrice: 10, minPrice: 5, defPrice: 7.5, desc: '其他级' },
|
11: { serviceID: 17, ref: 'C6-2-3', name: '研究及编写报告', basicParam: '文件份数', required: true, unit: '万元/份', conversion: 10000, maxPrice: 10, minPrice: 5, defPrice: 7.5, desc: '其他级' },
|
||||||
12: { serviceID: 17, ref: 'C6-3-1', name: '标准与技术性指导文件的编制', basicParam: '文件与标准的数量', required: TRUE, unit: '万元/份', conversion: 10000, maxPrice: 80, minPrice: 50, defPrice: 65, desc: '复杂标准' },
|
12: { serviceID: 17, ref: 'C6-3-1', name: '标准与技术性指导文件的编制', basicParam: '文件与标准的数量', required: true, unit: '万元/份', conversion: 10000, maxPrice: 80, minPrice: 50, defPrice: 65, desc: '复杂标准' },
|
||||||
13: { serviceID: 17, ref: 'C6-3-2', name: '标准与技术性指导文件的编制', basicParam: '文件与标准的数量', required: TRUE, unit: '万元/份', conversion: 10000, maxPrice: 50, minPrice: 20, defPrice: 35, desc: '较复杂标准' },
|
13: { serviceID: 17, ref: 'C6-3-2', name: '标准与技术性指导文件的编制', basicParam: '文件与标准的数量', required: true, unit: '万元/份', conversion: 10000, maxPrice: 50, minPrice: 20, defPrice: 35, desc: '较复杂标准' },
|
||||||
14: { serviceID: 17, ref: 'C6-3-3', name: '标准与技术性指导文件的编制', basicParam: '文件与标准的数量', required: TRUE, unit: '万元/份', conversion: 10000, maxPrice: 20, minPrice: 10, defPrice: 15, desc: '一般标准' },
|
14: { serviceID: 17, ref: 'C6-3-3', name: '标准与技术性指导文件的编制', basicParam: '文件与标准的数量', required: true, unit: '万元/份', conversion: 10000, maxPrice: 20, minPrice: 10, defPrice: 15, desc: '一般标准' },
|
||||||
15: { serviceID: 17, ref: 'C6-3-4', name: '标准与技术性指导文件的编制', basicParam: '文件与标准的数量', required: TRUE, unit: '万元/份', conversion: 10000, maxPrice: 10, minPrice: 5, defPrice: 7.5, desc: '简单标准' },
|
15: { serviceID: 17, ref: 'C6-3-4', name: '标准与技术性指导文件的编制', basicParam: '文件与标准的数量', required: true, unit: '万元/份', conversion: 10000, maxPrice: 10, minPrice: 5, defPrice: 7.5, desc: '简单标准' },
|
||||||
16: { serviceID: 17, ref: 'C6-4-1', name: '评审与验收工作', basicParam: '评审与验收次数', required: FALSE, unit: '万元/次', conversion: 10000, maxPrice: 20, minPrice: 8, defPrice: 14, desc: '大型评审' },
|
16: { serviceID: 17, ref: 'C6-4-1', name: '评审与验收工作', basicParam: '评审与验收次数', required: false, unit: '万元/次', conversion: 10000, maxPrice: 20, minPrice: 8, defPrice: 14, desc: '大型评审' },
|
||||||
17: { serviceID: 17, ref: 'C6-4-2', name: '评审与验收工作', basicParam: '评审与验收次数', required: FALSE, unit: '万元/次', conversion: 10000, maxPrice: 10, minPrice: 5, defPrice: 7.5, desc: '中型评审' },
|
17: { serviceID: 17, ref: 'C6-4-2', name: '评审与验收工作', basicParam: '评审与验收次数', required: false, unit: '万元/次', conversion: 10000, maxPrice: 10, minPrice: 5, defPrice: 7.5, desc: '中型评审' },
|
||||||
18: { serviceID: 17, ref: 'C6-4-3', name: '评审与验收工作', basicParam: '评审与验收次数', required: FALSE, unit: '万元/次', conversion: 10000, maxPrice: 6, minPrice: 3, defPrice: 4.5, desc: '小型评审' },
|
18: { serviceID: 17, ref: 'C6-4-3', name: '评审与验收工作', basicParam: '评审与验收次数', required: false, unit: '万元/次', conversion: 10000, maxPrice: 6, minPrice: 3, defPrice: 4.5, desc: '小型评审' },
|
||||||
19: { serviceID: 17, ref: 'C6-5-1', name: '培训与宣贯工作', basicParam: '项目数量', required: FALSE, unit: '万元/次', conversion: 10000, maxPrice: 3, minPrice: 1, defPrice: 2, desc: '培训与宣贯材料' },
|
19: { serviceID: 17, ref: 'C6-5-1', name: '培训与宣贯工作', basicParam: '项目数量', required: false, unit: '万元/次', conversion: 10000, maxPrice: 3, minPrice: 1, defPrice: 2, desc: '培训与宣贯材料' },
|
||||||
20: { serviceID: 17, ref: 'C6-5-2', name: '培训与宣贯工作', basicParam: '培训与宣贯次数', required: FALSE, unit: '万元/次', conversion: 10000, maxPrice: 1, minPrice: 0.5, defPrice: 0.75, desc: '组织培训与宣贯' },
|
20: { serviceID: 17, ref: 'C6-5-2', name: '培训与宣贯工作', basicParam: '培训与宣贯次数', required: false, unit: '万元/次', conversion: 10000, maxPrice: 1, minPrice: 0.5, defPrice: 0.75, desc: '组织培训与宣贯' },
|
||||||
21: { serviceID: 18, ref: 'C7-1', name: '组织与调研工作', basicParam: '调研次数', required: TRUE, unit: '万元/次', conversion: 10000, maxPrice: 2, minPrice: 1, defPrice: 1.5, desc: '' },
|
21: { serviceID: 18, ref: 'C7-1', name: '组织与调研工作', basicParam: '调研次数', required: true, unit: '万元/次', conversion: 10000, maxPrice: 2, minPrice: 1, defPrice: 1.5, desc: '' },
|
||||||
22: { serviceID: 18, ref: 'C7-2', name: '编制大纲', basicParam: '项目数量', required: TRUE, unit: '万元/个', conversion: 10000, maxPrice: 3, minPrice: 2, defPrice: 2.5, desc: '包括技术与定额子目研究' },
|
22: { serviceID: 18, ref: 'C7-2', name: '编制大纲', basicParam: '项目数量', required: true, unit: '万元/个', conversion: 10000, maxPrice: 3, minPrice: 2, defPrice: 2.5, desc: '包括技术与定额子目研究' },
|
||||||
23: { serviceID: 18, ref: 'C7-3', name: '数据采集与测定', basicParam: '采集组数', required: TRUE, unit: '万元/组', conversion: 10000, maxPrice: 0.8, minPrice: 0.2, defPrice: 0.5, desc: '现场采集方式时计' },
|
23: { serviceID: 18, ref: 'C7-3', name: '数据采集与测定', basicParam: '采集组数', required: true, unit: '万元/组', conversion: 10000, maxPrice: 0.8, minPrice: 0.2, defPrice: 0.5, desc: '现场采集方式时计' },
|
||||||
24: { serviceID: 18, ref: 'C7-4-1', name: '数据整理与分析', basicParam: '定额子目条数', required: TRUE, unit: '万元/条', conversion: 10000, maxPrice: 0.3, minPrice: 0.1, defPrice: 0.2, desc: '简单定额' },
|
24: { serviceID: 18, ref: 'C7-4-1', name: '数据整理与分析', basicParam: '定额子目条数', required: true, unit: '万元/条', conversion: 10000, maxPrice: 0.3, minPrice: 0.1, defPrice: 0.2, desc: '简单定额' },
|
||||||
25: { serviceID: 18, ref: 'C7-4-2', name: '数据整理与分析', basicParam: '定额子目条数', required: TRUE, unit: '万元/条', conversion: 10000, maxPrice: 3, minPrice: 0.3, defPrice: 1.65, desc: '复杂定额' },
|
25: { serviceID: 18, ref: 'C7-4-2', name: '数据整理与分析', basicParam: '定额子目条数', required: true, unit: '万元/条', conversion: 10000, maxPrice: 3, minPrice: 0.3, defPrice: 1.65, desc: '复杂定额' },
|
||||||
26: { serviceID: 18, ref: 'C7-5', name: '编写定额测定报告', basicParam: '项目数量', required: TRUE, unit: '万元/份', conversion: 10000, maxPrice: 5, minPrice: 2, defPrice: 3.5, desc: '' },
|
26: { serviceID: 18, ref: 'C7-5', name: '编写定额测定报告', basicParam: '项目数量', required: true, unit: '万元/份', conversion: 10000, maxPrice: 5, minPrice: 2, defPrice: 3.5, desc: '' },
|
||||||
27: { serviceID: 18, ref: 'C7-6-1', name: '编制定额文本和释义', basicParam: '基本费用', required: TRUE, unit: '万元/份', conversion: 10000, maxPrice: 1, minPrice: 0.5, defPrice: 0.75, desc: '20条定额子目内' },
|
27: { serviceID: 18, ref: 'C7-6-1', name: '编制定额文本和释义', basicParam: '基本费用', required: true, unit: '万元/份', conversion: 10000, maxPrice: 1, minPrice: 0.5, defPrice: 0.75, desc: '20条定额子目内' },
|
||||||
28: { serviceID: 18, ref: 'C7-6-2', name: '编制定额文本和释义', basicParam: '定额子目条数', required: TRUE, unit: '万元/条', conversion: 10000, maxPrice: 0.2, minPrice: 0.1, defPrice: 0.15, desc: '超过20条每增加1条' },
|
28: { serviceID: 18, ref: 'C7-6-2', name: '编制定额文本和释义', basicParam: '定额子目条数', required: true, unit: '万元/条', conversion: 10000, maxPrice: 0.2, minPrice: 0.1, defPrice: 0.15, desc: '超过20条每增加1条' },
|
||||||
29: { serviceID: 18, ref: 'C7-7-1', name: '评审与验收工作', basicParam: '评审与验收次数', required: FALSE, unit: '万元/次', conversion: 10000, maxPrice: 20, minPrice: 8, defPrice: 14, desc: '大型评审' },
|
29: { serviceID: 18, ref: 'C7-7-1', name: '评审与验收工作', basicParam: '评审与验收次数', required: false, unit: '万元/次', conversion: 10000, maxPrice: 20, minPrice: 8, defPrice: 14, desc: '大型评审' },
|
||||||
30: { serviceID: 18, ref: 'C7-7-2', name: '评审与验收工作', basicParam: '评审与验收次数', required: FALSE, unit: '万元/次', conversion: 10000, maxPrice: 10, minPrice: 5, defPrice: 7.5, desc: '中型评审' },
|
30: { serviceID: 18, ref: 'C7-7-2', name: '评审与验收工作', basicParam: '评审与验收次数', required: false, unit: '万元/次', conversion: 10000, maxPrice: 10, minPrice: 5, defPrice: 7.5, desc: '中型评审' },
|
||||||
31: { serviceID: 18, ref: 'C7-7-3', name: '评审与验收工作', basicParam: '评审与验收次数', required: FALSE, unit: '万元/次', conversion: 10000, maxPrice: 6, minPrice: 3, defPrice: 4.5, desc: '小型评审' },
|
31: { serviceID: 18, ref: 'C7-7-3', name: '评审与验收工作', basicParam: '评审与验收次数', required: false, unit: '万元/次', conversion: 10000, maxPrice: 6, minPrice: 3, defPrice: 4.5, desc: '小型评审' },
|
||||||
32: { serviceID: 18, ref: 'C7-8-1', name: '培训与宣贯工作', basicParam: '项目数量', required: FALSE, unit: '万元/次', conversion: 10000, maxPrice: 3, minPrice: 1, defPrice: 2, desc: '培训与宣贯材料' },
|
32: { serviceID: 18, ref: 'C7-8-1', name: '培训与宣贯工作', basicParam: '项目数量', required: false, unit: '万元/次', conversion: 10000, maxPrice: 3, minPrice: 1, defPrice: 2, desc: '培训与宣贯材料' },
|
||||||
33: { serviceID: 18, ref: 'C7-8-2', name: '培训与宣贯工作', basicParam: '培训与宣贯次数', required: FALSE, unit: '万元/次', conversion: 10000, maxPrice: 1, minPrice: 0.5, defPrice: 0.75, desc: '组织培训与宣贯' },
|
33: { serviceID: 18, ref: 'C7-8-2', name: '培训与宣贯工作', basicParam: '培训与宣贯次数', required: false, unit: '万元/次', conversion: 10000, maxPrice: 1, minPrice: 0.5, defPrice: 0.75, desc: '组织培训与宣贯' },
|
||||||
34: { serviceID: 19, ref: 'C8-1', name: 'Q≤10条', basicParam: '价格信息数量', required: TRUE, unit: '元/条', conversion: 1, maxPrice: null, minPrice: null, defPrice: 500, desc: '' },
|
34: { serviceID: 19, ref: 'C8-1', name: 'Q≤10条', basicParam: '价格信息数量', required: true, unit: '元/条', conversion: 1, maxPrice: null, minPrice: null, defPrice: 500, desc: '' },
|
||||||
35: { serviceID: 19, ref: 'C8-2', name: '10条<Q≤30条', basicParam: '价格信息数量', required: TRUE, unit: '元/条', conversion: 1, maxPrice: null, minPrice: null, defPrice: 400, desc: '' },
|
35: { serviceID: 19, ref: 'C8-2', name: '10条<Q≤30条', basicParam: '价格信息数量', required: true, unit: '元/条', conversion: 1, maxPrice: null, minPrice: null, defPrice: 400, desc: '' },
|
||||||
36: { serviceID: 19, ref: 'C8-3', name: '30条<Q≤50条', basicParam: '价格信息数量', required: TRUE, unit: '元/条', conversion: 1, maxPrice: null, minPrice: null, defPrice: 300, desc: '' },
|
36: { serviceID: 19, ref: 'C8-3', name: '30条<Q≤50条', basicParam: '价格信息数量', required: true, unit: '元/条', conversion: 1, maxPrice: null, minPrice: null, defPrice: 300, desc: '' },
|
||||||
37: { serviceID: 19, ref: 'C8-4', name: '50条<Q≤100条', basicParam: '价格信息数量', required: TRUE, unit: '元/条', conversion: 1, maxPrice: null, minPrice: null, defPrice: 200, desc: '' },
|
37: { serviceID: 19, ref: 'C8-4', name: '50条<Q≤100条', basicParam: '价格信息数量', required: true, unit: '元/条', conversion: 1, maxPrice: null, minPrice: null, defPrice: 200, desc: '' },
|
||||||
38: { serviceID: 19, ref: 'C8-5', name: 'Q>100条', basicParam: '价格信息数量', required: TRUE, unit: '元/条', conversion: 1, maxPrice: null, minPrice: null, defPrice: 100, desc: '' },
|
38: { serviceID: 19, ref: 'C8-5', name: 'Q>100条', basicParam: '价格信息数量', required: true, unit: '元/条', conversion: 1, maxPrice: null, minPrice: null, defPrice: 100, desc: '' },
|
||||||
};
|
};
|
||||||
|
|
||||||
let expertList = {
|
let expertList = {
|
||||||
|
|||||||
@ -21,6 +21,10 @@ import {
|
|||||||
AlertDialogOverlay,
|
AlertDialogOverlay,
|
||||||
AlertDialogPortal,
|
AlertDialogPortal,
|
||||||
AlertDialogRoot,
|
AlertDialogRoot,
|
||||||
|
NumberFieldDecrement,
|
||||||
|
NumberFieldIncrement,
|
||||||
|
NumberFieldInput,
|
||||||
|
NumberFieldRoot,
|
||||||
AlertDialogTitle,
|
AlertDialogTitle,
|
||||||
AlertDialogTrigger,
|
AlertDialogTrigger,
|
||||||
} from 'reka-ui'
|
} from 'reka-ui'
|
||||||
@ -57,8 +61,8 @@ interface DetailRow {
|
|||||||
benchmarkBudgetOptional: number | null
|
benchmarkBudgetOptional: number | null
|
||||||
benchmarkBudgetBasicChecked: boolean
|
benchmarkBudgetBasicChecked: boolean
|
||||||
benchmarkBudgetOptionalChecked: boolean
|
benchmarkBudgetOptionalChecked: boolean
|
||||||
basicFormula: string
|
basicFormula: string |null
|
||||||
optionalFormula: string
|
optionalFormula: string |null
|
||||||
consultCategoryFactor: number | null
|
consultCategoryFactor: number | null
|
||||||
majorFactor: number | null
|
majorFactor: number | null
|
||||||
workStageFactor: number | null
|
workStageFactor: number | null
|
||||||
@ -79,6 +83,7 @@ interface XmBaseInfoState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface ServiceLite {
|
interface ServiceLite {
|
||||||
|
mutiple?: boolean | null
|
||||||
onlyCostScale?: boolean | null
|
onlyCostScale?: boolean | null
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,6 +120,11 @@ const isOnlyCostScaleService = computed(() => {
|
|||||||
const service = getServiceDictItemById(props.serviceId) as ServiceLite | undefined
|
const service = getServiceDictItemById(props.serviceId) as ServiceLite | undefined
|
||||||
return service?.onlyCostScale === true
|
return service?.onlyCostScale === true
|
||||||
})
|
})
|
||||||
|
const isMutipleService = computed(() => {
|
||||||
|
const service = getServiceDictItemById(props.serviceId) as ServiceLite | undefined
|
||||||
|
return service?.mutiple === true
|
||||||
|
})
|
||||||
|
const projectCount = ref<number>(1)
|
||||||
const totalLabel = computed(() => {
|
const totalLabel = computed(() => {
|
||||||
const industryName = industryNameMap.get(activeIndustryCode.value.trim()) || ''
|
const industryName = industryNameMap.get(activeIndustryCode.value.trim()) || ''
|
||||||
return industryName ? `${industryName}总投资` : '总投资'
|
return industryName ? `${industryName}总投资` : '总投资'
|
||||||
@ -896,8 +906,10 @@ const syncComputedValuesToDetailRows = () => {
|
|||||||
row.benchmarkBudget = benchmarkBudgetSplit?.total ?? null
|
row.benchmarkBudget = benchmarkBudgetSplit?.total ?? null
|
||||||
row.benchmarkBudgetBasic = benchmarkBudgetSplit?.basic ?? null
|
row.benchmarkBudgetBasic = benchmarkBudgetSplit?.basic ?? null
|
||||||
row.benchmarkBudgetOptional = benchmarkBudgetSplit?.optional ?? null
|
row.benchmarkBudgetOptional = benchmarkBudgetSplit?.optional ?? null
|
||||||
row.basicFormula = benchmarkBudgetRawSplit?.basicFormula ?? ''
|
row.basicFormula =
|
||||||
row.optionalFormula = benchmarkBudgetRawSplit?.optionalFormula ?? ''
|
row.benchmarkBudgetBasicChecked === false ? null : (benchmarkBudgetRawSplit?.basicFormula ?? '')
|
||||||
|
row.optionalFormula =
|
||||||
|
row.benchmarkBudgetOptionalChecked === false ? null : (benchmarkBudgetRawSplit?.optionalFormula ?? '')
|
||||||
row.budgetFee = budgetFeeSplit?.total ?? null
|
row.budgetFee = budgetFeeSplit?.total ?? null
|
||||||
row.budgetFeeBasic = budgetFeeSplit?.basic ?? null
|
row.budgetFeeBasic = budgetFeeSplit?.basic ?? null
|
||||||
row.budgetFeeOptional = budgetFeeSplit?.optional ?? null
|
row.budgetFeeOptional = budgetFeeSplit?.optional ?? null
|
||||||
@ -1096,7 +1108,17 @@ const processCellFromClipboard = (params: any) => {
|
|||||||
|
|
||||||
<div class="rounded-lg border bg-card xmMx flex min-h-0 flex-1 flex-col">
|
<div class="rounded-lg border bg-card xmMx flex min-h-0 flex-1 flex-col">
|
||||||
<div class="flex items-center justify-between border-b px-4 py-3">
|
<div class="flex items-center justify-between border-b px-4 py-3">
|
||||||
<h3 class="text-sm font-semibold text-foreground">投资规模明细</h3>
|
<div class="flex items-center gap-3">
|
||||||
|
<h3 class="text-sm font-semibold text-foreground">投资规模明细</h3>
|
||||||
|
<div v-if="isMutipleService" class="flex items-center gap-2">
|
||||||
|
<span class="text-xs text-muted-foreground">项目数量</span>
|
||||||
|
<NumberFieldRoot v-model="projectCount" :min="1" :step="1" class="inline-flex items-center rounded-md border bg-background">
|
||||||
|
<NumberFieldDecrement class="px-2 py-1 text-xs text-muted-foreground hover:bg-muted">-</NumberFieldDecrement>
|
||||||
|
<NumberFieldInput class="h-7 w-14 border-x bg-transparent px-2 text-center text-xs outline-none" />
|
||||||
|
<NumberFieldIncrement class="px-2 py-1 text-xs text-muted-foreground hover:bg-muted">+</NumberFieldIncrement>
|
||||||
|
</NumberFieldRoot>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<AlertDialogRoot>
|
<AlertDialogRoot>
|
||||||
<AlertDialogTrigger as-child>
|
<AlertDialogTrigger as-child>
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import { computed, onActivated, onBeforeUnmount, onMounted, ref, watch } from 'v
|
|||||||
import { AgGridVue } from 'ag-grid-vue3'
|
import { AgGridVue } from 'ag-grid-vue3'
|
||||||
import type { ColDef, ColGroupDef } from 'ag-grid-community'
|
import type { ColDef, ColGroupDef } from 'ag-grid-community'
|
||||||
import localforage from 'localforage'
|
import localforage from 'localforage'
|
||||||
import { getMajorDictEntries, industryTypeList, isMajorIdInIndustryScope } from '@/sql'
|
import { getMajorDictEntries, getServiceDictItemById, industryTypeList, isMajorIdInIndustryScope } from '@/sql'
|
||||||
import { myTheme, gridOptions } from '@/lib/diyAgGridOptions'
|
import { myTheme, gridOptions } from '@/lib/diyAgGridOptions'
|
||||||
import { addNumbers, decimalAggSum, roundTo, sumByNumber } from '@/lib/decimal'
|
import { addNumbers, decimalAggSum, roundTo, sumByNumber } from '@/lib/decimal'
|
||||||
import { formatThousandsFlexible } from '@/lib/numberFormat'
|
import { formatThousandsFlexible } from '@/lib/numberFormat'
|
||||||
@ -21,6 +21,10 @@ import {
|
|||||||
AlertDialogOverlay,
|
AlertDialogOverlay,
|
||||||
AlertDialogPortal,
|
AlertDialogPortal,
|
||||||
AlertDialogRoot,
|
AlertDialogRoot,
|
||||||
|
NumberFieldDecrement,
|
||||||
|
NumberFieldIncrement,
|
||||||
|
NumberFieldInput,
|
||||||
|
NumberFieldRoot,
|
||||||
AlertDialogTitle,
|
AlertDialogTitle,
|
||||||
AlertDialogTrigger,
|
AlertDialogTrigger,
|
||||||
} from 'reka-ui'
|
} from 'reka-ui'
|
||||||
@ -58,8 +62,8 @@ interface DetailRow {
|
|||||||
benchmarkBudgetOptional: number | null
|
benchmarkBudgetOptional: number | null
|
||||||
benchmarkBudgetBasicChecked: boolean
|
benchmarkBudgetBasicChecked: boolean
|
||||||
benchmarkBudgetOptionalChecked: boolean
|
benchmarkBudgetOptionalChecked: boolean
|
||||||
basicFormula: string
|
basicFormula: string | null
|
||||||
optionalFormula: string
|
optionalFormula: string | null
|
||||||
consultCategoryFactor: number | null
|
consultCategoryFactor: number | null
|
||||||
majorFactor: number | null
|
majorFactor: number | null
|
||||||
workStageFactor: number | null
|
workStageFactor: number | null
|
||||||
@ -79,6 +83,10 @@ interface XmBaseInfoState {
|
|||||||
projectIndustry?: string
|
projectIndustry?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface ServiceLite {
|
||||||
|
mutiple?: boolean | null
|
||||||
|
}
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
contractId: string,
|
contractId: string,
|
||||||
serviceId: string | number
|
serviceId: string | number
|
||||||
@ -106,6 +114,11 @@ const totalLabel = computed(() => {
|
|||||||
const industryName = industryNameMap.get(activeIndustryCode.value.trim()) || ''
|
const industryName = industryNameMap.get(activeIndustryCode.value.trim()) || ''
|
||||||
return industryName ? `${industryName}总投资` : '总投资'
|
return industryName ? `${industryName}总投资` : '总投资'
|
||||||
})
|
})
|
||||||
|
const isMutipleService = computed(() => {
|
||||||
|
const service = getServiceDictItemById(props.serviceId) as ServiceLite | undefined
|
||||||
|
return service?.mutiple === true
|
||||||
|
})
|
||||||
|
const projectCount = ref<number>(1)
|
||||||
|
|
||||||
const detailRows = ref<DetailRow[]>([])
|
const detailRows = ref<DetailRow[]>([])
|
||||||
const getDefaultConsultCategoryFactor = () =>
|
const getDefaultConsultCategoryFactor = () =>
|
||||||
@ -732,20 +745,22 @@ const syncComputedValuesToDetailRows = () => {
|
|||||||
const benchmarkBudgetSplit = getCheckedBenchmarkBudgetSplitByLandArea(row)
|
const benchmarkBudgetSplit = getCheckedBenchmarkBudgetSplitByLandArea(row)
|
||||||
const budgetFeeSplit = benchmarkBudgetSplit
|
const budgetFeeSplit = benchmarkBudgetSplit
|
||||||
? getScaleBudgetFeeSplit({
|
? getScaleBudgetFeeSplit({
|
||||||
benchmarkBudgetBasic: benchmarkBudgetSplit.basic,
|
benchmarkBudgetBasic: benchmarkBudgetSplit.basic,
|
||||||
benchmarkBudgetOptional: benchmarkBudgetSplit.optional,
|
benchmarkBudgetOptional: benchmarkBudgetSplit.optional,
|
||||||
majorFactor: row.majorFactor,
|
majorFactor: row.majorFactor,
|
||||||
consultCategoryFactor: row.consultCategoryFactor,
|
consultCategoryFactor: row.consultCategoryFactor,
|
||||||
workStageFactor: row.workStageFactor,
|
workStageFactor: row.workStageFactor,
|
||||||
workRatio: row.workRatio
|
workRatio: row.workRatio
|
||||||
})
|
})
|
||||||
: null
|
: null
|
||||||
|
|
||||||
row.benchmarkBudget = benchmarkBudgetSplit?.total ?? null
|
row.benchmarkBudget = benchmarkBudgetSplit?.total ?? null
|
||||||
row.benchmarkBudgetBasic = benchmarkBudgetSplit?.basic ?? null
|
row.benchmarkBudgetBasic = benchmarkBudgetSplit?.basic ?? null
|
||||||
row.benchmarkBudgetOptional = benchmarkBudgetSplit?.optional ?? null
|
row.benchmarkBudgetOptional = benchmarkBudgetSplit?.optional ?? null
|
||||||
row.basicFormula = benchmarkBudgetRawSplit?.basicFormula ?? ''
|
row.basicFormula =
|
||||||
row.optionalFormula = benchmarkBudgetRawSplit?.optionalFormula ?? ''
|
row.benchmarkBudgetBasicChecked === false ? null : (benchmarkBudgetRawSplit?.basicFormula ?? '')
|
||||||
|
row.optionalFormula =
|
||||||
|
row.benchmarkBudgetOptionalChecked === false ? null : (benchmarkBudgetRawSplit?.optionalFormula ?? '')
|
||||||
row.budgetFee = budgetFeeSplit?.total ?? null
|
row.budgetFee = budgetFeeSplit?.total ?? null
|
||||||
row.budgetFeeBasic = budgetFeeSplit?.basic ?? null
|
row.budgetFeeBasic = budgetFeeSplit?.basic ?? null
|
||||||
row.budgetFeeOptional = budgetFeeSplit?.optional ?? null
|
row.budgetFeeOptional = budgetFeeSplit?.optional ?? null
|
||||||
@ -792,10 +807,10 @@ const loadFromIndexedDB = async () => {
|
|||||||
detailRows.value = hasContractRows
|
detailRows.value = hasContractRows
|
||||||
? mergeWithDictRows(htData!.detailRows, { includeFactorValues: true })
|
? mergeWithDictRows(htData!.detailRows, { includeFactorValues: true })
|
||||||
: buildDefaultRows().map(row => ({
|
: buildDefaultRows().map(row => ({
|
||||||
...row,
|
...row,
|
||||||
consultCategoryFactor: getDefaultConsultCategoryFactor(),
|
consultCategoryFactor: getDefaultConsultCategoryFactor(),
|
||||||
majorFactor: getDefaultMajorFactorById(row.id)
|
majorFactor: getDefaultMajorFactorById(row.id)
|
||||||
}))
|
}))
|
||||||
syncComputedValuesToDetailRows()
|
syncComputedValuesToDetailRows()
|
||||||
}
|
}
|
||||||
if (shouldForceDefaultLoad()) {
|
if (shouldForceDefaultLoad()) {
|
||||||
@ -831,10 +846,10 @@ const importContractData = async () => {
|
|||||||
detailRows.value = hasContractRows
|
detailRows.value = hasContractRows
|
||||||
? mergeWithDictRows(htData!.detailRows, { includeFactorValues: true })
|
? mergeWithDictRows(htData!.detailRows, { includeFactorValues: true })
|
||||||
: buildDefaultRows().map(row => ({
|
: buildDefaultRows().map(row => ({
|
||||||
...row,
|
...row,
|
||||||
consultCategoryFactor: getDefaultConsultCategoryFactor(),
|
consultCategoryFactor: getDefaultConsultCategoryFactor(),
|
||||||
majorFactor: getDefaultMajorFactorById(row.id)
|
majorFactor: getDefaultMajorFactorById(row.id)
|
||||||
}))
|
}))
|
||||||
await saveToIndexedDB()
|
await saveToIndexedDB()
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('importContractData failed:', error)
|
console.error('importContractData failed:', error)
|
||||||
@ -911,7 +926,17 @@ const processCellFromClipboard = (params: any) => {
|
|||||||
|
|
||||||
<div class="rounded-lg border bg-card xmMx flex min-h-0 flex-1 flex-col">
|
<div class="rounded-lg border bg-card xmMx flex min-h-0 flex-1 flex-col">
|
||||||
<div class="flex items-center justify-between border-b px-4 py-3">
|
<div class="flex items-center justify-between border-b px-4 py-3">
|
||||||
<h3 class="text-sm font-semibold text-foreground">用地规模明细</h3>
|
<div class="flex items-center gap-3">
|
||||||
|
<h3 class="text-sm font-semibold text-foreground">用地规模明细</h3>
|
||||||
|
<div v-if="isMutipleService" class="flex items-center gap-2">
|
||||||
|
<span class="text-xs text-muted-foreground">项目数量</span>
|
||||||
|
<NumberFieldRoot v-model="projectCount" :min="1" :step="1" class="inline-flex items-center rounded-md border bg-background">
|
||||||
|
<NumberFieldDecrement class="px-2 py-1 text-xs text-muted-foreground hover:bg-muted">-</NumberFieldDecrement>
|
||||||
|
<NumberFieldInput class="h-7 w-14 border-x bg-transparent px-2 text-center text-xs outline-none" />
|
||||||
|
<NumberFieldIncrement class="px-2 py-1 text-xs text-muted-foreground hover:bg-muted">+</NumberFieldIncrement>
|
||||||
|
</NumberFieldRoot>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<AlertDialogRoot>
|
<AlertDialogRoot>
|
||||||
<AlertDialogTrigger as-child>
|
<AlertDialogTrigger as-child>
|
||||||
@ -919,7 +944,8 @@ const processCellFromClipboard = (params: any) => {
|
|||||||
</AlertDialogTrigger>
|
</AlertDialogTrigger>
|
||||||
<AlertDialogPortal>
|
<AlertDialogPortal>
|
||||||
<AlertDialogOverlay class="fixed inset-0 z-50 bg-black/45" />
|
<AlertDialogOverlay class="fixed inset-0 z-50 bg-black/45" />
|
||||||
<AlertDialogContent class="fixed left-1/2 top-1/2 z-50 w-[92vw] max-w-md -translate-x-1/2 -translate-y-1/2 rounded-lg border bg-background p-5 shadow-xl">
|
<AlertDialogContent
|
||||||
|
class="fixed left-1/2 top-1/2 z-50 w-[92vw] max-w-md -translate-x-1/2 -translate-y-1/2 rounded-lg border bg-background p-5 shadow-xl">
|
||||||
<AlertDialogTitle class="text-base font-semibold">确认清空当前明细</AlertDialogTitle>
|
<AlertDialogTitle class="text-base font-semibold">确认清空当前明细</AlertDialogTitle>
|
||||||
<AlertDialogDescription class="mt-2 text-sm text-muted-foreground">
|
<AlertDialogDescription class="mt-2 text-sm text-muted-foreground">
|
||||||
将清空当前用地规模明细,是否继续?
|
将清空当前用地规模明细,是否继续?
|
||||||
@ -941,7 +967,8 @@ const processCellFromClipboard = (params: any) => {
|
|||||||
</AlertDialogTrigger>
|
</AlertDialogTrigger>
|
||||||
<AlertDialogPortal>
|
<AlertDialogPortal>
|
||||||
<AlertDialogOverlay class="fixed inset-0 z-50 bg-black/45" />
|
<AlertDialogOverlay class="fixed inset-0 z-50 bg-black/45" />
|
||||||
<AlertDialogContent class="fixed left-1/2 top-1/2 z-50 w-[92vw] max-w-md -translate-x-1/2 -translate-y-1/2 rounded-lg border bg-background p-5 shadow-xl">
|
<AlertDialogContent
|
||||||
|
class="fixed left-1/2 top-1/2 z-50 w-[92vw] max-w-md -translate-x-1/2 -translate-y-1/2 rounded-lg border bg-background p-5 shadow-xl">
|
||||||
<AlertDialogTitle class="text-base font-semibold">确认覆盖当前明细</AlertDialogTitle>
|
<AlertDialogTitle class="text-base font-semibold">确认覆盖当前明细</AlertDialogTitle>
|
||||||
<AlertDialogDescription class="mt-2 text-sm text-muted-foreground">
|
<AlertDialogDescription class="mt-2 text-sm text-muted-foreground">
|
||||||
将使用合同默认数据覆盖当前用地规模明细,是否继续?
|
将使用合同默认数据覆盖当前用地规模明细,是否继续?
|
||||||
@ -972,5 +999,3 @@ const processCellFromClipboard = (params: any) => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -11,6 +11,7 @@ import { parseNumberOrNull } from '@/lib/number'
|
|||||||
import { formatThousandsFlexible } from '@/lib/numberFormat'
|
import { formatThousandsFlexible } from '@/lib/numberFormat'
|
||||||
import {
|
import {
|
||||||
ensurePricingMethodDetailRowsForServices,
|
ensurePricingMethodDetailRowsForServices,
|
||||||
|
persistDefaultPricingMethodDetailRowsForServices,
|
||||||
getPricingMethodTotalsForService,
|
getPricingMethodTotalsForService,
|
||||||
getPricingMethodTotalsForServices,
|
getPricingMethodTotalsForServices,
|
||||||
type PricingMethodTotals
|
type PricingMethodTotals
|
||||||
@ -669,7 +670,7 @@ const fillPricingTotalsForServiceIds = async (serviceIds: string[]) => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
await ensurePricingMethodDetailRowsForServices({
|
await persistDefaultPricingMethodDetailRowsForServices({
|
||||||
contractId: props.contractId,
|
contractId: props.contractId,
|
||||||
serviceIds: targetIds,
|
serviceIds: targetIds,
|
||||||
options: PRICING_TOTALS_OPTIONS
|
options: PRICING_TOTALS_OPTIONS
|
||||||
|
|||||||
@ -89,6 +89,28 @@ interface PricingMethodTotalsOptions {
|
|||||||
excludeInvestmentCostAndAreaRows?: boolean
|
excludeInvestmentCostAndAreaRows?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface PricingMethodDetailDbKeys {
|
||||||
|
investScale: string
|
||||||
|
landScale: string
|
||||||
|
workload: string
|
||||||
|
hourly: string
|
||||||
|
}
|
||||||
|
|
||||||
|
interface PricingMethodDefaultDetailRows {
|
||||||
|
investScale: unknown[]
|
||||||
|
landScale: unknown[]
|
||||||
|
workload: unknown[]
|
||||||
|
hourly: unknown[]
|
||||||
|
}
|
||||||
|
|
||||||
|
interface PricingMethodDefaultBuildContext {
|
||||||
|
htData: StoredDetailRowsState | null
|
||||||
|
consultCategoryFactorMap: Map<string, number | null>
|
||||||
|
majorFactorMap: Map<string, number | null>
|
||||||
|
industryId: string
|
||||||
|
excludeInvestmentCostAndAreaRows: boolean
|
||||||
|
}
|
||||||
|
|
||||||
const ONLY_COST_SCALE_ROW_ID = '__only-cost-scale-total__'
|
const ONLY_COST_SCALE_ROW_ID = '__only-cost-scale-total__'
|
||||||
|
|
||||||
const hasOwn = (obj: unknown, key: string) =>
|
const hasOwn = (obj: unknown, key: string) =>
|
||||||
@ -494,6 +516,105 @@ const resolveScaleRows = (
|
|||||||
return buildDefaultScaleRows(serviceId, consultCategoryFactorMap, majorFactorMap)
|
return buildDefaultScaleRows(serviceId, consultCategoryFactorMap, majorFactorMap)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const getPricingMethodDetailDbKeys = (
|
||||||
|
contractId: string,
|
||||||
|
serviceId: string | number
|
||||||
|
): PricingMethodDetailDbKeys => {
|
||||||
|
const normalizedServiceId = String(serviceId)
|
||||||
|
return {
|
||||||
|
investScale: `tzGMF-${contractId}-${normalizedServiceId}`,
|
||||||
|
landScale: `ydGMF-${contractId}-${normalizedServiceId}`,
|
||||||
|
workload: `gzlF-${contractId}-${normalizedServiceId}`,
|
||||||
|
hourly: `hourlyPricing-${contractId}-${normalizedServiceId}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const loadPricingMethodDefaultBuildContext = async (
|
||||||
|
contractId: string,
|
||||||
|
options?: PricingMethodTotalsOptions
|
||||||
|
): Promise<PricingMethodDefaultBuildContext> => {
|
||||||
|
const htDbKey = `ht-info-v3-${contractId}`
|
||||||
|
const consultFactorDbKey = `ht-consult-category-factor-v1-${contractId}`
|
||||||
|
const majorFactorDbKey = `ht-major-factor-v1-${contractId}`
|
||||||
|
const baseInfoDbKey = 'xm-base-info-v1'
|
||||||
|
|
||||||
|
const [htData, consultFactorData, majorFactorData, baseInfo] = await Promise.all([
|
||||||
|
localforage.getItem<StoredDetailRowsState>(htDbKey),
|
||||||
|
localforage.getItem<StoredFactorState>(consultFactorDbKey),
|
||||||
|
localforage.getItem<StoredFactorState>(majorFactorDbKey),
|
||||||
|
localforage.getItem<XmBaseInfoState>(baseInfoDbKey)
|
||||||
|
])
|
||||||
|
|
||||||
|
return {
|
||||||
|
htData,
|
||||||
|
consultCategoryFactorMap: buildConsultCategoryFactorMap(consultFactorData),
|
||||||
|
majorFactorMap: buildMajorFactorMap(majorFactorData),
|
||||||
|
industryId: typeof baseInfo?.projectIndustry === 'string' ? baseInfo.projectIndustry.trim() : '',
|
||||||
|
excludeInvestmentCostAndAreaRows: options?.excludeInvestmentCostAndAreaRows === true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const buildDefaultPricingMethodDetailRows = (
|
||||||
|
serviceId: string,
|
||||||
|
context: PricingMethodDefaultBuildContext
|
||||||
|
): PricingMethodDefaultDetailRows => {
|
||||||
|
const onlyCostScale = isOnlyCostScaleService(serviceId)
|
||||||
|
const scaleRows = resolveScaleRows(
|
||||||
|
serviceId,
|
||||||
|
null,
|
||||||
|
context.htData,
|
||||||
|
context.consultCategoryFactorMap,
|
||||||
|
context.majorFactorMap
|
||||||
|
)
|
||||||
|
|
||||||
|
const investScale = onlyCostScale
|
||||||
|
? buildOnlyCostScaleDetailRows(
|
||||||
|
serviceId,
|
||||||
|
context.htData?.detailRows as Array<Record<string, unknown>> | undefined,
|
||||||
|
context.consultCategoryFactorMap,
|
||||||
|
context.majorFactorMap,
|
||||||
|
context.industryId
|
||||||
|
)
|
||||||
|
: scaleRows.filter(row => {
|
||||||
|
if (!isCostMajorById(row.id)) return false
|
||||||
|
if (context.excludeInvestmentCostAndAreaRows && isDualScaleMajorById(row.id)) return false
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
const landScale = scaleRows.filter(row => isAreaMajorById(row.id))
|
||||||
|
|
||||||
|
return {
|
||||||
|
investScale,
|
||||||
|
landScale,
|
||||||
|
workload: buildDefaultWorkloadRows(serviceId, context.consultCategoryFactorMap),
|
||||||
|
hourly: buildDefaultHourlyRows()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const persistDefaultPricingMethodDetailRowsForServices = async (params: {
|
||||||
|
contractId: string
|
||||||
|
serviceIds: Array<string | number>
|
||||||
|
options?: PricingMethodTotalsOptions
|
||||||
|
}) => {
|
||||||
|
const uniqueServiceIds = Array.from(new Set(params.serviceIds.map(serviceId => String(serviceId))))
|
||||||
|
if (uniqueServiceIds.length === 0) return
|
||||||
|
|
||||||
|
const context = await loadPricingMethodDefaultBuildContext(params.contractId, params.options)
|
||||||
|
|
||||||
|
await Promise.all(
|
||||||
|
uniqueServiceIds.map(async serviceId => {
|
||||||
|
const dbKeys = getPricingMethodDetailDbKeys(params.contractId, serviceId)
|
||||||
|
const defaultRows = buildDefaultPricingMethodDetailRows(serviceId, context)
|
||||||
|
console.log(dbKeys,defaultRows)
|
||||||
|
await Promise.all([
|
||||||
|
localforage.setItem(dbKeys.investScale, { detailRows: defaultRows.investScale }),
|
||||||
|
localforage.setItem(dbKeys.landScale, { detailRows: defaultRows.landScale }),
|
||||||
|
localforage.setItem(dbKeys.workload, { detailRows: defaultRows.workload }),
|
||||||
|
localforage.setItem(dbKeys.hourly, { detailRows: defaultRows.hourly })
|
||||||
|
])
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
export const getPricingMethodTotalsForService = async (params: {
|
export const getPricingMethodTotalsForService = async (params: {
|
||||||
contractId: string
|
contractId: string
|
||||||
serviceId: string | number
|
serviceId: string | number
|
||||||
@ -593,34 +714,16 @@ export const ensurePricingMethodDetailRowsForServices = async (params: {
|
|||||||
const uniqueServiceIds = Array.from(new Set(params.serviceIds.map(serviceId => String(serviceId))))
|
const uniqueServiceIds = Array.from(new Set(params.serviceIds.map(serviceId => String(serviceId))))
|
||||||
if (uniqueServiceIds.length === 0) return
|
if (uniqueServiceIds.length === 0) return
|
||||||
|
|
||||||
const htDbKey = `ht-info-v3-${params.contractId}`
|
const context = await loadPricingMethodDefaultBuildContext(params.contractId, params.options)
|
||||||
const consultFactorDbKey = `ht-consult-category-factor-v1-${params.contractId}`
|
|
||||||
const majorFactorDbKey = `ht-major-factor-v1-${params.contractId}`
|
|
||||||
const baseInfoDbKey = 'xm-base-info-v1'
|
|
||||||
|
|
||||||
const [htData, consultFactorData, majorFactorData, baseInfo] = await Promise.all([
|
|
||||||
localforage.getItem<StoredDetailRowsState>(htDbKey),
|
|
||||||
localforage.getItem<StoredFactorState>(consultFactorDbKey),
|
|
||||||
localforage.getItem<StoredFactorState>(majorFactorDbKey),
|
|
||||||
localforage.getItem<XmBaseInfoState>(baseInfoDbKey)
|
|
||||||
])
|
|
||||||
|
|
||||||
const consultCategoryFactorMap = buildConsultCategoryFactorMap(consultFactorData)
|
|
||||||
const majorFactorMap = buildMajorFactorMap(majorFactorData)
|
|
||||||
const industryId = typeof baseInfo?.projectIndustry === 'string' ? baseInfo.projectIndustry.trim() : ''
|
|
||||||
const excludeInvestmentCostAndAreaRows = params.options?.excludeInvestmentCostAndAreaRows === true
|
|
||||||
|
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
uniqueServiceIds.map(async serviceId => {
|
uniqueServiceIds.map(async serviceId => {
|
||||||
const investDbKey = `tzGMF-${params.contractId}-${serviceId}`
|
const dbKeys = getPricingMethodDetailDbKeys(params.contractId, serviceId)
|
||||||
const landDbKey = `ydGMF-${params.contractId}-${serviceId}`
|
|
||||||
const workloadDbKey = `gzlF-${params.contractId}-${serviceId}`
|
|
||||||
const hourlyDbKey = `hourlyPricing-${params.contractId}-${serviceId}`
|
|
||||||
const [investData, landData, workloadData, hourlyData] = await Promise.all([
|
const [investData, landData, workloadData, hourlyData] = await Promise.all([
|
||||||
localforage.getItem<StoredDetailRowsState>(investDbKey),
|
localforage.getItem<StoredDetailRowsState>(dbKeys.investScale),
|
||||||
localforage.getItem<StoredDetailRowsState>(landDbKey),
|
localforage.getItem<StoredDetailRowsState>(dbKeys.landScale),
|
||||||
localforage.getItem<StoredDetailRowsState>(workloadDbKey),
|
localforage.getItem<StoredDetailRowsState>(dbKeys.workload),
|
||||||
localforage.getItem<StoredDetailRowsState>(hourlyDbKey)
|
localforage.getItem<StoredDetailRowsState>(dbKeys.hourly)
|
||||||
])
|
])
|
||||||
|
|
||||||
const shouldInitInvest = !Array.isArray(investData?.detailRows) || investData!.detailRows!.length === 0
|
const shouldInitInvest = !Array.isArray(investData?.detailRows) || investData!.detailRows!.length === 0
|
||||||
@ -629,50 +732,28 @@ export const ensurePricingMethodDetailRowsForServices = async (params: {
|
|||||||
const shouldInitHourly = !Array.isArray(hourlyData?.detailRows) || hourlyData!.detailRows!.length === 0
|
const shouldInitHourly = !Array.isArray(hourlyData?.detailRows) || hourlyData!.detailRows!.length === 0
|
||||||
|
|
||||||
const writeTasks: Promise<unknown>[] = []
|
const writeTasks: Promise<unknown>[] = []
|
||||||
|
let defaultRows: PricingMethodDefaultDetailRows | null = null
|
||||||
|
const getDefaultRows = () => {
|
||||||
|
if (!defaultRows) {
|
||||||
|
defaultRows = buildDefaultPricingMethodDetailRows(serviceId, context)
|
||||||
|
}
|
||||||
|
return defaultRows
|
||||||
|
}
|
||||||
|
|
||||||
if (shouldInitInvest) {
|
if (shouldInitInvest) {
|
||||||
const onlyCostScale = isOnlyCostScaleService(serviceId)
|
writeTasks.push(localforage.setItem(dbKeys.investScale, { detailRows: getDefaultRows().investScale }))
|
||||||
const investRows = onlyCostScale
|
|
||||||
? buildOnlyCostScaleDetailRows(
|
|
||||||
serviceId,
|
|
||||||
(htData?.detailRows as Array<Record<string, unknown>> | undefined),
|
|
||||||
consultCategoryFactorMap,
|
|
||||||
majorFactorMap,
|
|
||||||
industryId
|
|
||||||
)
|
|
||||||
: resolveScaleRows(
|
|
||||||
serviceId,
|
|
||||||
null,
|
|
||||||
htData,
|
|
||||||
consultCategoryFactorMap,
|
|
||||||
majorFactorMap
|
|
||||||
).filter(row => {
|
|
||||||
if (!isCostMajorById(row.id)) return false
|
|
||||||
if (excludeInvestmentCostAndAreaRows && isDualScaleMajorById(row.id)) return false
|
|
||||||
return true
|
|
||||||
})
|
|
||||||
writeTasks.push(localforage.setItem(investDbKey, { detailRows: investRows }))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shouldInitLand) {
|
if (shouldInitLand) {
|
||||||
const landRows = resolveScaleRows(
|
writeTasks.push(localforage.setItem(dbKeys.landScale, { detailRows: getDefaultRows().landScale }))
|
||||||
serviceId,
|
|
||||||
null,
|
|
||||||
htData,
|
|
||||||
consultCategoryFactorMap,
|
|
||||||
majorFactorMap
|
|
||||||
).filter(row => isAreaMajorById(row.id))
|
|
||||||
writeTasks.push(localforage.setItem(landDbKey, { detailRows: landRows }))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shouldInitWorkload) {
|
if (shouldInitWorkload) {
|
||||||
const workloadRows = buildDefaultWorkloadRows(serviceId, consultCategoryFactorMap)
|
writeTasks.push(localforage.setItem(dbKeys.workload, { detailRows: getDefaultRows().workload }))
|
||||||
writeTasks.push(localforage.setItem(workloadDbKey, { detailRows: workloadRows }))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shouldInitHourly) {
|
if (shouldInitHourly) {
|
||||||
const hourlyRows = buildDefaultHourlyRows()
|
writeTasks.push(localforage.setItem(dbKeys.hourly, { detailRows: getDefaultRows().hourly }))
|
||||||
writeTasks.push(localforage.setItem(hourlyDbKey, { detailRows: hourlyRows }))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (writeTasks.length > 0) {
|
if (writeTasks.length > 0) {
|
||||||
|
|||||||
37
src/sql.ts
37
src/sql.ts
@ -87,16 +87,17 @@ export const serviceList = {
|
|||||||
26: { code: 'D4-12', name: '调整概算', maxCoe: 0.3, minCoe: 0.15, defCoe: 0.225, desc: '本表系数适用于采用规模计价法基准预算的系数;依据其调整时期所在建设阶段和基础资料的不同,其系数取值不同。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 27, scale: true, onlyCostScale: true, amount: false, workDay: true },
|
26: { code: 'D4-12', name: '调整概算', maxCoe: 0.3, minCoe: 0.15, defCoe: 0.225, desc: '本表系数适用于采用规模计价法基准预算的系数;依据其调整时期所在建设阶段和基础资料的不同,其系数取值不同。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 27, scale: true, onlyCostScale: true, amount: false, workDay: true },
|
||||||
27: { code: 'D4-13', name: '造价检查', maxCoe: null, minCoe: null, defCoe: null, desc: '可按照服务工日数量×服务工日人工单价×综合预算系数;也可按照服务工日数量×服务工日综合预算单价。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 28, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
27: { code: 'D4-13', name: '造价检查', maxCoe: null, minCoe: null, defCoe: null, desc: '可按照服务工日数量×服务工日人工单价×综合预算系数;也可按照服务工日数量×服务工日综合预算单价。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 28, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
||||||
28: { code: 'D4-14', name: '其他专项咨询', maxCoe: null, minCoe: null, defCoe: null, desc: '可参照相同或相似服务的系数。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 29, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
28: { code: 'D4-14', name: '其他专项咨询', maxCoe: null, minCoe: null, defCoe: null, desc: '可参照相同或相似服务的系数。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 29, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
||||||
29: { code: 'D4-15-1', name: '造价数据测试验证(估算)', maxCoe: null, minCoe: null, defCoe: 0.04, desc: '委托同一咨询人同时负责D3-1和D3-2时,D3-1和D3-2的合计调整系数为0.25。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 30, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
29: { code: 'D4-15-1', name: '造价数据测试验证(估算)', maxCoe: null, minCoe: null, defCoe: 0.04, desc: '委托同一咨询人同时负责D3-1和D3-2时,D3-1和D3-2的合计调整系数为0.25。', isRoad: true, isRailway: true, isWaterway: true, mutiple: true, order: 30, scale: true, onlyCostScale: true, amount: false, workDay: true },
|
||||||
30: { code: 'D4-15-2', name: '造价数据测试验证(概算)', maxCoe: null, minCoe: null, defCoe: 0.08, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 31, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
30: { code: 'D4-15-2', name: '造价数据测试验证(概算)', maxCoe: null, minCoe: null, defCoe: 0.08, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: true, order: 31, scale: true, onlyCostScale: true, amount: false, workDay: true },
|
||||||
31: { code: 'D4-15-3', name: '造价数据测试验证(施工图预算)', maxCoe: null, minCoe: null, defCoe: 0.1, desc: '委托同一咨询人同时负责D3-3和D3-4时,D3-3和D3-4的合计调整系数为0.3。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 32, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
31: { code: 'D4-15-3', name: '造价数据测试验证(施工图预算)', maxCoe: null, minCoe: null, defCoe: 0.1, desc: '委托同一咨询人同时负责D3-3和D3-4时,D3-3和D3-4的合计调整系数为0.3。', isRoad: true, isRailway: true, isWaterway: true, mutiple: true, order: 32, scale: true, onlyCostScale: false, amount: false, workDay: true },
|
||||||
32: { code: 'D4-15-4', name: '造价数据测试验证(招标工程量清单及清单预算(或最高投标限价))', maxCoe: null, minCoe: null, defCoe: 0.06, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 33, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
32: { code: 'D4-15-4', name: '造价数据测试验证(招标工程量清单及清单预算(或最高投标限价))', maxCoe: null, minCoe: null, defCoe: 0.06, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: true, order: 33, scale: true, onlyCostScale: false, amount: false, workDay: true },
|
||||||
33: { code: 'D4-15-5', name: '造价数据测试验证(清理概算(仅限铁路))', maxCoe: null, minCoe: null, defCoe: 0.08, desc: '本系数适用于铁路工程。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 34, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
33: { code: 'D4-15-5', name: '造价数据测试验证(清理概算(仅限铁路))', maxCoe: null, minCoe: null, defCoe: 0.08, desc: '本系数适用于铁路工程。', isRoad: false, isRailway: true, isWaterway: false, mutiple: true, order: 34, scale: true, onlyCostScale: true, amount: false, workDay: true },
|
||||||
34: { code: 'D4-15-6', name: '造价数据测试验证(合同(工程)结算)', maxCoe: null, minCoe: null, defCoe: 0.12, desc: '本系数适用于公路和水运工程。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 35, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
34: { code: 'D4-15-6', name: '造价数据测试验证(合同(工程)结算)', maxCoe: null, minCoe: null, defCoe: 0.12, desc: '本系数适用于公路和水运工程。', isRoad: true, isRailway: false, isWaterway: true, mutiple: true, order: 35, scale: true, onlyCostScale: false, amount: false, workDay: true },
|
||||||
35: { code: 'D4-15-7', name: '造价数据测试验证(合同(工程)结算)', maxCoe: null, minCoe: null, defCoe: 0.08, desc: '本系数适用于铁路工程。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 36, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
35: { code: 'D4-15-7', name: '造价数据测试验证(合同(工程)结算)', maxCoe: null, minCoe: null, defCoe: 0.08, desc: '本系数适用于铁路工程。', isRoad: false, isRailway: true, isWaterway: false, mutiple: true, order: 36, scale: true, onlyCostScale: false, amount: false, workDay: true },
|
||||||
36: { code: 'D4-15-8', name: '造价数据测试验证(竣工决算)', maxCoe: null, minCoe: null, defCoe: 0.04, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 37, scale: false, onlyCostScale: null, amount: false, workDay: true },
|
36: { code: 'D4-15-8', name: '造价数据测试验证(竣工决算)', maxCoe: null, minCoe: null, defCoe: 0.04, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: true, order: 37, scale: true, onlyCostScale: true, amount: false, workDay: true },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
export const taskList = {
|
export const taskList = {
|
||||||
0: { serviceID: 15, code: 'C4-1', name: '工程造价日常顾问', basicParam: '服务月份数', required: true, unit: '万元/月', conversion: 10000, maxPrice: 0.5, minPrice: 0.3, defPrice: 0.4, desc: '' },
|
0: { serviceID: 15, code: 'C4-1', name: '工程造价日常顾问', basicParam: '服务月份数', required: true, unit: '万元/月', conversion: 10000, maxPrice: 0.5, minPrice: 0.3, defPrice: 0.4, desc: '' },
|
||||||
1: { serviceID: 15, code: 'C4-2', name: '工程造价专项顾问', basicParam: '服务项目的造价金额', required: true, unit: '%', conversion: 0.01, maxPrice: null, minPrice: null, defPrice: 0.01, desc: '适用于涉及造价费用类的顾问' },
|
1: { serviceID: 15, code: 'C4-2', name: '工程造价专项顾问', basicParam: '服务项目的造价金额', required: true, unit: '%', conversion: 0.01, maxPrice: null, minPrice: null, defPrice: 0.01, desc: '适用于涉及造价费用类的顾问' },
|
||||||
@ -550,13 +551,13 @@ async function generateTemplate(data) {
|
|||||||
// const downTextTmp = { richText: [{ font: { charset: 134, color: { theme: 1 }, italic: true, name: '宋体', size: 10 }, text: '常规' }, { font: { charset: 134, color: { theme: 1 }, italic: true, name: 'Calibri', size: 10, vertAlign: 'subscript' }, text: '下标' }] };
|
// const downTextTmp = { richText: [{ font: { charset: 134, color: { theme: 1 }, italic: true, name: '宋体', size: 10 }, text: '常规' }, { font: { charset: 134, color: { theme: 1 }, italic: true, name: 'Calibri', size: 10, vertAlign: 'subscript' }, text: '下标' }] };
|
||||||
|
|
||||||
data.contracts[0].addtional = {// 附加工作费
|
data.contracts[0].addtional = {// 附加工作费
|
||||||
ref: { richText: [{ font: { charset: 134, color: { theme: 1 }, italic: true, name: '宋体', size: 10 }, text: 'C' }, { font: { charset: 134, color: { theme: 1 }, italic: true, name: 'Calibri', size: 10, vertAlign: 'subscript' }, text: 'C' }] },
|
code: { richText: [{ font: { charset: 134, color: { theme: 1 }, italic: true, name: '宋体', size: 10 }, text: 'C' }, { font: { charset: 134, color: { theme: 1 }, italic: true, name: 'Calibri', size: 10, vertAlign: 'subscript' }, text: 'C' }] },
|
||||||
name: '附加工作',
|
name: '附加工作',
|
||||||
fee: 10000,
|
fee: 10000,
|
||||||
det: [
|
det: [
|
||||||
{
|
{
|
||||||
id: 0,
|
id: 0,
|
||||||
ref: { richText: [{ font: { charset: 134, color: { theme: 1 }, italic: true, name: '宋体', size: 10 }, text: 'C' }, { font: { charset: 134, color: { theme: 1 }, italic: true, name: 'Calibri', size: 10, vertAlign: 'subscript' }, text: 'F' }] },
|
code: { richText: [{ font: { charset: 134, color: { theme: 1 }, italic: true, name: '宋体', size: 10 }, text: 'C' }, { font: { charset: 134, color: { theme: 1 }, italic: true, name: 'Calibri', size: 10, vertAlign: 'subscript' }, text: 'F' }] },
|
||||||
name: '人员驻场服务及其他附加工作',
|
name: '人员驻场服务及其他附加工作',
|
||||||
fee: 10000,
|
fee: 10000,
|
||||||
m4: {
|
m4: {
|
||||||
@ -606,7 +607,7 @@ async function generateTemplate(data) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 1,
|
id: 1,
|
||||||
ref: { richText: [{ font: { charset: 134, color: { theme: 1 }, italic: true, name: '宋体', size: 10 }, text: 'C' }, { font: { charset: 134, color: { theme: 1 }, italic: true, name: 'Calibri', size: 10, vertAlign: 'subscript' }, text: 'X' }] },
|
code: { richText: [{ font: { charset: 134, color: { theme: 1 }, italic: true, name: '宋体', size: 10 }, text: 'C' }, { font: { charset: 134, color: { theme: 1 }, italic: true, name: 'Calibri', size: 10, vertAlign: 'subscript' }, text: 'X' }] },
|
||||||
name: '咨询服务协调工作',
|
name: '咨询服务协调工作',
|
||||||
fee: 10000,
|
fee: 10000,
|
||||||
m0: {
|
m0: {
|
||||||
@ -661,7 +662,7 @@ async function generateTemplate(data) {
|
|||||||
]
|
]
|
||||||
};
|
};
|
||||||
data.contracts[0].reserve = {// 预备费
|
data.contracts[0].reserve = {// 预备费
|
||||||
ref: { richText: [{ font: { charset: 134, color: { theme: 1 }, italic: true, name: '宋体', size: 10 }, text: 'Y' }, { font: { charset: 134, color: { theme: 1 }, italic: true, name: 'Calibri', size: 10, vertAlign: 'subscript' }, text: 'B' }] },
|
code: { richText: [{ font: { charset: 134, color: { theme: 1 }, italic: true, name: '宋体', size: 10 }, text: 'Y' }, { font: { charset: 134, color: { theme: 1 }, italic: true, name: 'Calibri', size: 10, vertAlign: 'subscript' }, text: 'B' }] },
|
||||||
name: '预备费',
|
name: '预备费',
|
||||||
fee: 10000,
|
fee: 10000,
|
||||||
m0: {
|
m0: {
|
||||||
@ -1172,7 +1173,7 @@ async function generateTemplate(data) {
|
|||||||
endRows++;
|
endRows++;
|
||||||
cusInsertRowFunc(ci.services.length + 3 + endRows, [sheet_1.getRow(3)], sheet_1, (targetRow) => {
|
cusInsertRowFunc(ci.services.length + 3 + endRows, [sheet_1.getRow(3)], sheet_1, (targetRow) => {
|
||||||
targetRow.getCell(1).value = ci.services.length + endRows;
|
targetRow.getCell(1).value = ci.services.length + endRows;
|
||||||
targetRow.getCell(2).value = ci.addtional.ref;
|
targetRow.getCell(2).value = ci.addtional.code;
|
||||||
targetRow.getCell(3).value = ci.addtional.name;
|
targetRow.getCell(3).value = ci.addtional.name;
|
||||||
targetRow.getCell(4).value = '';
|
targetRow.getCell(4).value = '';
|
||||||
targetRow.getCell(5).value = '';
|
targetRow.getCell(5).value = '';
|
||||||
@ -1184,7 +1185,7 @@ async function generateTemplate(data) {
|
|||||||
endRows++;
|
endRows++;
|
||||||
cusInsertRowFunc(ci.services.length + 3 + endRows, [sheet_1.getRow(3)], sheet_1, (targetRow) => {
|
cusInsertRowFunc(ci.services.length + 3 + endRows, [sheet_1.getRow(3)], sheet_1, (targetRow) => {
|
||||||
targetRow.getCell(1).value = ci.services.length + endRows;
|
targetRow.getCell(1).value = ci.services.length + endRows;
|
||||||
targetRow.getCell(2).value = addobj.ref;
|
targetRow.getCell(2).value = addobj.code;
|
||||||
targetRow.getCell(3).value = addobj.name;
|
targetRow.getCell(3).value = addobj.name;
|
||||||
let tmpArr = [];
|
let tmpArr = [];
|
||||||
if (addobj.m0) tmpArr.push(`按上述小计的${addobj.m0.coe}计得${addobj.m0.fee}元`);
|
if (addobj.m0) tmpArr.push(`按上述小计的${addobj.m0.coe}计得${addobj.m0.fee}元`);
|
||||||
@ -1268,7 +1269,7 @@ async function generateTemplate(data) {
|
|||||||
let siSum = 0;
|
let siSum = 0;
|
||||||
for (let i = 0; i < yz01Num; i++) {
|
for (let i = 0; i < yz01Num; i++) {
|
||||||
targetRow.getCell(i * 7 + 1).value = allServices.length + 1;
|
targetRow.getCell(i * 7 + 1).value = allServices.length + 1;
|
||||||
targetRow.getCell(i * 7 + 2).value = allAddtional[firstNum].ref;
|
targetRow.getCell(i * 7 + 2).value = allAddtional[firstNum].code;
|
||||||
targetRow.getCell(i * 7 + 3).value = allAddtional[firstNum].name;
|
targetRow.getCell(i * 7 + 3).value = allAddtional[firstNum].name;
|
||||||
targetRow.getCell(i * 7 + 4).value = allAddtional[i * 4]?.fee;
|
targetRow.getCell(i * 7 + 4).value = allAddtional[i * 4]?.fee;
|
||||||
targetRow.getCell(i * 7 + 5).value = allAddtional[i * 4 + 1]?.fee;
|
targetRow.getCell(i * 7 + 5).value = allAddtional[i * 4 + 1]?.fee;
|
||||||
@ -1288,7 +1289,7 @@ async function generateTemplate(data) {
|
|||||||
}
|
}
|
||||||
if (yz01Mod) {
|
if (yz01Mod) {
|
||||||
targetRow.getCell(yz01Num * 7 + 1).value = allServices.length + 1;
|
targetRow.getCell(yz01Num * 7 + 1).value = allServices.length + 1;
|
||||||
targetRow.getCell(yz01Num * 7 + 2).value = allAddtional[firstNum].ref;
|
targetRow.getCell(yz01Num * 7 + 2).value = allAddtional[firstNum].code;
|
||||||
targetRow.getCell(yz01Num * 7 + 3).value = allAddtional[firstNum].name;
|
targetRow.getCell(yz01Num * 7 + 3).value = allAddtional[firstNum].name;
|
||||||
if (yz01Mod == 1) {
|
if (yz01Mod == 1) {
|
||||||
targetRow.getCell(yz01Num * 7 + 4).value = numberFormatter(siSum, 2);
|
targetRow.getCell(yz01Num * 7 + 4).value = numberFormatter(siSum, 2);
|
||||||
@ -1316,7 +1317,7 @@ async function generateTemplate(data) {
|
|||||||
let siSum = 0;
|
let siSum = 0;
|
||||||
for (let i = 0; i < yz01Num; i++) {
|
for (let i = 0; i < yz01Num; i++) {
|
||||||
targetRow.getCell(i * 7 + 1).value = allServices.length + endRows;
|
targetRow.getCell(i * 7 + 1).value = allServices.length + endRows;
|
||||||
targetRow.getCell(i * 7 + 2).value = allReserve[firstNum].ref;
|
targetRow.getCell(i * 7 + 2).value = allReserve[firstNum].code;
|
||||||
targetRow.getCell(i * 7 + 3).value = allReserve[firstNum].name;
|
targetRow.getCell(i * 7 + 3).value = allReserve[firstNum].name;
|
||||||
targetRow.getCell(i * 7 + 4).value = allReserve[i * 4]?.fee;
|
targetRow.getCell(i * 7 + 4).value = allReserve[i * 4]?.fee;
|
||||||
targetRow.getCell(i * 7 + 5).value = allReserve[i * 4 + 1]?.fee;
|
targetRow.getCell(i * 7 + 5).value = allReserve[i * 4 + 1]?.fee;
|
||||||
@ -1336,7 +1337,7 @@ async function generateTemplate(data) {
|
|||||||
}
|
}
|
||||||
if (yz01Mod) {
|
if (yz01Mod) {
|
||||||
targetRow.getCell(yz01Num * 7 + 1).value = allServices.length + endRows;
|
targetRow.getCell(yz01Num * 7 + 1).value = allServices.length + endRows;
|
||||||
targetRow.getCell(yz01Num * 7 + 2).value = allReserve[firstNum].ref;
|
targetRow.getCell(yz01Num * 7 + 2).value = allReserve[firstNum].code;
|
||||||
targetRow.getCell(yz01Num * 7 + 3).value = allReserve[firstNum].name;
|
targetRow.getCell(yz01Num * 7 + 3).value = allReserve[firstNum].name;
|
||||||
if (yz01Mod == 1) {
|
if (yz01Mod == 1) {
|
||||||
targetRow.getCell(yz01Num * 7 + 4).value = numberFormatter(siSum, 2);
|
targetRow.getCell(yz01Num * 7 + 4).value = numberFormatter(siSum, 2);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user