Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Z
zrch-risk-39
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Administrator
zrch-risk-39
Commits
9c9d35e1
提交
9c9d35e1
authored
2月 03, 2026
作者:
liuluyu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新tb6字段
上级
69ccea72
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
1815 行增加
和
1691 行删除
+1815
-1691
tb6.data.ts
zrch-risk-client-39/src/views/baosong/data/tb6.data.ts
+930
-845
Tb6.vue
...isk-client-39/src/views/baosong/report/components/Tb6.vue
+885
-846
没有找到文件。
zrch-risk-client-39/src/views/baosong/data/tb6.data.ts
浏览文件 @
9c9d35e1
...
...
@@ -26,938 +26,1023 @@ interface VxeColumn {
export
const
tableFormData
=
[
{
serialNumber
:
"1"
,
project
:
"网络安全责任制建立情况"
,
code
:
'TB608'
,
content
:
[
{
type
:
"text"
,
value
:
"建立并落实网络安全工作责任制"
},
{
type
:
"radio-group"
,
field
:
"C23A001"
,
options
:
[
"是"
,
"否"
]
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"网络安全第一责任人"
},
{
type
:
"text"
,
value
:
"姓名"
},
{
type
:
"input"
,
value
:
""
,
field
:
"C23A002"
},
{
type
:
"text"
,
value
:
"职务"
},
{
type
:
"input"
,
value
:
""
,
field
:
"C23A003"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"网络安全直接责任人"
},
{
type
:
"text"
,
value
:
"姓名"
},
{
type
:
"input"
,
value
:
""
,
field
:
"C23A004"
},
{
type
:
"text"
,
value
:
"职务"
},
{
type
:
"input"
,
value
:
""
,
field
:
"C23A005"
}
],
remarks
:
{
field
:
"C23A006"
}
},
{
serialNumber
:
"2"
,
project
:
"信息安全管理"
,
serialNumber
:
'1'
,
project
:
'信息安全管理'
,
code
:
'TB601'
,
content
:
[
{
type
:
"text"
,
value
:
"<strong>安全管理制度建设</strong>"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(1)正式发布信息安全总体方针和安全策略"
},
{
type
:
"radio-group"
,
field
:
"COL1"
,
options
:
[
"是"
,
"否"
]
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(2)正式发布信息安全管理制度"
},
{
type
:
"radio-group"
,
field
:
"COL2"
,
options
:
[
"是"
,
"否"
]
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"已发布的信息安全管理制度涵盖"
},
{
type
:
"br"
},
{
type
:
"checkbox-group"
,
field
:
"COL3"
,
{
type
:
'text'
,
value
:
'<strong>网络安全责任制建立情况</strong>'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'建立并落实网络安全工作责任制'
},
{
type
:
'radio-group'
,
field
:
'C23A001'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'网络安全第一责任人:'
},
{
type
:
'text'
,
value
:
'姓名'
},
{
type
:
'input'
,
value
:
''
,
field
:
'C23A002'
},
{
type
:
'text'
,
value
:
'职务'
},
{
type
:
'input'
,
value
:
''
,
field
:
'C23A003'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'网络安全直接责任人'
},
{
type
:
'text'
,
value
:
'姓名'
},
{
type
:
'input'
,
value
:
''
,
field
:
'C23A004'
},
{
type
:
'text'
,
value
:
'职务'
},
{
type
:
'input'
,
value
:
''
,
field
:
'C23A005'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'<strong>安全管理制度建设</strong>'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(1)正式发布信息安全总体方针和安全策略,明确本机构信息安全总体目标、范围、原则和策略:'
},
{
type
:
'radio-group'
,
field
:
'COL1'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(2)正式发布信息安全管理制度'
},
{
type
:
'radio-group'
,
field
:
'COL2'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'已发布的信息安全管理制度涵盖'
},
{
type
:
'br'
},
{
type
:
'checkbox-group'
,
field
:
'COL3'
,
options
:
[
"构成、办公区或移动设备管理"
,
"人员录用、离岗、培训、外勤人员访问等人员安全管理"
,
"系统开发和建设安全管理"
,
"网络、主机、应用等连续安全管理"
,
"数据安全管理"
,
"终端、介质等安全管理"
,
"安全事件处置及应急预案管理"
,
'机房、办公区域等物理安全管理'
,
'人员录用、离岗、培训、外部人员访问等人员安全管理'
,
'系统开发和建设安全管理'
,
'网络、主机、应用等运维安全管理'
,
'数据安全管理'
,
'终端、介质等安全管理'
,
'安全事件处置及应急预案管理'
,
],
otherOption
:
true
,
otherField
:
"COL4"
,
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(3)建立信息安全管理制度定期评价及修订完善要求"
},
{
type
:
"radio-group"
,
field
:
"COL5"
,
options
:
[
"是"
,
"否"
]
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"本年度新增或修订信息安全管理制度"
},
{
type
:
"radio-group"
,
field
:
"COL6"
,
options
:
[
"是"
,
"否"
]
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"<strong>信息安全培训</strong>"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(1)本年度开展的信息安全培训次数"
},
{
type
:
"number"
,
value
:
""
,
field
:
"COL8"
},
{
type
:
"text"
,
value
:
"次,参加人次"
},
{
type
:
"number"
,
value
:
""
,
field
:
"COL9"
},
{
type
:
"text"
,
value
:
"人次"
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"其中,全辖范围的信息安全培训次数"
},
{
type
:
"number"
,
value
:
""
,
field
:
"COL10"
},
{
type
:
"text"
,
value
:
"次,参加人次"
},
{
type
:
"number"
,
value
:
""
,
field
:
"COL11"
},
{
type
:
"text"
,
value
:
"人次"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(2)本年度信息安全培训正式员工参与率"
},
{
type
:
"number"
,
value
:
""
,
unit
:
"%"
,
field
:
"COL12"
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"本年度信息安全培训正式员工考核通过率"
},
{
type
:
"number"
,
value
:
""
,
unit
:
"%"
,
field
:
"COL13"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"<strong>信息安全检查</strong>"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(1)本年度信息安全检查总数"
},
{
type
:
"number"
,
value
:
""
,
field
:
"COL15"
},
{
type
:
"text"
,
value
:
"次"
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"总行(或总公司)组织的信息安全检查覆盖一级分支机构的比率"
},
{
type
:
"number"
,
value
:
""
,
unit
:
"%"
,
field
:
"COL16"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(2)本年度开展渗透测试"
},
{
type
:
"radio-group"
,
field
:
"A20"
,
options
:
[
"是"
,
"否"
]
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"如是,渗透测试开展方式"
},
{
type
:
"checkbox-group"
,
field
:
"COL17"
,
options
:
[
"内部人员自行测试"
,
"聘请外部专业机构测试"
],
otherOption
:
true
,
otherField
:
"COL18"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(3)本年度按照等级保护有关要求将新上线重要信息系统向公安部门备案"
},
{
type
:
"br"
},
{
type
:
"radio-group"
,
field
:
"COL19"
,
options
:
[
"已备案"
,
"无新上线重要信息系统"
,
"上线但未备案"
]
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"本年度对三级及以上级别信息系统开展等级保护测评"
},
{
type
:
"radio-group-extraFields"
,
field
:
"COL20"
,
otherOption
:
true
,
otherField
:
'COL4'
,
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(3)建立信息安全管理制度定期评价及修订完善要求'
},
{
type
:
'radio-group'
,
field
:
'COL5'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'本年度新增或修订信息安全管理制度'
},
{
type
:
'radio-group'
,
field
:
'COL6'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'<strong>信息安全培训</strong>'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(1)本年度开展的信息安全培训次数'
},
{
type
:
'number'
,
value
:
''
,
field
:
'COL8'
},
{
type
:
'text'
,
value
:
'次,参加人次'
},
{
type
:
'number'
,
value
:
''
,
field
:
'COL9'
},
{
type
:
'text'
,
value
:
'人次'
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'其中,全辖范围的信息安全培训次数'
},
{
type
:
'number'
,
value
:
''
,
field
:
'COL10'
},
{
type
:
'text'
,
value
:
'次,参加人次'
},
{
type
:
'number'
,
value
:
''
,
field
:
'COL11'
},
{
type
:
'text'
,
value
:
'人次'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(2)本年度信息安全培训正式员工参与率'
},
{
type
:
'number'
,
value
:
''
,
unit
:
'%'
,
field
:
'COL12'
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'本年度信息安全培训正式员工考核通过率'
},
{
type
:
'number'
,
value
:
''
,
unit
:
'%'
,
field
:
'COL13'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'<strong>信息安全检查</strong>'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(1)本年度信息安全检查总数'
},
{
type
:
'number'
,
value
:
''
,
field
:
'COL15'
},
{
type
:
'text'
,
value
:
'次'
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'其中,总行(或总公司)组织的信息安全检查覆盖一级分支机构的比率'
},
{
type
:
'number'
,
value
:
''
,
unit
:
'%'
,
field
:
'COL16'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(2)本年度开展渗透测试'
},
{
type
:
'radio-group'
,
field
:
'A20'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'如是,渗透测试开展方式'
},
{
type
:
'checkbox-group'
,
field
:
'COL17'
,
options
:
[
'内部人员自行测试'
,
'聘请外部专业机构测试'
],
otherOption
:
true
,
otherField
:
'COL18'
,
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(3)本年度按照等级保护有关要求将新上线重要信息系统向公安部门备案'
},
{
type
:
'br'
},
{
type
:
'radio-group'
,
field
:
'COL19'
,
options
:
[
'已备案'
,
'无新上线重要信息系统'
,
'上线但未备案'
],
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'本年度对三级及以上级别信息系统开展等级保护测评:'
},
{
type
:
'radio-group-extraFields'
,
field
:
'COL20'
,
options
:
[
{
label
:
"是"
,
value
:
"是"
,
extraFields
:
[
{
label
:
"测评系统"
,
field
:
"COL21"
},
{
label
:
"安全建设整改"
,
field
:
"COL22"
}
]},
{
label
:
"否"
,
value
:
"否"
}
]
},
{
type
:
"br"
},
{
serialNumber
:
"1003"
,
code
:
"TB60101"
,
type
:
"MultiColumnTable"
,
project
:
"信息安全检查明细"
,
{
label
:
'是'
,
value
:
'是'
,
extraFields
:
[
{
label
:
'测评系统'
,
field
:
'COL21'
,
formType
:
'number'
,
unit
:
'个,'
},
{
label
:
'安全建设整改'
,
field
:
'COL22'
,
formType
:
'number'
,
unit
:
'个'
},
],
},
{
label
:
'否'
,
value
:
'否'
},
],
},
{
type
:
'br'
},
{
serialNumber
:
'1003'
,
code
:
'TB60101'
,
type
:
'MultiColumnTable'
,
project
:
'信息安全检查明细'
,
content
:
[
{
name
:
"检查名称"
,
formType
:
'input'
,
field
:
"COL24"
},
{
name
:
"检查形式"
,
formType
:
'checkbox-group'
,
field
:
"COL25"
,
options
:
[
"安全自查"
,
"渗透测试"
,
'等级保护测评'
,
'其他'
]
},
{
name
:
"检查日期起"
,
formType
:
"date"
,
field
:
"COL26"
},
{
name
:
"检查日期止"
,
formType
:
"date"
,
field
:
"COL193"
},
{
name
:
"实施部门"
,
formType
:
"input"
,
field
:
"COL27"
},
{
name
:
"目标、范围和主要内容"
,
formType
:
"input"
,
field
:
"COL28"
},
{
name
:
"发现问题数量(个)"
,
formType
:
"number"
,
field
:
"COL29"
},
{
name
:
"已整改问题数量(个)"
,
formType
:
'number'
,
field
:
"COL30"
},
{
name
:
"问题整改率(%)"
,
formType
:
"number"
,
field
:
"COL31"
},
{
name
:
"备注"
,
formType
:
"input"
,
field
:
"COL32"
},
{
name
:
'检查名称'
,
formType
:
'input'
,
field
:
'COL24'
},
{
name
:
'检查形式'
,
formType
:
'checkbox-group'
,
field
:
'COL25'
,
options
:
[
'安全自查'
,
'渗透测试'
,
'等级保护测评'
,
'其他'
]
},
{
name
:
'检查日期起'
,
formType
:
'date'
,
field
:
'COL26'
},
{
name
:
'检查日期止'
,
formType
:
'date'
,
field
:
'COL193'
},
{
name
:
'实施部门'
,
formType
:
'input'
,
field
:
'COL27'
},
{
name
:
'目标、范围和主要内容'
,
formType
:
'input'
,
field
:
'COL28'
},
{
name
:
'发现问题数量(个)'
,
formType
:
'number'
,
field
:
'COL29'
},
{
name
:
'已整改问题数量(个)'
,
formType
:
'number'
,
field
:
'COL30'
},
{
name
:
'问题整改率(%)'
,
formType
:
'number'
,
field
:
'COL31'
},
{
name
:
'备注'
,
formType
:
'input'
,
field
:
'COL32'
},
],
data
:
[{}]
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"合计"
},
{
type
:
"text"
,
value
:
"发现问题数量"
},
{
type
:
"number"
,
value
:
""
,
field
:
"COL33"
},
{
type
:
"text"
,
value
:
"个,已整改问题数量"
},
{
type
:
"number"
,
value
:
""
,
field
:
"COL34"
},
{
type
:
"text"
,
value
:
"个,问题整改率"
},
{
type
:
"number"
,
value
:
""
,
unit
:
"%"
,
field
:
"COL35"
},
{
type
:
"br"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"<strong>重大网络和信息安全事件管理</strong>"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(1)本年度生产系统发生的重大网络和信息安全事件数量共计"
},
{
type
:
"number"
,
value
:
""
,
field
:
"COL37"
},
{
type
:
"text"
,
value
:
"次"
},
{
type
:
"brspace"
},
{
serialNumber
:
"2001"
,
project
:
"具体事件包括"
,
code
:
"TB601"
,
type
:
"AttachTable"
,
content
:[
{
field
:
'col1'
,
title
:
'事件名称'
,
width
:
'20%'
,
},{
field
:
'col2'
,
title
:
'攻击次数'
,
width
:
'20%'
,
slots
:
{
default
:
'form_default'
},
},{
field
:
'col3'
,
title
:
'影响范围'
,
slots
:
{
default
:
'form_default'
},
data
:
[{}],
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'合计'
},
{
type
:
'text'
,
value
:
'发现问题数量'
},
{
type
:
'number'
,
value
:
''
,
field
:
'COL33'
},
{
type
:
'text'
,
value
:
'个,已整改问题数量'
},
{
type
:
'number'
,
value
:
''
,
field
:
'COL34'
},
{
type
:
'text'
,
value
:
'个,问题整改率'
},
{
type
:
'number'
,
value
:
''
,
unit
:
'%'
,
field
:
'COL35'
},
{
type
:
'br'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'<strong>重大网络和信息安全事件管理</strong>'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(1)本年度生产系统发生的重大网络和信息安全事件数量共计'
},
{
type
:
'number'
,
value
:
''
,
field
:
'COL37'
},
{
type
:
'text'
,
value
:
'次'
},
{
type
:
'brspace'
},
{
serialNumber
:
'2001'
,
project
:
'具体事件包括'
,
code
:
'TB601'
,
type
:
'AttachTable'
,
content
:
[
{
field
:
'col1'
,
title
:
'事件名称'
,
width
:
'20%'
,
},
{
field
:
'col2'
,
title
:
'攻击次数'
,
width
:
'20%'
,
slots
:
{
default
:
'form_default'
},
},
{
field
:
'col3'
,
title
:
'影响范围'
,
slots
:
{
default
:
'form_default'
},
},
],
datas
:
[
{
col1
:
"拒绝服务攻击"
,
col2
:
{
formType
:
'number'
,
field
:
"COL39"
},
col3
:
{
formType
:
'input'
,
field
:
"COL40"
},
{
col1
:
'拒绝服务攻击'
,
col2
:
{
formType
:
'number'
,
field
:
'COL39'
},
col3
:
{
formType
:
'input'
,
field
:
'COL40'
},
},
{
col1
:
"病毒蠕虫感染"
,
col2
:
{
formType
:
'number'
,
field
:
"COL41"
},
col3
:
{
formType
:
'input'
,
field
:
"COL42"
},
{
col1
:
'病毒蠕虫感染'
,
col2
:
{
formType
:
'number'
,
field
:
'COL41'
},
col3
:
{
formType
:
'input'
,
field
:
'COL42'
},
},
{
col1
:
"系统漏洞入侵"
,
col2
:
{
formType
:
'number'
,
field
:
"COL43"
},
col3
:
{
formType
:
'input'
,
field
:
"COL44"
},
{
col1
:
'系统漏洞入侵'
,
col2
:
{
formType
:
'number'
,
field
:
'COL43'
},
col3
:
{
formType
:
'input'
,
field
:
'COL44'
},
},
{
col1
:
"应用设计缺陷利用"
,
col2
:
{
formType
:
'number'
,
field
:
"COL45"
},
col3
:
{
formType
:
'input'
,
field
:
"COL46"
},
{
col1
:
'应用设计缺陷利用'
,
col2
:
{
formType
:
'number'
,
field
:
'COL45'
},
col3
:
{
formType
:
'input'
,
field
:
'COL46'
},
},
{
col1
:
"数据的窃取或篡改"
,
col2
:
{
formType
:
'number'
,
field
:
"COL47"
},
col3
:
{
formType
:
'input'
,
field
:
"COL48"
},
{
col1
:
'数据的窃取或篡改'
,
col2
:
{
formType
:
'number'
,
field
:
'COL47'
},
col3
:
{
formType
:
'input'
,
field
:
'COL48'
},
},
{
col1
:
"社会工程"
,
col2
:
{
formType
:
'number'
,
field
:
"COL49"
},
col3
:
{
formType
:
'input'
,
field
:
"COL50"
},
{
col1
:
'社会工程'
,
col2
:
{
formType
:
'number'
,
field
:
'COL49'
},
col3
:
{
formType
:
'input'
,
field
:
'COL50'
},
},
{
col1
:
"其他"
,
col2
:
{
formType
:
'number'
,
field
:
"COL51"
},
col3
:
{
formType
:
'input'
,
field
:
"COL52"
},
{
col1
:
'其他'
,
col2
:
{
formType
:
'number'
,
field
:
'COL51'
},
col3
:
{
formType
:
'input'
,
field
:
'COL52'
},
},
],
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(2)本年度纳入案件的网络和信息安全事件"
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"报案"
},
{
type
:
"number"
,
value
:
""
,
field
:
"C20A001"
},
{
type
:
"text"
,
value
:
"个,立案"
},
{
type
:
"number"
,
value
:
""
,
field
:
"C20A002"
},
{
type
:
"text"
,
value
:
"个"
},
{
type
:
"text"
,
value
:
",结案"
},
{
type
:
"number"
,
value
:
""
,
field
:
"C20A003"
},
{
type
:
"text"
,
value
:
"个,正在办理的案件"
},
{
type
:
"number"
,
value
:
""
,
field
:
"C20A004"
},
{
type
:
"text"
,
value
:
"个"
}
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(2)本年度纳入案件的网络和信息安全事件'
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'报案'
},
{
type
:
'number'
,
value
:
''
,
field
:
'C20A001'
},
{
type
:
'text'
,
value
:
'个,立案'
},
{
type
:
'number'
,
value
:
''
,
field
:
'C20A002'
},
{
type
:
'text'
,
value
:
'个'
},
{
type
:
'text'
,
value
:
',结案'
},
{
type
:
'number'
,
value
:
''
,
field
:
'C20A003'
},
{
type
:
'text'
,
value
:
'个,正在办理的案件'
},
{
type
:
'number'
,
value
:
''
,
field
:
'C20A004'
},
{
type
:
'text'
,
value
:
'个'
},
],
},
{
serialNumber
:
"3"
,
project
:
"网络安全"
,
serialNumber
:
'2'
,
project
:
'网络安全'
,
code
:
'TB602'
,
content
:
[
{
type
:
"text"
,
value
:
"<strong>网络基本情况</strong>"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(1)本机构网络分类"
},
{
type
:
"checkbox-group"
,
field
:
"COL54"
,
options
:
[
"生产网"
,
"开发网"
,
"测试网"
,
"办公网"
,
"外网"
],
otherOption
:
true
,
otherField
:
"COL55"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(2)与生产网物理隔离的网络"
},
{
type
:
"checkbox-group"
,
field
:
"COL56"
,
options
:
[
"开发网"
,
"测试网"
,
"办公网"
,
"外网"
,
"国际互联网"
],
otherOption
:
true
,
otherField
:
"COL57"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(3)与生产网逻辑隔离的网络"
},
{
type
:
"checkbox-group"
,
field
:
"COL58"
,
options
:
[
"开发网"
,
"测试网"
,
"办公网"
,
"外网"
,
"国际互联网"
,
],
otherOption
:
true
,
otherField
:
"COL59"
},
{
type
:
"br"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"<strong>生产网、内部网网络安全域划分情况</strong>"
},
{
serialNumber
:
"2001"
,
code
:
"TB60201"
,
type
:
"MultiColumnTable"
,
project
:
"生产网、内部网网络安全域划分"
,
{
type
:
'text'
,
value
:
'<strong>网络基本情况</strong>'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(1)本机构网络分类'
},
{
type
:
'checkbox-group'
,
field
:
'COL54'
,
options
:
[
'生产网'
,
'开发网'
,
'测试网'
,
'办公网'
,
'外网(访问国际互联网的局域网)'
],
otherOption
:
true
,
otherField
:
'COL55'
,
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(2)与生产网物理隔离的网络'
},
{
type
:
'checkbox-group'
,
field
:
'COL56'
,
options
:
[
'开发网'
,
'测试网'
,
'办公网'
,
'外网'
,
'国际互联网'
],
otherOption
:
true
,
otherField
:
'COL57'
,
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(3)与生产网逻辑隔离的网络'
},
{
type
:
'checkbox-group'
,
field
:
'COL58'
,
options
:
[
'开发网'
,
'测试网'
,
'办公网'
,
'外网'
,
'国际互联网'
],
otherOption
:
true
,
otherField
:
'COL59'
,
},
{
type
:
'br'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'<strong>生产网、内部网网络安全域划分情况</strong>'
},
{
serialNumber
:
'2001'
,
code
:
'TB60201'
,
type
:
'MultiColumnTable'
,
project
:
'生产网、内部网网络安全域划分'
,
content
:
[
{
name
:
"区域名称"
,
formType
:
'input'
,
field
:
"COL24"
},
{
name
:
"用途及包含的重要信息系统"
,
formType
:
'input'
,
field
:
"COL25"
},
{
name
:
"可访问哪些网络安全域"
,
formType
:
"input"
,
field
:
"COL26"
},
{
name
:
"可被哪些网络安全域访问"
,
formType
:
"input"
,
field
:
"COL27"
},
{
name
:
"隔离及防护措施"
,
formType
:
'checkbox-group'
,
field
:
"COL28"
,
options
:
[
"防火墙"
,
"入侵防御系统(IPS)"
,
"入侵检测系统(IDS)"
,
"访问控制列表(ACL)"
,
"虚拟局域网(VLAN)"
,
"其他"
]
{
name
:
'区域名称'
,
formType
:
'input'
,
field
:
'COL61'
},
{
name
:
'用途及包含的重要信息系统'
,
formType
:
'input'
,
field
:
'COL62'
},
{
name
:
'可访问哪些网络安全域'
,
formType
:
'input'
,
field
:
'COL63'
},
{
name
:
'可被哪些网络安全域访问'
,
formType
:
'input'
,
field
:
'COL64'
},
{
name
:
'隔离及防护措施'
,
formType
:
'checkbox-group'
,
field
:
'COL65'
,
options
:
[
'防火墙'
,
'入侵防御系统(IPS)'
,
'入侵检测系统(IDS)'
,
'访问控制列表(ACL)'
,
'虚拟局域网(VLAN)'
,
'其他'
],
otherOption
:
true
,
otherField
:
'COL66'
,
},
{
name
:
'远程管理方式'
,
formType
:
'checkbox-group'
,
field
:
'COL67'
,
options
:
[
'因特网'
,
'局域网'
,
'VPN'
,
'无线网络'
,
'电话拨号'
,
'堡垒机'
,
'不允许'
,
'其他'
],
otherOption
:
true
,
otherField
:
'COL68'
,
},
{
name
:
"远程管理方式"
,
formType
:
'checkbox-group'
,
field
:
"COL29"
,
options
:
[
"因特网"
,
"局域网"
,
"VPN"
,
"无线网络"
,
"电话拨号"
,
"堡垒机"
,
"不允许"
,
"其他"
]
},
],
data
:
[]
data
:
[]
,
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"<strong>重要网络边界控制</strong>"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"生产网边界(生产网与内部开发、测试、办公等其他网络之间的边界)"
},
{
type
:
"brspace"
},
{
type
:
"checkbox-group"
,
field
:
"COL70"
,
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'<strong>重要网络边界控制</strong>'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'生产网边界(生产网与内部开发、测试、办公等其他网络之间的边界)'
},
{
type
:
'brspace'
},
{
type
:
'checkbox-group'
,
field
:
'COL70'
,
options
:
[
"异构防火墙"
,
"热备防火墙"
,
"单防火墙"
,
"访问控制列表(ACL)"
,
"网络加密机"
,
"入侵控制系统(IDS)"
,
"入侵防御系统(IPS)"
,
"恶意代码过滤"
,
"安全审计设备"
'异构防火墙'
,
'热备防火墙'
,
'单防火墙'
,
'访问控制列表(ACL)'
,
'网络加密机'
,
'入侵控制系统(IDS)'
,
'入侵防御系统(IPS)'
,
'恶意代码过滤'
,
'安全审计设备'
,
],
otherOption
:
true
,
otherField
:
"COL71"
otherOption
:
true
,
otherField
:
'COL71'
,
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"外联网边界(生产网与第三方专用网络的边界)"
},
{
type
:
"brspace"
},
{
type
:
"checkbox-group"
,
field
:
"COL72"
,
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'外联网边界(生产网与第三方专用网络的边界)'
},
{
type
:
'brspace'
},
{
type
:
'checkbox-group'
,
field
:
'COL72'
,
options
:
[
"异构防火墙"
,
"热备防火墙"
,
"单防火墙"
,
"访问控制列表(ACL)"
,
"网络加密机"
,
"IPSec VPN"
,
"SSL VPN"
,
"入侵控制系统(IDS)"
,
"入侵防御系统(IPS)"
,
"恶意代码过滤"
,
"安全审计设备"
'异构防火墙'
,
'热备防火墙'
,
'单防火墙'
,
'访问控制列表(ACL)'
,
'网络加密机'
,
'IPSec VPN'
,
'SSL VPN'
,
'入侵控制系统(IDS)'
,
'入侵防御系统(IPS)'
,
'恶意代码过滤'
,
'安全审计设备'
,
],
otherOption
:
true
,
otherField
:
"COL73"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"网上银行(网上保险)边界(网上银行(网上保险)与国际互联网之间的边界):"
},
{
type
:
"brspace"
},
{
type
:
"checkbox-group"
,
field
:
"COL74"
,
otherOption
:
true
,
otherField
:
'COL73'
,
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'网上银行(网上保险)边界(网上银行(网上保险)与国际互联网之间的边界):'
},
{
type
:
'brspace'
},
{
type
:
'checkbox-group'
,
field
:
'COL74'
,
options
:
[
"异构防火墙"
,
"热备防火墙"
,
"单防火墙"
,
"访问控制列表(ACL)"
,
"网络加密机"
,
"IPSec VPN"
,
"SSL VPN"
,
"Web应用防护系统"
,
"入侵检测系统"
,
"入侵防御系统(IPS/UTM"
,
"链路负载均衡"
,
"DDoS专用防护系统"
,
"电信运营商DDoS流量清洗服务"
,
"入侵控制系统(IDS)"
,
"入侵防御系统(IPS)"
,
"恶意代码过滤"
,
"安全审计设备"
'异构防火墙'
,
'热备防火墙'
,
'单防火墙'
,
'访问控制列表(ACL)'
,
'网络加密机'
,
'IPSec VPN'
,
'SSL VPN'
,
'Web应用防护系统'
,
'入侵检测系统'
,
'入侵防御系统(IPS/UTM)'
,
'恶意代码过滤'
,
'链路负载均衡'
,
'DDoS专用防护系统'
,
'电信运营商DDoS流量清洗服务'
,
'安全审计设备'
,
],
otherOption
:
true
,
otherField
:
"COL75"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"互联网边界(外网与国际互联网之间的边界):"
},
{
type
:
"brspace"
},
{
type
:
"checkbox-group"
,
field
:
"COL76"
,
otherOption
:
true
,
otherField
:
'COL75'
,
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'互联网边界(外网与国际互联网之间的边界):'
},
{
type
:
'brspace'
},
{
type
:
'checkbox-group'
,
field
:
'COL76'
,
options
:
[
"异构防火墙"
,
"热备防火墙"
,
"单防火墙"
,
"访问控制列表(ACL)"
,
"网络加密机"
,
"IPSec VPN"
,
"SSL VPN"
,
"Web应用防护系统"
,
"入侵检测系统"
,
"入侵防御系统(IPS/UTM"
,
"链路负载均衡"
,
"DDoS专用防护系统"
,
"电信运营商DDoS流量清洗服务"
,
"入侵控制系统(IDS)"
,
"入侵防御系统(IPS)"
,
"恶意代码过滤"
,
"安全审计设备"
'异构防火墙'
,
'热备防火墙'
,
'单防火墙'
,
'访问控制列表(ACL)'
,
'网络加密机'
,
'IPSec VPN'
,
'SSL VPN'
,
'Web应用防护系统'
,
'入侵检测系统'
,
'入侵防御系统(IPS/UTM)'
,
'恶意代码过滤'
,
'链路负载均衡'
,
'DDoS专用防护系统'
,
'电信运营商DDoS流量清洗服务'
,
'安全审计设备'
,
],
otherOption
:
true
,
otherField
:
"COL77"
},
{
type
:
"br"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"<strong>网络安全管理</strong>"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(1)允许从内部办公网访问国际互联网"
},
{
type
:
"yesno"
,
field
:
"COL82"
,
extraField
:
"COL83"
,
extraLabel
:
'审批部门'
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(2)建立终端设备接入网络审批机制"
},
{
type
:
"yesno"
,
field
:
"COL84"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(3)国际互联网可访问内部网络"
},
{
type
:
"yesno"
,
field
:
"COL85"
,
extraField
:
"COL86"
,
extraLabel
:
'包括的应用系统'
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(4)在机构内部使用无线局域网络"
},
{
type
:
"yesno"
,
field
:
"COL87"
,
otherOption
:
true
,
otherField
:
'COL77'
,
},
{
type
:
'br'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'<strong>网络安全管理</strong>'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(1)允许从内部办公网访问国际互联网:'
},
{
type
:
'radio-group'
,
field
:
'COL82'
,
options
:
[
'是'
,
'否'
],
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'如是,审批部门:'
},
{
type
:
'input'
,
field
:
'COL83'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(2)建立终端设备接入网络审批机制,禁止未经授权的终端设备私自接入内部网络:'
},
{
type
:
'radio-group'
,
field
:
'COL84'
,
options
:
[
'是'
,
'否'
],
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(3)国际互联网可访问内部网络:'
},
{
type
:
'radio-group'
,
field
:
'COL85'
,
options
:
[
'是'
,
'否'
],
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'如是,包括的应用系统(如网银、移动办公等):'
},
{
type
:
'input'
,
field
:
'COL86'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(4)在机构内部使用无线局域网络'
},
{
type
:
'yesno'
,
field
:
'COL87'
,
extraFields
:
[
{
label
:
"采用协议和加密方式"
,
formType
:
"input"
,
field
:
"COL88"
},
{
label
:
"无线局域网络所处网络区域"
,
formType
:
"checkbox"
,
field
:
"COL89"
,
options
:
[
"生产网"
,
"开发网"
,
"测试网"
,
"办公网"
,
"外网"
],
otherOption
:
true
,
otherField
:
"COL90"
{
label
:
'采用协议和加密方式'
,
formType
:
'input'
,
field
:
'COL88'
},
{
label
:
'无线局域网络所处网络区域'
,
formType
:
'checkbox'
,
field
:
'COL89'
,
options
:
[
'生产网'
,
'开发网'
,
'测试网'
,
'办公网'
,
'外网'
,
'其他'
],
otherOption
:
true
,
otherField
:
'COL90'
,
},
{
label
:
"无线局域网络接入认证方式"
,
formType
:
"checkbox"
,
field
:
"COL91"
,
options
:
[
"无"
,
"仅接入设备认证"
,
"仅用户认证"
,
"设备和用户同时认证"
],
otherOption
:
true
,
otherField
:
"COL92"
{
label
:
'无线局域网络接入认证方式'
,
formType
:
'radio'
,
field
:
'COL91'
,
options
:
[
'无'
,
'仅接入设备认证'
,
'仅用户认证'
,
'设备和用户同时认证'
,
'其他'
],
otherOption
:
true
,
otherField
:
'COL92'
,
},
{
label
:
"无线局域网络使用缺省SSID"
,
field
:
"C20A005"
,
formType
:
"radio"
,
options
:
[
"是"
,
"否"
]
}
]
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(5)制定并实施网络设备安全配置基线"
},
{
type
:
"radio-group"
,
field
:
"COL93"
,
options
:
[
"是"
,
"否"
]
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"建立网络设备版本和缺陷管理流程"
},
{
type
:
"radio-group"
,
field
:
"COL94"
,
options
:
[
"是"
,
"否"
]
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(6)实时监测网络攻击行为并保存日志"
},
{
type
:
"yesno"
,
field
:
"COL95"
,
extraFields
:
[
{
label
:
"日志定期审查周期"
,
formType
:
"number"
,
field
:
"C20A006"
,
unit
:
'月'
},
{
label
:
"网络安全设备日志保存时长"
,
formType
:
"number"
,
field
:
"C20A007"
,
unit
:
'月'
}
]
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(7)网络防病毒软件部署范围"
},
{
type
:
"checkbox-group"
,
field
:
"COL96"
,
options
:
[
"生产网"
,
"开发网"
,
"测试网"
,
"办公网"
,
"外网"
,
{
label
:
'无线局域网络使用缺省SSID'
,
field
:
'C20A005'
,
formType
:
'radio'
,
options
:
[
'是'
,
'否'
]
},
],
otherOption
:
true
,
otherField
:
"COL97"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(8)建立网络安全态势感知平台"
},
{
type
:
"radio-group"
,
field
:
"C23A007"
,
options
:
[
"是"
,
"否"
]
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(9)定期对关键安全控制措施的有效性进行验证"
},
{
type
:
"radio-group"
,
field
:
"C24A001"
,
options
:
[
"是"
,
"否"
]
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"如是,最近一次检查时间"
},
{
type
:
"date"
,
field
:
"C24A002"
},
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(5)制定并实施网络设备安全配置基线'
},
{
type
:
'radio-group'
,
field
:
'COL93'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'建立网络设备版本和缺陷管理流程'
},
{
type
:
'radio-group'
,
field
:
'COL94'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(6)实时监测网络攻击行为并保存日志'
},
{
type
:
'radio-group'
,
field
:
'COL95'
,
options
:
[
'是'
,
'否'
],
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'如是,日志定期审查周期:'
},
{
type
:
'input'
,
formType
:
'number'
,
field
:
'C20A006'
,
unit
:
'月'
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'网络安全设备日志保存时长:'
},
{
type
:
'input'
,
formType
:
'number'
,
field
:
'C20A007'
,
unit
:
'月'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(7)网络防病毒软件部署范围'
},
{
type
:
'checkbox-group'
,
field
:
'COL96'
,
options
:
[
'生产网'
,
'开发网'
,
'测试网'
,
'办公网'
,
'外网'
],
otherOption
:
true
,
otherField
:
'COL97'
,
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(8)建立网络安全态势感知平台'
},
{
type
:
'radio-group'
,
field
:
'C23A007'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(9)定期对关键安全控制措施的有效性进行验证'
},
{
type
:
'radio-group'
,
field
:
'C24A001'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'如是,最近一次检查时间'
},
{
type
:
'date'
,
field
:
'C24A002'
},
],
},
{
serialNumber
:
"4"
,
project
:
"主机安全"
,
serialNumber
:
'3'
,
project
:
'主机安全'
,
code
:
'TB603'
,
content
:
[
{
type
:
"text"
,
value
:
"(1)制定并实施主机安全配置基线"
},
{
type
:
"yesno"
,
field
:
"COL99"
,},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"如是,主机安全配置基线覆盖范围"
},
{
type
:
"checkbox-group"
,
field
:
"COL100"
,
options
:
[
"操作系统"
,
"数据库"
,
"中间件"
],
otherOption
:
true
,
otherField
:
"COL101"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
" (2)定期对主机系统漏洞进行检测"
},
{
type
:
"yesno"
,
field
:
"COL102"
,},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"如是,检测频率"
},
{
type
:
"number"
,
field
:
"COL110"
,
unit
:
""
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"建立主机系统漏洞跟踪机制"
},
{
type
:
"yesno"
,
field
:
"COL103"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(3)建立主机系统补丁管理流程"
},
{
type
:
"yesno"
,
field
:
"COL104"
,},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"补丁升级前对补丁进行评估和测试"
},
{
type
:
"yesno"
,
field
:
"COL105"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(4)采取的主机系统安全管理措施主要包括"
},
{
type
:
"brspace"
},
{
type
:
"checkbox-group"
,
field
:
"COL106"
,
{
type
:
'text'
,
value
:
'(1)制定并实施主机安全配置基线'
},
{
type
:
'radio-group'
,
field
:
'COL99'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'如是,主机安全配置基线覆盖范围'
},
{
type
:
'checkbox-group'
,
field
:
'COL100'
,
options
:
[
'操作系统'
,
'数据库'
,
'中间件'
],
otherOption
:
true
,
otherField
:
'COL101'
,
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
' (2)定期对主机系统漏洞进行检测'
},
{
type
:
'radio-group'
,
field
:
'COL102'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'如是,检测频率'
},
{
type
:
'number'
,
field
:
'COL110'
,
unit
:
''
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'建立主机系统漏洞跟踪机制'
},
{
type
:
'radio-group'
,
field
:
'COL103'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(3)建立主机系统补丁管理流程'
},
{
type
:
'radio-group'
,
field
:
'COL104'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'补丁升级前对补丁进行评估和测试'
},
{
type
:
'radio-group'
,
field
:
'COL105'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(4)采取的主机系统安全管理措施主要包括'
},
{
type
:
'brspace'
},
{
type
:
'checkbox-group'
,
field
:
'COL106'
,
options
:
[
"遵循最小授权原则分配系统管理用户权限"
,
"固定终端或限制登录终端IP地址"
,
"定期修改口令"
,
"口令满足一定复杂度要求"
,
"限制非法登录次数"
,
"对登录终端超时进行锁定或强制退出"
,
"系统远程管理采取加密措施"
,
"限制远程拨号访问"
,
"对系统重大管理操作行为进行日志审计"
,
"通过堡垒机进行集中管理"
,
"采用双因素认证登录"
'遵循最小授权原则分配系统管理用户权限'
,
'固定终端或限制登录终端IP地址'
,
'定期修改口令'
,
'口令满足一定复杂度要求'
,
'限制非法登录次数'
,
'对登录终端超时进行锁定或强制退出'
,
'系统远程管理采取加密措施'
,
'限制远程拨号访问'
,
'对系统重大管理操作行为进行日志审计'
,
'通过堡垒机进行集中管理'
,
'采用双因素认证登录'
,
],
otherOption
:
true
,
otherField
:
"COL107"
otherOption
:
true
,
otherField
:
'COL107'
,
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(5)重要信息系统日志管理方式"
},
{
type
:
"radio-group"
,
field
:
"COL108"
,
options
:[
"集中存储"
,
"分散存储"
,
"不保存"
]},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"日志定期审查周期"
},
{
type
:
"number"
,
field
:
"COL109"
,
unit
:
"月"
},
{
type
:
'br'
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"日志保存时长"
},
{
type
:
"number"
,
field
:
"COL110"
,
unit
:
"月"
},
{
type
:
'text'
,
value
:
'(5)重要信息系统日志管理方式'
},
{
type
:
'radio-group'
,
field
:
'COL108'
,
options
:
[
'集中存储'
,
'分散存储'
,
'不保存'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'日志定期审查周期'
},
{
type
:
'number'
,
field
:
'COL109'
,
unit
:
'月'
},
]
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'日志保存时长'
},
{
type
:
'number'
,
field
:
'COL110'
,
unit
:
'月'
},
],
},
{
serialNumber
:
"5"
,
project
:
"终端安全"
,
serialNumber
:
'4'
,
project
:
'终端安全'
,
code
:
'TB604'
,
content
:
[
{
type
:
"text"
,
value
:
"(1)安装统一的防病毒软件"
},
{
type
:
"yesno"
,
field
:
"COL113"
,},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"终端防病毒软件安装覆盖率"
},
{
type
:
"number"
,
field
:
"COL114"
,
unit
:
'%'
},
{
type
:
"text"
,
value
:
",病毒库更新频度"
},
{
type
:
"number"
,
field
:
"C20A008"
,
unit
:
'天/次'
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(2)安装统一的终端安全管理软件"
},
{
type
:
"yesno"
,
field
:
"COL116"
,},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"若是,应用的主要安全策略包括"
},
{
type
:
"checkbox-group"
,
field
:
"COL117"
,
options
:
[
"禁止非法外联"
,
"移动介质管控"
,
"违规日志审计"
,
"网络准入管理"
,
"补丁自动修补"
,
"软件分发"
,
"应用软件管理"
,
"资产管理"
,
"IP、MAC绑定"
,
"密码策略管理"
{
type
:
'text'
,
value
:
'(1)安装统一的防病毒软件'
},
{
type
:
'radio-group'
,
field
:
'COL113'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'终端防病毒软件安装覆盖率'
},
{
type
:
'number'
,
field
:
'COL114'
,
unit
:
'%'
},
{
type
:
'text'
,
value
:
',病毒库更新频度'
},
{
type
:
'number'
,
field
:
'C20A008'
,
unit
:
'天/次'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(2)安装统一的终端安全管理软件'
},
{
type
:
'radio-group'
,
field
:
'COL116'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'如是,应用的主要安全策略包括'
},
{
type
:
'checkbox-group'
,
field
:
'COL117'
,
options
:
[
'禁止非法外联'
,
'移动介质管控'
,
'违规日志审计'
,
'网络准入管理'
,
'补丁自动修补'
,
'软件分发'
,
'应用软件管理'
,
'资产管理'
,
'IP、MAC绑定'
,
'密码策略管理'
,
],
otherOption
:
true
,
otherField
:
"COL118"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(3)终端口令定期强制修改"
},
{
type
:
"yesno"
,
field
:
"COL119"
,},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"修改周期"
},
{
type
:
"number"
,
field
:
"COL120"
,
unit
:
'天'
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"终端口令复杂度要求"
},
{
type
:
"yesno"
,
field
:
"COL121"
,},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(4)建立终端补丁管理流程"
},
{
type
:
"yesno"
,
field
:
"COL122"
,},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"使用自动化工具实现补丁的自动检测、分发和安装"
},
{
type
:
"yesno"
,
field
:
"COL123"
,},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(5)建立移动设备(含笔记本电脑、移动存储介质、移动智能终端等)使用管理制度"
},
{
type
:
"yesno"
,
field
:
"COL124"
,},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"如是,则采取的移动设备管理措施主要包括"
},
{
type
:
"brspace"
},
{
type
:
"checkbox-group"
,
field
:
"COL125"
,
formType
:
"checkbox"
,
options
:[
"对移动设备的领用进行登记"
,
"控制未授权移动设备接入,进行告警、阻断,并对操作行为进行记录"
,
"不允许移动设备在与外网和内网交叉使用"
,
"使用加密等手段防止移动设备使用不当或丢失造成敏感数据泄露"
,
"对移动设备的使用行为进行监督和记录"
,
"对使用移动设备的行为定期进行检查和审计"
otherOption
:
true
,
otherField
:
'COL118'
,
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(3)终端口令定期强制修改'
},
{
type
:
'radio-group'
,
field
:
'COL119'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'如是,修改周期'
},
{
type
:
'number'
,
field
:
'COL120'
,
unit
:
'天'
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'终端口令复杂度要求'
},
{
type
:
'radio-group'
,
field
:
'COL121'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(4)建立终端补丁管理流程'
},
{
type
:
'radio-group'
,
field
:
'COL122'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'使用自动化工具实现补丁的自动检测、分发和安装'
},
{
type
:
'radio-group'
,
field
:
'COL123'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(5)建立移动设备(含笔记本电脑、移动存储介质、移动智能终端等)使用管理制度'
},
{
type
:
'radio-group'
,
field
:
'COL124'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'如是,则采取的移动设备管理措施主要包括'
},
{
type
:
'brspace'
},
{
type
:
'checkbox-group'
,
field
:
'COL125'
,
formType
:
'checkbox'
,
options
:
[
'对移动设备的领用进行登记'
,
'控制未授权移动设备接入,进行告警、阻断,并对操作行为进行记录'
,
'不允许移动设备在与外网和内网交叉使用'
,
'使用加密等手段防止移动设备使用不当或丢失造成敏感数据泄露'
,
'对移动设备的使用行为进行监督和记录'
,
'对使用移动设备的行为定期进行检查和审计'
,
],
otherOption
:
true
,
otherField
:
"COL126"
otherOption
:
true
,
otherField
:
'COL126'
,
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"备注"
},
{
type
:
"textarea"
,
field
:
"COL127"
,
width
:
'50%'
,
rows
:
1
},
]
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'备注'
},
{
type
:
'textarea'
,
field
:
'COL127'
,
width
:
'50%'
,
rows
:
1
},
]
,
},
{
serialNumber
:
"6"
,
project
:
"应用安全"
,
serialNumber
:
'5'
,
project
:
'应用安全'
,
code
:
'TB605'
,
content
:
[
{
type
:
"text"
,
value
:
"(1)重要业务应用系统管理采取的主要措施包括:"
},
{
type
:
"brspace"
},
{
type
:
"checkbox-group"
,
field
:
"COL128"
,
options
:
[
"遵循最小授权原则分配系统管理用户权限"
,
"固定终端或限制登录终端IP地址"
,
"定期修改口令"
,
"口令满足一定复杂度要求"
,
"限制非法登录次数"
,
"对登录终端超时进行锁定或强制退出"
,
"系统远程管理采取加密措施"
,
"限制远程拨号访问"
,
"对系统重大管理操作行为进行日志审计"
,
"通过堡垒机进行集中管理"
,
"采用双因素认证登录"
{
type
:
'text'
,
value
:
'(1)重要业务应用系统管理采取的主要措施包括:'
},
{
type
:
'brspace'
},
{
type
:
'checkbox-group'
,
field
:
'COL128'
,
options
:
[
'遵循最小授权原则分配系统管理用户权限'
,
'固定终端或限制登录终端IP地址'
,
'定期修改口令'
,
'口令满足一定复杂度要求'
,
'限制非法登录次数'
,
'对登录终端超时进行锁定或强制退出'
,
'系统远程管理采取加密措施'
,
'限制远程拨号访问'
,
'对系统重大管理操作行为进行日志审计'
,
'通过堡垒机进行集中管理'
,
'采用双因素认证登录'
,
],
otherOption
:
true
,
otherField
:
"COL129"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(2)制定密码设备管理要求,对密码设备的准入、维护、维修及报废进行规范管理"
},
{
type
:
"yesno"
,
field
:
"COL130"
,},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"制定机构全辖密钥管理要求,对密钥生命周期进行全面管理:"
},
{
type
:
"number"
,
field
:
"COL131"
,
unit
:
'个'
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"已采用SM系列密码算法的应用系统数量:"
},
{
type
:
"number"
,
field
:
"C20A009"
,
unit
:
'个'
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"已采用SM系列密码算法的加密机数量:"
},
{
type
:
"number"
,
field
:
"C20B027"
,
unit
:
'个'
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"已采用SM系列密码算法的VPN设备数量:"
},
{
type
:
"number"
,
value
:
""
,
field
:
"C20B028"
,
unit
:
'个'
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(3)网上银行(网上保险)系统架构"
},
{
type
:
"checkbox-group"
,
field
:
"COL133"
,
options
:[
"C/S架构"
,
"B/S架构"
,
],
otherOption
:
true
,
otherField
:
"COL134"
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"网上银行(网上保险)支持的多因素认证方式"
},
{
type
:
"checkbox-group"
,
field
:
"COL135"
,
options
:[
"一代USB Key"
,
"二代USB Key"
,
"TOKEN"
,
"手机动态验证码"
],
otherOption
:
true
,
otherField
:
"COL136"
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"如网上银行(网上保险)支持USB Key,USB Key是否通过第三方测评机构的安全检测"
},
{
type
:
"yesno"
,
field
:
"COL137"
,
extraFields
:[
{
label
:
"测评机构名称"
,
formType
:
"input"
,
field
:
"COL138"
},
{
label
:
"最近一次检测时间"
,
formType
:
"date"
,
field
:
"COL139"
},
]
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"已采用SM系列密码算法的USB Key 数量"
},
{
type
:
"number"
,
field
:
"C20B029"
,
unit
:
'个'
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"已采用SM系列密码算法的TOKEN数量"
},
{
type
:
"number"
,
field
:
"C20B030"
,
unit
:
'个'
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(4)网上银行(网上保险)客户端运行环境检测"
},
{
type
:
"yesno"
,
field
:
"COL140"
,
extraFields
:[
{
label
:
"主要检测项包括"
,
formType
:
"checkbox"
,
field
:
"COL141"
,
options
:[
"病毒检测"
,
"恶意软件检测"
,
"签名控件"
,
"密码控件"
,
"防录屏"
,
"防钓鱼控件"
,
"Http代理检测"
,
"注册表检测、修复"
],
otherOption
:
true
,
otherField
:
"COL142"
},
{
label
:
"已采用SM系列密码算法的密码控件数量"
,
formType
:
"number"
,
field
:
"C20B031"
,
unit
:
"个"
},
]
otherOption
:
true
,
otherField
:
'COL129'
,
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(5)网上银行(网上保险)客户证书签发机构"
},
{
type
:
"radio-group"
,
field
:
"COL143"
,
options
:[
"自建CA"
,
"第三方CA机构"
]
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"机构名称"
},
{
type
:
"input"
,
field
:
"COL144"
,},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"已采用SM系列密码算法的自建数字证书认证系统数量"
},
{
type
:
"number"
,
field
:
"C20B032"
,
unit
:
"个"
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"已采用SM系列密码算法的电子签章系统数量"
},
{
type
:
"number"
,
field
:
"C20B033"
,
unit
:
"个"
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"已采用SM系列密码算法的时间戳服务器数量"
},
{
type
:
"number"
,
field
:
"C20B034"
,
unit
:
"个"
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"已采用SM系列密码算法的签名验签服务器数量"
},
{
type
:
"number"
,
field
:
"C20B035"
,
unit
:
"个"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(6)手机银行(手机APP)支持多因素认证方式"
},
{
type
:
"brspace"
},
{
type
:
"checkbox-group"
,
field
:
"COL145"
,
options
:[
"TOKEN"
,
"手机动态验证码"
,
"手势密码"
,
"软令牌"
,
"生物识别技术"
],
otherOption
:
true
,
otherField
:
"COL146"
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(2)制定密码设备管理要求,对密码设备的准入、维护、维修及报废进行规范管理'
},
{
type
:
'radio-group'
,
field
:
'COL130'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'制定机构全辖密钥管理要求,对密钥生命周期进行全面管理:'
},
{
type
:
'radio-group'
,
field
:
'COL131'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'已采用SM系列密码算法的应用系统数量:'
},
{
type
:
'number'
,
field
:
'C20A009'
,
unit
:
'个'
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'已采用SM系列密码算法的加密机数量:'
},
{
type
:
'number'
,
field
:
'C20B027'
,
unit
:
'个'
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'已采用SM系列密码算法的VPN设备数量:'
},
{
type
:
'number'
,
value
:
''
,
field
:
'C20B028'
,
unit
:
'个'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(3)网上银行(网上保险)系统架构'
},
{
type
:
'checkbox-group'
,
field
:
'COL133'
,
options
:
[
'C/S架构'
,
'B/S架构'
],
otherOption
:
true
,
otherField
:
'COL134'
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'网上银行(网上保险)支持的多因素认证方式'
},
{
type
:
'checkbox-group'
,
field
:
'COL135'
,
options
:
[
'一代USB Key'
,
'二代USB Key'
,
'TOKEN'
,
'手机动态验证码'
],
otherOption
:
true
,
otherField
:
'COL136'
,
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"建立手机银行(手机APP)和其他互联网APP更新管理流程,在APP升级前进行安全评估和测试"
},
{
type
:
"yesno"
,
field
:
"COL147"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
" (7)建立电子渠道业务用户异常交易行为自动化监测机制"
},
{
type
:
"yesno"
,
field
:
"COL148"
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"建立用户异常交易行为自动化控制机制"
},
{
type
:
"yesno"
,
field
:
"COL149"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(8)网上银行(网上保险)、手机银行(手机APP)的服务协议中包含安全风险提示内容"
},
{
type
:
"yesno"
,
field
:
"COL150"
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"加强客户安全教育的宣传渠道包括"
},
{
type
:
"brspace"
},
{
type
:
"checkbox-group"
,
field
:
"COL151"
,
options
:[
"客户端安全软件(控件、程序)默认打开正确的登录页面地址和客服电话号码"
,
"网上银行(网上保险)、手机银行(手机APP)使用过程中,向客户明确提示风险和注意事项"
,
"客户申请网上银行(网上保险)、手机银行(手机APP)时提供安全使用手册 "
,
"网上银行(网上保险)、手机银行(手机APP)使用完毕后,提示安全退出操作步骤"
,
"在公众媒体刊登客户安全教育内容 □印刷客户安全教育宣传材料 □开展公众教育日活动"
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'如网上银行(网上保险)支持USB Key,USB Key是否通过第三方测评机构的安全检测'
},
{
type
:
'radio-group'
,
field
:
'COL137'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'如是,测评机构名称:'
},
{
type
:
'input'
,
field
:
'COL138'
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'最近一次检测时间:'
},
{
type
:
'date'
,
field
:
'COL139'
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'已采用SM系列密码算法的USB Key 数量'
},
{
type
:
'number'
,
field
:
'C20B029'
,
unit
:
'个'
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'已采用SM系列密码算法的TOKEN数量'
},
{
type
:
'number'
,
field
:
'C20B030'
,
unit
:
'个'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(4)网上银行(网上保险)客户端运行环境检测'
},
{
type
:
'radio-group'
,
field
:
'COL140'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'如是,主要检测项包括'
},
{
type
:
'checkbox-group'
,
field
:
'COL141'
,
options
:
[
'病毒检测'
,
'恶意软件检测'
,
'签名控件'
,
'密码控件'
,
'防录屏'
,
'防钓鱼控件'
,
'Http代理检测'
,
'注册表检测、修复'
],
otherOption
:
true
,
otherField
:
'COL142'
,
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'已采用SM系列密码算法的密码控件数量'
},
{
type
:
'number'
,
field
:
'C20B031'
,
unit
:
'个'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(5)网上银行(网上保险)客户证书签发机构'
},
{
type
:
'radio-group'
,
field
:
'COL143'
,
options
:
[
'自建CA'
,
'第三方CA机构'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'机构名称'
},
{
type
:
'input'
,
field
:
'COL144'
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'已采用SM系列密码算法的自建数字证书认证系统数量'
},
{
type
:
'number'
,
field
:
'C20B032'
,
unit
:
'个'
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'已采用SM系列密码算法的电子签章系统数量'
},
{
type
:
'number'
,
field
:
'C20B033'
,
unit
:
'个'
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'已采用SM系列密码算法的时间戳服务器数量'
},
{
type
:
'number'
,
field
:
'C20B034'
,
unit
:
'个'
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'已采用SM系列密码算法的签名验签服务器数量'
},
{
type
:
'number'
,
field
:
'C20B035'
,
unit
:
'个'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(6)手机银行(手机APP)支持多因素认证方式'
},
{
type
:
'brspace'
},
{
type
:
'checkbox-group'
,
field
:
'COL145'
,
options
:
[
'TOKEN'
,
'手机动态验证码'
,
'手势密码'
,
'软令牌'
,
'生物识别技术'
],
otherOption
:
true
,
otherField
:
'COL146'
,
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'建立手机银行(手机APP)和其他互联网APP更新管理流程,在APP升级前进行安全评估和测试'
},
{
type
:
'radio-group'
,
field
:
'COL147'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
' (7)建立电子渠道业务用户异常交易行为自动化监测机制'
},
{
type
:
'radio-group'
,
field
:
'COL148'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'建立用户异常交易行为自动化控制机制'
},
{
type
:
'radio-group'
,
field
:
'COL149'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(8)网上银行(网上保险)、手机银行(手机APP)的服务协议中包含安全风险提示内容'
},
{
type
:
'radio-group'
,
field
:
'COL150'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'加强客户安全教育的宣传渠道包括'
},
{
type
:
'brspace'
},
{
type
:
'checkbox-group'
,
field
:
'COL151'
,
options
:
[
'客户端安全软件(控件、程序)默认打开正确的登录页面地址和客服电话号码'
,
'网上银行(网上保险)、手机银行(手机APP)使用过程中,向客户明确提示风险和注意事项'
,
'客户申请网上银行(网上保险)、手机银行(手机APP)时提供安全使用手册 '
,
'网上银行(网上保险)、手机银行(手机APP)使用完毕后,提示安全退出操作步骤'
,
'在公众媒体刊登客户安全教育内容'
,
'印刷客户安全教育宣传材料'
,
'开展公众教育日活动'
,
],
otherOption
:
true
,
otherField
:
"COL152"
otherOption
:
true
,
otherField
:
'COL152'
,
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(9)互联网应用系统(含网站)采取物理或逻辑集中进行统一出口管理,采取统一安全防护措施"
},
{
type
:
"yesno"
,
field
:
"COL153"
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"互联网网站采取网页防篡改措"
},
{
type
:
"yesno"
,
field
:
"COL154"
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"建立网站信息发布审核制度"
},
{
type
:
"yesno"
,
field
:
"COL155"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(10)实施钓鱼网站监测"
},
{
type
:
"yesno"
,
field
:
"COL156"
,
extraFields
:[
{
label
:
"监测方法"
,
formType
:
"checkbox"
,
field
:
"COL157"
,
options
:[
"自监测"
,
"购买第三方服务"
],
},
{
label
:
"本年度发现的钓鱼网站数量"
,
formType
:
"number"
,
field
:
"COL158"
,
unit
:
"个"
},
{
label
:
"本年度已关闭的钓鱼网站数量"
,
formType
:
"number"
,
field
:
"COL159"
,
unit
:
"个"
},
{
label
:
"钓鱼网站查封率"
,
formType
:
"number"
,
field
:
"COL160"
,
unit
:
"%"
},
]
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(11)实施仿冒APP监测"
},
{
type
:
"yesno"
,
field
:
"COL161"
,
extraFields
:[
{
label
:
"监测方法"
,
formType
:
"checkbox"
,
field
:
"COL162"
,
options
:[
"自监测"
,
"购买第三方服务"
],
},
{
label
:
"本年度发现的仿冒APP数量"
,
formType
:
"number"
,
field
:
"COL163"
,
unit
:
"个"
},
{
label
:
"本年度强制下架的仿冒APP数量"
,
formType
:
"number"
,
field
:
"COL164"
,
unit
:
"个"
},
{
label
:
"仿冒App查封率"
,
formType
:
"number"
,
field
:
"COL165"
,
unit
:
"%"
},
]
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(9)互联网应用系统(含网站)采取物理或逻辑集中进行统一出口管理,采取统一安全防护措施'
},
{
type
:
'radio-group'
,
field
:
'COL153'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'互联网网站采取网页防篡改措'
},
{
type
:
'radio-group'
,
field
:
'COL154'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'建立网站信息发布审核制度'
},
{
type
:
'radio-group'
,
field
:
'COL155'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(10)实施钓鱼网站监测'
},
{
type
:
'radio-group'
,
field
:
'COL156'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'如是,监测方法'
},
{
type
:
'checkbox-group'
,
field
:
'COL157'
,
options
:
[
'自监测'
,
'购买第三方服务'
],
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(12)建立开源软件以及其他第三方软件的准入和管理机制,采取必要的安全评估"
},
{
type
:
"yesno"
,
field
:
"C20A010"
,},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"建立开源软件以及其他第三方软件的缺陷跟踪机制,及时修复漏洞"
},
{
type
:
"yesno"
,
field
:
"C20A011"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"备注"
},
{
type
:
"textarea"
,
field
:
"COL166"
,
width
:
'50%'
,
rows
:
1
},
]
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'本年度发现的钓鱼网站数量'
},
{
type
:
'number'
,
field
:
'COL158'
,
unit
:
'个'
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'本年度已关闭的钓鱼网站数量'
},
{
type
:
'number'
,
field
:
'COL159'
,
unit
:
'个'
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'钓鱼网站查封率'
},
{
type
:
'number'
,
field
:
'COL160'
,
unit
:
'%'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(11)实施仿冒APP监测'
},
{
type
:
'radio-group'
,
field
:
'COL161'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'如是,监测方法'
},
{
type
:
'checkbox-group'
,
field
:
'COL162'
,
options
:
[
'自监测'
,
'购买第三方服务'
],
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'本年度发现的仿冒APP数量'
},
{
type
:
'number'
,
field
:
'COL163'
,
unit
:
'个'
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'本年度强制下架的仿冒APP数量'
},
{
type
:
'number'
,
field
:
'COL164'
,
unit
:
'个'
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'仿冒App查封率'
},
{
type
:
'number'
,
field
:
'COL165'
,
unit
:
'%'
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(12)建立开源软件以及其他第三方软件的准入和管理机制,采取必要的安全评估'
},
{
type
:
'radio-group'
,
field
:
'C20A010'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'建立开源软件以及其他第三方软件的缺陷跟踪机制,及时修复漏洞'
},
{
type
:
'radio-group'
,
field
:
'C20A011'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'备注'
},
{
type
:
'textarea'
,
field
:
'COL166'
,
width
:
'50%'
,
rows
:
1
},
],
},
{
serialNumber
:
"7"
,
project
:
"数据安全"
,
serialNumber
:
'6'
,
project
:
'数据安全'
,
code
:
'TB606'
,
content
:
[
{
type
:
"text"
,
value
:
"(1)制定数据管理制度和流程"
},
{
type
:
"radio-group"
,
field
:
"COL169"
,
options
:
[
"是"
,
"否"
]
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"如是,数据管理制度和流程覆盖范围"
},
{
type
:
"br"
},
{
type
:
"checkbox-group"
,
field
:
"COL170"
,
options
:
[
"数据采集"
,
"数据处理"
,
"数据存储"
,
"数据传输"
,
"数据分发"
,
"数据备份"
,
"数据恢复"
,
"数据清理"
,
"数据销毁"
]
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(2)建立数据分类分级管理标准"
},
{
type
:
"yesno"
,
field
:
"COL171"
,
extraLabel
:
"数据分"
,
extraField
:
"C23A008"
,
unit
:
"级"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(3)根据数据重要程度,分级建立数据备份与恢复策略"
},
{
type
:
"radio-group"
,
field
:
"COL172"
,
options
:
[
"是"
,
"否"
]
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(4)建立生产数据恢复操作审批流程"
},
{
type
:
"radio-group"
,
field
:
"COL173"
,
options
:
[
"是"
,
"否"
]
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"建立备份数据抽检机制"
},
{
type
:
"radio-group"
,
field
:
"COL174"
,
options
:
[
"是"
,
"否"
]
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(5)数据脱离生产环境使用须经过主管部门授权和审批"
},
{
type
:
"radio-group"
,
field
:
"COL175"
,
options
:
[
"是"
,
"否"
]
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"非生产环境使用生产数据时进行脱敏处理"
},
{
type
:
"yesno"
,
field
:
"COL176"
,
extraLabel
:
"脱敏处理方式"
,
extraField
:
"COL177"
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"非生产环境使用生产数据时,明确规定生产数据使用期限"
},
{
type
:
"radio-group"
,
field
:
"COL178"
,
options
:
[
"是"
,
"否"
]
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"非生产环境使用生产数据时,明确规定生产数据回收或清理措施"
},
{
type
:
"radio-group"
,
field
:
"COL179"
,
options
:
[
"是"
,
"否"
]
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(6)重要信息系统建立数据清理策略"
},
{
type
:
"radio-group"
,
field
:
"COL180"
,
options
:
[
"是"
,
"否"
]
},
{
type
:
"brspace"
},
{
type
:
"text"
,
value
:
"对已失效数据或已毁坏但包含重要数据的介质进行销毁"
},
{
type
:
"yesno"
,
field
:
"COL181"
,
extraLabel
:
"销毁机构名称"
,
extraField
:
"COL182"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(7)采取数据防泄露监测和控制技术措施"
},
{
type
:
"yesno"
,
field
:
"C20A012"
,
extraLabel
:
"措施包括"
,
extraField
:
"C23A009"
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(8)本机构是否有数据出境场景"
},
{
type
:
"yesno"
,
field
:
"C23A010"
,
{
type
:
'text'
,
value
:
'(1)制定数据管理制度和流程'
},
{
type
:
'radio-group'
,
field
:
'COL169'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'如是,数据管理制度和流程覆盖范围'
},
{
type
:
'br'
},
{
type
:
'checkbox-group'
,
field
:
'COL170'
,
options
:
[
'数据采集'
,
'数据处理'
,
'数据存储'
,
'数据传输'
,
'数据分发'
,
'数据备份'
,
'数据恢复'
,
'数据清理'
,
'数据销毁'
],
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(2)建立数据分类分级管理标准'
},
{
type
:
'yesno'
,
field
:
'COL171'
,
extraLabel
:
'数据分'
,
extraField
:
'C23A008'
,
unit
:
'级'
,
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(3)根据数据重要程度,分级建立数据备份与恢复策略'
},
{
type
:
'radio-group'
,
field
:
'COL172'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(4)建立生产数据恢复操作审批流程'
},
{
type
:
'radio-group'
,
field
:
'COL173'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'建立备份数据抽检机制,按计划检查备份数据的有效性'
},
{
type
:
'radio-group'
,
field
:
'COL174'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(5)数据脱离生产环境使用须经过主管部门授权和审批'
},
{
type
:
'radio-group'
,
field
:
'COL175'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'非生产环境使用生产数据时进行脱敏处理'
},
{
type
:
'yesno'
,
field
:
'COL176'
,
extraLabel
:
'脱敏处理方式'
,
extraField
:
'COL177'
,
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'非生产环境使用生产数据时,明确规定生产数据使用期限'
},
{
type
:
'radio-group'
,
field
:
'COL178'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'非生产环境使用生产数据时,明确规定生产数据回收或清理措施'
},
{
type
:
'radio-group'
,
field
:
'COL179'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(6)重要信息系统建立数据清理策略'
},
{
type
:
'radio-group'
,
field
:
'COL180'
,
options
:
[
'是'
,
'否'
]
},
{
type
:
'brspace'
},
{
type
:
'text'
,
value
:
'对已失效数据或已毁坏但包含重要数据的介质进行销毁'
},
{
type
:
'yesno'
,
field
:
'COL181'
,
extraLabel
:
'销毁机构名称'
,
extraField
:
'COL182'
,
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(7)采取数据防泄露监测和控制技术措施'
},
{
type
:
'yesno'
,
field
:
'C20A012'
,
extraLabel
:
'措施包括'
,
extraField
:
'C23A009'
,
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(8)本机构是否有数据出境场景'
},
{
type
:
'yesno'
,
field
:
'C23A010'
,
extraFields
:
[
{
label
:
"出境场景名称"
,
field
:
"C23A011"
,
formType
:
'input'
},
{
label
:
"出境数据"
,
field
:
"C23A012"
,
formType
:
"checkbox"
,
options
:
[
"核心数据"
,
"重要数据"
,
"敏感数据"
,
"一般数据"
,
"个人客户信息"
]
{
label
:
'出境场景名称'
,
field
:
'C23A011'
,
formType
:
'input'
},
{
label
:
'出境数据'
,
field
:
'C23A012'
,
formType
:
'checkbox'
,
options
:
[
'核心数据'
,
'重要数据'
,
'敏感数据'
,
'一般数据'
,
'个人客户信息'
]
},
{
label
:
'对符合国家数据出境安全评估条件的场景是否按照《数据出境安全评估办法》申请国家网信部门评估'
,
field
:
'C23A013'
,
formType
:
'radio'
,
options
:
[
'是'
,
'否'
],
},
{
label
:
"是否申请国家网信部门评估"
,
field
:
"C23A013"
,
formType
:
"radio"
,
options
:
[
"是"
,
"否"
]
},
{
label
:
"是否全部通过评估"
,
field
:
"C23A014"
,
formType
:
"radio"
,
options
:
[
"是"
,
"否"
,
"尚未反馈"
]
},
{
label
:
"场景名称"
,
field
:
"C23A015"
,
formType
:
'input'
},
{
label
:
"是否签订标准合同"
,
field
:
"C23A016"
,
formType
:
"radio"
,
options
:
[
"是"
,
"否"
]
}
]
{
label
:
'若是:是否全部通过评估'
,
field
:
'C23A014'
,
formType
:
'radio'
,
options
:
[
'是'
,
'否'
,
'尚未反馈'
]
},
{
label
:
'场景名称'
,
field
:
'C23A015'
,
formType
:
'input'
},
{
label
:
'对符合国家个人信息出境签订标准合同的情形是否按《个人信息出境标准合同办法》与境外接收方签订合同'
,
field
:
'C23A016'
,
formType
:
'radio'
,
options
:
[
'是'
,
'否'
],
},
],
},
{
type
:
"br"
},
{
type
:
"text"
,
value
:
"(9)数据安全备注"
},
{
label
:
"备注"
,
field
:
"COL183"
,
type
:
'textarea'
,
width
:
'50%'
,
rows
:
1
},
{
type
:
'br'
},
{
type
:
'text'
,
value
:
'(9)数据安全备注'
},
{
label
:
'备注'
,
field
:
'COL183'
,
type
:
'textarea'
,
width
:
'50%'
,
rows
:
1
},
],
},
{
serialNumber
:
"8"
,
project
:
"附件"
,
serialNumber
:
'8'
,
project
:
'附件'
,
code
:
'TB607'
,
type
:
"AttachTable"
,
content
:[
{
field
:
'col1'
,
title
:
'名称'
,
width
:
'20%'
,
},{
field
:
'col2'
,
title
:
'附件索引'
,
width
:
'40%'
,
slots
:
{
default
:
'form_default'
},
},{
field
:
'col3'
,
title
:
'备注'
,
slots
:
{
default
:
'form_default'
},
type
:
'AttachTable'
,
content
:
[
{
field
:
'col1'
,
title
:
'名称'
,
width
:
'20%'
,
},
{
field
:
'col2'
,
title
:
'附件索引'
,
width
:
'40%'
,
slots
:
{
default
:
'form_default'
},
},
{
field
:
'col3'
,
title
:
'备注'
,
slots
:
{
default
:
'form_default'
},
},
],
datas
:
[
{
col1
:
"本年度信息安全检查报告"
,
col2
:
{
formType
:
'input'
,
field
:
"COL184"
},
col3
:
{
formType
:
'input'
,
field
:
"COL188"
},
},
{
col1
:
"重大网络和信息安全事件分析报告"
,
col2
:
{
formType
:
'input'
,
field
:
"COL185"
},
col3
:
{
formType
:
'input'
,
field
:
"COL189"
},
},
{
col1
:
"网络拓扑示意图及总体介绍"
,
col2
:
{
formType
:
'input'
,
field
:
"COL186"
},
col3
:
{
formType
:
'input'
,
field
:
"COL190"
},
},
{
col1
:
"数据管理情况明细报告"
,
col2
:
{
formType
:
'input'
,
field
:
"COL187"
},
col3
:
{
formType
:
'input'
,
field
:
"COL191"
},
},
{
col1
:
"数据分类分级管理标准"
,
col2
:
{
formType
:
'input'
,
field
:
"C23A017"
},
col3
:
{
formType
:
'input'
,
field
:
"C23A018"
},
},
{
col1
:
"数据出境安全评估情况说明"
,
col2
:
{
formType
:
'input'
,
field
:
"C23A019"
},
col3
:
{
formType
:
'input'
,
field
:
"C23A020"
},
},
{
col1
:
"个人信息出境签订标准合同情况说明"
,
col2
:
{
formType
:
'input'
,
field
:
"C23A021"
},
col3
:
{
formType
:
'input'
,
field
:
"C23A022"
},
{
col1
:
'本年度信息安全检查报告'
,
col2
:
{
formType
:
'input'
,
field
:
'COL184'
},
col3
:
{
formType
:
'input'
,
field
:
'COL188'
},
},
{
col1
:
'重大网络和信息安全事件分析报告'
,
col2
:
{
formType
:
'input'
,
field
:
'COL185'
},
col3
:
{
formType
:
'input'
,
field
:
'COL189'
},
},
{
col1
:
'网络拓扑示意图及总体介绍'
,
col2
:
{
formType
:
'input'
,
field
:
'COL186'
},
col3
:
{
formType
:
'input'
,
field
:
'COL190'
},
},
{
col1
:
'数据管理情况明细报告'
,
col2
:
{
formType
:
'input'
,
field
:
'COL187'
},
col3
:
{
formType
:
'input'
,
field
:
'COL191'
},
},
{
col1
:
'数据分类分级管理标准'
,
col2
:
{
formType
:
'input'
,
field
:
'C23A017'
},
col3
:
{
formType
:
'input'
,
field
:
'C23A018'
},
},
{
col1
:
'数据出境安全评估情况说明'
,
col2
:
{
formType
:
'input'
,
field
:
'C23A019'
},
col3
:
{
formType
:
'input'
,
field
:
'C23A020'
},
},
{
col1
:
'个人信息出境签订标准合同情况说明'
,
col2
:
{
formType
:
'input'
,
field
:
'C23A021'
},
col3
:
{
formType
:
'input'
,
field
:
'C23A022'
},
},
],
}
},
];
zrch-risk-client-39/src/views/baosong/report/components/Tb6.vue
浏览文件 @
9c9d35e1
<
template
>
<div
class=
"bank-report-table"
style=
"height: 80vh
;
"
>
<div
class=
"bank-report-table"
style=
"height: 80vh"
>
<!-- 加载遮罩层 -->
<div
v-if=
"loading"
class=
"loading-overlay"
>
<div
class=
"loading-spinner"
>
...
...
@@ -10,27 +10,20 @@
<vxe-toolbar>
<template
#
button
>
<div
style=
"margin:10px"
>
<div
style=
"margin:
10px"
>
<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>
</
template
>
<
template
#
tools
>
<vxe-button
status=
"primary"
icon=
"vxe-icon-edit"
@
click=
"handleOpenHistoryDrawer()"
:disabled=
"loading"
>
近5年数据填报
</vxe-button>
<vxe-button
status=
"primary"
icon=
"vxe-icon-save"
@
click=
"checkData()"
>
校验
</vxe-button>
<vxe-button
status=
"primary"
icon=
"vxe-icon-save"
@
click=
"saveBatch()"
>
保存
</vxe-button>
<vxe-button
status=
"primary"
icon=
"vxe-icon-save"
@
click=
"checkData()"
>
校验
</vxe-button>
<vxe-button
status=
"primary"
icon=
"vxe-icon-save"
@
click=
"saveBatch()"
>
保存
</vxe-button>
</
template
>
</vxe-toolbar>
<!-- 校验结果抽屉 -->
<vxe-drawer
v-model=
"drawerVisible"
placement=
"right"
@
show=
"handleValidationDrawerShow"
title=
"校验结果"
width=
"40%"
:footer=
"{ show: true }"
>
<vxe-drawer
v-model=
"drawerVisible"
placement=
"right"
@
show=
"handleValidationDrawerShow"
title=
"校验结果"
width=
"40%"
:footer=
"{ show: true }"
>
<
template
#
default
>
<div
class=
"validation-results"
>
<div
class=
"result-summary"
>
...
...
@@ -40,11 +33,11 @@
</div>
<div
class=
"summary-item"
>
<span
class=
"summary-label"
>
通过:
</span>
<span
class=
"summary-value success"
>
{{
validationResultsList
.
filter
(
item
=>
item
.
isValid
).
length
}}
</span>
<span
class=
"summary-value success"
>
{{
validationResultsList
.
filter
(
(
item
)
=>
item
.
isValid
).
length
}}
</span>
</div>
<div
class=
"summary-item"
>
<span
class=
"summary-label"
>
失败:
</span>
<span
class=
"summary-value error"
>
{{
validationResultsList
.
filter
(
item
=>
!
item
.
isValid
).
length
}}
</span>
<span
class=
"summary-value error"
>
{{
validationResultsList
.
filter
(
(
item
)
=>
!
item
.
isValid
).
length
}}
</span>
</div>
</div>
<div
class=
"results-list"
>
...
...
@@ -64,7 +57,7 @@
</div>
</
template
>
</vxe-drawer>
<vxe-table
border
ref=
"tableRef"
...
...
@@ -78,12 +71,11 @@
<vxe-column
field=
"serialNumber"
title=
"序号"
width=
"80"
></vxe-column>
<vxe-column
field=
"project"
title=
"项目"
width=
"200"
>
<
template
#
default=
"{ row }"
>
<span
style=
"font-weight: bold;
size:
20px"
>
{{
row
.
project
}}
</span>
<span
style=
"font-weight: bold;
size:
20px"
>
{{
row
.
project
}}
</span>
</
template
>
</vxe-column>
<vxe-column
field=
"content"
title=
"内容"
row-resize
>
<
template
#
default=
"{ row }"
>
<
template
#
default=
"{ row }"
>
<div
class=
"content-cell"
>
<template
v-if=
"row.type === 'MultiColumnTable'"
>
<MultiColumnTable
...
...
@@ -91,7 +83,7 @@
:records=
"[]"
:fields=
"row.content"
:ref=
"(el) => setMultiColumnTableRef(el, row.code)"
style=
"margin:
0px;padding:
0px"
style=
"margin:
0px; padding:
0px"
/>
</
template
>
<
template
v-else-if=
"row.type === 'AttachTable'"
>
...
...
@@ -103,7 +95,7 @@
:calcSum=
"row.calcSum"
:showFooter=
"row.showFooter"
:ref=
"(el) => setAttachTableRef(el, row.code)"
style=
"margin:
0px;padding:
0px"
style=
"margin:
0px; padding:
0px"
/>
</
template
>
<
template
v-else-if=
"row.type === 'VxeTable'"
>
...
...
@@ -115,92 +107,166 @@
:footerData=
"row.footerData"
:showFooter=
"row.showFooter"
:ref=
"(el) => setMyVxeTableRef(el, row.code)"
style=
"margin:
0px;padding:
0px"
style=
"margin:
0px; padding:
0px"
/>
</
template
>
<
template
v-else
>
<template
v-for=
"(item, index) in row.content"
:key=
"index"
>
<span
v-if=
"item.type === 'text'"
v-html=
"item.value"
style=
"margin-right:10px"
></span>
<span
v-else-if=
"item.type === 'br'"
><br></span>
<span
v-if=
"item.type === 'text'"
v-html=
"item.value"
style=
"margin-right:
10px"
></span>
<span
v-else-if=
"item.type === 'br'"
><br
/
></span>
<span
v-else-if=
"item.type === 'brspace'"
>
<br>
<template
v-for=
"i in item.value||1"
:key=
"i"
>
</
template
>
<br
/>
<template
v-for=
"i in item.value || 1"
:key=
"i"
>
</
template
>
</span>
<
template
v-else-if=
"item.type === 'MultiColumnTable'"
>
<MultiColumnTable
:title=
"item.project"
:records=
"[]"
:fields=
"item.content"
:ref=
"(el) => setMultiColumnTableRef(el, item.code)"
style=
"margin:0px;padding:
0px"
/>
</
template
>
<
template
v-else-if=
"row
.type === 'AttachTable'"
>
<AttachTable
:title=
"row
.project"
:records=
"item.datas"
:fields=
"item.content"
:pcode=
"row
.code"
:calcSum=
"item.calcSum"
:showFooter=
"item.showFooter"
:ref=
"(el) => setAttachTableRef(el, row
.code)"
style=
"margin:0px;padding:
0px"
/>
</
template
>
<MultiColumnTable
:title=
"item.project"
:records=
"[]"
:fields=
"item.content"
:ref=
"(el) => setMultiColumnTableRef(el, item.code)"
style=
"margin: 0px; padding:
0px"
/>
</
template
>
<
template
v-else-if=
"item
.type === 'AttachTable'"
>
<AttachTable
:title=
"item
.project"
:records=
"item.datas"
:fields=
"item.content"
:pcode=
"item
.code"
:calcSum=
"item.calcSum"
:showFooter=
"item.showFooter"
:ref=
"(el) => setAttachTableRef(el, item
.code)"
style=
"margin: 0px; padding:
0px"
/>
</
template
>
<span
v-else-if=
"item.type === 'radio-group'"
class=
"radio-group"
>
<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-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-group>
</span>
<div
v-else-if=
"item.type === '
checkbox-group'"
class=
"checkbox
-group"
>
<
span
class=
"checkbox-group"
style=
"max-width:800px;margin-left: 20px;
"
>
<vxe-checkbox-group
v-model=
"formData[row.code+'_'+item.field]"
>
<vxe-checkbox
v-for=
"(opt, optIndex) in item.options"
:key=
"optIndex"
:label=
"opt"
style=
"line-height:30px;margin-left: 0px;"
>
{{ opt }}
</vxe-checkbox
>
<
template
v-if=
"item.otherOption
"
>
<vxe-checkbox
label=
"其他"
style=
"margin:0px
"
>
其他:
</vxe-checkbox
>
<vxe-input
v-model=
"formData[row.code + '_'
+ item.otherField]"
:disabled=
"!(formData[row.code+'_'+item.field]?.indexOf('其他')>-1)"
style=
"width: 300px;
"
>
</vxe-input>
<div
v-else-if=
"item.type === '
radio-group-extraFields'"
class=
"radio
-group"
>
<
vxe-radio-group
v-model=
"formData[row.code + '_' + item.field]
"
>
<vxe-radio
v-for=
"(opt, optIndex) in item.options"
:key=
"optIndex"
:label=
"opt.value"
>
{{ opt.label }}
</vxe-radio
>
</vxe-radio-group
>
<div
v-if=
"formData[row.code + '_' + item.field]"
class=
"extra-fields"
>
<
template
v-for=
"(option, optIndex) in item.options"
:key=
"optIndex"
>
<template
v-if=
"option.value === formData[row.code + '_' + item.field] && option.extraFields
"
>
<template
v-for=
"(ccopt, ccind) in option.extraFields"
:key=
"ccind
"
>
<span>
{{
ccopt
.
label
}}
:
</span>
<template
v-if=
"ccopt.formType === 'number'"
>
<vxe-input
v-model=
"formData[row.code + '_'
+ ccopt.field]"
type=
"number"
style=
"width: 80px"
></vxe-input>
</
template
>
<
template
v-else-if=
"ccopt.formType === 'input'
"
>
<
vxe-input
v-model=
"formData[row.code + '_' + ccopt.field]"
style=
"width: 250px"
><
/vxe-input>
</
template
>
</vxe-checkbox-group>
</span>
<
template
v-else
>
<vxe-input
v-model=
"formData[row.code + '_' + ccopt.field]"
:type=
"ccopt.formType"
style=
"width: 100px"
></vxe-input>
</
template
>
<span
class=
"unit"
>
{{ ccopt.unit }}
</span>
</template>
</template>
</template>
</div>
</div>
<div
v-else-if=
"item.type === 'checkbox-group'"
class=
"checkbox-group"
>
<span
class=
"checkbox-group"
style=
"max-width: 800px; margin-left: 20px"
>
<vxe-checkbox-group
v-model=
"formData[row.code + '_' + item.field]"
>
<vxe-checkbox
v-for=
"(opt, optIndex) in item.options"
:key=
"optIndex"
:label=
"opt"
style=
"line-height: 30px; margin-left: 0px"
>
{{ opt }}
</vxe-checkbox>
<
template
v-if=
"item.otherOption"
>
<vxe-checkbox
label=
"其他"
style=
"margin: 0px"
>
其他:
</vxe-checkbox>
<vxe-input
v-model=
"formData[row.code + '_' + item.otherField]"
:disabled=
"!(formData[row.code + '_' + item.field]?.indexOf('其他') > -1)"
style=
"width: 300px"
>
</vxe-input>
</
template
>
</vxe-checkbox-group>
</span>
</div>
<div
v-else-if=
"item.type === 'checkboxAndInput'"
>
<span
class=
"checkbox-group"
>
<vxe-checkbox-group
v-model=
"formData[row.code+'_'+item.field]"
>
<vxe-checkbox
v-for=
"(opt, optIndex) in item.options"
:key=
"optIndex"
:label=
"opt"
style=
"display: block;margin:0px 0px"
>
{{ opt }}
<vxe-input
type=
"number"
v-model=
"formData[row.code + '_'+ item.optionItemField[optIndex]]"
style=
"width: 100px;margin: 0px;"
>
</vxe-input>
<span
class=
"unit"
>
{{ item.optionItemUint }}
</span>
</vxe-checkbox>
</vxe-checkbox-group>
</span>
<vxe-checkbox-group
v-model=
"formData[row.code + '_' + item.field]"
>
<vxe-checkbox
v-for=
"(opt, optIndex) in item.options"
:key=
"optIndex"
:label=
"opt"
style=
"display: block; margin: 0px 0px"
>
{{ opt }}
<vxe-input
type=
"number"
v-model=
"formData[row.code + '_' + item.optionItemField[optIndex]]"
style=
"width: 100px; margin: 0px"
>
</vxe-input>
<span
class=
"unit"
>
{{ item.optionItemUint }}
</span>
</vxe-checkbox>
</vxe-checkbox-group>
</span>
</div>
<div
v-else-if=
"item.type === 'yesno'"
class=
"yesno-group"
>
<vxe-radio-group
v-model=
"formData[row.code + '_' + item.field]"
>
<vxe-radio
label=
"是"
>
是
</vxe-radio>
<vxe-radio
label=
"否"
>
否
</vxe-radio>
</vxe-radio-group>
<div
v-if=
"formData[row.code + '_' + item.field] === '是'"
class=
"extra-fields"
>
<!-- 处理单个extraField的情况 -->
<
template
v-if=
"item.extraField"
>
<div
style=
"margin-top: 5px"
>
<span>
{{
item
.
extraLabel
||
''
}}
:
</span>
<vxe-input
v-model=
"formData[row.code + '_' + item.extraField]"
style=
"width: 100px"
></vxe-input>
<span
v-if=
"item.unit"
class=
"unit"
>
{{
item
.
unit
}}
</span>
</div>
</
template
>
<!-- 处理extraFields数组的情况 -->
<
template
v-else-if=
"item.extraFields"
>
<template
v-for=
"(ccopt, ccind) in item.extraFields"
:key=
"ccind"
>
<div
style=
"margin-top: 5px"
>
<span>
{{
ccopt
.
label
}}
:
</span>
<template
v-if=
"ccopt.formType === 'input'"
>
<vxe-input
v-model=
"formData[row.code + '_' + ccopt.field]"
style=
"width: 250px"
></vxe-input>
</
template
>
<
template
v-else-if=
"ccopt.formType === 'checkbox'"
>
<vxe-checkbox-group
v-model=
"formData[row.code + '_' + ccopt.field]"
>
<vxe-checkbox
v-for=
"(opt, optIndex) in ccopt.options"
:key=
"optIndex"
:label=
"opt"
>
{{
opt
}}
</vxe-checkbox>
</vxe-checkbox-group>
<template
v-if=
"ccopt.otherOption"
>
<div
style=
"margin-top: 5px; margin-left: 20px"
>
其他:
<vxe-input
v-model=
"formData[row.code + '_' + ccopt.otherField]"
:disabled=
"
!(
Array.isArray(formData[row.code + '_' + ccopt.field]) &&
formData[row.code + '_' + ccopt.field].indexOf('其他') > -1
)
"
style=
"width: 200px"
>
</vxe-input>
</div>
</
template
>
</template>
<
template
v-else-if=
"ccopt.formType === 'radio'"
>
<vxe-radio-group
v-model=
"formData[row.code + '_' + ccopt.field]"
>
<vxe-radio
v-for=
"(opt, optIndex) in ccopt.options"
:key=
"optIndex"
:label=
"opt"
>
{{
opt
}}
</vxe-radio>
</vxe-radio-group>
<template
v-if=
"ccopt.otherOption && formData[row.code + '_' + ccopt.field] === '其他'"
>
<div
style=
"margin-top: 5px; margin-left: 20px"
>
其他:
<vxe-input
v-model=
"formData[row.code + '_' + ccopt.otherField]"
style=
"width: 200px"
></vxe-input>
</div>
</
template
>
</template>
</div>
</template>
</template>
</div>
</div>
<
template
v-else
>
<vxe-input
:type=
"item.type"
v-model=
"formData[row.code +'_'+ item.field]"
size=
"mini"
class=
"table-input"
:style=
"item.style"
>
<vxe-input
:type=
"item.type"
v-model=
"formData[row.code + '_' + item.field]"
size=
"mini"
class=
"table-input"
:style=
"item.style"
>
</vxe-input>
<span
class=
"unit"
>
{{
item
.
unit
}}
</span>
</
template
>
...
...
@@ -212,8 +278,7 @@
</vxe-table>
<!-- 历史填报检查组件 -->
<HistoryFillCheck
ref=
"historyFillCheckRef"
v-model=
"historyDrawerVisible"
@
closeDrawer=
"closeHistoryDrawer"
/>
<HistoryFillCheck
ref=
"historyFillCheckRef"
v-model=
"historyDrawerVisible"
@
close-drawer=
"closeHistoryDrawer"
/>
<!-- 验证公式帮助提示 -->
<div
v-if=
"validationTooltipVisible"
...
...
@@ -229,816 +294,791 @@
</template>
<
script
lang=
"ts"
setup
>
import
MultiColumnTable
from
'../tableComponents/MultiColumnTable.vue'
import
AttachTable
from
'../tableComponents/AttachTable.vue'
import
MyVxeTable1
from
'../tableComponents/MyVxeTable.vue'
import
CheckTbData
from
'./CheckTbData.vue'
import
HistoryFillCheck
from
'./check/historyFillCheck.vue'
import
{
tableFormData
}
from
'../../data/tb6.data'
;
import
{
ref
,
reactive
,
nextTick
,
onMounted
,
toRaw
}
from
'vue'
import
{
VxeUI
,
VxeToolbarInstance
,
VxeToolbarPropTypes
}
from
'vxe-table'
import
{
batchSaveOrUpdate
,
queryRecord
,
batchSaveOrUpdateBeforeDelete
}
from
'../../record/BaosongTaskRecord.api'
import
{
queryAllTplItemForUser
,
findUserRightForTplItem
}
from
'../../alloc/BaosongTaskAlloc.api'
import
{
allTplItems
}
from
'../../tpl/BaosongTplItem.api'
import
{
getTblvalidFormula
}
from
'../../tpl/BaosongDataValid.api'
import
{
useRoute
}
from
'vue-router'
;
const
refCheckTbData
=
ref
();
const
historyFillCheckRef
=
ref
<
any
>
(
null
);
const
route
=
useRoute
();
const
tableRef
=
ref
();
const
tplItemMap
=
ref
({});
const
queryParam
=
ref
({
taskId
:
-
1
,
taskName
:
''
,
tplId
:
-
1
,
tplName
:
''
,
tplCode
:
''
})
// 权限相关状态
const
userAllocItems
=
ref
<
string
[]
>
([])
const
validFormula
=
ref
<
any
[]
>
([])
const
validationResultsList
=
ref
<
any
[]
>
([])
const
drawerVisible
=
ref
(
false
)
const
historyDrawerVisible
=
ref
(
false
)
const
validationTooltipVisible
=
ref
(
false
)
const
validationTooltipPosition
=
ref
({
left
:
0
,
top
:
0
})
const
validationTooltipContent
=
ref
(
''
)
interface
FormData
{
id
:
number
|
null
taskid
:
number
tplid
:
number
itemid
?:
number
itempid
?:
number
content
:
string
tplcode
:
string
rind
:
number
}
onMounted
(
async
()
=>
{
if
(
route
.
query
.
taskId
)
{
queryParam
.
value
.
taskId
=
Number
(
route
.
query
.
taskId
);
}
if
(
route
.
query
.
taskName
)
{
queryParam
.
value
.
taskName
=
String
(
route
.
query
.
taskName
);
}
if
(
route
.
query
.
tplId
)
{
queryParam
.
value
.
tplId
=
Number
(
route
.
query
.
tplId
);
}
if
(
route
.
query
.
tplName
)
{
queryParam
.
value
.
tplName
=
String
(
route
.
query
.
tplName
);
}
if
(
route
.
query
.
tplCode
)
{
queryParam
.
value
.
tplCode
=
String
(
route
.
query
.
tplCode
);
}
// 获取权限和验证公式
try
{
userAllocItems
.
value
=
await
findUserRightForTplItem
({
tplid
:
queryParam
.
value
.
tplId
,
taskid
:
queryParam
.
value
.
taskId
})
validFormula
.
value
=
await
getTblvalidFormula
({
tplid
:
queryParam
.
value
.
tplId
,
})
}
catch
(
error
)
{
console
.
error
(
'获取权限或验证公式失败:'
,
error
)
import
MultiColumnTable
from
'../tableComponents/MultiColumnTable.vue'
;
import
AttachTable
from
'../tableComponents/AttachTable.vue'
;
import
MyVxeTable1
from
'../tableComponents/MyVxeTable.vue'
;
import
CheckTbData
from
'./CheckTbData.vue'
;
import
HistoryFillCheck
from
'./check/historyFillCheck.vue'
;
import
{
tableFormData
}
from
'../../data/tb6.data'
;
import
{
ref
,
reactive
,
nextTick
,
onMounted
,
toRaw
}
from
'vue'
;
import
{
VxeUI
,
VxeToolbarInstance
,
VxeToolbarPropTypes
}
from
'vxe-table'
;
import
{
batchSaveOrUpdate
,
queryRecord
,
batchSaveOrUpdateBeforeDelete
}
from
'../../record/BaosongTaskRecord.api'
;
import
{
queryAllTplItemForUser
,
findUserRightForTplItem
}
from
'../../alloc/BaosongTaskAlloc.api'
;
import
{
allTplItems
}
from
'../../tpl/BaosongTplItem.api'
;
import
{
getTblvalidFormula
}
from
'../../tpl/BaosongDataValid.api'
;
import
{
useRoute
}
from
'vue-router'
;
const
refCheckTbData
=
ref
();
const
historyFillCheckRef
=
ref
<
any
>
(
null
);
const
route
=
useRoute
();
const
tableRef
=
ref
();
const
tplItemMap
=
ref
({});
const
queryParam
=
ref
({
taskId
:
-
1
,
taskName
:
''
,
tplId
:
-
1
,
tplName
:
''
,
tplCode
:
''
,
});
// 权限相关状态
const
userAllocItems
=
ref
<
string
[]
>
([]);
const
validFormula
=
ref
<
any
[]
>
([]);
const
validationResultsList
=
ref
<
any
[]
>
([]);
const
drawerVisible
=
ref
(
false
);
const
historyDrawerVisible
=
ref
(
false
);
const
validationTooltipVisible
=
ref
(
false
);
const
validationTooltipPosition
=
ref
({
left
:
0
,
top
:
0
});
const
validationTooltipContent
=
ref
(
''
);
interface
FormData
{
id
:
number
|
null
;
taskid
:
number
;
tplid
:
number
;
itemid
?:
number
;
itempid
?:
number
;
content
:
string
;
tplcode
:
string
;
rind
:
number
;
}
await
setTplItemMap
()
await
setData
();
})
onMounted
(
async
()
=>
{
if
(
route
.
query
.
taskId
)
{
queryParam
.
value
.
taskId
=
Number
(
route
.
query
.
taskId
);
}
if
(
route
.
query
.
taskName
)
{
queryParam
.
value
.
taskName
=
String
(
route
.
query
.
taskName
);
}
if
(
route
.
query
.
tplId
)
{
queryParam
.
value
.
tplId
=
Number
(
route
.
query
.
tplId
);
}
if
(
route
.
query
.
tplName
)
{
queryParam
.
value
.
tplName
=
String
(
route
.
query
.
tplName
);
}
if
(
route
.
query
.
tplCode
)
{
queryParam
.
value
.
tplCode
=
String
(
route
.
query
.
tplCode
);
}
// 获取权限和验证公式
try
{
userAllocItems
.
value
=
await
findUserRightForTplItem
({
tplid
:
queryParam
.
value
.
tplId
,
taskid
:
queryParam
.
value
.
taskId
,
});
validFormula
.
value
=
await
getTblvalidFormula
({
tplid
:
queryParam
.
value
.
tplId
,
});
}
catch
(
error
)
{
console
.
error
(
'获取权限或验证公式失败:'
,
error
);
}
const
loading
=
ref
(
false
)
const
formData
=
reactive
({});
await
setTplItemMap
();
await
setData
();
});
const
formValues
=
ref
<
FormData
[]
>
([])
const
loading
=
ref
(
false
);
const
formData
=
reactive
({});
const
formValues
=
ref
<
FormData
[]
>
([]);
const
saveBatch
=
async
()
=>
{
try
{
formValues
.
value
=
[]
await
getFillDatas
()
if
(
formValues
.
value
.
length
>
0
)
{
await
batchSaveOrUpdateBeforeDelete
(
formValues
.
value
)
VxeUI
.
modal
.
message
({
content
:
'保存成功'
,
status
:
'success'
})
}
else
{
VxeUI
.
modal
.
message
({
content
:
'没有需要保存的数据'
,
status
:
'warning'
})
const
saveBatch
=
async
()
=>
{
try
{
formValues
.
value
=
[];
await
getFillDatas
();
if
(
formValues
.
value
.
length
>
0
)
{
await
batchSaveOrUpdateBeforeDelete
(
formValues
.
value
);
VxeUI
.
modal
.
message
({
content
:
'保存成功'
,
status
:
'success'
});
}
else
{
VxeUI
.
modal
.
message
({
content
:
'没有需要保存的数据'
,
status
:
'warning'
});
}
}
catch
(
error
)
{
VxeUI
.
modal
.
message
({
content
:
`保存失败:
${
error
.
message
}
`
,
status
:
'error'
});
}
finally
{
loading
.
value
=
false
;
}
}
catch
(
error
)
{
VxeUI
.
modal
.
message
({
content
:
`保存失败:
${
error
.
message
}
`
,
status
:
'error'
})
}
finally
{
loading
.
value
=
false
}
}
const
getFillDatas
=
async
()
=>
{
};
try
{
formValues
.
value
=
[]
const
getFillDatas
=
async
()
=>
{
try
{
formValues
.
value
=
[];
for
(
const
strKey
in
formData
)
{
const
valData
=
formData
[
strKey
]
if
(
valData
!==
undefined
&&
valData
!==
""
)
{
let
tmpAry
=
strKey
.
split
(
"_"
)
await
setFormValues
(
tmpAry
[
0
],
tmpAry
[
1
],
valData
,
1
)
for
(
const
strKey
in
formData
)
{
const
valData
=
formData
[
strKey
];
if
(
valData
!==
undefined
&&
valData
!==
''
)
{
let
tmpAry
=
strKey
.
split
(
'_'
);
await
setFormValues
(
tmpAry
[
0
],
tmpAry
[
1
],
valData
,
1
);
}
}
await
getAttachTableFormData
();
await
getAllMultiTableFormData
();
await
getVxeTableFormData
();
}
catch
(
error
)
{
console
.
log
(
error
);
}
finally
{
}
await
getAttachTableFormData
();
await
getAllMultiTableFormData
()
await
getVxeTableFormData
()
}
catch
(
error
)
{
console
.
log
(
error
)
}
finally
{
}
}
const
childMultiTableRefs
=
ref
({})
const
setMultiColumnTableRef
=
(
el
:
any
,
index
:
string
)
=>
{
if
(
el
)
{
childMultiTableRefs
.
value
[
index
]
=
el
;
}
};
};
const
childMultiTableRefs
=
ref
({});
const
setMultiColumnTableRef
=
(
el
:
any
,
index
:
string
)
=>
{
if
(
el
)
{
childMultiTableRefs
.
value
[
index
]
=
el
;
}
};
const
getAllMultiTableFormData
=
async
()
=>
{
for
(
const
pcode
in
childMultiTableRefs
.
value
)
{
const
getAllMultiTableFormData
=
async
()
=>
{
for
(
const
pcode
in
childMultiTableRefs
.
value
)
{
const
child
=
childMultiTableRefs
.
value
[
pcode
];
if
(
child
)
{
const
datas
=
await
child
.
getFormData
()
let
rind
=
0
for
(
const
obj
of
datas
)
{
rind
++
Object
.
keys
(
obj
).
forEach
(
code
=>
{
setFormValues
(
pcode
,
code
,
obj
[
code
],
rind
)
});
}
const
datas
=
await
child
.
getFormData
();
let
rind
=
0
;
for
(
const
obj
of
datas
)
{
rind
++
;
Object
.
keys
(
obj
).
forEach
((
code
)
=>
{
setFormValues
(
pcode
,
code
,
obj
[
code
],
rind
);
});
}
}
}
};
}
};
const
childAttachTableRefs
=
ref
({})
const
setAttachTableRef
=
(
el
:
any
,
index
:
string
)
=>
{
if
(
el
)
{
childAttachTableRefs
.
value
[
index
]
=
el
;
// 保存子组件实例
}
};
const
childAttachTableRefs
=
ref
({});
const
setAttachTableRef
=
(
el
:
any
,
index
:
string
)
=>
{
if
(
el
)
{
childAttachTableRefs
.
value
[
index
]
=
el
;
// 保存子组件实例
}
};
const
childMyVexTableRefs
=
ref
({})
const
setMyVxeTableRef
=
(
el
:
any
,
index
:
string
)
=>
{
if
(
el
)
{
childMyVexTableRefs
.
value
[
index
]
=
el
;
// 保存子组件实例
}
};
const
childMyVexTableRefs
=
ref
({});
const
setMyVxeTableRef
=
(
el
:
any
,
index
:
string
)
=>
{
if
(
el
)
{
childMyVexTableRefs
.
value
[
index
]
=
el
;
// 保存子组件实例
}
};
const
getAttachTableFormData
=
async
()
=>
{
for
(
const
pcode
in
childAttachTableRefs
.
value
)
{
const
getAttachTableFormData
=
async
()
=>
{
for
(
const
pcode
in
childAttachTableRefs
.
value
)
{
const
child
=
childAttachTableRefs
.
value
[
pcode
];
if
(
child
)
{
const
datas
=
await
child
.
getFormData
()
for
(
const
code
in
datas
)
{
await
setFormValues
(
pcode
,
code
,
datas
[
code
],
1
)
}
const
datas
=
await
child
.
getFormData
();
for
(
const
code
in
datas
)
{
await
setFormValues
(
pcode
,
code
,
datas
[
code
],
1
);
}
}
}
};
}
};
const
getVxeTableFormData
=
async
()
=>
{
for
(
const
pcode
in
childMyVexTableRefs
.
value
)
{
const
getVxeTableFormData
=
async
()
=>
{
for
(
const
pcode
in
childMyVexTableRefs
.
value
)
{
const
child
=
childMyVexTableRefs
.
value
[
pcode
];
if
(
child
)
{
const
formData
=
await
child
.
getFormData
()
console
.
log
(
"formData"
,
formData
)
let
rind
=
0
for
(
const
obj
of
formData
.
datas
)
{
rind
++
Object
.
keys
(
obj
).
forEach
(
code
=>
{
setFormValues
(
pcode
,
code
,
obj
[
code
],
rind
)
});
}
if
(
formData
.
footer
)
{
Object
.
keys
(
formData
.
footer
).
forEach
(
code
=>
{
setFormValues
(
pcode
,
code
,
formData
.
footer
[
code
],
1
)
});
}
const
formData
=
await
child
.
getFormData
();
console
.
log
(
'formData'
,
formData
);
let
rind
=
0
;
for
(
const
obj
of
formData
.
datas
)
{
rind
++
;
Object
.
keys
(
obj
).
forEach
((
code
)
=>
{
setFormValues
(
pcode
,
code
,
obj
[
code
],
rind
);
});
}
if
(
formData
.
footer
)
{
Object
.
keys
(
formData
.
footer
).
forEach
((
code
)
=>
{
setFormValues
(
pcode
,
code
,
formData
.
footer
[
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
:
rin
d
,
taskid
:
queryParam
.
value
.
taskId
,
tplid
:
queryParam
.
value
.
tplI
d
,
tplcode
:
code
,
itemid
:
itemid
,
itempid
:
pid
,
content
:
vals
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
.
tplI
d
,
tplcode
:
code
,
itemid
:
itemi
d
,
itempid
:
pid
,
content
:
vals
,
};
formValues
.
value
.
push
(
tempForm
);
};
formValues
.
value
.
push
(
tempForm
)
}
// 校验数据
const
checkData
=
()
=>
{
drawerVisible
.
value
=
true
}
// 校验结果抽屉显示时触发
const
handleValidationDrawerShow
=
()
=>
{
performValidation
()
}
// 执行校验
const
performValidation
=
()
=>
{
validationResultsList
.
value
=
[]
const
process
:
string
[]
=
[]
process
.
push
(
'开始校验'
)
process
.
push
(
`找到
${
validFormula
.
value
.
length
}
个验证公式`
)
validFormula
.
value
.
forEach
((
formulaItem
:
any
)
=>
{
process
.
push
(
`开始校验公式:
${
formulaItem
.
des
}
`
)
const
result
=
evaluateFormula
(
formulaItem
.
formula
,
formulaItem
.
des
,
process
)
if
(
result
)
{
validationResultsList
.
value
.
push
(
result
)
}
})
process
.
push
(
'校验完成'
)
}
// 解析和执行验证公式
const
evaluateFormula
=
(
formula
:
string
,
description
:
string
,
process
:
string
[]):
any
=>
{
try
{
const
fieldMatch
=
formula
.
match
(
/
\[(\w
+
)\]
/
)
if
(
!
fieldMatch
)
{
process
.
push
(
`跳过: 无法解析公式字段
${
formula
}
`
)
return
null
}
const
fieldName
=
fieldMatch
[
1
]
const
row
=
tableFormData
.
find
((
r
:
any
)
=>
r
.
content
?.
some
((
c
:
any
)
=>
c
.
field
===
fieldName
))
if
(
!
row
)
{
process
.
push
(
`跳过: 未找到字段
${
fieldName
}
`
)
return
null
}
// 校验数据
const
checkData
=
()
=>
{
drawerVisible
.
value
=
true
;
};
const
fieldItem
=
row
.
content
.
find
((
c
:
any
)
=>
c
.
field
===
fieldName
)
if
(
!
fieldItem
)
{
process
.
push
(
`跳过: 未找到字段
${
fieldName
}
`
)
return
null
}
// 校验结果抽屉显示时触发
const
handleValidationDrawerShow
=
()
=>
{
performValidation
();
};
const
strKey
=
`
${
row
.
code
}
_
${
fieldName
}
`
const
fieldValue
=
formData
[
strKey
]
// 执行校验
const
performValidation
=
()
=>
{
validationResultsList
.
value
=
[];
const
process
:
string
[]
=
[];
process
.
push
(
'开始校验'
);
process
.
push
(
`找到
${
validFormula
.
value
.
length
}
个验证公式`
);
validFormula
.
value
.
forEach
((
formulaItem
:
any
)
=>
{
process
.
push
(
`开始校验公式:
${
formulaItem
.
des
}
`
);
const
result
=
evaluateFormula
(
formulaItem
.
formula
,
formulaItem
.
des
,
process
);
if
(
result
)
{
validationResultsList
.
value
.
push
(
result
);
}
});
process
.
push
(
'校验完成'
);
};
// 检查是否有空字段规则
const
emptyFieldRule
=
validFormula
.
value
.
find
((
f
:
any
)
=>
f
.
formula
.
includes
(
fieldName
)
&&
f
.
des
.
includes
(
'空字段'
)
)
// 解析和执行验证公式
const
evaluateFormula
=
(
formula
:
string
,
description
:
string
,
process
:
string
[]):
any
=>
{
try
{
const
fieldMatch
=
formula
.
match
(
/
\[(\w
+
)\]
/
);
if
(
!
fieldMatch
)
{
process
.
push
(
`跳过: 无法解析公式字段
${
formula
}
`
);
return
null
;
}
if
(
emptyFieldRule
&&
(
!
fieldValue
||
fieldValue
===
''
))
{
process
.
push
(
`跳过: 字段
${
fieldName
}
为空,跳过空字段规则`
)
return
null
}
const
fieldName
=
fieldMatch
[
1
];
const
row
=
tableFormData
.
find
((
r
:
any
)
=>
r
.
content
?.
some
((
c
:
any
)
=>
c
.
field
===
fieldName
));
if
(
!
row
)
{
process
.
push
(
`跳过: 未找到字段
${
fieldName
}
`
);
return
null
;
}
const
expression
=
formula
.
replace
(
/
\[(\w
+
)\]
/g
,
(
_
,
field
)
=>
{
const
value
=
formData
[
`
${
row
.
code
}
_
${
field
}
`
]
return
value
!==
undefined
?
`Number(
${
value
}
)`
:
'0'
})
process
.
push
(
`执行公式:
${
expression
}
`
)
const
isValid
=
eval
(
expression
)
return
{
field
:
fieldName
,
description
:
description
,
formula
:
formula
,
isValid
:
isValid
,
fieldValue
:
fieldValue
,
rowCode
:
row
.
code
}
}
catch
(
error
)
{
process
.
push
(
`公式执行错误:
${
error
instanceof
Error
?
error
.
message
:
String
(
error
)}
`
)
return
null
}
}
// 处理校验结果点击,定位到表格
const
handleValidationResultClick
=
(
result
:
any
)
=>
{
const
row
=
tableFormData
.
find
((
r
:
any
)
=>
r
.
code
===
result
.
rowCode
)
if
(
row
)
{
const
fieldItem
=
row
.
content
.
find
((
c
:
any
)
=>
c
.
field
===
result
.
field
)
if
(
fieldItem
)
{
const
strKey
=
`
${
row
.
code
}
_
${
result
.
field
}
`
const
inputElement
=
document
.
querySelector
(
`[data-field="
${
strKey
}
"]`
)
as
HTMLElement
if
(
inputElement
)
{
inputElement
.
scrollIntoView
({
behavior
:
'smooth'
,
block
:
'center'
})
inputElement
.
focus
()
inputElement
.
style
.
border
=
'2px solid #ff4d4f'
setTimeout
(()
=>
{
inputElement
.
style
.
border
=
''
},
2000
)
const
fieldItem
=
row
.
content
.
find
((
c
:
any
)
=>
c
.
field
===
fieldName
);
if
(
!
fieldItem
)
{
process
.
push
(
`跳过: 未找到字段
${
fieldName
}
`
);
return
null
;
}
}
}
}
// 显示验证公式帮助
const
showValidationHelp
=
(
formulaItem
:
any
,
event
:
MouseEvent
)
=>
{
const
rect
=
(
event
.
target
as
HTMLElement
).
getBoundingClientRect
()
validationTooltipPosition
.
value
=
{
left
:
rect
.
left
+
rect
.
width
/
2
,
top
:
rect
.
top
-
10
}
validationTooltipContent
.
value
=
`验证公式:
${
formulaItem
.
formula
}
\n说明:
${
formulaItem
.
des
}
`
validationTooltipVisible
.
value
=
true
}
// 关闭验证公式帮助
const
closeTooltip
=
()
=>
{
validationTooltipVisible
.
value
=
false
}
// 打开历史填报抽屉
const
handleOpenHistoryDrawer
=
()
=>
{
historyDrawerVisible
.
value
=
true
}
// 关闭历史填报抽屉
const
closeHistoryDrawer
=
()
=>
{
historyDrawerVisible
.
value
=
false
}
// 原有检查方法
async
function
checkDataOrig
()
{
let
tplName
=
queryParam
.
value
.
tplName
;
await
getFillDatas
();
if
(
formValues
.
value
.
length
>
0
)
{
refCheckTbData
.
value
.
setIniData
(
tplName
,
formValues
.
value
)
}
}
const
strKey
=
`
${
row
.
code
}
_
${
fieldName
}
`
;
const
fieldValue
=
formData
[
strKey
];
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
emptyFieldRule
=
validFormula
.
value
.
find
((
f
:
any
)
=>
f
.
formula
.
includes
(
fieldName
)
&&
f
.
des
.
includes
(
'空字段'
));
if
(
emptyFieldRule
&&
(
!
fieldValue
||
fieldValue
===
''
))
{
process
.
push
(
`跳过: 字段
${
fieldName
}
为空,跳过空字段规则`
);
return
null
;
}
const
expression
=
formula
.
replace
(
/
\[(\w
+
)\]
/g
,
(
_
,
field
)
=>
{
const
value
=
formData
[
`
${
row
.
code
}
_
${
field
}
`
];
return
value
!==
undefined
?
`Number(
${
value
}
)`
:
'0'
;
});
process
.
push
(
`执行公式:
${
expression
}
`
);
const
isValid
=
eval
(
expression
);
return
{
field
:
fieldName
,
description
:
description
,
formula
:
formula
,
isValid
:
isValid
,
fieldValue
:
fieldValue
,
rowCode
:
row
.
code
,
};
}
catch
(
error
)
{
process
.
push
(
`公式执行错误:
${
error
instanceof
Error
?
error
.
message
:
String
(
error
)}
`
);
return
null
;
}
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
;
}
};
// 处理校验结果点击,定位到表格
const
handleValidationResultClick
=
(
result
:
any
)
=>
{
const
row
=
tableFormData
.
find
((
r
:
any
)
=>
r
.
code
===
result
.
rowCode
);
if
(
row
)
{
const
fieldItem
=
row
.
content
.
find
((
c
:
any
)
=>
c
.
field
===
result
.
field
);
if
(
fieldItem
)
{
const
strKey
=
`
${
row
.
code
}
_
${
result
.
field
}
`
;
const
inputElement
=
document
.
querySelector
(
`[data-field="
${
strKey
}
"]`
)
as
HTMLElement
;
if
(
inputElement
)
{
inputElement
.
scrollIntoView
({
behavior
:
'smooth'
,
block
:
'center'
});
inputElement
.
focus
();
inputElement
.
style
.
border
=
'2px solid #ff4d4f'
;
setTimeout
(()
=>
{
inputElement
.
style
.
border
=
''
;
},
2000
);
}
}
return
false
;
}
};
// 显示验证公式帮助
const
showValidationHelp
=
(
formulaItem
:
any
,
event
:
MouseEvent
)
=>
{
const
rect
=
(
event
.
target
as
HTMLElement
).
getBoundingClientRect
();
validationTooltipPosition
.
value
=
{
left
:
rect
.
left
+
rect
.
width
/
2
,
top
:
rect
.
top
-
10
,
};
validationTooltipContent
.
value
=
`验证公式:
${
formulaItem
.
formula
}
\n说明:
${
formulaItem
.
des
}
`
;
validationTooltipVisible
.
value
=
true
;
};
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
;
if
(
formTp
===
'checkbox'
)
{
formData
[
strKey
]
=
dataVal
?.
split
(
","
)
||
[];
}
else
{
formData
[
strKey
]
=
dataVal
||
""
;
}
// 关闭验证公式帮助
const
closeTooltip
=
()
=>
{
validationTooltipVisible
.
value
=
false
;
};
// 打开历史填报抽屉
const
handleOpenHistoryDrawer
=
()
=>
{
historyDrawerVisible
.
value
=
true
;
};
// 关闭历史填报抽屉
const
closeHistoryDrawer
=
()
=>
{
historyDrawerVisible
.
value
=
false
;
};
// 原有检查方法
async
function
checkDataOrig
()
{
let
tplName
=
queryParam
.
value
.
tplName
;
await
getFillDatas
();
if
(
formValues
.
value
.
length
>
0
)
{
refCheckTbData
.
value
.
setIniData
(
tplName
,
formValues
.
value
);
}
}
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
;
};
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'
)
{
attachTableData
[
code
]
=
valueObj
[
valueKey
]?.
split
(
","
)
||
[];
formData
[
strKey
]
=
dataVal
?.
split
(
','
)
||
[];
}
else
{
attachTableData
[
code
]
=
valueObj
[
valueKey
]
||
""
;
formData
[
strKey
]
=
dataVal
||
''
;
}
}
child
.
setFormData
(
attachTableData
);
}
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
]
=
{};
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'
)
{
attachTableData
[
code
]
=
valueObj
[
valueKey
]?.
split
(
','
)
||
[];
}
else
{
attachTableData
[
code
]
=
valueObj
[
valueKey
]
||
''
;
}
rowsMap
[
rind
][
code
]
=
valueObj
[
valKey
];
}
child
.
setFormData
(
attachTableData
);
}
const
tableDatas
=
Object
.
values
(
rowsMap
);
nextTick
();
child
.
setFormData
(
tableDatas
);
}
}
catch
(
error
)
{
VxeUI
.
modal
.
message
({
content
:
`加载数据失败:
${
error
.
message
}
`
,
status
:
'error'
});
}
finally
{
loading
.
value
=
false
;
}
}
async
function
setTplItemMap
()
{
try
{
const
tplid
=
queryParam
.
value
.
tplId
const
tplItem
=
await
allTplItems
({
tplid
:
tplid
})
tplItemMap
.
value
=
{}
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
{
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
];
}
}
const
tableDatas
=
Object
.
values
(
rowsMap
);
nextTick
();
child
.
setFormData
(
tableDatas
);
}
}
catch
(
error
)
{
VxeUI
.
modal
.
message
({
content
:
`加载数据失败:
${
error
.
message
}
`
,
status
:
'error'
,
});
}
finally
{
loading
.
value
=
false
;
}
}
}
async
function
setTplItemMap
()
{
try
{
const
tplid
=
queryParam
.
value
.
tplId
;
const
tplItem
=
await
allTplItems
({
tplid
:
tplid
,
});
tplItemMap
.
value
=
{};
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: 60%;
}
/* 加载遮罩层样式 */
.loading-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(255, 255, 255, 0.8);
display: flex;
justify-content: center;
align-items: center;
z-index: 1000;
}
.loading-spinner {
display: flex;
flex-direction: column;
align-items: center;
}
.spinner {
width: 40px;
height: 40px;
border: 3px solid #f3f3f3;
border-top: 3px solid #3498db;
border-radius: 50%;
animation: spin 2s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.loading-text {
margin-top: 10px;
color: #666;
font-size: 14px;
}
/* 校验结果样式 */
.validation-results {
padding: 20px;
height: 600px;
overflow-y: auto;
}
.result-summary {
display: flex;
gap: 20px;
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 1px solid #eee;
}
.summary-item {
display: flex;
flex-direction: column;
}
.summary-label {
font-size: 12px;
color: #666;
}
.summary-value {
font-size: 16px;
font-weight: bold;
color: #333;
}
.summary-value.success {
color: #52c41a;
}
.summary-value.error {
color: #ff4d4f;
}
.results-list {
margin-top: 10px;
}
.result-item {
padding: 10px;
margin-bottom: 8px;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.2s;
}
.result-item:hover {
background-color: #f5f5f5;
}
.result-item.success {
background-color: #f6ffed;
border-left: 4px solid #52c41a;
}
.result-item.error {
background-color: #fff2f0;
border-left: 4px solid #ff4d4f;
}
.result-field {
font-weight: bold;
margin-bottom: 5px;
}
.result-desc {
font-size: 12px;
color: #666;
margin-bottom: 5px;
}
.result-value {
font-size: 12px;
color: #999;
}
.result-error {
font-size: 12px;
color: #ff4d4f;
margin-top: 5px;
}
/* 验证公式帮助提示样式 */
.validation-tooltip {
position: absolute;
background-color: #333;
color: #fff;
padding: 10px;
border-radius: 4px;
font-size: 12px;
z-index: 1000;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
}
.tooltip-content {
margin: 0;
white-space: pre-wrap;
}
.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:4px;
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: 150px;
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;
}
/* 附件样式 */
.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;
}
blockquote {
padding: 0px 5px;
color: black;
cursor: pointer;
}
</
style
>
\ No newline at end of file
.bank-report-table {
font-family: 'SimSun', '宋体', serif;
font-size: 12px;
color: #000;
margin: 5px auto;
width: 60%;
}
/* 加载遮罩层样式 */
.loading-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(255, 255, 255, 0.8);
display: flex;
justify-content: center;
align-items: center;
z-index: 1000;
}
.loading-spinner {
display: flex;
flex-direction: column;
align-items: center;
}
.spinner {
width: 40px;
height: 40px;
border: 3px solid #f3f3f3;
border-top: 3px solid #3498db;
border-radius: 50%;
animation: spin 2s linear infinite;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.loading-text {
margin-top: 10px;
color: #666;
font-size: 14px;
}
/* 校验结果样式 */
.validation-results {
padding: 20px;
height: 600px;
overflow-y: auto;
}
.result-summary {
display: flex;
gap: 20px;
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 1px solid #eee;
}
.summary-item {
display: flex;
flex-direction: column;
}
.summary-label {
font-size: 12px;
color: #666;
}
.summary-value {
font-size: 16px;
font-weight: bold;
color: #333;
}
.summary-value.success {
color: #52c41a;
}
.summary-value.error {
color: #ff4d4f;
}
.results-list {
margin-top: 10px;
}
.result-item {
padding: 10px;
margin-bottom: 8px;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.2s;
}
.result-item:hover {
background-color: #f5f5f5;
}
.result-item.success {
background-color: #f6ffed;
border-left: 4px solid #52c41a;
}
.result-item.error {
background-color: #fff2f0;
border-left: 4px solid #ff4d4f;
}
.result-field {
font-weight: bold;
margin-bottom: 5px;
}
.result-desc {
font-size: 12px;
color: #666;
margin-bottom: 5px;
}
.result-value {
font-size: 12px;
color: #999;
}
.result-error {
font-size: 12px;
color: #ff4d4f;
margin-top: 5px;
}
/* 验证公式帮助提示样式 */
.validation-tooltip {
position: absolute;
background-color: #333;
color: #fff;
padding: 10px;
border-radius: 4px;
font-size: 12px;
z-index: 1000;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
}
.tooltip-content {
margin: 0;
white-space: pre-wrap;
}
.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: 4px;
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: 150px;
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;
}
/* 附件样式 */
.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;
}
blockquote {
padding: 0px 5px;
color: black;
cursor: pointer;
}
</
style
>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论