Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yd-csf-front
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
yuzhenWang
yd-csf-front
Commits
aa0413a3
Commit
aa0413a3
authored
Mar 09, 2026
by
Sweet Zhang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
快捷复制
parent
c8127c83
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
105 additions
and
35 deletions
+105
-35
src/utils/copyToclipboard.js
+43
-0
src/views/financialCenter/financialIncome.vue
+2
-2
src/views/sign/FnaList/components/fanForm.vue
+1
-0
src/views/sign/FnaList/index.vue
+34
-10
src/views/sign/appointment/index.vue
+9
-7
src/views/sign/underwritingMain/index.vue
+1
-1
src/views/workbench/index.vue
+15
-15
No files found.
src/utils/copyToclipboard.js
0 → 100644
View file @
aa0413a3
import
{
ElMessage
}
from
'element-plus'
export
function
copyToClipboard
(
text
)
{
// 方案1:使用现代 Clipboard API
if
(
navigator
.
clipboard
&&
navigator
.
clipboard
.
writeText
)
{
return
navigator
.
clipboard
.
writeText
(
text
).
catch
((
err
)
=>
{
console
.
error
(
'Clipboard API 写入失败:'
,
err
);
ElMessage
.
error
(
'复制失败'
)
// 降级到传统方案
fallbackCopyText
(
text
);
});
}
// 方案2:降级使用传统方法
else
{
fallbackCopyText
(
text
);
}
}
// 传统复制方法
function
fallbackCopyText
(
text
,
typeName
=
'内容'
)
{
const
textarea
=
document
.
createElement
(
'textarea'
);
textarea
.
value
=
text
;
textarea
.
style
.
position
=
'fixed'
;
textarea
.
style
.
opacity
=
'0'
;
document
.
body
.
appendChild
(
textarea
);
try
{
textarea
.
select
();
textarea
.
setSelectionRange
(
0
,
99999
);
// 对于移动设备
document
.
execCommand
(
'copy'
);
console
.
log
(
'传统方法复制成功'
);
ElMessage
.
success
(
`
${
typeName
}
已复制`
)
}
catch
(
err
)
{
console
.
error
(
'传统方法复制失败:'
,
err
)
ElMessage
.
error
(
'复制失败'
);
}
finally
{
document
.
body
.
removeChild
(
textarea
);
}
}
export
default
{
copyToClipboard
}
src/views/financialCenter/financialIncome.vue
View file @
aa0413a3
...
@@ -615,10 +615,10 @@ const addCheckRecordConfig = ref([
...
@@ -615,10 +615,10 @@ const addCheckRecordConfig = ref([
prop
:
'exchangeRate'
,
prop
:
'exchangeRate'
,
label
:
'结算汇率(实)'
,
label
:
'结算汇率(实)'
,
inputType
:
'decimal'
,
inputType
:
'decimal'
,
decimalDigits
:
2
,
decimalDigits
:
4
,
rules
:
[
rules
:
[
{
required
:
true
,
message
:
'请输入金额'
,
trigger
:
'blur'
},
{
required
:
true
,
message
:
'请输入金额'
,
trigger
:
'blur'
},
{
pattern
:
/^
\d
+
(\.\d{1,
2})?
$/
,
message
:
'最多两
位小数'
,
trigger
:
'blur'
}
{
pattern
:
/^
\d
+
(\.\d{1,
4})?
$/
,
message
:
'最多四
位小数'
,
trigger
:
'blur'
}
]
]
},
},
])
])
...
...
src/views/sign/FnaList/components/fanForm.vue
View file @
aa0413a3
...
@@ -353,6 +353,7 @@ import {
...
@@ -353,6 +353,7 @@ import {
getInsuranceCategory
getInsuranceCategory
}
from
'@/api/common'
}
from
'@/api/common'
import
useUserStore
from
'@/store/modules/user'
import
useUserStore
from
'@/store/modules/user'
import
{
copyToClipboard
}
from
'@/utils/copyToClipboard'
const
userStore
=
useUserStore
()
const
userStore
=
useUserStore
()
const
dictStore
=
useDictStore
()
//获取字典数据
const
dictStore
=
useDictStore
()
//获取字典数据
const
props
=
defineProps
({
const
props
=
defineProps
({
...
...
src/views/sign/FnaList/index.vue
View file @
aa0413a3
...
@@ -75,9 +75,21 @@
...
@@ -75,9 +75,21 @@
border
border
max-height=
"380px"
max-height=
"380px"
>
>
<el-table-column
type=
"index"
width=
"60"
label=
"序号"
/>
<el-table-column
type=
"index"
width=
"100"
label=
"序号"
/>
<el-table-column
label=
"客户姓名"
align=
"center"
prop=
"customerName"
width=
"100"
/>
<el-table-column
label=
"客户姓名"
align=
"center"
prop=
"customerName"
width=
"180"
>
<el-table-column
label=
"中文姓名"
align=
"center"
prop=
"customerNameCn"
width=
"100"
/>
<template
#
default=
"scope"
>
<el-button
link
size=
"default"
>
<span
@
click=
"copyToClipboard(scope.row.customerName,'客户姓名')"
>
{{
scope
.
row
.
customerName
}}
</span>
</el-button>
</
template
>
</el-table-column>
<el-table-column
label=
"中文姓名"
align=
"center"
prop=
"customerNameCn"
width=
"180"
>
<
template
#
default=
"scope"
>
<el-button
link
size=
"default"
>
<span
@
click=
"copyToClipboard(scope.row.customerNameCn,'中文姓名')"
>
{{
scope
.
row
.
customerNameCn
}}
</span>
</el-button>
</
template
>
</el-table-column>
<!-- <el-table-column label="状态" align="center" prop="status" width="100" :formatter="getDictLabel('csf_fna_status')"/> -->
<!-- <el-table-column label="状态" align="center" prop="status" width="100" :formatter="getDictLabel('csf_fna_status')"/> -->
<el-table-column
label=
"流程状态"
sortable
align=
"center"
prop=
"status"
width=
"200"
>
<el-table-column
label=
"流程状态"
sortable
align=
"center"
prop=
"status"
width=
"200"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
...
@@ -88,18 +100,29 @@
...
@@ -88,18 +100,29 @@
label=
"流程编号"
label=
"流程编号"
align=
"center"
align=
"center"
prop=
"fnaNo"
prop=
"fnaNo"
width=
"200"
width=
"240"
show-overflow-tooltip
show-overflow-tooltip
>
/>
<
template
#
default=
"scope"
>
<el-button
link
size=
"default"
>
<span
@
click=
"copyToClipboard(scope.row.fnaNo,'流程编号')"
>
{{
scope
.
row
.
fnaNo
}}
</span>
</el-button>
</
template
>
</el-table-column>
<el-table-column
<el-table-column
label=
"预约编号"
label=
"预约编号"
align=
"center"
align=
"center"
prop=
"appointmentNo"
prop=
"appointmentNo"
width=
"2
0
0"
width=
"2
4
0"
show-overflow-tooltip
show-overflow-tooltip
/>
>
<
template
#
default=
"scope"
>
<el-button
link
size=
"default"
>
<span
@
click=
"copyToClipboard(scope.row.appointmentNo,'预约编号')"
>
{{
scope
.
row
.
appointmentNo
}}
</span>
</el-button>
</
template
>
</el-table-column>
<!-- <el-table-column label="新单编号" align="center" prop="policyId" /> -->
<!-- <el-table-column label="新单编号" align="center" prop="policyId" /> -->
<el-table-column
label=
"保单号"
align=
"center"
prop=
"policyNo"
width=
"1
5
0"
/>
<el-table-column
label=
"保单号"
align=
"center"
prop=
"policyNo"
width=
"1
8
0"
/>
<el-table-column
label=
"创建时间"
sortable
align=
"center"
prop=
"createTime"
width=
"200"
>
<el-table-column
label=
"创建时间"
sortable
align=
"center"
prop=
"createTime"
width=
"200"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
...
@@ -107,7 +130,7 @@
...
@@ -107,7 +130,7 @@
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
fixed=
"right"
label=
"操作"
width=
"
8
0"
align=
"center"
>
<el-table-column
fixed=
"right"
label=
"操作"
width=
"
15
0"
align=
"center"
>
<
template
#
default=
"{ row }"
>
<
template
#
default=
"{ row }"
>
<el-popover
placement=
"left"
:width=
"160"
trigger=
"click"
>
<el-popover
placement=
"left"
:width=
"160"
trigger=
"click"
>
<template
#
reference
>
<template
#
reference
>
...
@@ -158,6 +181,7 @@ import { getFnaList, deleteFna, subProcess } from '@/api/sign/fna'
...
@@ -158,6 +181,7 @@ import { getFnaList, deleteFna, subProcess } from '@/api/sign/fna'
import
useUserStore
from
'@/store/modules/user'
import
useUserStore
from
'@/store/modules/user'
import
{
MoreFilled
,
InfoFilled
}
from
'@element-plus/icons-vue'
import
{
MoreFilled
,
InfoFilled
}
from
'@element-plus/icons-vue'
import
useDictStore
from
'@/store/modules/dict'
import
useDictStore
from
'@/store/modules/dict'
import
{
copyToClipboard
}
from
'@/utils/copyToClipboard'
const
dictStore
=
useDictStore
()
const
dictStore
=
useDictStore
()
const
userStore
=
useUserStore
()
const
userStore
=
useUserStore
()
const
router
=
useRouter
()
const
router
=
useRouter
()
...
...
src/views/sign/appointment/index.vue
View file @
aa0413a3
...
@@ -70,7 +70,13 @@
...
@@ -70,7 +70,13 @@
prop=
"appointmentNo"
prop=
"appointmentNo"
width=
"200"
width=
"200"
fixed=
"left"
fixed=
"left"
/>
>
<template
#
default=
"scope"
>
<el-button
link
size=
"default"
>
<span
@
click=
"copyToClipboard(scope.row.appointmentNo,'预约编号')"
>
{{
scope
.
row
.
appointmentNo
}}
</span>
</el-button>
</
template
>
</el-table-column>
<el-table-column
label=
"预约状态"
align=
"center"
prop=
"status"
fixed=
"left"
width=
"100"
>
<el-table-column
label=
"预约状态"
align=
"center"
prop=
"status"
fixed=
"left"
width=
"100"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<dict-tag
:options=
"csf_ap_status"
:value=
"scope.row.status"
/>
<dict-tag
:options=
"csf_ap_status"
:value=
"scope.row.status"
/>
...
@@ -94,16 +100,11 @@
...
@@ -94,16 +100,11 @@
<el-table-column
label=
"投保人"
align=
"center"
prop=
"policyholder"
width=
"150"
/>
<el-table-column
label=
"投保人"
align=
"center"
prop=
"policyholder"
width=
"150"
/>
<el-table-column
label=
"受保人"
align=
"center"
prop=
"insurant"
width=
"150"
/>
<el-table-column
label=
"受保人"
align=
"center"
prop=
"insurant"
width=
"150"
/>
<!-- <el-table-column label="供款频率" align="center"
prop="paymentFrequency" width="100
">
<!-- <el-table-column label="供款频率" align="center"
width="150" prop="paymentFrequency
">
<template #default="scope">
<template #default="scope">
<dict-tag :options="csf_ap_frequency" :value="scope.row.paymentFrequency" />
<dict-tag :options="csf_ap_frequency" :value="scope.row.paymentFrequency" />
</template>
</template>
</el-table-column> -->
</el-table-column> -->
<el-table-column
label=
"供款频率"
align=
"center"
width=
"150"
prop=
"paymentFrequency"
>
<
template
#
default=
"scope"
>
<dict-tag
:options=
"csf_ap_frequency"
:value=
"scope.row.paymentFrequency"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"供款期数"
align=
"center"
prop=
"paymentTerm"
width=
"100"
/>
<el-table-column
label=
"供款期数"
align=
"center"
prop=
"paymentTerm"
width=
"100"
/>
<el-table-column
label=
"每期保费"
align=
"center"
prop=
"eachIssuePremium"
width=
"100"
/>
<el-table-column
label=
"每期保费"
align=
"center"
prop=
"eachIssuePremium"
width=
"100"
/>
...
@@ -212,6 +213,7 @@ import {
...
@@ -212,6 +213,7 @@ import {
getItineraryExprot
getItineraryExprot
}
from
'@/api/sign/appointment'
}
from
'@/api/sign/appointment'
import
useUserStore
from
'@/store/modules/user'
import
useUserStore
from
'@/store/modules/user'
import
{
copyToClipboard
}
from
'@/utils/copyToClipboard'
const
dictStore
=
useDictStore
()
const
dictStore
=
useDictStore
()
const
userStore
=
useUserStore
()
const
userStore
=
useUserStore
()
const
router
=
useRouter
()
const
router
=
useRouter
()
...
...
src/views/sign/underwritingMain/index.vue
View file @
aa0413a3
...
@@ -96,7 +96,7 @@ import {
...
@@ -96,7 +96,7 @@ import {
policyFollowReport
,
policyFollowReport
,
saveMailingInfo
,
updatePolicyfollow
,
batchSaveBrokers
,
saveInitialPayment
,
updatePolicyProduct
saveMailingInfo
,
updatePolicyfollow
,
batchSaveBrokers
,
saveInitialPayment
,
updatePolicyProduct
}
from
'@/api/sign/underwritingMain'
}
from
'@/api/sign/underwritingMain'
import
{
copyToClipboard
}
from
'@/utils/copyToClipboard'
import
PolicyDetail
from
'./policyDetail.vue'
import
PolicyDetail
from
'./policyDetail.vue'
const
policyDetailFormRef
=
ref
(
null
)
const
policyDetailFormRef
=
ref
(
null
)
const
policyDetailFormData
=
ref
({})
const
policyDetailFormData
=
ref
({})
...
...
src/views/workbench/index.vue
View file @
aa0413a3
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
<el-col
:sm=
"12"
:lg=
"12"
:xs=
"24"
>
<el-col
:sm=
"12"
:lg=
"12"
:xs=
"24"
>
<div
class=
"headerLeft"
>
<div
class=
"headerLeft"
>
<div
class=
"top"
>
欢迎!
</div>
<div
class=
"top"
>
欢迎!
</div>
<div
class=
"bottom"
>
王力群
</div>
<div
class=
"bottom"
>
CSF-HK
</div>
</div>
</div>
</el-col>
</el-col>
<el-col
:sm=
"12"
:lg=
"12"
:xs=
"24"
class=
"right"
>
<el-col
:sm=
"12"
:lg=
"12"
:xs=
"24"
class=
"right"
>
...
@@ -180,14 +180,14 @@ const headerList = ref([
...
@@ -180,14 +180,14 @@ const headerList = ref([
id
:
'1'
,
id
:
'1'
,
title
:
'总保费(HKD)'
,
title
:
'总保费(HKD)'
,
icon
:
'icon-zongbaofei'
,
icon
:
'icon-zongbaofei'
,
count
:
'
392.52
'
,
count
:
'
--
'
,
url
:
'/todo'
url
:
'/todo'
},
},
{
{
id
:
'2'
,
id
:
'2'
,
title
:
'有效保单数'
,
title
:
'有效保单数'
,
icon
:
'icon-youxiaobaodan'
,
icon
:
'icon-youxiaobaodan'
,
count
:
'
0.00
'
,
count
:
'
--
'
,
url
:
'/todo'
url
:
'/todo'
},
},
...
@@ -195,7 +195,7 @@ const headerList = ref([
...
@@ -195,7 +195,7 @@ const headerList = ref([
id
:
'3'
,
id
:
'3'
,
title
:
'待来佣保单'
,
title
:
'待来佣保单'
,
icon
:
'icon-daijiesuan'
,
icon
:
'icon-daijiesuan'
,
count
:
'
10
'
,
count
:
'
--
'
,
url
:
'/todo'
url
:
'/todo'
}
}
])
])
...
@@ -275,7 +275,7 @@ const staticList = ref([
...
@@ -275,7 +275,7 @@ const staticList = ref([
id
:
'1'
,
id
:
'1'
,
title
:
'财务需求分析数'
,
title
:
'财务需求分析数'
,
icon
:
'icon-xiexian'
,
icon
:
'icon-xiexian'
,
count
:
'
3735
'
,
count
:
'
--
'
,
unit
:
'条'
,
unit
:
'条'
,
url
:
'/todo'
,
url
:
'/todo'
,
color
:
'#F53F3F'
color
:
'#F53F3F'
...
@@ -284,7 +284,7 @@ const staticList = ref([
...
@@ -284,7 +284,7 @@ const staticList = ref([
id
:
'2'
,
id
:
'2'
,
title
:
'预约单数'
,
title
:
'预约单数'
,
icon
:
'icon-xiexian'
,
icon
:
'icon-xiexian'
,
count
:
'
12
'
,
count
:
'
--
'
,
unit
:
'单'
,
unit
:
'单'
,
url
:
'/todo'
,
url
:
'/todo'
,
color
:
'#0FC6C2'
color
:
'#0FC6C2'
...
@@ -293,7 +293,7 @@ const staticList = ref([
...
@@ -293,7 +293,7 @@ const staticList = ref([
id
:
'3'
,
id
:
'3'
,
title
:
'新单数'
,
title
:
'新单数'
,
icon
:
'icon-xiexian'
,
icon
:
'icon-xiexian'
,
count
:
'
12
'
,
count
:
'
--
'
,
unit
:
'单'
,
unit
:
'单'
,
url
:
'/todo'
,
url
:
'/todo'
,
color
:
'#165DFF'
color
:
'#165DFF'
...
@@ -302,7 +302,7 @@ const staticList = ref([
...
@@ -302,7 +302,7 @@ const staticList = ref([
id
:
'4'
,
id
:
'4'
,
title
:
'续期保单数'
,
title
:
'续期保单数'
,
icon
:
'icon-xiexian'
,
icon
:
'icon-xiexian'
,
count
:
'
13
'
,
count
:
'
--
'
,
unit
:
'份'
,
unit
:
'份'
,
url
:
'/todo'
,
url
:
'/todo'
,
color
:
'#0FC6C2'
color
:
'#0FC6C2'
...
@@ -312,22 +312,22 @@ const infoList = ref([
...
@@ -312,22 +312,22 @@ const infoList = ref([
{
{
id
:
'1'
,
id
:
'1'
,
title
:
'产品优惠'
,
title
:
'产品优惠'
,
subTitle
:
'
XXXXX第四季度优惠政策
'
subTitle
:
'
暂未开放
'
},
},
{
{
id
:
'2'
,
id
:
'2'
,
title
:
'产品培训'
,
title
:
'产品培训'
,
subTitle
:
'
XXXXX产品培训回
放'
subTitle
:
'
暂未开
放'
},
},
{
{
id
:
'3'
,
id
:
'3'
,
title
:
'重要通知'
,
title
:
'重要通知'
,
subTitle
:
'
XXXXX保单未续费
'
subTitle
:
'
暂未开放
'
},
},
{
{
id
:
'4'
,
id
:
'4'
,
title
:
'系统消息'
,
title
:
'系统消息'
,
subTitle
:
'
FNA导出成功
!'
subTitle
:
'
暂未开放
!'
}
}
])
])
const
timeList
=
ref
([
const
timeList
=
ref
([
...
@@ -351,21 +351,21 @@ const workList = ref([
...
@@ -351,21 +351,21 @@ const workList = ref([
{
{
id
:
'1'
,
id
:
'1'
,
title
:
'新单跟进'
,
title
:
'新单跟进'
,
subTitle
:
'
张三预约单待录入
'
,
subTitle
:
'
暂未开放
'
,
unit
:
'Q'
,
unit
:
'Q'
,
color
:
'#7BC616'
color
:
'#7BC616'
},
},
{
{
id
:
'2'
,
id
:
'2'
,
title
:
'续费提醒'
,
title
:
'续费提醒'
,
subTitle
:
'
bug fix
'
,
subTitle
:
'
暂未开放
'
,
unit
:
'Y'
,
unit
:
'Y'
,
color
:
'#14C9C9'
color
:
'#14C9C9'
},
},
{
{
id
:
'3'
,
id
:
'3'
,
title
:
'预约单生成'
,
title
:
'预约单生成'
,
subTitle
:
'
车险预约单已生成
'
,
subTitle
:
'
暂未开放
'
,
unit
:
'N'
,
unit
:
'N'
,
color
:
'#168CFF'
color
:
'#168CFF'
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment