提交 d692b0a9 authored 作者: liuluyu's avatar liuluyu

更新tb5字段

上级 320bc7ff
...@@ -25,682 +25,696 @@ interface VxeColumn { ...@@ -25,682 +25,696 @@ interface VxeColumn {
export const tableFormData = [ export const tableFormData = [
{ {
serialNumber: "1", serialNumber: '1',
project: "软件产品使用情况", project: '软件产品使用情况',
code: 'SFTAUTH', code: 'SFTAUTH',
content: [ content: [
{ type: "text", value: "<strong>软件正版化情况:</strong>" }, { type: 'text', value: '<strong>软件正版化情况:</strong>' },
{ type: "br" }, { type: 'br' },
{ type: "text", value: "(1)软件正版化工作负责部门:" }, { type: 'text', value: '(1)软件正版化工作负责部门:' },
{ {
type: "radio-group", type: 'radio-group',
field: "SFTAUTH1", field: 'SFTAUTH1',
options: ["有", "无"] options: ['有', '无'],
}, },
{ type: "brspace" }, { type: 'brspace' },
{ type: "text", value: "如果有,部门名称" }, { type: 'text', value: '如果有,部门名称' },
{ type: "input", value: "", field: "SFTAUTH2" }, { type: 'input', value: '', field: 'SFTAUTH2' },
{ type: 'br' },
{ type: "br" }, { type: 'text', value: '(2)软件正版化工作负责人:' },
{ type: "text", value: "(2)软件正版化工作负责人:" }, {
{ type: 'radio-group',
type: "radio-group", field: 'SFTAUTH3',
field: "SFTAUTH3", options: ['有', '无'],
options: ["有", "无"] },
}, { type: 'brspace' },
{ type: "brspace" }, { type: 'text', value: '如果有,姓名' },
{ type: "text", value: "如果有,姓名" }, { type: 'input', value: '', field: 'SFTAUTH4' },
{ type: "input", value: "", field: "SFTAUTH4" }, { type: 'text', value: ',职务' },
{ type: "text", value: ",职务" }, { type: 'input', value: '', field: 'SFTAUTH5' },
{ type: "input", value: "", field: "SFTAUTH5" },
{ type: 'br' },
{ type: 'text', value: '(3)建立软件正版化有关规章制度:' },
{ type: "br" }, {
{ type: "text", value: "(3)建立软件正版化有关规章制度:" }, type: 'radio-group',
{ field: 'SFTAUTH6',
type: "radio-group", options: ['是', '否'],
field: "SFTAUTH6", },
options: ["有", "无"] { type: 'brspace' },
}, { type: 'text', value: '如果有,制度名称' },
{ type: "brspace" }, { type: 'input', value: '', field: 'SFTAUTH7' },
{ type: "text", value: "如果有,制度名称" }, { type: 'text', value: ',发布时间' },
{ type: "input", value: "", field: "SFTAUTH7" }, { type: 'date', value: '', field: 'SFTAUTH8' },
{ type: "text", value: ",发布时间" },
{ type: "date", value: "", field: "SFTAUTH8" }, { type: 'br' },
{ type: 'text', value: '(4)实施软件资产管理:' },
{ type: 'radio-group', field: 'SFTAUTH10', options: ['是', '否'] },
{ type: "br" }, { type: 'br' },
{ type: "text", value: "(4)实施软件资产管理:" }, { type: 'text', value: '(5)本年度软件正版化培训次数:' },
{ type: "radio-group", field: "SFTAUTH10", options: ["是", "否"] }, { type: 'number', value: '', field: 'SFTAUTH11' },
{ type: "br" }, { type: 'text', value: '次,培训总人次:' },
{ type: "text", value: "(5)本年度软件正版化培训次数:" }, { type: 'number', value: '', field: 'SFTAUTH12' },
{ type: "number", value: "", field: "SFTAUTH11" }, { type: 'text', value: '人次' },
{ type: "text", value: "次,培训总人次:" }, { type: 'br' },
{ type: "number", value: "", field: "SFTAUTH12" }, { type: 'text', value: '(6)本年度软件正版化投入情况:' },
{ type: "text", value: "人次" }, { type: 'brspace' },
{ type: "br" }, { type: 'text', value: '通用软件采购投入:' },
{ type: "text", value: "(6)本年度软件正版化投入情况:" }, { type: 'number', value: '', placeholder: '万元', field: 'SFTAUTH13' },
{ type: "brspace"}, { type: 'text', value: ',通用软件维护投入:' },
{ type: "text", value: "通用软件采购投入:" }, { type: 'number', value: '', placeholder: '万元', field: 'SFTAUTH14' },
{ type: "number", value: "", placeholder: "万元", field: "SFTAUTH13" }, { type: 'text', value: '' },
{ type: "text", value: ",通用软件维护投入:" }, { type: 'brspace' },
{ type: "number", value: "", placeholder: "万元", field: "SFTAUTH14" }, { type: 'text', value: '专用软件采购(开发)投入:' },
{ type: "text", value: "" }, { type: 'number', value: '', placeholder: '万元', field: 'SFTAUTH15' },
{ type: "brspace"}, { type: 'text', value: ',专用软件维护投入:' },
{ type: "text", value: "专用软件采购(开发)投入:" }, { type: 'number', value: '', placeholder: '万元', field: 'SFTAUTH16' },
{ type: "number", value: "", placeholder: "万元", field: "SFTAUTH15" }, { type: 'text', value: '' },
{ type: "text", value: ",专用软件维护投入:" }, { type: 'br' },
{ type: "number", value: "", placeholder: "万元", field: "SFTAUTH16" }, { type: 'text', value: '(7)是否曾获得过“全国软件正版化示范单位”或“全国版权示范单位(软件正版化)”称号:' },
{ type: "text", value: "" }, { type: 'radio-group', field: 'C20B001', options: ['是', '否'] },
{ type: "br" },
{ type: "text", value: "(7)是否曾获得过“全国软件正版化示范单位”或“全国版权示范单位(软件正版化)”称号:" }, { type: 'br' },
{ type: "radio-group", field: "C20B001", options: ["是", "否"] }, { type: 'br' },
{ type: 'text', value: '<strong>通用软件使用情况统计:</strong>' },
{ type: 'br' },
{ type: "br" }, { type: "br" }, {
{ type: "text", value: "<strong>通用软件使用情况统计:</strong>" }, serialNumber: '1001',
{ type: "br" }, code: 'DSKOS',
{ type: 'MultiColumnTable',
serialNumber: "1001", project: '桌面操作系统正版化率',
code:"DSKOS",
type:"MultiColumnTable",
project: "桌面操作系统正版化率",
content: [ content: [
{ name: "正版化率(%)",formType:'number',field:"C20A001" }, { name: '正版化率(%)', formType: 'number', field: 'C20A001' },
{ name: "新增采购(万元)", formType:'number', field: "C20A002" }, { name: '新增采购(万元)', formType: 'number', field: 'C20A002' },
{ name: "升级维护费用(万元)",formType:"number", field: "C20A003" }, { name: '升级维护费用(万元)', formType: 'number', field: 'C20A003' },
{ name: "生成厂商名称",formType:"input",field: "DSKOS1" }, { name: '生成厂商名称', formType: 'input', field: 'DSKOS1' },
{ name: "生成厂商国别",formType:"input",field: "DSKOS2" }, { name: '生成厂商国别', formType: 'input', field: 'DSKOS2' },
{ name: "产品名称",formType:"input",field: "DSKOS3" }, { name: '产品名称', formType: 'input', field: 'DSKOS3' },
{ name: "装机量(台)",formType: "number",field: "DSKOS4"}, { name: '装机量(台)', formType: 'number', field: 'DSKOS4' },
{ name: "许可数量是否限量",formType:'radio-group',field:"DSKOS5",options: ["不限制许可数量", "有限制许可数量"] }, { name: '许可数量是否限量', formType: 'radio-group', field: 'DSKOS5', options: ['不限制许可数量', '有限制许可数量'] },
{ name: "许可数量",formType:"number",field: "DSKOS6" }, { name: '许可数量', formType: 'number', field: 'DSKOS6' },
{ name: "备注",formType:"input",field: "DSKOS100" }, { name: '备注', formType: 'input', field: 'DSKOS100' },
], ],
}, },
{ {
serialNumber: "1002", serialNumber: '1002',
code:"OFFICE", code: 'OFFICE',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "文字处理软件正版化率", project: '文字处理软件正版化率',
content: [ content: [
{ name: "正版化率",formType:'number',field:"C20A004" }, { name: '正版化率', formType: 'number', field: 'C20A004' },
{ name: "新增采购(万元)", formType:'number', field: "C20A005" }, { name: '新增采购(万元)', formType: 'number', field: 'C20A005' },
{ name: "升级维护费用(万元)",formType:"number", field: "C20A006" }, { name: '升级维护费用(万元)', formType: 'number', field: 'C20A006' },
{ name: "生成厂商名称",formType:"input",field: "OFFICE1" }, { name: '生成厂商名称', formType: 'input', field: 'OFFICE1' },
{ name: "生成厂商国别",formType:"input",field: "OFFICE2" }, { name: '生成厂商国别', formType: 'input', field: 'OFFICE2' },
{ name: "产品名称",formType:"input",field: "OFFICE3" }, { name: '产品名称', formType: 'input', field: 'OFFICE3' },
{ name: "装机量(台)",formType: "number",field: "OFFICE4"}, { name: '装机量(台)', formType: 'number', field: 'OFFICE4' },
{ name: "许可数量是否限量",formType:'radio-group',field:"OFFICE5",options: ["不限制许可数量", "有限制许可数量"] }, { name: '许可数量是否限量', formType: 'radio-group', field: 'OFFICE5', options: ['不限制许可数量', '有限制许可数量'] },
{ name: "许可数量",formType:"number",field: "OFFICE6" }, { name: '许可数量', formType: 'number', field: 'OFFICE6' },
{ name: "备注",formType:"input",field: "OFFICE100" }, { name: '备注', formType: 'input', field: 'OFFICE100' },
], ],
}, },
{ {
serialNumber: "1003", serialNumber: '1003',
code:"SVROS", code: 'SVROS',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "服务器操作系统正版化率", project: '服务器操作系统正版化率',
content: [ content: [
{ name: "正版化率",formType:'number',field:"C20A007" }, { name: '正版化率', formType: 'number', field: 'C20A007' },
{ name: "新增采购(万元)", formType:'number', field: "C20A008" }, { name: '新增采购(万元)', formType: 'number', field: 'C20A008' },
{ name: "升级维护费用(万元)",formType:"number", field: "C20A009" }, { name: '升级维护费用(万元)', formType: 'number', field: 'C20A009' },
{ name: "生成厂商名称",formType:"input",field: "SVROS1" }, { name: '生成厂商名称', formType: 'input', field: 'SVROS1' },
{ name: "生成厂商国别",formType:"input",field: "SVROS2" }, { name: '生成厂商国别', formType: 'input', field: 'SVROS2' },
{ name: "产品名称",formType:"input",field: "SVROS3" }, { name: '产品名称', formType: 'input', field: 'SVROS3' },
{ name: "装机量(台)",formType: "number",field: "SVROS4"}, { name: '装机量(台)', formType: 'number', field: 'SVROS4' },
{ name: "许可数量是否限量",formType:'radio-group',field:"SVROS5",options: ["不限制许可数量", "有限制许可数量"] }, { name: '许可数量是否限量', formType: 'radio-group', field: 'SVROS5', options: ['不限制许可数量', '有限制许可数量'] },
{ name: "许可数量",formType:"number",field: "SVROS6" }, { name: '许可数量', formType: 'number', field: 'SVROS6' },
{ name: "备注",formType:"input",field: "SVROS100" }, { name: '备注', formType: 'input', field: 'SVROS100' },
], ],
}, },
{ {
serialNumber: "1004", serialNumber: '1004',
code:"DB", code: 'DB',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "数据库系统正版化率", project: '数据库系统正版化率',
content: [ content: [
{ name: "正版化率",formType:'number',field:"C20A010" }, { name: '正版化率', formType: 'number', field: 'C20A010' },
{ name: "新增采购(万元)", formType:'number', field: "C20A011" }, { name: '新增采购(万元)', formType: 'number', field: 'C20A011' },
{ name: "升级维护费用(万元)",formType:"number", field: "C20A012" }, { name: '升级维护费用(万元)', formType: 'number', field: 'C20A012' },
{ name: "生成厂商名称",formType:"input",field: "DB1" }, { name: '生成厂商名称', formType: 'input', field: 'DB1' },
{ name: "生成厂商国别",formType:"input",field: "DB2" }, { name: '生成厂商国别', formType: 'input', field: 'DB2' },
{ name: "产品名称",formType:"input",field: "DB3" }, { name: '产品名称', formType: 'input', field: 'DB3' },
{ name: "装机量(台)",formType: "number",field: "DB4"}, { name: '装机量(台)', formType: 'number', field: 'DB4' },
{ name: "许可数量是否限量",formType:'radio-group',field:"DB5",options: ["不限制许可数量", "有限制许可数量"] }, { name: '许可数量是否限量', formType: 'radio-group', field: 'DB5', options: ['不限制许可数量', '有限制许可数量'] },
{ name: "许可数量",formType:"number",field: "DB6" }, { name: '许可数量', formType: 'number', field: 'DB6' },
{ name: "备注",formType:"input",field: "DB100" }, { name: '备注', formType: 'input', field: 'DB100' },
], ],
}, },
{ {
serialNumber: "1005", serialNumber: '1005',
code:"MDWR", code: 'MDWR',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "中间件系统正版化率", project: '中间件系统正版化率',
content: [ content: [
{ name: "正版化率",formType:'number',field:"C20A013" }, { name: '正版化率', formType: 'number', field: 'C20A013' },
{ name: "新增采购(万元)", formType:'number', field: "C20A014" }, { name: '新增采购(万元)', formType: 'number', field: 'C20A014' },
{ name: "升级维护费用(万元)",formType:"number", field: "C20A015" }, { name: '升级维护费用(万元)', formType: 'number', field: 'C20A015' },
{ name: "生成厂商名称",formType:"input",field: "MDWR1" }, { name: '生成厂商名称', formType: 'input', field: 'MDWR1' },
{ name: "生成厂商国别",formType:"input",field: "MDWR2" }, { name: '生成厂商国别', formType: 'input', field: 'MDWR2' },
{ name: "产品名称",formType:"input",field: "MDWR3" }, { name: '产品名称', formType: 'input', field: 'MDWR3' },
{ name: "装机量(台)",formType: "number",field: "MDWR4"}, { name: '装机量(台)', formType: 'number', field: 'MDWR4' },
{ name: "许可数量是否限量",formType:'radio-group',field:"MDWR5",options: ["不限制许可数量", "有限制许可数量"] }, { name: '许可数量是否限量', formType: 'radio-group', field: 'MDWR5', options: ['不限制许可数量', '有限制许可数量'] },
{ name: "许可数量",formType:"number",field: "MDWR6" }, { name: '许可数量', formType: 'number', field: 'MDWR6' },
{ name: "备注",formType:"input",field: "MDWR100" }, { name: '备注', formType: 'input', field: 'MDWR100' },
], ],
}, },
{ {
serialNumber: "1006", serialNumber: '1006',
code:"ANTIVRS", code: 'ANTIVRS',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "防病毒软件正版化率", project: '防病毒软件正版化率',
content: [ content: [
{ name: "正版化率",formType:'number',field:"C20A016" }, { name: '正版化率', formType: 'number', field: 'C20A016' },
{ name: "新增采购(万元)", formType:'number', field: "C20A017" }, { name: '新增采购(万元)', formType: 'number', field: 'C20A017' },
{ name: "升级维护费用(万元)",formType:"number", field: "C20A018" }, { name: '升级维护费用(万元)', formType: 'number', field: 'C20A018' },
{ name: "生成厂商名称",formType:"input",field: "ANTIVRS1" }, { name: '生成厂商名称', formType: 'input', field: 'ANTIVRS1' },
{ name: "生成厂商国别",formType:"input",field: "ANTIVRS2" }, { name: '生成厂商国别', formType: 'input', field: 'ANTIVRS2' },
{ name: "产品名称",formType:"input",field: "ANTIVRS3" }, { name: '产品名称', formType: 'input', field: 'ANTIVRS3' },
{ name: "装机量(台)",formType: "number",field: "ANTIVRS4"}, { name: '装机量(台)', formType: 'number', field: 'ANTIVRS4' },
{ name: "许可数量是否限量",formType:'radio-group',field:"ANTIVRS5",options: ["不限制许可数量", "有限制许可数量"] }, { name: '许可数量是否限量', formType: 'radio-group', field: 'ANTIVRS5', options: ['不限制许可数量', '有限制许可数量'] },
{ name: "许可数量",formType:"number",field: "ANTIVRS6" }, { name: '许可数量', formType: 'number', field: 'ANTIVRS6' },
{ name: "备注",formType:"input",field: "ANTIVRS100" }, { name: '备注', formType: 'input', field: 'ANTIVRS100' },
], ],
}, },
], ],
}, },
{ {
serialNumber: "2", serialNumber: '2',
project: "硬件产品使用情况", project: '硬件产品使用情况',
code: 'HDWR', code: 'HDWR',
content: [ content: [
{ type: "text", value: "<strong>硬件产品整体情况:</strong>" }, { type: 'text', value: '<strong>硬件产品整体情况:</strong>' },
{ type: "br" }, { type: 'br' },
{ type: "text", value: "台式计算机:" }, { type: 'text', value: '台式计算机:' },
{ type: "number", value: "", placeholder: "台", field: "HDWR1" }, { type: 'number', value: '', placeholder: '台', field: 'HDWR1' },
{ type: "text", value: ",便携式计算机:" }, { type: 'text', value: ',便携式计算机:' },
{ type: "number", value: "", placeholder: "台", field: "HDWR2" }, { type: 'number', value: '', placeholder: '台', field: 'HDWR2' },
{ type: "br" }, { type: 'br' },
{ type: "text", value: "服务器及主机:" }, { type: 'text', value: '服务器及主机:' },
{ type: "number", value: "", placeholder: "台", field: "HDWR3" }, { type: 'number', value: '', placeholder: '台', field: 'HDWR3' },
{ type: "text", value: ",其中使用时间超过8年的:" }, { type: 'text', value: ',其中使用时间超过8年的:' },
{ type: "number", value: "", placeholder: "台", field: "COL11" }, { type: 'number', value: '', placeholder: '台', field: 'COL11' },
{ type: "br" }, { type: 'br' },
{ type: "text", value: "存储设备(磁盘阵列设备):" }, { type: 'text', value: '存储设备(磁盘阵列设备):' },
{ type: "number", value: "", placeholder: "台", field: "HDWR5" }, { type: 'number', value: '', placeholder: '台', field: 'HDWR5' },
{ type: "text", value: ",其中使用时间超过8年的:" }, { type: 'text', value: ',其中使用时间超过8年的:' },
{ type: "number", value: "", placeholder: "台", field: "HDWR12" }, { type: 'number', value: '', placeholder: '台', field: 'HDWR12' },
{ type: "br" }, { type: 'br' },
{ type: "text", value: "网络设备:" }, { type: 'text', value: '网络设备:' },
{ type: "number", value: "", placeholder: "台", field: "HDWR7" }, { type: 'number', value: '', placeholder: '台', field: 'HDWR7' },
{ type: "text", value: ",其中使用时间超过10年的:" }, { type: 'text', value: ',其中使用时间超过10年的:' },
{ type: "number", value: "", placeholder: "台", field: "HDWR13" }, { type: 'number', value: '', placeholder: '台', field: 'HDWR13' },
{ type: "br" }, { type: 'br' },
{ type: "text", value: "信息安全设备:" }, { type: 'text', value: '信息安全设备:' },
{ type: "number", value: "", placeholder: "台", field: "HDWR9" }, { type: 'number', value: '', placeholder: '台', field: 'HDWR9' },
{ type: "text", value: ",其中使用时间超过6年的:" }, { type: 'text', value: ',其中使用时间超过6年的:' },
{ type: "number", value: "", placeholder: "台", field: "HDWR10" }, { type: 'number', value: '', placeholder: '台', field: 'HDWR10' },
{ type: "br" }, { type: 'br' },
{ type: "text", value: "硬件产品整体情况备注" }, { type: 'text', value: '硬件产品整体情况备注' },
{ type: "textarea", value: "", placeholder: "", field: "HDWR11" }, { type: 'textarea', value: '', placeholder: '', field: 'HDWR11' },
{ type: "br" }, { type: 'br' },
{ type: "br" }, { type: 'br' },
{ type: "text", value: "<strong>硬件设备使用情况统计(每类硬件只填写使用数量最多的5种):</strong>" }, { type: 'text', value: '<strong>硬件设备使用情况统计(每类硬件只填写使用数量最多的5种):</strong>' },
{ {
serialNumber: "2001", serialNumber: '2001',
code:"DSK", code: 'DSK',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "台式计算机", project: '台式计算机',
content: [ content: [
{ name: "厂商名称:",formType:'input',field:"DSK1" }, { name: '厂商名称:', formType: 'input', field: 'DSK1' },
{ name: "厂商国别", formType:'input', field: "DSK2" }, { name: '厂商国别', formType: 'input', field: 'DSK2' },
{ name: "产品名称:",formType:"input",field: "DSK3" }, { name: '产品名称:', formType: 'input', field: 'DSK3' },
{ name: "数量(台)",formType:"number",field: "DSK4" }, { name: '数量(台)', formType: 'number', field: 'DSK4' },
{ name: "承载重要信息系统情况",formType:"input",field: "C24A001" }, { name: '承载重要信息系统情况', formType: 'input', field: 'C24A001' },
{ name: "备注",formType:"input",field: "DSK100" }, { name: '备注', formType: 'input', field: 'DSK100' },
], ],
}, },
{ {
serialNumber: "2002", serialNumber: '2002',
code:"LPTP", code: 'LPTP',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "便携式计算机", project: '便携式计算机',
content: [ content: [
{ name: "厂商名称:",formType:'input',field:"LPTP1" }, { name: '厂商名称:', formType: 'input', field: 'LPTP1' },
{ name: "厂商国别", formType:'input', field: "LPTP2" }, { name: '厂商国别', formType: 'input', field: 'LPTP2' },
{ name: "产品名称:",formType:"input",field: "LPTP3" }, { name: '产品名称:', formType: 'input', field: 'LPTP3' },
{ name: "数量(台)",formType:"number",field: "LPTP4" }, { name: '数量(台)', formType: 'number', field: 'LPTP4' },
{ name: "承载重要信息系统情况",formType:"input",field: "C24A002" }, { name: '承载重要信息系统情况', formType: 'input', field: 'C24A002' },
{ name: "备注",formType:"input",field: "LPTP100" }, { name: '备注', formType: 'input', field: 'LPTP100' },
], ],
}, },
{ {
serialNumber: "2003", serialNumber: '2003',
code:"BSVR", code: 'BSVR',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "大中型机", project: '大中型机',
content: [ content: [
{ name: "厂商名称:",formType:'input',field:"BSVR1" }, { name: '厂商名称:', formType: 'input', field: 'BSVR1' },
{ name: "厂商国别", formType:'input', field: "BSVR2" }, { name: '厂商国别', formType: 'input', field: 'BSVR2' },
{ name: "产品名称:",formType:"input",field: "BSVR3" }, { name: '产品名称:', formType: 'input', field: 'BSVR3' },
{ name: "数量(台)",formType:"number",field: "BSVR4" }, { name: '数量(台)', formType: 'number', field: 'BSVR4' },
{ name: "承载重要信息系统情况",formType:"input",field: "C24A003" }, { name: '承载重要信息系统情况', formType: 'input', field: 'C24A003' },
{ name: "备注",formType:"input",field: "BSVR100" }, { name: '备注', formType: 'input', field: 'BSVR100' },
], ],
}, },
{ {
serialNumber: "2004", serialNumber: '2004',
code:"SSVR", code: 'SSVR',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "小型机", project: '小型机',
content: [ content: [
{ name: "厂商名称:",formType:'input',field:"SSVR1" }, { name: '厂商名称:', formType: 'input', field: 'SSVR1' },
{ name: "厂商国别", formType:'input', field: "SSVR2" }, { name: '厂商国别', formType: 'input', field: 'SSVR2' },
{ name: "产品名称:",formType:"input",field: "SSVR3" }, { name: '产品名称:', formType: 'input', field: 'SSVR3' },
{ name: "数量(台)",formType:"number",field: "SSVR4" }, { name: '数量(台)', formType: 'number', field: 'SSVR4' },
{ name: "承载重要信息系统情况",formType:"input",field: "C24A004" }, { name: '承载重要信息系统情况', formType: 'input', field: 'C24A004' },
{ name: "备注",formType:"input",field: "SSVR100" }, { name: '备注', formType: 'input', field: 'SSVR100' },
], ],
}, },
{ {
serialNumber: "2005", serialNumber: '2005',
code:"PCSVR", code: 'PCSVR',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "PC服务器", project: 'PC服务器',
content: [ content: [
{ name: "厂商名称:",formType:'input',field:"PCSVR1" }, { name: '厂商名称:', formType: 'input', field: 'PCSVR1' },
{ name: "厂商国别", formType:'input', field: "PCSVR2" }, { name: '厂商国别', formType: 'input', field: 'PCSVR2' },
{ name: "产品名称:",formType:"input",field: "PCSVR3" }, { name: '产品名称:', formType: 'input', field: 'PCSVR3' },
{ name: "数量(台)",formType:"number",field: "PCSVR4" }, { name: '数量(台)', formType: 'number', field: 'PCSVR4' },
{ name: "承载重要信息系统情况",formType:"input",field: "C24A005" }, { name: '承载重要信息系统情况', formType: 'input', field: 'C24A005' },
{ name: "备注",formType:"input",field: "PCSVR100" }, { name: '备注', formType: 'input', field: 'PCSVR100' },
], ],
}, },
{ {
serialNumber: "2006", serialNumber: '2006',
code:"STRG", code: 'STRG',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "存储设备", project: '存储设备',
content: [ content: [
{ name: "厂商名称:",formType:'input',field:"STRG1" }, { name: '厂商名称:', formType: 'input', field: 'STRG1' },
{ name: "厂商国别", formType:'input', field: "STRG2" }, { name: '厂商国别', formType: 'input', field: 'STRG2' },
{ name: "产品名称:",formType:"input",field: "STRG3" }, { name: '产品名称:', formType: 'input', field: 'STRG3' },
{ name: "数量(台)",formType:"number",field: "STRG4" }, { name: '数量(台)', formType: 'number', field: 'STRG4' },
{ name: "承载重要信息系统情况",formType:"input",field: "C24A006" }, { name: '承载重要信息系统情况', formType: 'input', field: 'C24A006' },
{ name: "备注",formType:"input",field: "STRG100" }, { name: '备注', formType: 'input', field: 'STRG100' },
], ],
}, },
{ {
serialNumber: "2007", serialNumber: '2007',
code:"NTWK", code: 'NTWK',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "网络设备", project: '网络设备',
content: [ content: [
{ name: "厂商名称:",formType:'input',field:"NTWK1" }, { name: '厂商名称:', formType: 'input', field: 'NTWK1' },
{ name: "厂商国别", formType:'input', field: "NTWK2" }, { name: '厂商国别', formType: 'input', field: 'NTWK2' },
{ name: "产品名称:",formType:"input",field: "NTWK3" }, { name: '产品名称:', formType: 'input', field: 'NTWK3' },
{ name: "数量(台)",formType:"number",field: "NTWK4" }, { name: '数量(台)', formType: 'number', field: 'NTWK4' },
{ name: "承载重要信息系统情况",formType:"input",field: "C24A007" }, { name: '承载重要信息系统情况', formType: 'input', field: 'C24A007' },
{ name: "备注",formType:"input",field: "NTWK100" }, { name: '备注', formType: 'input', field: 'NTWK100' },
], ],
}, },
{ {
serialNumber: "2008", serialNumber: '2008',
code:"INFOSF", code: 'INFOSF',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "信息安全设备", project: '信息安全设备',
content: [ content: [
{ name: "厂商名称:",formType:'input',field:"INFOSF1" }, { name: '厂商名称:', formType: 'input', field: 'INFOSF1' },
{ name: "厂商国别", formType:'input', field: "INFOSF2" }, { name: '厂商国别', formType: 'input', field: 'INFOSF2' },
{ name: "产品名称:",formType:"input",field: "INFOSF3" }, { name: '产品名称:', formType: 'input', field: 'INFOSF3' },
{ name: "数量(台)",formType:"number",field: "INFOSF4" }, { name: '数量(台)', formType: 'number', field: 'INFOSF4' },
{ name: "承载重要信息系统情况",formType:"input",field: "C24A008" }, { name: '承载重要信息系统情况', formType: 'input', field: 'C24A008' },
{ name: "备注",formType:"input",field: "INFOSF100" }, { name: '备注', formType: 'input', field: 'INFOSF100' },
], ],
}, },
], ],
}, },
{ {
serialNumber: "3", serialNumber: '3',
project: "新技术应用情况", project: '新技术应用情况',
code: 'TB5003', code: 'TB5003',
content: [ content: [
{ type: "br" }, { type: 'br' },
{ type: "text", value: "<strong>虚拟化和私有云应用情况:</strong>" }, { type: 'text', value: '<strong>虚拟化和私有云应用情况:</strong>' },
{ type: "br" }, { type: 'br' },
{ {
serialNumber: "3001", serialNumber: '3001',
code:"SOFTWARE", code: 'SOFTWARE',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "虚拟化软件", project: '虚拟化软件',
content: [ content: [
{ name: "厂商名称:",formType:'input',field:"C20A019" }, { name: '厂商名称:', formType: 'input', field: 'C20A019' },
{ name: "厂商国别", formType:'input', field: "C20A020" }, { name: '厂商国别', formType: 'input', field: 'C20A020' },
{ name: "产品名称:",formType:"input",field: "C20A021" }, { name: '产品名称:', formType: 'input', field: 'C20A021' },
{ name: "应用场景简述",formType:"input",field: "C20A022" }, { name: '数量(许可)', formType: 'number', field: 'C20A023' },
{ name: "数量(许可)",formType:"number",field: "C20A023" }, { name: '备注', formType: 'input', field: 'C20A024' },
{ name: "备注",formType:"input",field: "C20A024" },
], ],
}, },
{ {
serialNumber: "3002", serialNumber: '3002',
code:"CLOUDMANAGE", code: 'CLOUDMANAGE',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "云管理软件", project: '云管理软件',
content: [ content: [
{ name: "厂商名称",formType:'input',field:"C20A025" }, { name: '厂商名称', formType: 'input', field: 'C20A025' },
{ name: "厂商国别", formType:'input', field: "C20A026" }, { name: '厂商国别', formType: 'input', field: 'C20A026' },
{ name: "产品名称",formType:"input",field: "C20A027" }, { name: '产品名称', formType: 'input', field: 'C20A027' },
{ name: "应用场景简述",formType:"input",field: "C20A028" }, { name: '应用场景简述', formType: 'input', field: 'C20A028' },
{ name: "数量(台/套)",formType:"number",field: "C20A029" }, { name: '数量(台/套)', formType: 'number', field: 'C20A029' },
{ name: "备注",formType:"input",field: "C20A030" }, { name: '备注', formType: 'input', field: 'C20A030' },
], ],
}, },
{ type: "text", value: "<strong>云计算服务应用情况:</strong>" }, { type: 'text', value: '<strong>云计算服务应用情况:</strong>' },
{ type: "br" }, { type: 'br' },
{ {
serialNumber: "3003", serialNumber: '3003',
code:"MACHINE", code: 'MACHINE',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "云主机", project: '云主机',
content: [ content: [
{ name: "厂商名称:",formType:'input',field:"C20A031" }, { name: '厂商名称:', formType: 'input', field: 'C20A031' },
{ name: "厂商国别", formType:'input', field: "C20A032" }, { name: '厂商国别', formType: 'input', field: 'C20A032' },
{ name: "产品名称:",formType:"input",field: "C20A033" }, { name: '产品名称:', formType: 'input', field: 'C20A033' },
{ name: "云主机应用场景简述",formType:"input",field: "C20A034" }, { name: '云主机应用场景简述', formType: 'input', field: 'C20A034' },
{ name: "数量(台)",formType:"number",field: "C20A035" }, { name: '数量(台)', formType: 'number', field: 'C20A035' },
{ name: "备注",formType:"input",field: "C20A036" }, { name: '备注', formType: 'input', field: 'C20A036' },
], ],
}, },
{ type: 'br' },
{ type: "br" },
{ {
serialNumber: "3004", serialNumber: '3004',
code:"STORAGE", code: 'STORAGE',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "云存储", project: '云存储',
content: [ content: [
{ name: "厂商名称:",formType:'input',field:"C20A037" }, { name: '厂商名称:', formType: 'input', field: 'C20A037' },
{ name: "厂商国别", formType:'input', field: "C20A038" }, { name: '厂商国别', formType: 'input', field: 'C20A038' },
{ name: "产品名称:",formType:"input",field: "C20A039" }, { name: '产品名称:', formType: 'input', field: 'C20A039' },
{ name: "应用场景简述",formType:"input",field: "C20A040" }, { name: '应用场景简述', formType: 'input', field: 'C20A040' },
{ name: "数量(T)",formType:"number",field: "C20A041" }, { name: '数量(TB)', formType: 'number', field: 'C20A041' },
{ name: "备注",formType:"input",field: "C20A042" }, { name: '备注', formType: 'input', field: 'C20A042' },
], ],
}, },
{ type: "br" }, { type: 'br' },
{ {
serialNumber: "3005", serialNumber: '3005',
code:"CDB", code: 'CDB',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "云数据库", project: '云数据库',
content: [ content: [
{ name: "厂商名称:",formType:'input',field:"C20A043" }, { name: '厂商名称:', formType: 'input', field: 'C20A043' },
{ name: "厂商国别", formType:'input', field: "C20A044" }, { name: '厂商国别', formType: 'input', field: 'C20A044' },
{ name: "产品名称:",formType:"input",field: "C20A045" }, { name: '产品名称:', formType: 'input', field: 'C20A045' },
{ name: "应用场景简述",formType:"input",field: "C20A046" }, { name: '应用场景简述', formType: 'input', field: 'C20A046' },
{ name: "数量(套)",formType:"number",field: "C20A047" }, { name: '备注', formType: 'input', field: 'C20A048' },
{ name: "备注",formType:"input",field: "C20A048" },
], ],
}, },
{ type: 'br' },
{ type: "br" },
{ {
serialNumber: "3006", serialNumber: '3006',
code:"NET", code: 'NET',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "云带宽(含CDN)", project: '云带宽(含CDN)',
content: [ content: [
{ name: "厂商名称:",formType:'input',field:"C20A049" }, { name: '厂商名称:', formType: 'input', field: 'C20A049' },
{ name: "厂商国别", formType:'input', field: "C20A050" }, { name: '厂商国别', formType: 'input', field: 'C20A050' },
{ name: "产品名称:",formType:"input",field: "C20A051" }, { name: '产品名称:', formType: 'input', field: 'C20A051' },
{ name: "应用场景简述",formType:"input",field: "C20A052" }, { name: '应用场景简述', formType: 'input', field: 'C20A052' },
{ name: "数量(M)",formType:"number",field: "C20A053" }, { name: '数量(M)', formType: 'number', field: 'C20A053' },
{ name: "备注",formType:"input",field: "C20A054" }, { name: '备注', formType: 'input', field: 'C20A054' },
], ],
}, },
{ type: "br" }, { type: 'br' },
{ {
serialNumber: "3007", serialNumber: '3007',
code:"SECURITY", code: 'SECURITY',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "云安全", project: '云安全',
content: [ content: [
{ name: "厂商名称:",formType:"input",field: "C20A055" }, { name: '厂商名称:', formType: 'input', field: 'C20A055' },
{ name: "厂商国别", formType:'input', field: "C20A056" }, { name: '厂商国别', formType: 'input', field: 'C20A056' },
{ name: "产品或服务名称", formType:'input', field: "C20A057" }, { name: '产品或服务名称', formType: 'input', field: 'C20A057' },
{ name: "应用场景简述",formType:"input",field: "C20A058" }, { name: '应用场景简述', formType: 'input', field: 'C20A058' },
{ name: "数量(许可)",formType:"number",field: "C20A059" }, { name: '备注', formType: 'input', field: 'C20A060' },
{ name: "备注",formType:"input",field: "C20A060" },
], ],
}, },
{ type: 'br' },
{ type: "br" }, { type: 'text', value: '<strong>大数据和人工智能产品及服务应用情况:</strong>' },
{ type: "text", value: "<strong>大数据和人工智能产品及服务应用情况:</strong>" },
{ {
serialNumber: "3008", serialNumber: '3008',
code:"PRODUCT", code: 'PRODUCT',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "大数据产品", project: '大数据产品',
content: [ content: [
{ name: "厂商名称:",formType:"input",field: "C20A061" }, { name: '厂商名称:', formType: 'input', field: 'C20A061' },
{ name: "厂商国别", formType:'input', field: "C20A062" }, { name: '厂商国别', formType: 'input', field: 'C20A062' },
{ name: "产品或服务名称", formType:'input', field: "C20A063" }, { name: '产品或服务名称', formType: 'input', field: 'C20A063' },
{ name: "应用场景简述",formType:"input",field: "C20A064" }, { name: '应用场景简述', formType: 'input', field: 'C20A064' },
{ name: "数量(许可)",formType:"number",field: "C20A065" }, { name: '数量(台/套)', formType: 'number', field: 'C20A065' },
{ name: "备注",formType:"input",field: "C20A066" }, { name: '备注', formType: 'input', field: 'C20A066' },
], ],
}, },
{ {
serialNumber: "3009", serialNumber: '3009',
code:"DATASERVICE", code: 'DATASERVICE',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "数据服务", project: '数据服务',
content: [ content: [
{ name: "产品名称:",formType:"input",field: "C20A067" }, { name: '产品名称:', formType: 'input', field: 'C20A067' },
{ name: "厂商国别", formType:'input', field: "C20A068" }, { name: '厂商国别', formType: 'input', field: 'C20A068' },
{ name: "产品或服务名称", formType:'input', field: "C20A069" }, { name: '产品或服务名称', formType: 'input', field: 'C20A069' },
{ name: "应用场景简述",formType:"input",field: "C20A070" }, { name: '应用场景简述', formType: 'input', field: 'C20A070' },
{ name: "数量(许可)",formType:"number",field: "C20A071" }, { name: '备注', formType: 'input', field: 'C20A072' },
{ name: "备注",formType:"input",field: "C20A072" },
], ],
}, },
{ {
serialNumber: "30010", serialNumber: '30010',
code:"AIPRODUCT", code: 'AIPRODUCT',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "人工智能产品", project: '人工智能产品',
content: [ content: [
{ name: "厂商名称:",formType:"input",field: "C20A073" }, { name: '厂商名称:', formType: 'input', field: 'C20A073' },
{ name: "厂商国别", formType:'input', field: "C20A074" }, { name: '厂商国别', formType: 'input', field: 'C20A074' },
{ name: "产品或服务名称", formType:'input', field: "C20A075" }, { name: '产品或服务名称', formType: 'input', field: 'C20A075' },
{ name: "应用场景简述",formType:"input",field: "C20A076" }, { name: '应用场景简述', formType: 'input', field: 'C20A076' },
{ name: "数量(许可)",formType:"number",field: "C20A077" }, { name: '数量(台/套)', formType: 'number', field: 'C20A077' },
{ name: "备注",formType:"input",field: "C20A078" }, { name: '备注', formType: 'input', field: 'C20A078' },
], ],
}, },
{ {
serialNumber: "30011", serialNumber: '30011',
code:"AISERVICE", code: 'AISERVICE',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "人工智能服务", project: '人工智能服务',
content: [ content: [
{ name: "厂商名称:",formType:"input",field: "C20A079" }, { name: '厂商名称:', formType: 'input', field: 'C20A079' },
{ name: "厂商国别", formType:'input', field: "C20A081" }, { name: '厂商国别', formType: 'input', field: 'C20A081' },
{ name: "产品或服务名称", formType:'input', field: "C20A082" }, { name: '产品或服务名称', formType: 'input', field: 'C20A082' },
{ name: "应用场景简述",formType:"input",field: "C20A083" }, { name: '应用场景简述', formType: 'input', field: 'C20A083' },
{ name: "备注",formType:"input",field: "C20A085" }, { name: '备注', formType: 'input', field: 'C20A085' },
], ],
}, },
{ type: "br" }, { type: 'br' },
{ type: "text", value: "<strong> 区块链技术应用情况</strong>" }, { type: 'text', value: '<strong> 区块链技术应用情况</strong>' },
{ {
serialNumber: "30012", serialNumber: '30012',
code:"BLOCKCHAIN", code: 'BLOCKCHAIN',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "区块链技术应用", project: '区块链技术应用',
content: [ content: [
{ name: "应用系统名称", formType:'input', field: "C20A086" }, { name: '应用系统名称', formType: 'input', field: 'C20A086' },
{ name: "部署形式",formType:'radio-group',field:"C20A087",options: ["私有链", "联盟链","公有链"] }, { name: '部署形式', formType: 'radio-group', field: 'C20A087', options: ['私有链', '联盟链', '公有链'] },
{ name: "应用场景简述",formType:"input",field: "C20A088" }, { name: '应用场景简述', formType: 'input', field: 'C20A088' },
{ name: "建设方或运营方名称",formType:"input",field: "C20A089" }, { name: '建设方或运营方名称', formType: 'input', field: 'C20A089' },
{ name: "备注",formType:"input",field: "C20A090" }, { name: '备注', formType: 'input', field: 'C20A090' },
], ],
}, },
{ type: 'br' },
{ type: "br" }, { type: 'text', value: '<strong>北斗系统应用情况:</strong>' },
{ type: "text", value: "<strong>北斗系统应用情况:</strong>" },
{ {
serialNumber: "30013", serialNumber: '30013',
code:"C20B003", code: 'C20B003',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "在用授时产品", project: '在用授时产品',
content: [ content: [
{ name: "授时产品(含服务)名称", formType:'input', field: "C20B004" }, { name: '授时产品(含服务)名称', formType: 'input', field: 'C20B004' },
{ name: "厂商及型号",formType:"input",field: "C20B005" }, { name: '厂商及型号', formType: 'input', field: 'C20B005' },
{ name: "产品数量",formType:"number",field: "C20B006" }, { name: '产品数量(台/项)', formType: 'number', field: 'C20B006' },
{ name: "应用场景简述",formType:"input",field: "C20B007" }, { name: '应用场景简述', formType: 'input', field: 'C20B007' },
{ name: "是否主用北斗",formType:"radio-group",field: "C20B008",options: ["是", "否"] }, { name: '是否主用北斗', formType: 'radio-group', field: 'C20B008', options: ['是', '否'] },
{ name: "备注",formType:"input",field: "C20B009" }, { name: '备注', formType: 'input', field: 'C20B009' },
], ],
}, },
{ {
serialNumber: "30014", serialNumber: '30014',
code:"C20B009", code: 'C20B009',
type:"MultiColumnTable", type: 'MultiColumnTable',
project: "在用的提供定位功能的SDK/API", project: '在用的提供定位功能的SDK/API',
content: [ content: [
{ name: "授SDK/API名称", formType:'input', field: "C20B010" }, { name: 'SDK/API名称', formType: 'input', field: 'C20B010' },
{ name: "开发商(版本号)",formType:"input",field: "C20B011" }, { name: '开发商(版本号)', formType: 'input', field: 'C20B011' },
{ name: "应用场景简述",formType:"number",field: "C20B012" }, { name: '应用场景简述', formType: 'number', field: 'C20B012' },
{ name: "是否主用北斗",formType:"radio-group",field: "C20B013",options: ["是", "否"] }, { name: '是否主用北斗', formType: 'radio-group', field: 'C20B013', options: ['是', '否'] },
{ name: "备注",formType:"input",field: "C20B015" }, { name: '备注', formType: 'input', field: 'C20B015' },
], ],
}, },
{ type: "br" }, { type: 'br' },
{ type: "text", value: "<strong>IPv6部署情况:</strong>" }, { type: 'text', value: '<strong>IPv6部署情况:</strong>' },
{ type: "br" }, { type: 'br' },
{ {
serialNumber: "30014", serialNumber: '30014',
project: "IPv6部署情况", project: 'IPv6部署情况',
code:"C20B016", code: 'C20B016',
type:"AttachTable", type: 'AttachTable',
content:[ content: [
{ {
field: 'col1',title: '类型', width: '20%', field: 'col1',
},{ title: '类型',
field: 'col2',title: 'Web浏览器数量', width: '15%',slots: { default: 'form_default' }, width: '20%',
},{ },
field: 'col3',title: 'APP客户端数量', width: '15%',slots: { default: 'form_default' }, {
},{ field: 'col2',
field: 'col4',title: 'PC客户端数量', width: '15%',slots: { default: 'form_default' }, title: 'Web浏览器数量',
},{ width: '15%',
field: 'col5',title: '合计数量:', width: '15%',slots: { default: 'form_default' }, slots: { default: 'form_default' },
},{ },
field: 'col6',title: '备注', width: '20%',slots: { default: 'form_default' }, {
field: 'col3',
title: 'APP客户端数量',
width: '15%',
slots: { default: 'form_default' },
},
{
field: 'col4',
title: 'PC客户端数量',
width: '15%',
slots: { default: 'form_default' },
},
{
field: 'col5',
title: '合计数量:',
width: '15%',
slots: { default: 'form_default' },
},
{
field: 'col6',
title: '备注',
width: '20%',
slots: { default: 'form_default' },
}, },
], ],
datas: [ datas: [
{ {
col1: "应用系统数量(个)", col1: '应用系统数量(个)',
col2:{ value:"",formType:'number',field: "C20B017"}, col2: { value: '', formType: 'number', field: 'C20B017' },
col3:{ value:"",formType:'number',field: "C20B018"}, col3: { value: '', formType: 'number', field: 'C20B018' },
col4:{ value:"",formType:'number',field: "C20B019"}, col4: { value: '', formType: 'number', field: 'C20B019' },
col5:{ value:"", formType:'number',field: "C20B020"}, col5: { value: '', formType: 'number', field: 'C20B020' },
col6:{ value:"", formType:'input',field: "C20B021"}, col6: { value: '', formType: 'input', field: 'C20B021' },
}, },
{ {
col1: "完成改造数量(个)", col1: '完成改造数量(个)',
col2:{ formType:'number',field: "C20B022"}, col2: { formType: 'number', field: 'C20B022' },
col3:{ formType:'number',field: "C20B023"}, col3: { formType: 'number', field: 'C20B023' },
col4:{ formType:'number',field: "C20B024"}, col4: { formType: 'number', field: 'C20B024' },
col5:{ formType:'number',field: "C20B025"}, col5: { formType: 'number', field: 'C20B025' },
col6:{ formType:'input',field: "C20B026"}, col6: { formType: 'input', field: 'C20B026' },
}, },
], ],
calcSum:{ calcSum: {
tp:true, tp: true,
rows: { rows: {
"col5":["col2","col3","col4"] col5: ['col2', 'col3', 'col4'],
}, },
} },
}, },
], ],
}, },
{ {
serialNumber: "4", serialNumber: '4',
project: "信息系统软硬件服务支持情况", project: '信息系统软硬件服务支持情况',
code: 'SPPRT', code: 'SPPRT',
content: [ content: [
{ type: "text", value: "存在仍在使用供应商已停止支持的软件或硬件平台的重要信息系统:" }, { type: 'text', value: '存在仍在使用供应商已停止支持的软件或硬件平台的重要信息系统:' },
{ type: "br" }, { type: 'br' },
{ {
type: "yesno", type: 'yesno',
field: "SPPRT1", field: 'SPPRT1',
extraFields: [ extraFields: [
{ label: "总数", formType:'number', field: "SPPRT2" }, { label: '总数', formType: 'number', field: 'SPPRT2' },
{ label: "具体系统名称", field: "SPPRT3", formType: "input" }, { label: '具体系统名称', field: 'SPPRT3', formType: 'input' },
{ label: "其中已停止支持的硬件平台数量",formType:'number', field: "SPPRT4",unit:"个"}, { label: '其中已停止支持的硬件平台数量', formType: 'number', field: 'SPPRT4', unit: '个' },
{ label: "已停止支持的软件平台数量",formType:'number', field: "SPPRT5",unit:"个" } { label: '已停止支持的软件平台数量', formType: 'number', field: 'SPPRT5', unit: '个' },
], ],
} },
], ],
}, },
{ type: "br" }, { type: 'br' },
{ {
serialNumber: "5", serialNumber: '5',
project: "附件", project: '附件',
code:"ATTACH", code: 'ATTACH',
type:"AttachTable", type: 'AttachTable',
content:[ content: [
{ {
field: 'col1',title: '名称', width:'20%', field: 'col1',
},{ title: '名称',
field: 'col2',title: '附件索引', slots: { default: 'form_default' }, width: '20%',
},{ },
field: 'col3',title: '备注', width: '20%',slots: { default: 'form_default' }, {
field: 'col2',
title: '附件索引',
slots: { default: 'form_default' },
},
{
field: 'col3',
title: '备注',
width: '20%',
slots: { default: 'form_default' },
}, },
], ],
datas: [ datas: [
{ {
col1: "软件正版化规章制度", col1: '软件正版化规章制度',
col2:{ formType:'input',field: "ATTACH1"}, col2: { formType: 'input', field: 'ATTACH1' },
col3:{ formType:'input',field: "ATTACH100"}, col3: { formType: 'input', field: 'ATTACH100' },
} },
], ],
}, },
]; ];
<template> <template>
<div class="bank-report-table" style="height: 80vh;"> <div class="bank-report-table" style="height: 80vh">
<vxe-toolbar> <vxe-toolbar>
<template #buttons> <template #buttons>
<div style="margin:10px"> <div style="margin: 10px">
<span style="font-weight: bold"> 填报任务:{{ queryParam?.taskName }} </span> <span style="font-weight: bold"> 填报任务:{{ queryParam?.taskName }} </span>
<span style="font-weight: bold;margin-left:20px"> 表格:{{ queryParam?.tplCode }} {{ queryParam?.tplName }}</span> <span style="font-weight: bold; margin-left: 20px"> 表格:{{ queryParam?.tplCode }} {{ queryParam?.tplName }}</span>
</div> </div>
</template> </template>
<template #tools> <template #tools>
<vxe-button status="primary" icon="vxe-icon-save" @click="saveBatch()">保存</vxe-button> <vxe-button status="primary" icon="vxe-icon-save" @click="saveBatch()">保存</vxe-button>
</template> </template>
</vxe-toolbar> </vxe-toolbar>
<vxe-table <vxe-table
...@@ -25,12 +24,11 @@ ...@@ -25,12 +24,11 @@
<vxe-column field="serialNumber" title="序号" width="80"></vxe-column> <vxe-column field="serialNumber" title="序号" width="80"></vxe-column>
<vxe-column field="project" title="项目" width="200"> <vxe-column field="project" title="项目" width="200">
<template #default="{ row }"> <template #default="{ row }">
<span style="font-weight: bold;size:20px">{{ row.project }}</span> <span style="font-weight: bold; size: 20px">{{ row.project }}</span>
</template> </template>
</vxe-column> </vxe-column>
<vxe-column field="content" title="内容" row-resize> <vxe-column field="content" title="内容" row-resize>
<template #default="{ row }"> <template #default="{ row }">
<div class="content-cell"> <div class="content-cell">
<template v-if="row.type === 'MultiColumnTable'"> <template v-if="row.type === 'MultiColumnTable'">
<MultiColumnTable <MultiColumnTable
...@@ -39,7 +37,7 @@ ...@@ -39,7 +37,7 @@
:records="[]" :records="[]"
:fields="row.content" :fields="row.content"
:ref="(el) => setMultiColumnTableRef(el, row.code)" :ref="(el) => setMultiColumnTableRef(el, row.code)"
style="margin:0px;padding:0px" style="margin: 0px; padding: 0px"
/> />
</template> </template>
<template v-else-if="row.type === 'AttachTable'"> <template v-else-if="row.type === 'AttachTable'">
...@@ -50,18 +48,16 @@ ...@@ -50,18 +48,16 @@
:pcode="row.code" :pcode="row.code"
:calcSum="row.calcSum" :calcSum="row.calcSum"
:ref="(el) => setAttachTableRef(el, row.code)" :ref="(el) => setAttachTableRef(el, row.code)"
style="margin:0px;padding:0px" style="margin: 0px; padding: 0px"
/> />
</template> </template>
<template v-else> <template v-else>
<template v-for="(item, index) in row.content" :key="index"> <template v-for="(item, index) in row.content" :key="index">
<span v-if="item.type === 'text'" v-html="item.value"></span> <span v-if="item.type === 'text'" v-html="item.value"></span>
<span v-else-if="item.type === 'br'"><br></span> <span v-else-if="item.type === 'br'"><br /></span>
<span v-else-if="item.type === 'brspace'"> <span v-else-if="item.type === 'brspace'">
<br> <br />
<template v-for="i in item.value||1" :key="i"> <template v-for="i in item.value || 1" :key="i"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </template>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</template>
</span> </span>
<template v-else-if="item.type === 'AttachTable'"> <template v-else-if="item.type === 'AttachTable'">
...@@ -72,7 +68,7 @@ ...@@ -72,7 +68,7 @@
:pcode="item.code" :pcode="item.code"
:calcSum="item.calcSum" :calcSum="item.calcSum"
:ref="(el) => setAttachTableRef(el, item.code)" :ref="(el) => setAttachTableRef(el, item.code)"
style="margin:0px;padding:0px" style="margin: 0px; padding: 0px"
/> />
</template> </template>
...@@ -82,54 +78,52 @@ ...@@ -82,54 +78,52 @@
:records="[]" :records="[]"
:fields="item.content" :fields="item.content"
:ref="(el) => setMultiColumnTableRef(el, item.code)" :ref="(el) => setMultiColumnTableRef(el, item.code)"
style="margin:0px;padding:0px" style="margin: 0px; padding: 0px"
/> />
</template> </template>
<template v-else-if="item.type === 'yesno'"> <template v-else-if="item.type === 'yesno'">
<vxe-radio-group v-model="formData[row.code +'_'+ item.field]"> <vxe-radio-group v-model="formData[row.code + '_' + item.field]">
<vxe-radio label="是" content="是"> <vxe-radio label="是" content="是"> </vxe-radio>
</vxe-radio>
<vxe-radio label="否" content="否"></vxe-radio> <vxe-radio label="否" content="否"></vxe-radio>
</vxe-radio-group> </vxe-radio-group>
<template v-if="formData[row.code +'_'+ item.field]=='是'"> <template v-if="formData[row.code + '_' + item.field] == '是'">
<br>如果是: <br />如果是:
<template v-if="item.extraField"> <template v-if="item.extraField">
<span>{{ item.extraField }}</span> <span>{{ item.extraField }}</span>
<vxe-input v-model="formData[row.code + '_'+ item.extraField]" style="width: 100px;"></vxe-input> <vxe-input v-model="formData[row.code + '_' + item.extraField]" style="width: 100px"></vxe-input>
</template> </template>
<template v-else-if="item.extraFields"> <template v-else-if="item.extraFields">
<template v-for="(ccopt,ccind) in item.extraFields" :key="ccind"> <template v-for="(ccopt, ccind) in item.extraFields" :key="ccind">
<span>{{ ccopt.label }}: </span> <span>{{ ccopt.label }}: </span>
<template v-if="ccopt.formType=='input'"> <template v-if="ccopt.formType == 'input'">
<vxe-input v-model="formData[row.code + '_'+ ccopt.field]" type="number" style="width:250px"></vxe-input> <vxe-input v-model="formData[row.code + '_' + ccopt.field]" style="width: 250px"></vxe-input>
</template> </template>
<template v-else> <template v-else>
<vxe-input v-model="formData[row.code + '_'+ ccopt.field]" :type="ccopt.formType" style="width:100px"></vxe-input> <vxe-input v-model="formData[row.code + '_' + ccopt.field]" :type="ccopt.formType" style="width: 100px"></vxe-input>
</template> </template>
<span class="unit"> {{ ccopt.unit }}</span> <span class="unit"> {{ ccopt.unit }}</span>
</template> </template>
</template> </template>
</template> </template>
</template> </template>
<span v-else-if="item.type === 'radio-group'" class="radio-group"> <span v-else-if="item.type === 'radio-group'" class="radio-group">
<vxe-radio-group v-model="formData[row.code +'_'+ item.field]"> <vxe-radio-group v-model="formData[row.code + '_' + item.field]">
<vxe-radio v-for="(opt, optIndex) in item.options" :key="optIndex" :label="opt">{{ opt }}</vxe-radio> <vxe-radio v-for="(opt, optIndex) in item.options" :key="optIndex" :label="opt">{{ opt }}</vxe-radio>
</vxe-radio-group> </vxe-radio-group>
</span> </span>
<span v-else-if="item.type === 'radio-group-extraFields'" class="radio-group" style="width:100%"> <span v-else-if="item.type === 'radio-group-extraFields'" class="radio-group" style="width: 100%">
<vxe-radio-group v-model="formData[row.code +'_'+ item.field]"> <vxe-radio-group v-model="formData[row.code + '_' + item.field]">
<vxe-radio v-for="(opt, optIndex) in item.options" :key="optIndex" :label="opt.label"> <vxe-radio v-for="(opt, optIndex) in item.options" :key="optIndex" :label="opt.label">
{{ opt.label }} {{ opt.label }}
<template v-if="opt.extraField&&formData[row.code +'_'+ item.field]==opt.label"> <template v-if="opt.extraField && formData[row.code + '_' + item.field] == opt.label">
<span>{{ opt.extraField }}</span> <span>{{ opt.extraField }}</span>
<vxe-input v-model="formData[row.code + '_'+ opt.otereField]" style="width: 200px;"></vxe-input> <vxe-input v-model="formData[row.code + '_' + opt.otereField]" style="width: 200px"></vxe-input>
</template> </template>
<template v-if="opt.extraFields&&formData[row.code +'_'+ item.field]==opt.label"> <template v-if="opt.extraFields && formData[row.code + '_' + item.field] == opt.label">
<template v-for="(ccopt,ccind) in opt.extraFields" :key="ccind"> <template v-for="(ccopt, ccind) in opt.extraFields" :key="ccind">
<span>{{ ccopt.label }}: </span> <span>{{ ccopt.label }}: </span>
<vxe-input v-model="formData[row.code + '_'+ ccopt.field]" style="width: 200px;"></vxe-input> <vxe-input v-model="formData[row.code + '_' + ccopt.field]" style="width: 200px"></vxe-input>
</template> </template>
</template> </template>
</vxe-radio> </vxe-radio>
...@@ -137,28 +131,19 @@ ...@@ -137,28 +131,19 @@
</span> </span>
<div v-else-if="item.type === 'checkbox-group'" class="checkbox-group"> <div v-else-if="item.type === 'checkbox-group'" class="checkbox-group">
<span class="checkbox-group"> <span class="checkbox-group">
<vxe-checkbox-group v-model="formData[row.code+'_'+item.field]"> <vxe-checkbox-group v-model="formData[row.code + '_' + item.field]">
<vxe-checkbox v-for="(opt, optIndex) in item.options" :key="optIndex" :label="opt"> <vxe-checkbox v-for="(opt, optIndex) in item.options" :key="optIndex" :label="opt">
{{ opt }} {{ opt }}
</vxe-checkbox> </vxe-checkbox>
<template v-if="item.otherOption"> <template v-if="item.otherOption">
<vxe-checkbox style="margin:0px"> <vxe-checkbox style="margin: 0px"> 其它: </vxe-checkbox>
其它: <vxe-input v-model="formData[row.code + '_' + item.otereField]" style="width: 100px"> </vxe-input>
</vxe-checkbox> </template>
<vxe-input v-model="formData[row.code + '_'+ item.otereField]" style="width: 100px;"> </vxe-checkbox-group>
</vxe-input> </span>
</template> </div>
</vxe-checkbox-group>
</span>
</div>
<template v-else> <template v-else>
<vxe-input <vxe-input :type="item.type" v-model="formData[row.code + '_' + item.field]" size="mini" class="table-input"> </vxe-input>
:type="item.type"
v-model="formData[row.code +'_'+ item.field]"
size="mini"
class="table-input"
>
</vxe-input>
<span class="unit"> {{ item.placeholder }}</span> <span class="unit"> {{ item.placeholder }}</span>
</template> </template>
</template> </template>
...@@ -171,453 +156,424 @@ ...@@ -171,453 +156,424 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import MultiColumnTable from '../tableComponents/MultiColumnTable.vue' import MultiColumnTable from '../tableComponents/MultiColumnTable.vue';
import AttachTable from '../tableComponents/AttachTable.vue' import AttachTable from '../tableComponents/AttachTable.vue';
import { tableFormData } from '../../data/tb5.data';
import { tableFormData } from '../../data/tb5.data'; import { ref, reactive, nextTick, onMounted, toRaw } from 'vue';
import { ref, reactive,nextTick,onMounted,toRaw } from 'vue' import { VxeUI, VxeToolbarInstance, VxeToolbarPropTypes } from 'vxe-table';
import { VxeUI,VxeToolbarInstance,VxeToolbarPropTypes } from 'vxe-table' import { batchSaveOrUpdate, queryRecord, batchSaveOrUpdateBeforeDelete } from '../../record/BaosongTaskRecord.api';
import { batchSaveOrUpdate, queryRecord,batchSaveOrUpdateBeforeDelete } from '../../record/BaosongTaskRecord.api' import { queryAllTplItemForUser } from '../../alloc/BaosongTaskAlloc.api';
import { queryAllTplItemForUser } from '../../alloc/BaosongTaskAlloc.api' import { allTplItems } from '../../tpl/BaosongTplItem.api';
import { allTplItems } from '../../tpl/BaosongTplItem.api' import { useRoute } from 'vue-router';
import { useRoute } from 'vue-router';
const route = useRoute();
const route = useRoute(); const tableRef = ref();
const tableRef = ref(); const tplItemMap = ref({});
const tplItemMap = ref({}); const queryParam = ref({
const queryParam = ref({ taskId: -1,
taskId:-1, taskName: '',
taskName:'', tplId: -1,
tplId:-1, tplName: '',
tplName:'', tplCode: '',
tplCode:'' });
})
interface FormData {
interface FormData { id: number | null;
id: number | null taskid: number;
taskid: number tplid: number;
tplid: number itemid?: number;
itemid?: number itempid?: number;
itempid?:number content: string;
content: string tplcode: string;
tplcode:string rind: number;
rind:number }
}
onMounted(async () => {
onMounted(async ()=>{ if (route.query.taskId) {
if (route.query.taskId) { queryParam.value.taskId = Number(route.query.taskId);
queryParam.value.taskId = Number(route.query.taskId); }
} if (route.query.taskName) {
if (route.query.taskName) { queryParam.value.taskName = String(route.query.taskName);
queryParam.value.taskName = String(route.query.taskName); }
} if (route.query.tplId) {
if (route.query.tplId) { queryParam.value.tplId = Number(route.query.tplId);
queryParam.value.tplId = Number(route.query.tplId); }
} if (route.query.tplName) {
if (route.query.tplName) { queryParam.value.tplName = String(route.query.tplName);
queryParam.value.tplName = String(route.query.tplName); }
} if (route.query.tplCode) {
if (route.query.tplCode) { queryParam.value.tplCode = String(route.query.tplCode);
queryParam.value.tplCode = String(route.query.tplCode);
}
await setTplItemMap()
await setData();
})
const loading = ref(false)
const formData = reactive({});
const formValues = ref<FormData[]>([])
const saveBatch = async () => {
try {
formValues.value = []
for (const strKey in formData) {
const valData = formData[strKey]
if (valData) {
let tmpAry = strKey.split("_")
await setFormValues(tmpAry[0],tmpAry[1],valData,1)
}
} }
await setTplItemMap();
await setData();
});
await getAttachTableFormData(); const loading = ref(false);
await getAllMultiTableFormData() const formData = reactive({});
const formValues = ref<FormData[]>([]);
if (formValues.value.length > 0) { const saveBatch = async () => {
await batchSaveOrUpdateBeforeDelete(formValues.value) try {
VxeUI.modal.message({ content: '保存成功', status: 'success' }) formValues.value = [];
//await setData()
} else {
VxeUI.modal.message({ content: '没有需要保存的数据', status: 'warning' })
}
for (const strKey in formData) {
} catch (error) { const valData = formData[strKey];
VxeUI.modal.message({ content: `保存失败: ${error.message}`, status: 'error' }) if (valData) {
} finally { let tmpAry = strKey.split('_');
loading.value = false await setFormValues(tmpAry[0], tmpAry[1], valData, 1);
} }
} }
const childMultiTableRefs = ref({}) await getAttachTableFormData();
const setMultiColumnTableRef = (el: any, index: string) => { await getAllMultiTableFormData();
if (el) {
childMultiTableRefs.value[index] = el;
}
};
if (formValues.value.length > 0) {
await batchSaveOrUpdateBeforeDelete(formValues.value);
VxeUI.modal.message({ content: '保存成功', status: 'success' });
//await setData()
} else {
VxeUI.modal.message({ content: '没有需要保存的数据', status: 'warning' });
}
} catch (error) {
VxeUI.modal.message({ content: `保存失败: ${error.message}`, status: 'error' });
} finally {
loading.value = false;
}
};
const getAllMultiTableFormData = async () => { const childMultiTableRefs = ref({});
for (const pcode in childMultiTableRefs.value) { const setMultiColumnTableRef = (el: any, index: string) => {
if (el) {
childMultiTableRefs.value[index] = el;
}
};
const getAllMultiTableFormData = async () => {
for (const pcode in childMultiTableRefs.value) {
const child = childMultiTableRefs.value[pcode]; const child = childMultiTableRefs.value[pcode];
if (child) { if (child) {
const datas = child.getFormData() const datas = child.getFormData();
let rind = 0 let rind = 0;
for(const obj of datas) { for (const obj of datas) {
rind++ rind++;
Object.keys(obj).forEach(code => { Object.keys(obj).forEach((code) => {
setFormValues(pcode,code,obj[code],rind) setFormValues(pcode, code, obj[code], rind);
}); });
} }
} }
} }
}; };
const childAttachTableRefs = ref({}) const childAttachTableRefs = ref({});
const setAttachTableRef = (el: any, index: string) => { const setAttachTableRef = (el: any, index: string) => {
if (el) { if (el) {
childAttachTableRefs.value[index] = el; // 保存子组件实例 childAttachTableRefs.value[index] = el; // 保存子组件实例
} }
}; };
const getAttachTableFormData = async () => { const getAttachTableFormData = async () => {
for (const pcode in childAttachTableRefs.value) { for (const pcode in childAttachTableRefs.value) {
const child = childAttachTableRefs.value[pcode]; const child = childAttachTableRefs.value[pcode];
if (child) { if (child) {
const datas = child.getFormData() const datas = child.getFormData();
for(const code in datas) { for (const code in datas) {
await setFormValues(pcode,code,datas[code],1) await setFormValues(pcode, code, datas[code], 1);
}
}
}
};
const setFormValues = async (pcode,code,valData,rind) => {
if(!valData) return;
let vals = Array.isArray(valData) ? valData.join(',') : valData
let strKey = pcode+"_"+code
const item = tplItemMap.value[strKey];
const { pid, itemid } = item ?? {};
let tempForm: FormData = {
id: null,
rind:rind,
taskid: queryParam.value.taskId,
tplid: queryParam.value.tplId,
tplcode: code,
itemid: itemid,
itempid: pid,
content:vals
};
formValues.value.push(tempForm)
}
async function setData() {
try {
loading.value = true;
const taskId = queryParam.value.taskId;
const tplid = queryParam.value.tplId;
Object.keys(formData).forEach(key => delete formData[key]);
await setTplItemMap();
const recordData = await queryRecord({ taskid: taskId, tplid: tplid });
const valueObj = {};
for (const data of recordData) {
const key = `${data.itempid}_${data.itemid}_${data.rind}`;
valueObj[key] = data.content;
}
const shouldSkip = (key) => {
const refsToCheck = [
childMultiTableRefs.value,
childAttachTableRefs.value,
];
for (const refs of refsToCheck) {
for (const pcode of Object.keys(refs)) {
if (key.startsWith(pcode + '_')) {
return true;
}
} }
} }
return false; }
};
const setFormValues = async (pcode, code, valData, rind) => {
if (!valData) return;
let vals = Array.isArray(valData) ? valData.join(',') : valData;
let strKey = pcode + '_' + code;
const item = tplItemMap.value[strKey];
const { pid, itemid } = item ?? {};
let tempForm: FormData = {
id: null,
rind: rind,
taskid: queryParam.value.taskId,
tplid: queryParam.value.tplId,
tplcode: code,
itemid: itemid,
itempid: pid,
content: vals,
}; };
formValues.value.push(tempForm);
};
for (const strKey of Object.keys(tplItemMap.value)) { async function setData() {
if (shouldSkip(strKey)) { try {
continue; loading.value = true;
} const taskId = queryParam.value.taskId;
const tplid = queryParam.value.tplId;
const item = tplItemMap.value[strKey];
if (!item) continue; Object.keys(formData).forEach((key) => delete formData[key]);
const { pid, itemid, formTp } = item; await setTplItemMap();
const dataVal = valueObj[`${pid}_${itemid}_1`]; const recordData = await queryRecord({ taskid: taskId, tplid: tplid });
if (!dataVal) continue; const valueObj = {};
for (const data of recordData) {
if (formTp === 'checkbox') { const key = `${data.itempid}_${data.itemid}_${data.rind}`;
formData[strKey] = dataVal?.split(",") || []; valueObj[key] = data.content;
} else {
formData[strKey] = dataVal || "";
} }
} const shouldSkip = (key) => {
const refsToCheck = [childMultiTableRefs.value, childAttachTableRefs.value];
for (const refs of refsToCheck) {
for (const pcode of Object.keys(refs)) {
if (key.startsWith(pcode + '_')) {
return true;
}
}
}
return false;
};
for (const strKey of Object.keys(tplItemMap.value)) {
if (shouldSkip(strKey)) {
continue;
}
const item = tplItemMap.value[strKey];
if (!item) continue;
const { pid, itemid, formTp } = item;
const dataVal = valueObj[`${pid}_${itemid}_1`];
if (!dataVal) continue;
for (const pcode of Object.keys(childAttachTableRefs.value)) {
const child = childAttachTableRefs.value[pcode];
const matchingKeys = Object.keys(tplItemMap.value).filter(key =>
key.startsWith(pcode + '_')
);
const attachTableData = {};
for (const key of matchingKeys) {
const tmpData = tplItemMap.value[key];
if (!tmpData) continue;
const { pid, itemid, formTp, code } = tmpData;
const valueKey = `${pid}_${itemid}_1`;
if (formTp === 'checkbox') { if (formTp === 'checkbox') {
attachTableData[code] = valueObj[valueKey]?.split(",") || []; formData[strKey] = dataVal?.split(',') || [];
} else { } else {
attachTableData[code] = valueObj[valueKey] || ""; formData[strKey] = dataVal || '';
} }
} }
child.setFormData(attachTableData);
}
for (const pcode of Object.keys(childMultiTableRefs.value)) { for (const pcode of Object.keys(childAttachTableRefs.value)) {
const child = childMultiTableRefs.value[pcode]; const child = childAttachTableRefs.value[pcode];
const matchingKeys = Object.keys(tplItemMap.value).filter(key => const matchingKeys = Object.keys(tplItemMap.value).filter((key) => key.startsWith(pcode + '_'));
key.startsWith(pcode + '_')
); const attachTableData = {};
for (const key of matchingKeys) {
const rowsMap = {}; const tmpData = tplItemMap.value[key];
for (const key of matchingKeys) { if (!tmpData) continue;
const tmpData = tplItemMap.value[key];
if (!tmpData) continue; const { pid, itemid, formTp, code } = tmpData;
const valueKey = `${pid}_${itemid}_1`;
const { pid, itemid, code } = tmpData;
const valKeys = Object.keys(valueObj).filter(k => if (formTp === 'checkbox') {
k.startsWith(`${pid}_${itemid}_`) attachTableData[code] = valueObj[valueKey]?.split(',') || [];
); } else {
attachTableData[code] = valueObj[valueKey] || '';
for (const valKey of valKeys) { }
const parts = valKey.split('_'); }
const rind = parts[2];
child.setFormData(attachTableData);
if (!rowsMap[rind]) { }
rowsMap[rind] = {};
for (const pcode of Object.keys(childMultiTableRefs.value)) {
const child = childMultiTableRefs.value[pcode];
const matchingKeys = Object.keys(tplItemMap.value).filter((key) => key.startsWith(pcode + '_'));
const rowsMap = {};
for (const key of matchingKeys) {
const tmpData = tplItemMap.value[key];
if (!tmpData) continue;
const { pid, itemid, code } = tmpData;
const valKeys = Object.keys(valueObj).filter((k) => k.startsWith(`${pid}_${itemid}_`));
for (const valKey of valKeys) {
const parts = valKey.split('_');
const rind = parts[2];
if (!rowsMap[rind]) {
rowsMap[rind] = {};
}
rowsMap[rind][code] = valueObj[valKey];
} }
rowsMap[rind][code] = valueObj[valKey];
} }
const tableDatas = Object.values(rowsMap);
nextTick();
child.setFormData(tableDatas);
} }
} catch (error) {
const tableDatas = Object.values(rowsMap); VxeUI.modal.message({
nextTick(); content: `加载数据失败: ${error.message}`,
child.setFormData(tableDatas); status: 'error',
});
} finally {
loading.value = false;
} }
}
} catch (error) { async function setTplItemMap() {
VxeUI.modal.message({ try {
content: `加载数据失败: ${error.message}`, const taskId = queryParam.value.taskId;
status: 'error' const tplid = queryParam.value.tplId;
}); const tplItem = await allTplItems({
} finally { tplid: tplid,
loading.value = false; });
tplItem.forEach((item) => {
let strKey = item.pcode + '_' + item.xmlcode;
tplItemMap.value[strKey] = { pid: item.pid, itemid: item.id, formTp: item.formTp, code: item.xmlcode };
});
} catch (error) {
VxeUI.modal.message({ content: `加载数据失败: ${error.message}`, status: 'error' });
} finally {
}
} }
} </script>
<style lang="less" scoped>
.bank-report-table {
font-family: 'SimSun', '宋体', serif;
font-size: 12px;
color: #000;
margin: 5px auto;
width: 100%;
}
.custom-table {
width: 100%;
border: 1px solid #000;
}
async function setTplItemMap() { .custom-table .vxe-header--column,
try { .custom-table .vxe-body--column {
const taskId = queryParam.value.taskId border-right: 1px solid #000;
const tplid = queryParam.value.tplId border-bottom: 1px solid #000;
const tplItem = await allTplItems({ padding: 5px;
tplid: tplid, }
})
tplItem.forEach(item => { .custom-table .vxe-cell {
let strKey = item.pcode + "_" + item.xmlcode; padding: 5px;
tplItemMap.value[strKey] = {pid:item.pid,itemid:item.id,formTp:item.formTp,code:item.xmlcode}; }
})
} catch (error) { .content-cell {
VxeUI.modal.message({ content: `加载数据失败: ${error.message}`, status: 'error' }) line-height: 1.8;
} finally {
} }
} .table-input {
width: 80px;
margin: 0 2px;
}
</script> .radio-group {
display: inline-block;
margin-right: 10px;
}
<style lang="less" scoped> .checkbox-group {
display: inline-block;
margin-right: 10px;
}
.bank-report-table { .vxe-radio,
font-family: "SimSun", "宋体", serif; .vxe-checkbox {
font-size: 12px; margin-right: 8px;
color: #000; white-space: nowrap;
margin: 5px auto; }
width: 100%;
}
.custom-table {
width: 100%;
border: 1px solid #000;
}
.custom-table .vxe-header--column,
.custom-table .vxe-body--column {
border-right: 1px solid #000;
border-bottom: 1px solid #000;
padding: 5px;
}
.custom-table .vxe-cell {
padding: 5px;
}
.content-cell {
line-height: 1.8;
}
.table-input {
width: 80px;
margin: 0 2px;
}
.radio-group {
display: inline-block;
margin-right: 10px;
}
.checkbox-group {
display: inline-block;
margin-right: 10px;
}
.vxe-radio,
.vxe-checkbox {
margin-right: 8px;
white-space: nowrap;
}
.vxe-input--inner {
height: 24px;
line-height: 24px;
padding: 0 5px;
}
.vxe-radio--label,
.vxe-checkbox--label {
font-size: 12px;
}
.vxe-radio--icon,
.vxe-checkbox--icon {
font-size: 12px;
}
.vxe-radio-group,
.vxe-checkbox-group {
display: inline-block;
}
.bank-report-table {
font-family: "SimSun", "宋体", serif;
font-size: 12px;
color: #000;
margin: 5px auto;
width: 90%;
}
.custom-table {
width: 100%;
border: 1px solid #000;
}
.custom-table .vxe-header--column,
.custom-table .vxe-body--column {
border-right: 1px solid #000;
border-bottom: 1px solid #000;
padding: 5px;
}
.content-cell {
line-height: 1.8;
}
.table-input {
width: 80px;
margin: 0 2px;
}
/* 附件样式 */
.attachments {
margin-top: 20px;
width: 100%;
}
.attachments h4 {
font-size: 14px;
font-weight: bold;
margin-bottom: 10px;
}
.attachment-table {
width: 100%;
border: 1px solid #000;
}
.attachment-table .vxe-header--column,
.attachment-table .vxe-body--column {
border-right: 1px solid #000;
border-bottom: 1px solid #000;
padding: 5px;
}
.vxe-input {
border-bottom: 1px solid #333;
text-align: center;
margin: 5px 3px;
padding: 0;
border-top: none;
border-left: none;
border-right: none;
background: transparent;
line-height: 50px;
}
blockquote {
padding: 0px 5px;
color: black;
cursor: pointer;
}
.vxe-input--inner {
height: 24px;
line-height: 24px;
padding: 0 5px;
}
.vxe-radio--label,
.vxe-checkbox--label {
font-size: 12px;
}
.vxe-radio--icon,
.vxe-checkbox--icon {
font-size: 12px;
}
.vxe-radio-group,
.vxe-checkbox-group {
display: inline-block;
}
.bank-report-table {
font-family: 'SimSun', '宋体', serif;
font-size: 12px;
color: #000;
margin: 5px auto;
width: 90%;
}
.custom-table {
width: 100%;
border: 1px solid #000;
}
.custom-table .vxe-header--column,
.custom-table .vxe-body--column {
border-right: 1px solid #000;
border-bottom: 1px solid #000;
padding: 5px;
}
.content-cell {
line-height: 1.8;
}
.table-input {
width: 80px;
margin: 0 2px;
}
/* 附件样式 */
.attachments {
margin-top: 20px;
width: 100%;
}
.attachments h4 {
font-size: 14px;
font-weight: bold;
margin-bottom: 10px;
}
.attachment-table {
width: 100%;
border: 1px solid #000;
}
.attachment-table .vxe-header--column,
.attachment-table .vxe-body--column {
border-right: 1px solid #000;
border-bottom: 1px solid #000;
padding: 5px;
}
.vxe-input {
border-bottom: 1px solid #333;
text-align: center;
margin: 5px 3px;
padding: 0;
border-top: none;
border-left: none;
border-right: none;
background: transparent;
line-height: 50px;
}
blockquote {
padding: 0px 5px;
color: black;
cursor: pointer;
}
</style> </style>
<template> <template>
<div> <div>
<vxe-grid ref="refGrid" v-bind="gridOptions" v-on="gridEvents" :footerData="setFooterData"> <vxe-grid ref="refGrid" v-bind="gridOptions" v-on="gridEvents" :footerData="setFooterData">
<template #select="{ row, column }"> <template #select="{ row, column }">
<vxe-select v-model="row[column.field]" filterable> <vxe-select v-model="row[column.field]" filterable @change="handleCol4Change(row, column, $event)">
<vxe-option v-for="(opt, optIndex) in column.editRender.options" :key="optIndex" :label="opt" :value="opt"></vxe-option> <vxe-option v-for="(opt, optIndex) in column.editRender.options" :key="optIndex" :label="opt" :value="opt"></vxe-option>
</vxe-select> </vxe-select>
</template> </template>
<template #select_dynamic="{ row, column }">
<div style="display: flex; flex-wrap: wrap; gap: 8px; align-items: center">
<vxe-select v-model="row[column.field]" filterable :disabled="!column.editRender.getOptions?.(row)?.length" style="min-width: 120px">
<vxe-option v-for="(opt, optIndex) in column.editRender.getOptions?.(row) || []" :key="optIndex" :label="opt" :value="opt" />
</vxe-select>
<vxe-input
v-if="
(row.COL4 === '软件类(银行业)' || row.COL4 === '软件类(保险业)') &&
(row.COL5 === '其他' || !(column.editRender.getOptions?.(row) || []).includes(row.COL5))
"
v-model="row[column.field]"
placeholder="请输入"
style="min-width: 150px"
/>
</div>
</template>
<template #other_input="{ row, column }">
<vxe-input v-model="row[column.field]" placeholder="请输入" :disabled="row.COL4 !== '其他'" />
</template>
<template #default_select="{ row, column }"> <template #default_select="{ row, column }">
<span>{{ row[column.field] }}</span> <span>{{ row[column.field] }}</span>
</template> </template>
<template #default_other="{ row, column }">
<span v-if="row.COL4 === '其他'">{{ row[column.field] }}</span>
</template>
<template #footer_seq="{ row,column }"> <template #footer_seq="{ row, column }">
<span style="color: blue;">{{ row[column.field] }}</span> <span style="color: blue">{{ row[column.field] }}</span>
</template> </template>
<template #footer_num="{ row,column }"> <template #footer_num="{ row, column }">
<span style="color: red;">{{ row[column.field] }}</span> <span style="color: red">{{ row[column.field] }}</span>
</template> </template>
<template #action="{ row, rowIndex }"> <template #action="{ row, rowIndex }">
...@@ -27,199 +49,204 @@ ...@@ -27,199 +49,204 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { reactive, computed,ref } from 'vue' import { reactive, computed, ref } from 'vue';
import type { VxeGridProps, VxeTablePropTypes, VxeGridListeners } from 'vxe-table' import type { VxeGridProps, VxeTablePropTypes, VxeGridListeners } from 'vxe-table';
import type { VxeSelectProps } from 'vxe-pc-ui' import type { VxeSelectProps } from 'vxe-pc-ui';
const props = defineProps({ const props = defineProps({
title: String, title: String,
data: { data: {
type: Array as () => any[], type: Array as () => any[],
default: () => [] default: () => [],
}, },
columns: { columns: {
type: Array as () => any[], type: Array as () => any[],
required: true required: true,
}, },
footerData: { footerData: {
type: Array as () => any[], type: Array as () => any[],
default: () => [] default: () => [],
}, },
showFooter: { showFooter: {
type: Boolean, type: Boolean,
default: false default: false,
}, },
height: { height: {
default: '' default: '',
}, },
rowHeight: {
}) type: [Number, String],
default: 40,
const formData = reactive({}) },
const formFooterData = reactive({})
const sumNum = (list: any[], field: string) => {
let count = 0
list.forEach(item => {
if (item[field]) {
count += Number(item[field])
}
})
return count
}
const gridOptions = reactive<VxeGridProps<any> & { editConfig: VxeTablePropTypes.EditConfig<any> }>({
border: true,
showOverflow: true,
showFooter:props.showFooter,
loading: false,
editConfig: {
enabled: true,
trigger: 'click',
mode: 'row'
},
height:props.height,
rowConfig: {
useKey: true,
resizable: true
},
columnConfig: {
useKey: true,
resizable: true
},
toolbarConfig: {
zoom: true,
custom: true,
buttons: [
{ name: "添加", mode: "text", status: "primary", code: 'myAdd', icon: "vxe-icon-add" },
]
},
columns: props.columns,
data: props.data || [],
footerData:props.footerData||[]
})
const setFooterData = computed(() => {
if (!props.footerData || !props.footerData.length) return [];
const footer = [...props.footerData];
const result = [];
footer.forEach(item => {
// 创建基础行对象
const row = {
[item.labelField]: item.labelValue
};
// 计算需要求和的字段
if (item.tp === 'sum' && gridOptions.data?.length) {
item.fields.forEach(field => {
row[field] = sumNum(gridOptions.data, field);
formFooterData[item.xmlCode[field]] = row[field]
});
}
// 如果需要计算平均值
if (item.tp === 'avg' && gridOptions.data?.length) {
item.fields.forEach(field => {
const sum = sumNum(gridOptions.data, field);
row[field] = sum / gridOptions.data.length;
formFooterData[item.xmlCode[field]] = row[field]
});
}
result.push(row);
}); });
return result;
});
const safeAddNewRecord = async () => {
try {
const newRecord: Record<string, any> = {}
gridOptions.data?.unshift(newRecord)
} catch (error) {
console.error('添加记录出错:', error)
}
}
const insertRow = async (row: any, ind: number) => {
gridOptions.data?.splice(ind+1, 0, {})
refGrid.value.setEditRow(gridOptions.data[ind+1])
}
const removeRow = async (row: any, ind: number) => { const formData = reactive({});
cancelRow();
gridOptions.data?.splice(ind, 1)
}
const formFooterData = reactive({});
const gridEvents: VxeGridListeners = { const handleCol4Change = (row, column, value) => {
toolbarButtonClick (params) { if (column.field === 'COL4') {
if(params.code=="myAdd") { row.COL5 = '';
safeAddNewRecord()
} }
} };
}
const refGrid = ref()
const getFormData = async () => { const sumNum = (list: any[], field: string) => {
await cancelRow() let count = 0;
const fieldNames = getAllFields(props.columns) list.forEach((item) => {
const newDatas = gridOptions.data?.map(obj => { if (item[field]) {
return fieldNames.reduce((acc, field) => { count += Number(item[field]);
if (field in obj && obj[field] !== undefined && obj[field] !== null) {
acc[field] = obj[field];
} }
return acc; });
}, {}); return count;
}) || [];
return {
...formData,
datas: newDatas,
footer: formFooterData
}; };
};
const setFormData = (dataVale) => { const gridOptions = reactive<VxeGridProps<any> & { editConfig: VxeTablePropTypes.EditConfig<any> }>({
gridOptions.data = dataVale border: true,
} showOverflow: true,
showFooter: props.showFooter,
loading: false,
editConfig: {
enabled: true,
trigger: 'click',
mode: 'row',
},
height: props.height,
rowConfig: {
useKey: true,
resizable: true,
height: props.rowHeight,
},
columnConfig: {
useKey: true,
resizable: true,
},
toolbarConfig: {
zoom: true,
custom: true,
buttons: [{ name: '添加', mode: 'text', status: 'primary', code: 'myAdd', icon: 'vxe-icon-add' }],
},
columns: props.columns,
data: props.data || [],
footerData: props.footerData || [],
});
const cancelRow = async () => { const setFooterData = computed(() => {
const $grid = refGrid.value if (!props.footerData || !props.footerData.length) return [];
if (!$grid) {
return const footer = [...props.footerData];
} const result = [];
await $grid.clearEdit()
} footer.forEach((item) => {
// 创建基础行对象
function getAllFields(columns: any[]): string[] { const row = {
const fields: string[] = []; [item.labelField]: item.labelValue,
};
function traverse(items: any[]) {
items.forEach(item => { // 计算需要求和的字段
if (item.field) { if (item.tp === 'sum' && gridOptions.data?.length) {
fields.push(item.field); item.fields.forEach((field) => {
row[field] = sumNum(gridOptions.data, field);
formFooterData[item.xmlCode[field]] = row[field];
});
} }
if (item.children) {
traverse(item.children); // 如果需要计算平均值
if (item.tp === 'avg' && gridOptions.data?.length) {
item.fields.forEach((field) => {
const sum = sumNum(gridOptions.data, field);
row[field] = sum / gridOptions.data.length;
formFooterData[item.xmlCode[field]] = row[field];
});
} }
result.push(row);
}); });
}
traverse(columns);
return fields.filter(field => field);
}
return result;
});
const safeAddNewRecord = async () => {
try {
const newRecord: Record<string, any> = {};
gridOptions.data?.unshift(newRecord);
} catch (error) {
console.error('添加记录出错:', error);
}
};
const insertRow = async (row: any, ind: number) => {
gridOptions.data?.splice(ind + 1, 0, {});
refGrid.value.setEditRow(gridOptions.data[ind + 1]);
};
defineExpose({ const removeRow = async (row: any, ind: number) => {
getFormData, cancelRow();
setFormData gridOptions.data?.splice(ind, 1);
}) };
const gridEvents: VxeGridListeners = {
toolbarButtonClick(params) {
if (params.code == 'myAdd') {
safeAddNewRecord();
}
},
};
const refGrid = ref();
const getFormData = async () => {
await cancelRow();
const fieldNames = getAllFields(props.columns);
const newDatas =
gridOptions.data?.map((obj) => {
return fieldNames.reduce((acc, field) => {
if (field in obj && obj[field] !== undefined && obj[field] !== null) {
acc[field] = obj[field];
}
return acc;
}, {});
}) || [];
return {
...formData,
datas: newDatas,
footer: formFooterData,
};
};
</script>- const setFormData = (dataVale) => {
\ No newline at end of file gridOptions.data = dataVale;
};
const cancelRow = async () => {
const $grid = refGrid.value;
if (!$grid) {
return;
}
await $grid.clearEdit();
};
function getAllFields(columns: any[]): string[] {
const fields: string[] = [];
function traverse(items: any[]) {
items.forEach((item) => {
if (item.field) {
fields.push(item.field);
}
if (item.children) {
traverse(item.children);
}
});
}
traverse(columns);
return fields.filter((field) => field);
}
defineExpose({
getFormData,
setFormData,
});
</script>
-
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论