Commit 3e9057ab by yuzhenWang

Merge branch 'feature-20250827wyz-写业务' into 'test'

添加预计来佣和修改新单跟进状态

See merge request !22
parents 7c539824 7623c5ef
...@@ -134,3 +134,42 @@ export function delPolicyBeneficiary(policyBeneficiaryBizId) { ...@@ -134,3 +134,42 @@ export function delPolicyBeneficiary(policyBeneficiaryBizId) {
method: 'delete' method: 'delete'
}) })
} }
// 新单跟进的预计来佣列表
export function getCommissionList(data) {
return request({
url: '/csf/api/CommissionExpected/list/page',
method: 'post',
data: data
})
}
// 新单跟进的预计来佣单个提交
export function editSigalCommission(data) {
return request({
url: '/csf/api/CommissionExpected/update',
method: 'post',
data: data
})
}
// 新单跟进的预计来佣批量提交
export function editMultipleCommission(data) {
return request({
url: '/csf/api/CommissionExpected/add',
method: 'post',
data: data
})
}
// 删除单个来佣
export function delCommissionExpected(commissionExpectedBizId) {
return request({
url: '/csf/api/CommissionExpected/delete?commissionExpectedBizId=' + commissionExpectedBizId,
method: 'delete'
})
}
// 编辑新单跟进状态
export function changePolicyStatus(data) {
return request({
url: '/csf/api/policy_follow/change_status',
method: 'post',
data: data
})
}
const commissionList = [
// 转介人信息
{
fatherTitle: '预计来佣',
keyType: 'Array', //用于表单收集值时,判断是数组还是对象
showTable: true, //以table的形式展示
key: 'commissionList',
addFamilyChildren: true, //是否可以新增子级dom
fatherRequired: false, //父级必填,代表个人资料这个模块有必填项
data: [
// {
// id: Date.now() + Math.floor(Math.random() * 1000), //唯一标识
// brokerName: '',
// team: '',
// brokerRatio: '',
// needProvide: '',
// currency: '',
// remark: ''
// }
]
}
]
export default commissionList
...@@ -191,16 +191,7 @@ const handleCopy = row => { ...@@ -191,16 +191,7 @@ const handleCopy = row => {
proxy.$modal.msgSuccess('生成副本成功') proxy.$modal.msgSuccess('生成副本成功')
} }
}) })
// proxy.$modal
// .confirm('是否确认复用' + row.customerName + '的FNA流程?')
// .then(function () {
// return subProcess({ fnaBizId: row.fnaBizId })
// })
// .then(() => {
// getList()
// proxy.$modal.msgSuccess('生成副本成功')
// })
// .catch(() => {})
} }
const sortChange = ({ prop, order }) => { const sortChange = ({ prop, order }) => {
if (order == 'ascending') { if (order == 'ascending') {
......
...@@ -44,7 +44,6 @@ ...@@ -44,7 +44,6 @@
<el-row v-if="isEmbed"> <el-row v-if="isEmbed">
<el-col> <el-col>
<div class="topButtonBox"> <div class="topButtonBox">
<!-- -->
<el-button <el-button
v-if="idsObj.appointmentBizId && pageSource !== 'policyList'" v-if="idsObj.appointmentBizId && pageSource !== 'policyList'"
type="primary" type="primary"
...@@ -237,6 +236,13 @@ ...@@ -237,6 +236,13 @@
:verifyPolicyInfo="policyDetailInfo.verifyPolicyInfo" :verifyPolicyInfo="policyDetailInfo.verifyPolicyInfo"
/> />
</div> </div>
<div v-if="tab.name === 'expectedCommission'">
<ExpectedCommission
:activeName="activeName"
:policyBizId="route.query.policyBizId"
:brokerList="policyDetailInfo.brokerList"
/>
</div>
</div> </div>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
...@@ -290,6 +296,7 @@ import PolicyFileUpload from '@/views/sign/underwritingMain/components/fileUploa ...@@ -290,6 +296,7 @@ import PolicyFileUpload from '@/views/sign/underwritingMain/components/fileUploa
import PolicyBrokerInfo from '@/views/sign/underwritingMain/components/brokerInfo.vue' //新单跟进里的保单附件 import PolicyBrokerInfo from '@/views/sign/underwritingMain/components/brokerInfo.vue' //新单跟进里的保单附件
import PolicyMailing from '@/views/sign/underwritingMain/components/policyMailing.vue' //新单跟进里的保单附件 import PolicyMailing from '@/views/sign/underwritingMain/components/policyMailing.vue' //新单跟进里的保单附件
import VerifyPolicyInfo from '@/views/sign/underwritingMain/components/verifyPolicyInfo.vue' //新单跟进里的保单附件 import VerifyPolicyInfo from '@/views/sign/underwritingMain/components/verifyPolicyInfo.vue' //新单跟进里的保单附件
import ExpectedCommission from '@/views/sign/underwritingMain/components/expectedCommission.vue' //新单跟进里的保单附件
import useUserStore from '@/store/modules/user' import useUserStore from '@/store/modules/user'
import useDictStore from '@/store/modules/dict' import useDictStore from '@/store/modules/dict'
import { getCustomerDetail } from '@/api/sign/fna' import { getCustomerDetail } from '@/api/sign/fna'
...@@ -307,7 +314,6 @@ import { ref, nextTick, onUnmounted } from 'vue' ...@@ -307,7 +314,6 @@ import { ref, nextTick, onUnmounted } from 'vue'
const emit = defineEmits(['handleSuccess']) const emit = defineEmits(['handleSuccess'])
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
// const { csf_ap_status } = proxy.useDict('csf_ap_status')
const props = defineProps({ const props = defineProps({
embed: { type: Boolean, default: false }, //作为组件嵌入别的地方 embed: { type: Boolean, default: false }, //作为组件嵌入别的地方
editStatus: { type: String, default: '' }, //作为组件嵌入别的地方 editStatus: { type: String, default: '' }, //作为组件嵌入别的地方
...@@ -317,6 +323,7 @@ const props = defineProps({ ...@@ -317,6 +323,7 @@ const props = defineProps({
policyDetailInfo: { type: Object, default: () => ({}) }, //新单跟进传递关于保单的详情信息 policyDetailInfo: { type: Object, default: () => ({}) }, //新单跟进传递关于保单的详情信息
policyId: { type: Object, default: () => ({}) } //新单跟进传递的Id policyId: { type: Object, default: () => ({}) } //新单跟进传递的Id
}) })
// console.log();
const userStore = useUserStore() const userStore = useUserStore()
const dictStore = useDictStore() const dictStore = useDictStore()
...@@ -808,7 +815,7 @@ const tabHight = computed(() => { ...@@ -808,7 +815,7 @@ const tabHight = computed(() => {
if (pageSource.value == 'fnaList') { if (pageSource.value == 'fnaList') {
return 'calc(100vh - 407px)' return 'calc(100vh - 407px)'
} else if (pageSource.value == 'policyList') { } else if (pageSource.value == 'policyList') {
return 'calc(100vh - 230px)' return 'calc(100vh - 225px)'
} else { } else {
return 'calc(100vh - 276px)' return 'calc(100vh - 276px)'
} }
...@@ -1005,107 +1012,113 @@ if (route.query.source == 'policyList') { ...@@ -1005,107 +1012,113 @@ if (route.query.source == 'policyList') {
isEmbed.value = route.query.embed isEmbed.value = route.query.embed
tabsList.value = [ tabsList.value = [
{ {
label: '预计来佣',
name: 'expectedCommission',
id: 1,
key: 'expectedCommission'
},
{
label: '保单信息', label: '保单信息',
name: 'policyInfo', name: 'policyInfo',
id: 1, id: 2,
key: 'policyInfo' key: 'policyInfo'
}, },
{ {
label: '保单附件', label: '保单附件',
name: 'policyAccessories', name: 'policyAccessories',
id: 2, id: 3,
key: 'policyAccessories' key: 'policyAccessories'
}, },
{ {
label: '转介人', label: '转介人',
name: 'policyBroker', name: 'policyBroker',
id: 3, id: 4,
key: 'policyBroker' key: 'policyBroker'
}, },
{ {
label: '邮寄信息', label: '邮寄信息',
name: 'policyMailing', name: 'policyMailing',
id: 4, id: 5,
key: 'policyMailing' key: 'policyMailing'
}, },
{ {
label: '核保信息', label: '核保信息',
name: 'verifyPolicyInfo', name: 'verifyPolicyInfo',
id: 5, id: 6,
key: 'verifyPolicyInfo' key: 'verifyPolicyInfo'
}, },
// { // {
// label: '新单事项', // label: '新单事项',
// name: 'newpolicyTodo', // name: 'newpolicyTodo',
// id: 6, // id: 7,
// key: 'newpolicyTodo' // key: 'newpolicyTodo'
// }, // },
{ {
label: '产品计划', label: '产品计划',
name: 'productPlan', name: 'productPlan',
id: 7, id: 8,
status: '0', status: '0',
key: 'planBizId' key: 'planBizId'
}, },
{ {
label: '投保人', label: '投保人',
name: 'policyholder', name: 'policyholder',
id: 8, id: 9,
status: '0', status: '0',
key: 'policyholderBizId' key: 'policyholderBizId'
}, },
{ {
label: '受保人', label: '受保人',
name: 'insurantInfo', name: 'insurantInfo',
id: 9, id: 10,
status: '0', status: '0',
key: 'insurantBizId' key: 'insurantBizId'
}, },
{ {
label: '受益人', label: '受益人',
name: 'beneficiary', name: 'beneficiary',
id: 10, id: 11,
status: '0', status: '0',
key: 'beneficiaryBizId' key: 'beneficiaryBizId'
}, },
{ {
label: '第二持有人', label: '第二持有人',
name: 'secondHolder', name: 'secondHolder',
id: 11, id: 12,
status: '0', status: '0',
key: 'secondHolderBizId' key: 'secondHolderBizId'
}, },
{ {
label: '健康信息', //后端还没加这个字段 label: '健康信息', //后端还没加这个字段
name: 'questionnaires', name: 'questionnaires',
id: 12, id: 13,
status: '0', status: '0',
key: 'questionnaireBizId' key: 'questionnaireBizId'
}, },
// { // {
// label: '关联FNA', // label: '关联FNA',
// name: 'fna', // name: 'fna',
// id: 13, // id: 14,
// status: '0', // status: '0',
// key: 'fnaBizId' // key: 'fnaBizId'
// }, // },
{ {
label: '转保声明', label: '转保声明',
name: 'policyTransfer', name: 'policyTransfer',
id: 14, id: 15,
status: '0', status: '0',
key: 'policyTransfer' key: 'policyTransfer'
}, },
{ {
label: '预约附件', //大提交的时候不用提交了,因为上传文件的时候已经入库了 label: '预约附件', //大提交的时候不用提交了,因为上传文件的时候已经入库了
name: 'accessories', name: 'accessories',
id: 15, id: 16,
status: '0', status: '0',
key: 'fnaBizId' key: 'fnaBizId'
} }
] ]
nextTick(() => { nextTick(() => {
activeName.value = 'policyInfo' activeName.value = 'expectedCommission'
}) })
} }
// 根据页面来源的不同控制tab项内模块小提交按钮的显示与否,也能证明是修改状态 // 根据页面来源的不同控制tab项内模块小提交按钮的显示与否,也能证明是修改状态
...@@ -1121,8 +1134,6 @@ const showSubmitBtn = computed(() => { ...@@ -1121,8 +1134,6 @@ const showSubmitBtn = computed(() => {
} }
}) })
onUnmounted(() => { onUnmounted(() => {
console.log('预约编辑页面完全销毁')
// 彻底重置所有响应式数据 // 彻底重置所有响应式数据
submitAppointmentObj.value = {} submitAppointmentObj.value = {}
appointmentSummeryInfo.value = {} appointmentSummeryInfo.value = {}
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
<el-row v-if="father.showTable"> <el-row v-if="father.showTable">
<el-table :data="father.data" border> <el-table :data="father.data" border>
<template v-if="father.key == 'brokerList'"> <template v-if="father.key == 'brokerList'">
<el-table-column type="index" width="60" label="序号" />
<el-table-column label="转介人比例" prop="brokerRatio" align="center"> <el-table-column label="转介人比例" prop="brokerRatio" align="center">
<template #default="scope"> <template #default="scope">
<el-input <el-input
......
...@@ -567,7 +567,6 @@ watch( ...@@ -567,7 +567,6 @@ watch(
} }
} }
) )
processFormData()
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.domEmpty { .domEmpty {
......
<template> <template>
<div class="app-container"> <div class="app-container">
<!-- <div>
<el-button type="primary" icon="Back" @click="handleBack" style="margin-bottom: 10px"
>返回</el-button
>
</div> -->
<!-- <el-card shadow="never">
<div class="tabsBox">
<el-tabs v-model="activeName" type="card" class="demo-tabs" :before-leave="beforeTabLeave">
<el-tab-pane v-for="tab in tabsList" :key="tab.name" :label="tab.label" :name="tab.name">
<div class="tabPaneBox">
<div v-if="tab.name === 'status'">新单状态</div>
<div v-if="tab.name === 'info'">
<PolicyInfo
:activeName="activeName"
:policyBizId="route.query.policyBizId"
:dictTypeLists="dictTypeLists"
:policyInfo="policyInfo"
/>
</div>
<div v-if="tab.name === 'accessories'">
<FileUpload
:activeName="activeName"
:policyBizId="route.query.policyBizId"
/>
</div>
</div>
</el-tab-pane>
</el-tabs>
</div>
</el-card> -->
<AppointmentEdit <AppointmentEdit
source="policyList" source="policyList"
:policyId="route.query" :policyId="route.query"
...@@ -45,11 +10,9 @@ ...@@ -45,11 +10,9 @@
</template> </template>
<script setup name="FollowUpDetail"> <script setup name="FollowUpDetail">
import AppointmentEdit from '@/views/sign/appointment/appointmentEdit' import AppointmentEdit from '@/views/sign/appointment/appointmentEdit'
import { onUnmounted } from 'vue'
import { getPolicyfollow, getPolicyInfo } from '@/api/sign/underwritingMain' import { getPolicyfollow, getPolicyInfo } from '@/api/sign/underwritingMain'
import useUserStore from '@/store/modules/user' import useUserStore from '@/store/modules/user'
import useDictStore from '@/store/modules/dict' import useDictStore from '@/store/modules/dict'
import { addFna, getProcessDetail, updateProcess, getCustomerDetail } from '@/api/sign/fna'
import { import {
listTenantUser, listTenantUser,
getInsuranceProductList, getInsuranceProductList,
...@@ -57,53 +20,15 @@ import { ...@@ -57,53 +20,15 @@ import {
getAllCompanys, getAllCompanys,
getClientUser getClientUser
} from '@/api/common' } from '@/api/common'
import PolicyInfo from './components/policyInfo'
import FileUpload from './components/fileUpload.vue'
import { Check } from '@element-plus/icons-vue'
import { ref } from 'vue' import { ref } from 'vue'
const userStore = useUserStore() const userStore = useUserStore()
const dictStore = useDictStore() const dictStore = useDictStore()
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
const route = useRoute() const route = useRoute()
const router = useRouter()
const activeName = ref('status')
const showTab = ref(false) const showTab = ref(false)
const processInfo = ref({
fnaNo: '--',
status: '未保存',
createTime: proxy.parseTime(new Date()),
customerName: userStore.name
}) // 流程详情信息
const updateStatus = ref(false)
const dictTypeLists = ref([])
const customerInfo = ref({})
const tabsList = ref([
{
label: '新单状态',
name: 'status',
id: 1,
status: '0',
key: 'customerBizId'
},
{
label: '新单信息',
name: 'info',
id: 2,
status: '0',
key: 'fnaFormBizId'
},
{
label: '新单附件',
name: 'accessories',
id: 3,
status: '0',
key: 'policyBizld'
}
])
const policyInfo = ref({}) //新单信息详情 const policyInfo = ref({}) //新单信息详情
const policyStatusList = ref({}) //新单信息状态
const { csf_fna_status } = proxy.useDict('csf_fna_status')
// 获取各个流程所需要得字典数据 // 获取各个流程所需要得字典数据
const getDictsData = async () => { const getDictsData = async () => {
// 获取租户用户列表 // 获取租户用户列表
...@@ -228,6 +153,9 @@ const getPolicyDetail = () => { ...@@ -228,6 +153,9 @@ const getPolicyDetail = () => {
...infoRes.data ...infoRes.data
} }
showTab.value = true showTab.value = true
// if (policyInfo.value.nextStatusList && policyInfo.value.nextStatusList.length > 0) {
// }
} }
}) })
.catch(error => { .catch(error => {
...@@ -235,130 +163,6 @@ const getPolicyDetail = () => { ...@@ -235,130 +163,6 @@ const getPolicyDetail = () => {
console.error('请求失败:', error) console.error('请求失败:', error)
}) })
} }
// 更新流程
const processUpdate = (data, status) => {
updateProcess(data).then(res => {
if (res.code == 200) {
updateStatus.value = false
console.log('更新流程', res)
// 获取流程详情
getProcessInfo(data.fnaBizId, status)
}
})
}
// 获取流程详情
function getProcessInfo(fnaBizId, changeTab) {
getProcessDetail(fnaBizId).then(res => {
if (res.code == 200) {
processInfo.value = res.data
tabsList.value.forEach(item => {
if (res.data[item.key] && item.status) {
item.status = '1'
} else {
item.status = '0'
}
})
csf_fna_status._object.csf_fna_status.forEach(item => {
if (item.value == res.data.status) {
processInfo.value.status = item.label
}
})
if (changeTab) {
activeName.value = changeTab
}
}
})
}
// Tab切换前的验证
const beforeTabLeave = (activeTabName, oldTabName) => {
// if (processInfo.value.customerBizId) {
// getCustomerInfo(processInfo.value.customerBizId)
// }
// // 如果切换到总览,始终允许
// if (activeTabName === 'overview' || activeTabName === 'customer') {
// return true
// }
// // 获取当前要切换到的tab
// const targetTab = tabsList.value.find(tab => tab.name === activeTabName)
// // 如果目标tab不存在,阻止切换
// if (!targetTab) {
// return false
// }
// // 检查前一项状态
// const prevTabIndex = tabsList.value.findIndex(tab => tab.name === activeTabName) - 1
// if (prevTabIndex >= 0) {
// const prevTab = tabsList.value[prevTabIndex]
// // 如果前一项存在且未完成,阻止切换
// if (prevTab.status === '0') {
// proxy.$modal.confirm(`请先填写${prevTab.label}`, { showCancel: '0', title: '填写提示' })
// return false
// }
// }
return true
}
const handleBack = () => {
router.go(-1)
}
// 获取客户详情
function getCustomerInfo(customerBizId) {
getCustomerDetail(customerBizId).then(async res => {
if (res.code == 200) {
customerInfo.value = res.data
}
})
}
const handleSuccess = info => {
switch (info.tab) {
case 'customer':
if (info.type == 'add') {
//客户提交成功,更新流程
processUpdate({ fnaBizId: info.fnaBizId, customerBizId: info.customerBizId }, 'fnaform')
} else {
processUpdate({ fnaBizId: processInfo.value.fnaBizId, customerBizId: info.customerBizId })
}
getCustomerInfo(info.customerBizId)
break
case 'fnaform':
if (info.type == 'add') {
//客户提交成功,更新流程
processUpdate(
{
fnaBizId: processInfo.value.fnaBizId,
customerBizId: info.customerBizId,
fnaFormBizId: info.fnaFormBizId
},
'appointment'
)
} else {
processUpdate({
fnaBizId: processInfo.value.fnaBizId,
customerBizId: info.customerBizId,
fnaFormBizId: info.fnaFormBizId
})
}
break
case 'appointment':
if (info.type == 'add') {
getProcessInfo(processInfo.value.fnaBizId, 'newpolicy')
} else {
}
break
case 'newpolicy':
break
case 'policy':
break
default:
break
}
}
if (route.query.type == 'edit') { if (route.query.type == 'edit') {
getPolicyDetail() getPolicyDetail()
} }
......
...@@ -178,14 +178,9 @@ ...@@ -178,14 +178,9 @@
<template #default="scope"> <template #default="scope">
<el-button text size="primary" @click="handleView(scope.row)"> 查看 </el-button> <el-button text size="primary" @click="handleView(scope.row)"> 查看 </el-button>
<el-button text size="primary" @click="handleStatus(scope.row)"> 跟进 </el-button> <el-button text size="primary" @click="handleStatus(scope.row)"> 跟进 </el-button>
<!-- <el-button <el-button text type="warning" @click="handleEditStatus(scope.row)">
text 修改状态
size="default" </el-button>
type="primary"
@click="handleEdit(scope.row)"
>
编辑
</el-button> -->
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -213,6 +208,32 @@ ...@@ -213,6 +208,32 @@
:policy-fortune-list="policyFortuneList" :policy-fortune-list="policyFortuneList"
@close="handleDetailClose" @close="handleDetailClose"
/> />
<el-dialog title="修改新单状态" v-model="editStatus" width="500px" append-to-body>
<div style="height: 10vh">
<el-form>
<el-row>
<el-col :span="12">
<el-form-item label="状态">
<el-select v-model="form.status" placeholder="请选择">
<el-option
v-for="item in currentPolicyRow.nextStatusList"
:label="item.itemLabel"
:value="item.itemValue"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="canelEdit">取 消</el-button>
</div>
</template>
</el-dialog>
</div> </div>
</template> </template>
...@@ -220,19 +241,50 @@ ...@@ -220,19 +241,50 @@
import { ref, reactive, onMounted } from 'vue' import { ref, reactive, onMounted } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
import axios from 'axios' import axios from 'axios'
import { getPolicyFollowList, getExpectedCommissionList } from '@/api/sign/underwritingMain' import {
getPolicyFollowList,
getExpectedCommissionList,
changePolicyStatus
} from '@/api/sign/underwritingMain'
import { getToken } from '@/utils/auth' import { getToken } from '@/utils/auth'
import { listType } from '@/api/system/dict/type' import { listType } from '@/api/system/dict/type'
import date from '@/utils/date' import date from '@/utils/date'
import PolicyDetailDialog from '@/components/PolicyDetailDialog/index.vue' import PolicyDetailDialog from '@/components/PolicyDetailDialog/index.vue'
import { numberWithCommas } from '@/utils/index.js' import { numberWithCommas } from '@/utils/index.js'
import { getPolicyFortuneList } from '@/api/financial/commission' import { getPolicyFortuneList } from '@/api/financial/commission'
const { proxy } = getCurrentInstance()
const router = useRouter() const router = useRouter()
// 通过dictType=csf_policy_follow_status获取新单状态字典值,获取对象中的dictItemList // 通过dictType=csf_policy_follow_status获取新单状态字典值,获取对象中的dictItemList
const policyFollowStatusList = ref([]) const policyFollowStatusList = ref([])
const commissionStatusList = ref([]) const commissionStatusList = ref([])
const fortuneStatusList = ref([]) const fortuneStatusList = ref([])
const currentPolicyRow = ref({}) //当前保单
const editStatus = ref(false) //新单信息状态
const data = reactive({
form: {}
})
const { form } = toRefs(data)
const canelEdit = () => {
editStatus.value = false
form.value = {}
}
// 修改新单状态
const submitForm = () => {
let obj = {
policyBizId: currentPolicyRow.value.policyBizId,
status: form.value.status
}
changePolicyStatus(obj).then(response => {
if (response.code == 200) {
proxy.$modal.msgSuccess('新单状态修改成功')
editStatus.value = false
form.value = {}
fetchTableData()
}
})
}
const getLists = () => { const getLists = () => {
listType({ listType({
typeList: ['csf_policy_follow_status', 'csf_expected_commission_status', 'csf_fortune_status'] typeList: ['csf_policy_follow_status', 'csf_expected_commission_status', 'csf_fortune_status']
...@@ -608,6 +660,10 @@ const handleStatus = row => { ...@@ -608,6 +660,10 @@ const handleStatus = row => {
} }
}) })
} }
const handleEditStatus = row => {
currentPolicyRow.value = JSON.parse(JSON.stringify(row))
editStatus.value = true
}
</script> </script>
<style scoped> <style scoped>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment