Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Z
zrch-risk-39
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Administrator
zrch-risk-39
Commits
d692b0a9
提交
d692b0a9
authored
2月 02, 2026
作者:
liuluyu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新tb5字段
上级
320bc7ff
全部展开
显示空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
116 行增加
和
90 行删除
+116
-90
tb5.data.ts
zrch-risk-client-39/src/views/baosong/data/tb5.data.ts
+0
-0
Tb5.vue
...isk-client-39/src/views/baosong/report/components/Tb5.vue
+0
-0
MyVxeTable.vue
...9/src/views/baosong/report/tableComponents/MyVxeTable.vue
+116
-90
没有找到文件。
zrch-risk-client-39/src/views/baosong/data/tb5.data.ts
浏览文件 @
d692b0a9
差异被折叠。
点击展开。
zrch-risk-client-39/src/views/baosong/report/components/Tb5.vue
浏览文件 @
d692b0a9
差异被折叠。
点击展开。
zrch-risk-client-39/src/views/baosong/report/tableComponents/MyVxeTable.vue
浏览文件 @
d692b0a9
...
...
@@ -2,20 +2,42 @@
<div>
<vxe-grid
ref=
"refGrid"
v-bind=
"gridOptions"
v-on=
"gridEvents"
:footerData=
"setFooterData"
>
<template
#
select=
"
{ row, column }">
<vxe-select
v-model=
"row[column.field]"
filterable
>
<vxe-select
v-model=
"row[column.field]"
filterable
@
change=
"handleCol4Change(row, column, $event)"
>
<vxe-option
v-for=
"(opt, optIndex) in column.editRender.options"
:key=
"optIndex"
:label=
"opt"
:value=
"opt"
></vxe-option>
</vxe-select>
</
template
>
<
template
#
select_dynamic=
"{ row, column }"
>
<div
style=
"display: flex; flex-wrap: wrap; gap: 8px; align-items: center"
>
<vxe-select
v-model=
"row[column.field]"
filterable
:disabled=
"!column.editRender.getOptions?.(row)?.length"
style=
"min-width: 120px"
>
<vxe-option
v-for=
"(opt, optIndex) in column.editRender.getOptions?.(row) || []"
:key=
"optIndex"
:label=
"opt"
:value=
"opt"
/>
</vxe-select>
<vxe-input
v-if=
"
(row.COL4 === '软件类(银行业)' || row.COL4 === '软件类(保险业)') &&
(row.COL5 === '其他' || !(column.editRender.getOptions?.(row) || []).includes(row.COL5))
"
v-model=
"row[column.field]"
placeholder=
"请输入"
style=
"min-width: 150px"
/>
</div>
</
template
>
<
template
#
other_input=
"{ row, column }"
>
<vxe-input
v-model=
"row[column.field]"
placeholder=
"请输入"
:disabled=
"row.COL4 !== '其他'"
/>
</
template
>
<
template
#
default_select=
"{ row, column }"
>
<span>
{{
row
[
column
.
field
]
}}
</span>
</
template
>
<
template
#
default_other=
"{ row, column }"
>
<span
v-if=
"row.COL4 === '其他'"
>
{{
row
[
column
.
field
]
}}
</span>
</
template
>
<
template
#
footer_seq=
"{ row,column }"
>
<span
style=
"color: blue
;
"
>
{{
row
[
column
.
field
]
}}
</span>
<
template
#
footer_seq=
"{ row,
column }"
>
<span
style=
"color: blue"
>
{{
row
[
column
.
field
]
}}
</span>
</
template
>
<
template
#
footer_num=
"{ row,column }"
>
<span
style=
"color: red
;
"
>
{{
row
[
column
.
field
]
}}
</span>
<
template
#
footer_num=
"{ row,
column }"
>
<span
style=
"color: red"
>
{{
row
[
column
.
field
]
}}
</span>
</
template
>
<
template
#
action=
"{ row, rowIndex }"
>
...
...
@@ -27,106 +49,113 @@
</template>
<
script
lang=
"ts"
setup
>
import
{
reactive
,
computed
,
ref
}
from
'vue'
import
type
{
VxeGridProps
,
VxeTablePropTypes
,
VxeGridListeners
}
from
'vxe-table'
import
type
{
VxeSelectProps
}
from
'vxe-pc-ui'
import
{
reactive
,
computed
,
ref
}
from
'vue'
;
import
type
{
VxeGridProps
,
VxeTablePropTypes
,
VxeGridListeners
}
from
'vxe-table'
;
import
type
{
VxeSelectProps
}
from
'vxe-pc-ui'
;
const
props
=
defineProps
({
const
props
=
defineProps
({
title
:
String
,
data
:
{
type
:
Array
as
()
=>
any
[],
default
:
()
=>
[]
default
:
()
=>
[],
},
columns
:
{
type
:
Array
as
()
=>
any
[],
required
:
true
required
:
true
,
},
footerData
:
{
type
:
Array
as
()
=>
any
[],
default
:
()
=>
[]
default
:
()
=>
[],
},
showFooter
:
{
type
:
Boolean
,
default
:
false
default
:
false
,
},
height
:
{
default
:
''
default
:
''
,
},
rowHeight
:
{
type
:
[
Number
,
String
],
default
:
40
,
},
});
})
const
formData
=
reactive
({});
const
formData
=
reactive
({})
const
formFooterData
=
reactive
({});
const
formFooterData
=
reactive
({})
const
handleCol4Change
=
(
row
,
column
,
value
)
=>
{
if
(
column
.
field
===
'COL4'
)
{
row
.
COL5
=
''
;
}
};
const
sumNum
=
(
list
:
any
[],
field
:
string
)
=>
{
let
count
=
0
list
.
forEach
(
item
=>
{
const
sumNum
=
(
list
:
any
[],
field
:
string
)
=>
{
let
count
=
0
;
list
.
forEach
((
item
)
=>
{
if
(
item
[
field
])
{
count
+=
Number
(
item
[
field
])
count
+=
Number
(
item
[
field
]);
}
})
return
count
}
});
return
count
;
};
const
gridOptions
=
reactive
<
VxeGridProps
<
any
>
&
{
editConfig
:
VxeTablePropTypes
.
EditConfig
<
any
>
}
>
({
const
gridOptions
=
reactive
<
VxeGridProps
<
any
>
&
{
editConfig
:
VxeTablePropTypes
.
EditConfig
<
any
>
}
>
({
border
:
true
,
showOverflow
:
true
,
showFooter
:
props
.
showFooter
,
showFooter
:
props
.
showFooter
,
loading
:
false
,
editConfig
:
{
enabled
:
true
,
trigger
:
'click'
,
mode
:
'row'
mode
:
'row'
,
},
height
:
props
.
height
,
height
:
props
.
height
,
rowConfig
:
{
useKey
:
true
,
resizable
:
true
resizable
:
true
,
height
:
props
.
rowHeight
,
},
columnConfig
:
{
useKey
:
true
,
resizable
:
true
resizable
:
true
,
},
toolbarConfig
:
{
zoom
:
true
,
custom
:
true
,
buttons
:
[
{
name
:
"添加"
,
mode
:
"text"
,
status
:
"primary"
,
code
:
'myAdd'
,
icon
:
"vxe-icon-add"
},
]
buttons
:
[{
name
:
'添加'
,
mode
:
'text'
,
status
:
'primary'
,
code
:
'myAdd'
,
icon
:
'vxe-icon-add'
}],
},
columns
:
props
.
columns
,
data
:
props
.
data
||
[],
footerData
:
props
.
footerData
||
[]
})
footerData
:
props
.
footerData
||
[],
});
const
setFooterData
=
computed
(()
=>
{
const
setFooterData
=
computed
(()
=>
{
if
(
!
props
.
footerData
||
!
props
.
footerData
.
length
)
return
[];
const
footer
=
[...
props
.
footerData
];
const
result
=
[];
footer
.
forEach
(
item
=>
{
footer
.
forEach
((
item
)
=>
{
// 创建基础行对象
const
row
=
{
[
item
.
labelField
]:
item
.
labelValue
[
item
.
labelField
]:
item
.
labelValue
,
};
// 计算需要求和的字段
if
(
item
.
tp
===
'sum'
&&
gridOptions
.
data
?.
length
)
{
item
.
fields
.
forEach
(
field
=>
{
item
.
fields
.
forEach
((
field
)
=>
{
row
[
field
]
=
sumNum
(
gridOptions
.
data
,
field
);
formFooterData
[
item
.
xmlCode
[
field
]]
=
row
[
field
]
formFooterData
[
item
.
xmlCode
[
field
]]
=
row
[
field
];
});
}
// 如果需要计算平均值
if
(
item
.
tp
===
'avg'
&&
gridOptions
.
data
?.
length
)
{
item
.
fields
.
forEach
(
field
=>
{
item
.
fields
.
forEach
((
field
)
=>
{
const
sum
=
sumNum
(
gridOptions
.
data
,
field
);
row
[
field
]
=
sum
/
gridOptions
.
data
.
length
;
formFooterData
[
item
.
xmlCode
[
field
]]
=
row
[
field
]
formFooterData
[
item
.
xmlCode
[
field
]]
=
row
[
field
];
});
}
...
...
@@ -134,42 +163,42 @@ const setFooterData = computed(() => {
});
return
result
;
});
});
const
safeAddNewRecord
=
async
()
=>
{
const
safeAddNewRecord
=
async
()
=>
{
try
{
const
newRecord
:
Record
<
string
,
any
>
=
{}
gridOptions
.
data
?.
unshift
(
newRecord
)
const
newRecord
:
Record
<
string
,
any
>
=
{};
gridOptions
.
data
?.
unshift
(
newRecord
);
}
catch
(
error
)
{
console
.
error
(
'添加记录出错:'
,
error
)
console
.
error
(
'添加记录出错:'
,
error
);
}
}
};
const
insertRow
=
async
(
row
:
any
,
ind
:
number
)
=>
{
gridOptions
.
data
?.
splice
(
ind
+
1
,
0
,
{})
refGrid
.
value
.
setEditRow
(
gridOptions
.
data
[
ind
+
1
])
}
const
insertRow
=
async
(
row
:
any
,
ind
:
number
)
=>
{
gridOptions
.
data
?.
splice
(
ind
+
1
,
0
,
{});
refGrid
.
value
.
setEditRow
(
gridOptions
.
data
[
ind
+
1
]);
};
const
removeRow
=
async
(
row
:
any
,
ind
:
number
)
=>
{
const
removeRow
=
async
(
row
:
any
,
ind
:
number
)
=>
{
cancelRow
();
gridOptions
.
data
?.
splice
(
ind
,
1
)
}
gridOptions
.
data
?.
splice
(
ind
,
1
);
};
const
gridEvents
:
VxeGridListeners
=
{
toolbarButtonClick
(
params
)
{
if
(
params
.
code
==
"myAdd"
)
{
safeAddNewRecord
()
}
const
gridEvents
:
VxeGridListeners
=
{
toolbarButtonClick
(
params
)
{
if
(
params
.
code
==
'myAdd'
)
{
safeAddNewRecord
();
}
}
},
};
const
refGrid
=
ref
()
const
refGrid
=
ref
();
const
getFormData
=
async
()
=>
{
await
cancelRow
()
const
fieldNames
=
getAllFields
(
props
.
columns
)
const
newDatas
=
gridOptions
.
data
?.
map
(
obj
=>
{
const
getFormData
=
async
()
=>
{
await
cancelRow
();
const
fieldNames
=
getAllFields
(
props
.
columns
);
const
newDatas
=
gridOptions
.
data
?.
map
((
obj
)
=>
{
return
fieldNames
.
reduce
((
acc
,
field
)
=>
{
if
(
field
in
obj
&&
obj
[
field
]
!==
undefined
&&
obj
[
field
]
!==
null
)
{
acc
[
field
]
=
obj
[
field
];
...
...
@@ -181,27 +210,27 @@ const getFormData = async () => {
return
{
...
formData
,
datas
:
newDatas
,
footer
:
formFooterData
footer
:
formFooterData
,
};
};
};
const
setFormData
=
(
dataVale
)
=>
{
gridOptions
.
data
=
dataVale
}
const
setFormData
=
(
dataVale
)
=>
{
gridOptions
.
data
=
dataVale
;
};
const
cancelRow
=
async
()
=>
{
const
$grid
=
refGrid
.
value
const
cancelRow
=
async
()
=>
{
const
$grid
=
refGrid
.
value
;
if
(
!
$grid
)
{
return
return
;
}
await
$grid
.
clearEdit
()
}
await
$grid
.
clearEdit
();
};
function
getAllFields
(
columns
:
any
[]):
string
[]
{
function
getAllFields
(
columns
:
any
[]):
string
[]
{
const
fields
:
string
[]
=
[];
function
traverse
(
items
:
any
[])
{
items
.
forEach
(
item
=>
{
items
.
forEach
((
item
)
=>
{
if
(
item
.
field
)
{
fields
.
push
(
item
.
field
);
}
...
...
@@ -212,14 +241,12 @@ function getAllFields(columns: any[]): string[] {
}
traverse
(
columns
);
return
fields
.
filter
(
field
=>
field
);
}
return
fields
.
filter
((
field
)
=>
field
);
}
defineExpose
({
defineExpose
({
getFormData
,
setFormData
})
</
script
>
-
\ No newline at end of file
setFormData
,
});
</
script
>
-
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论