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
ca481729
Commit
ca481729
authored
Jan 15, 2026
by
yuzhenWang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
保费对账和回执发布测试
parent
654519e7
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
273 additions
and
140 deletions
+273
-140
src/formJson/productPlan.js
+5
-5
src/views/sign/FnaList/components/fanForm.vue
+1
-1
src/views/sign/FnaList/edit.vue
+31
-31
src/views/sign/FnaList/index.vue
+136
-27
src/views/sign/appointment/appointmentEdit.vue
+31
-32
src/views/sign/appointment/components/appointmentInfo.vue
+3
-3
src/views/sign/appointment/components/productPlan.vue
+15
-9
src/views/sign/appointment/index.vue
+37
-2
src/views/sign/policyReceipts/index.vue
+6
-8
src/views/sign/policyReceipts/premiumRecon.vue
+8
-22
No files found.
src/formJson/productPlan.js
View file @
ca481729
...
...
@@ -181,19 +181,19 @@ const productPlan = [
lg
:
8
//栅格布局份数
},
{
label
:
'保单
日期回溯
'
,
key
:
'
isBacktrack
'
,
domType
:
'
Select
'
,
required
:
fals
e
,
label
:
'保单
回溯日期
'
,
key
:
'
backtrackDate
'
,
domType
:
'
DatePicker
'
,
required
:
tru
e
,
disabled
:
false
,
placeholder
:
'请选择'
,
dictType
:
'sys_no_yes'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'是否参加递增保障权益'
,
key
:
'isJoin'
,
...
...
src/views/sign/FnaList/components/fanForm.vue
View file @
ca481729
...
...
@@ -326,7 +326,7 @@
@
click=
"submitForm('save')"
size=
"large"
:disabled=
"editStatus"
>
立即预约
</el-button
>
保存,去填写预约单
</el-button
>
</div>
</el-col>
...
...
src/views/sign/FnaList/edit.vue
View file @
ca481729
...
...
@@ -340,37 +340,37 @@ const getDictsData = async () => {
dictStore
.
setAllInsuranceCompanyList
(
response9
.
data
.
records
)
}
// 请求每个流程中所涉及到的字典值数据
proxy
.
useDictLists
([
'csf_employment'
,
'sys_no_yes'
,
'bx_currency_type'
,
'csf_liquid_asset_type'
,
'csf_premium_funding_source'
,
'csf_customer_type'
,
'csf_customer_title'
,
'sys_gender'
,
'csf_marriage'
,
'csf_education'
,
'csf_id_type'
,
'csf_ap_apply_type'
,
'csf_ap_meeting_point'
,
'csf_ap_first_issue'
,
'csf_ap_dividend'
,
'csf_ap_frequency'
,
'csf_ap_rel'
,
'csf_ap_registration'
,
'csf_ap_exercise'
,
'csf_ap_risk'
,
'csf_ap_movie'
,
'csf_ap_game'
,
'wj_question_first_category'
,
'wj_question_second_category'
,
'csf_ap_policy_transfer'
,
'md_bank'
,
'csf_property_type'
,
'oss_data_type'
,
'oss_data_person'
])
//
proxy.useDictLists([
//
'csf_employment',
//
'sys_no_yes',
//
'bx_currency_type',
//
'csf_liquid_asset_type',
//
'csf_premium_funding_source',
//
'csf_customer_type',
//
'csf_customer_title',
//
'sys_gender',
//
'csf_marriage',
//
'csf_education',
//
'csf_id_type',
//
'csf_ap_apply_type',
//
'csf_ap_meeting_point',
//
'csf_ap_first_issue',
//
'csf_ap_dividend',
//
'csf_ap_frequency',
//
'csf_ap_rel',
//
'csf_ap_registration',
//
'csf_ap_exercise',
//
'csf_ap_risk',
//
'csf_ap_movie',
//
'csf_ap_game',
//
'wj_question_first_category',
//
'wj_question_second_category',
//
'csf_ap_policy_transfer',
//
'md_bank',
//
'csf_property_type',
//
'oss_data_type',
//
'oss_data_person'
//
])
}
// 更新流程
...
...
src/views/sign/FnaList/index.vue
View file @
ca481729
...
...
@@ -111,23 +111,40 @@
<span>
{{
parseTime
(
scope
.
row
.
createTime
)
}}
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
align=
"center"
width=
"250"
class-name=
"small-padding fixed-width"
fixed=
"right"
>
<
template
#
default=
"scope"
>
<el-button
type=
"primary"
link
@
click=
"handleUpdate(scope.row)"
>
修改
</el-button>
<el-button
type=
"success"
link
@
click=
"handleCopy(scope.row)"
>
生成副本
</el-button>
<el-button
v-if=
"!scope.row.policyNo"
type=
"danger"
link
@
click=
"handleDelete(scope.row)"
>
删除
</el-button
>
<el-table-column
fixed=
"right"
label=
"操作"
width=
"80"
align=
"center"
>
<
template
#
default=
"{ row }"
>
<el-popover
placement=
"left"
:width=
"160"
trigger=
"click"
>
<template
#
reference
>
<el-button
link
type=
"primary"
size=
"small"
>
<el-icon><MoreFilled
/></el-icon>
</el-button>
</
template
>
<el-menu
@
select=
"index => handleSelect(index, row)"
popper-class=
"custom-menu"
>
<el-menu-item
v-for=
"item in getVisibleDropdownItems(row)"
:index=
"item.value"
:key=
"item.value"
>
<el-text
class=
"mx-1"
v-if=
"!item.confirm"
>
{{ item.label }}
</el-text>
<el-popconfirm
v-else
confirm-button-text=
"Yes"
cancel-button-text=
"No"
:icon=
"InfoFilled"
icon-color=
"#626AEF"
:title=
"item.confirm"
@
confirm=
"handleMenuConfirm(item.value, row)"
width=
"300"
placement=
"left-end"
>
<
template
#
reference
>
<el-text
class=
"mx-1"
>
{{
item
.
label
}}
</el-text>
</
template
>
</el-popconfirm>
</el-menu-item>
</el-menu>
</el-popover>
</template>
</el-table-column>
</el-table>
...
...
@@ -144,7 +161,9 @@
import
CommonPage
from
'@/components/commonPage'
import
{
getFnaList
,
deleteFna
,
subProcess
}
from
'@/api/sign/fna'
import
useUserStore
from
'@/store/modules/user'
import
{
MoreFilled
,
InfoFilled
}
from
'@element-plus/icons-vue'
import
useDictStore
from
'@/store/modules/dict'
const
dictStore
=
useDictStore
()
const
userStore
=
useUserStore
()
const
router
=
useRouter
()
const
{
proxy
}
=
getCurrentInstance
()
...
...
@@ -188,6 +207,63 @@ const operationBtnList = ref([
click
:
handleQuery
}
])
// 表格操作栏相关方法
// 基础菜单项配置(不使用 ref,因为它是静态的)
const
baseDropdownItems
=
[
{
label
:
'修改'
,
value
:
'edit'
,
confirm
:
''
},
{
label
:
'生成副本'
,
value
:
'copy'
,
confirm
:
''
},
{
label
:
'删除'
,
value
:
'delete'
,
confirm
:
'是否确认删除FNA流程?'
,
// 只有当 row.status == 1 时才显示
showCondition
:
row
=>
!
row
.
policyNo
}
]
const
getVisibleDropdownItems
=
row
=>
{
return
baseDropdownItems
.
filter
(
item
=>
{
// 如果有 showCondition,则执行;否则默认显示
return
typeof
item
.
showCondition
===
'function'
?
item
.
showCondition
(
row
)
:
true
})
}
// 菜单选择处理(无确认的操作)
const
handleSelect
=
(
index
,
row
)
=>
{
// 只处理不需要确认的操作
const
item
=
baseDropdownItems
.
find
(
i
=>
i
.
value
===
index
)
if
(
item
&&
!
item
.
confirm
)
{
handleMenuAction
(
index
,
row
)
}
// 如果有 confirm,则由 el-popconfirm 触发 handleMenuConfirm
}
// 带确认的操作(由 popconfirm 触发)
const
handleMenuConfirm
=
(
value
,
row
)
=>
{
handleMenuAction
(
value
,
row
)
}
// 统一处理菜单动作
const
handleMenuAction
=
(
action
,
row
)
=>
{
switch
(
action
)
{
case
'edit'
:
handleUpdate
(
row
)
break
case
'copy'
:
handleCopy
(
row
)
break
case
'delete'
:
if
(
!
row
.
policyNo
)
{
handleDelete
(
row
)
}
break
default
:
proxy
.
$message
.
info
(
'功能暂未开放'
)
}
}
const
changePageNo
=
val
=>
{
queryParams
.
value
.
pageNo
=
val
getList
()
...
...
@@ -268,17 +344,16 @@ function resetQuery() {
}
/** 删除按钮操作 */
function
handleDelete
(
row
)
{
proxy
.
$modal
.
confirm
(
'是否确认删除'
+
row
.
customerName
+
'的FNA流程?'
)
.
then
(
function
()
{
return
deleteFna
({
fnaBizId
:
row
.
fnaBizId
})
})
.
then
(()
=>
{
async
function
handleDelete
(
row
)
{
try
{
let
res
=
await
deleteFna
({
fnaBizId
:
row
.
fnaBizId
})
if
(
res
.
code
===
200
)
{
getList
()
proxy
.
$modal
.
msgSuccess
(
'删除成功'
)
})
.
catch
(()
=>
{})
}
}
catch
(
error
)
{
console
.
log
(
'error'
,
error
)
}
}
/** 新增按钮操作 */
...
...
@@ -301,6 +376,40 @@ function handleUpdate(row) {
}
getList
()
// 请求一下字典值方便表单回显
if
(
dictStore
.
dictTypeLists
.
length
==
0
)
{
proxy
.
useDictLists
([
'csf_employment'
,
'sys_no_yes'
,
'bx_currency_type'
,
'csf_liquid_asset_type'
,
'csf_premium_funding_source'
,
'csf_customer_type'
,
'csf_customer_title'
,
'sys_gender'
,
'csf_marriage'
,
'csf_education'
,
'csf_id_type'
,
'csf_ap_apply_type'
,
'csf_ap_meeting_point'
,
'csf_ap_first_issue'
,
'csf_ap_dividend'
,
'csf_ap_frequency'
,
'csf_ap_rel'
,
'csf_ap_registration'
,
'csf_ap_exercise'
,
'csf_ap_risk'
,
'csf_ap_movie'
,
'csf_ap_game'
,
'csf_ap_policy_transfer'
,
'wj_question_first_category'
,
'wj_question_second_category'
,
'csf_ap_status'
,
'md_bank'
,
'oss_data_type'
,
'oss_data_person'
])
}
</
script
>
<
style
lang=
"scss"
scoped
>
.bottomBtn
{
...
...
src/views/sign/appointment/appointmentEdit.vue
View file @
ca481729
...
...
@@ -418,7 +418,6 @@ const props = defineProps({
policyDetailInfo
:
{
type
:
Object
,
default
:
()
=>
({})
},
//新单跟进传递关于保单的详情信息
policyId
:
{
type
:
Object
,
default
:
()
=>
({})
}
//新单跟进传递的Id
})
// console.log();
const
userStore
=
useUserStore
()
const
dictStore
=
useDictStore
()
...
...
@@ -816,37 +815,37 @@ const getDictsData = async () => {
})
dictStore
.
setSignPeopleList
(
response7
.
data
.
records
)
}
proxy
.
useDictLists
([
'csf_employment'
,
'sys_no_yes'
,
'bx_currency_type'
,
'csf_liquid_asset_type'
,
'csf_premium_funding_source'
,
'csf_customer_type'
,
'csf_customer_title'
,
'sys_gender'
,
'csf_marriage'
,
'csf_education'
,
'csf_id_type'
,
'csf_ap_apply_type'
,
'csf_ap_meeting_point'
,
'csf_ap_first_issue'
,
'csf_ap_dividend'
,
'csf_ap_frequency'
,
'csf_ap_rel'
,
'csf_ap_registration'
,
'csf_ap_exercise'
,
'csf_ap_risk'
,
'csf_ap_movie'
,
'csf_ap_game'
,
'csf_ap_policy_transfer'
,
'wj_question_first_category'
,
'wj_question_second_category'
,
'csf_ap_status'
,
'md_bank'
,
'oss_data_type'
,
'oss_data_person'
])
//
proxy.useDictLists([
//
'csf_employment',
//
'sys_no_yes',
//
'bx_currency_type',
//
'csf_liquid_asset_type',
//
'csf_premium_funding_source',
//
'csf_customer_type',
//
'csf_customer_title',
//
'sys_gender',
//
'csf_marriage',
//
'csf_education',
//
'csf_id_type',
//
'csf_ap_apply_type',
//
'csf_ap_meeting_point',
//
'csf_ap_first_issue',
//
'csf_ap_dividend',
//
'csf_ap_frequency',
//
'csf_ap_rel',
//
'csf_ap_registration',
//
'csf_ap_exercise',
//
'csf_ap_risk',
//
'csf_ap_movie',
//
'csf_ap_game',
//
'csf_ap_policy_transfer',
//
'wj_question_first_category',
//
'wj_question_second_category',
//
'csf_ap_status',
//
'md_bank',
//
'oss_data_type',
//
'oss_data_person'
//
])
}
// Tab切换前的验证
const
beforeTabLeave
=
(
activeTabName
,
oldTabName
)
=>
{
...
...
src/views/sign/appointment/components/appointmentInfo.vue
View file @
ca481729
...
...
@@ -724,7 +724,7 @@ function getItineraryInfo() {
// 导出行程单Pdf
const
handleExprotPdf
=
()
=>
{
exportLoading
.
value
=
true
getItineraryExprot
(
appointmentSummeryInfo
.
value
.
appointmentBizId
).
then
(
res
=>
{
getItineraryExprot
(
props
.
idsObj
.
appointmentBizId
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
// 创建隐藏的下载链接
const
link
=
document
.
createElement
(
'a'
)
...
...
@@ -733,8 +733,8 @@ const handleExprotPdf = () => {
// 设置下载文件名(重要)
// 从URL中提取文件名,或者使用返回的文件名
const
fileName
=
`香港行程安排.pdf`
link
.
download
=
fileName
link
.
download
=
`香港行程安排.pdf`
// 触发下载
document
.
body
.
appendChild
(
link
)
...
...
src/views/sign/appointment/components/productPlan.vue
View file @
ca481729
...
...
@@ -289,6 +289,7 @@ const currencyType = ref([]) // 是否列表
const
searchOptions
=
ref
({})
// 存储不同key对应的选项
const
searchLoadingStates
=
ref
({})
// 存储不同key对应的加载状态
const
additionalProductForm
=
ref
([])
// 附加险的表单
const
dateKey
=
ref
({})
const
data
=
reactive
({
form
:
{
apiProductPlanMainInfoDto
:
{},
apiProductPlanAdditionalInfoDtoList
:
[]
},
tempForm
:
{},
//由于切换tab的时候,表单数据会重置,所以需要保存一份临时表单数据
...
...
@@ -624,11 +625,6 @@ const processFormData = async () => {
if
(
section
.
data
)
{
for
(
const
formKey
in
form
.
value
)
{
if
(
section
.
key
==
formKey
)
{
// if (section.dataLength) {
// for (let i = 1; i
<
section
.
dataLength
;
i
++
)
{
// section.data.push(JSON.parse(JSON.stringify(section.data[0])))
// }
// }
for
(
const
field
of
section
.
data
)
{
// 为下拉搜索框加options
if
(
field
.
domType
==
'SearchSelect'
)
{
...
...
@@ -650,10 +646,9 @@ const processFormData = async () => {
// 获取字典数据
field
.
options
=
fetchDictData
(
field
.
dictType
)
}
//
/*
1.没有嵌套子级的也就是没有children的数据加rules,根据data中的required字段判断是否必填
*/
if
(
field
.
domType
==
'DatePicker'
)
{
dateKey
.
value
[
field
.
key
]
=
field
.
key
}
if
(
field
.
required
)
{
rules
.
value
[
section
.
key
][
field
.
key
]
=
[
{
required
:
true
,
message
:
`
${
field
.
label
}
不能为空`
,
trigger
:
'blur'
}
...
...
@@ -698,6 +693,7 @@ const processFormData = async () => {
processedProductData
.
value
=
processedData
}
}
console
.
log
(
'产品'
,
form
.
value
)
}
// 根据联动重置表单项的显示与否
...
...
@@ -861,6 +857,16 @@ const handleSubmitForm = () => {
if
(
section
.
keyType
==
'Array'
&&
section
.
data
.
length
>
0
)
{
submitObj
[
section
.
key
]
=
JSON
.
parse
(
JSON
.
stringify
(
section
.
data
))
}
if
(
section
.
keyType
==
'Object'
&&
section
.
data
)
{
for
(
const
field
of
section
.
data
)
{
// 时间加00:00:00
if
(
field
.
domType
==
'DatePicker'
&&
dateKey
.
value
[
field
.
key
])
{
submitObj
[
section
.
key
][
field
.
key
]
=
proxy
.
formatToDateTime
(
submitObj
[
section
.
key
][
field
.
key
]
)
}
}
}
})
if
(
errorFields
.
value
.
length
>
0
)
{
...
...
src/views/sign/appointment/index.vue
View file @
ca481729
...
...
@@ -13,7 +13,7 @@
>
<!-- 查询条件插槽 -->
<template
#
searchForm
>
<el-form
:model=
"queryParams"
ref=
"queryRef"
label-width=
"100px"
>
<el-form
:model=
"queryParams"
ref=
"queryRef"
label-width=
"100px"
label-position=
"top"
>
<el-row
:gutter=
"30"
>
<el-col
:sm=
"12"
:lg=
"8"
:xs=
"24"
>
<el-form-item
label=
"确认预约时间"
>
...
...
@@ -203,6 +203,7 @@ import CommonPage from '@/components/commonPage'
import
DetailPanel
from
'@/components/DetailPanel'
import
{
onMounted
,
onActivated
,
ref
}
from
'vue'
import
CommonDialog
from
'@/components/commonDialog'
import
useDictStore
from
'@/store/modules/dict'
import
{
getAppointmentList
,
getAppointmentExprot
,
...
...
@@ -211,7 +212,7 @@ import {
getItineraryExprot
}
from
'@/api/sign/appointment'
import
useUserStore
from
'@/store/modules/user'
const
dictStore
=
useDictStore
()
const
userStore
=
useUserStore
()
const
router
=
useRouter
()
const
{
proxy
}
=
getCurrentInstance
()
...
...
@@ -584,6 +585,40 @@ function handleUpdate(row, type) {
}
getList
()
// 请求一下字典值方便表单回显
if
(
dictStore
.
dictTypeLists
.
length
==
0
)
{
proxy
.
useDictLists
([
'csf_employment'
,
'sys_no_yes'
,
'bx_currency_type'
,
'csf_liquid_asset_type'
,
'csf_premium_funding_source'
,
'csf_customer_type'
,
'csf_customer_title'
,
'sys_gender'
,
'csf_marriage'
,
'csf_education'
,
'csf_id_type'
,
'csf_ap_apply_type'
,
'csf_ap_meeting_point'
,
'csf_ap_first_issue'
,
'csf_ap_dividend'
,
'csf_ap_frequency'
,
'csf_ap_rel'
,
'csf_ap_registration'
,
'csf_ap_exercise'
,
'csf_ap_risk'
,
'csf_ap_movie'
,
'csf_ap_game'
,
'csf_ap_policy_transfer'
,
'wj_question_first_category'
,
'wj_question_second_category'
,
'csf_ap_status'
,
'md_bank'
,
'oss_data_type'
,
'oss_data_person'
])
}
</
script
>
<
style
lang=
"scss"
scoped
>
.app-container
{
...
...
src/views/sign/policyReceipts/index.vue
View file @
ca481729
...
...
@@ -56,9 +56,9 @@
<
template
#
default=
"{ row }"
>
<el-popover
placement=
"right"
:width=
"200"
trigger=
"click"
>
<template
#
reference
>
<el-
icon
>
<
MoreFilled
/
>
</el-
ic
on>
<el-
button
link
type=
"primary"
size=
"small"
>
<
el-icon><MoreFilled
/></el-icon
>
</el-
butt
on>
</
template
>
<el-menu
@
select=
"handleSelect($event, row)"
popper-class=
"custom-menu"
>
<el-menu-item
...
...
@@ -134,9 +134,7 @@ import SearchForm from '@/components/SearchForm/SearchForm.vue'
import
{
ElMessage
}
from
'element-plus'
import
{
formatCurrency
}
from
'@/utils/number'
// 接口
import
{
updatePayoutAmount
,
}
from
'@/api/financial/commission'
import
{
updatePayoutAmount
}
from
'@/api/financial/commission'
import
{
getPolicyReceiptList
,
addPolicyReceipt
,
...
...
@@ -181,13 +179,13 @@ const searchConfig = ref([
prop
:
'insurer'
,
label
:
'保险公司'
,
api
:
'/insurance/base/api/insuranceCompany/page'
,
keywordField
:
'
queryContent
'
,
keywordField
:
'
fullName
'
,
requestParams
:
{
pageNo
:
1
,
pageSize
:
20
},
placeholder
:
'输入保险公司名称搜索'
,
debounceWait
:
500
,
// 自定义防抖时间
multiple
:
false
,
valueKey
:
'insuranceCompanyBizId'
,
labelKey
:
'
abbreviation
'
,
labelKey
:
'
fullName
'
,
transform
:
res
=>
{
console
.
log
(
res
)
return
res
?.
data
.
records
||
[]
...
...
src/views/sign/policyReceipts/premiumRecon.vue
View file @
ca481729
...
...
@@ -109,32 +109,13 @@
<el-table-column
prop=
"reconciliationCompany"
label=
"对账公司"
width=
"150"
>
</el-table-column>
<!-- <el-table-column fixed="right" label="操作" min-width="120">
<template #default="{ row }">
<el-popover placement="right" :width="200" trigger="click">
<template #reference>
<el-icon>
<MoreFilled />
</el-icon>
</template>
<el-menu @select="handleSelect($event, row)" popper-class="custom-menu">
<el-menu-item
:index="item.value"
v-for="item in dropdownItems"
:key="item.value"
>{{ item.label }}</el-menu-item
>
</el-menu>
</el-popover>
</template>
</el-table-column> -->
<el-table-column
fixed=
"right"
label=
"操作"
min-width=
"120"
>
<
template
#
default=
"{ row }"
>
<el-popover
placement=
"right"
:width=
"200"
trigger=
"click"
>
<template
#
reference
>
<el-
icon
>
<
MoreFilled
/
>
</el-
ic
on>
<el-
button
link
type=
"primary"
size=
"small"
>
<
el-icon><MoreFilled
/></el-icon
>
</el-
butt
on>
</
template
>
<el-menu
@
select=
"handleSelect($event, row)"
popper-class=
"custom-menu"
>
...
...
@@ -186,6 +167,11 @@
{{
getDictLabel
(
'csf_ap_first_issue'
,
row
.
paymentMethod
)
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"paymentDate"
label=
"付款日期"
width=
"150"
>
<
template
#
default=
"{ row }"
>
{{
row
.
paymentDate
?
formatToDate
(
row
.
paymentDate
)
:
''
}}
</
template
>
</el-table-column>
<el-table-column
label=
"付款金额"
prop=
"paymentAmount"
/>
<el-table-column
label=
"付款币种"
prop=
"paymentCurrency"
>
<
template
#
default=
"{ row }"
>
...
...
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