Commit a83b446e by Sweet Zhang

Merge branch 'test' into sw

parents c890936c 04ebe0be
......@@ -47,3 +47,19 @@ export function getSearchCountry(name) {
method: 'get'
})
}
// 查询租户用户关系列表
export function listTenantUser(data) {
return request({
url: '/user/api/relTenantUser/page',
method: 'post',
data: data
})
}
// 查询多个字典列表
export function getMoreDicts(data) {
return request({
url: '/user/api/sysDict/type/list',
method: 'post',
data: data
})
}
......@@ -72,7 +72,7 @@ export function editCustomer(data) {
data: data
})
}
// 修改客户信息
// 获取客户列表信息
export function getCustomerList(data) {
return request({
url: '/csf/api/Customer/list/page/vo',
......@@ -83,6 +83,35 @@ export function getCustomerList(data) {
/*
客户模块接口结束
*/
/*
fanForm模块接口开始
*/
// 新增fanForm信息
export function addfanForm(data) {
return request({
url: '/csf/api/FnaForm/add',
method: 'post',
data: data
})
}
// 获取fanForm信息详情
export function getfanFormDetail(fnaFormBizId) {
return request({
url: `/csf/api/FnaForm/get/vo?fnaFormBizId=${fnaFormBizId}`,
method: 'get'
})
}
// 修改客户信息
export function editFanForm(data) {
return request({
url: '/csf/api/FnaForm/update',
method: 'post',
data: data
})
}
/*
fanForm模块接口结束
*/
// 修改角色
export function roleUpdate(data) {
return request({
......
......@@ -27,7 +27,7 @@ import elementIcons from '@/components/SvgIcon/svgicon'
import './permission' // permission control
import { useDict } from '@/utils/dict'
import { useDict,useDictLists } from '@/utils/dict'
import { getConfigKey } from '@/api/system/config'
import {
parseTime,
......@@ -57,6 +57,7 @@ const app = createApp(App)
// 全局方法挂载
app.config.globalProperties.useDict = useDict
app.config.globalProperties.useDictLists = useDictLists
app.config.globalProperties.download = download
app.config.globalProperties.parseTime = parseTime
app.config.globalProperties.getNowTime = getNowTime
......
const useDictStore = defineStore(
'dict',
{
const useDictStore = defineStore('dict', {
state: () => ({
dict: new Array()
dict: new Array(),
tenantUserList: [],
dictTypeLists: [] //字典列表,根据请求得不同会变化,所以使用之前需要使用useDictLists请求数据
}),
actions: {
// 获取字典
getDict(_key) {
if (_key == null && _key == "") {
if (_key == null && _key == '') {
return null
}
try {
......@@ -22,7 +22,7 @@ const useDictStore = defineStore(
},
// 设置字典
setDict(_key, value) {
if (_key !== null && _key !== "") {
if (_key !== null && _key !== '') {
this.dict.push({
key: _key,
value: value
......@@ -49,9 +49,16 @@ const useDictStore = defineStore(
this.dict = new Array()
},
// 初始字典
initDict() {
initDict() {},
// 设置租户用户列表
setTenantUserList(user) {
this.tenantUserList = user
},
// 设置字典列表
setDictTypeLists(typeList) {
this.dictTypeLists = typeList
}
}
})
})
export default useDictStore
{
"id": 12,
"customerBizId": "customer_XQH9OmZsSNafYMhc",
"customCode": null,
"lastName": "11",
"firstName": "11",
"name": "11",
"lastNamePinyin": "11",
"firstNamePinyin": "11",
"pinyin": "11",
"title": "Dr",
"gender": "2",
"birthdate": null,
"abnormal": null,
"age": "12",
"areaCode": "+86",
"phone": "11111",
"email": "11111",
"smoke": "1",
"smokeQuantity": "10",
"companyType": "11111",
"source": null,
"idType": "passport",
"idCard": "555",
"passport": null,
"eepCode": null,
"marriage": "MARRIED",
"birthplace": "11111111",
"education": "UNIVERSITY",
"customerExpandBizId": "customer_expand_l3eOcWeqGd1IFDJg",
"country": "CHINESE",
"countryName": "中国",
"createTime": "2025-09-16T11:40:58.000+08:00",
"customerType": null,
"residenceAreaCode": "+44",
"residenceTelephone": "22222",
"longtimeAbroad": "1",
"addressList": [
"id": 5,
"fnaFormBizId": "fna_form_8VXGgMskIU3uZWG7",
"customerBizId": "customer_bkr6dz9BkYGar48o",
"personalData": {
"accountName": "user_1002",
"registrationNumber": "11",
"number": null,
"customerName": "11",
"taxCountry": "11",
"employment": "PRAT_TIME",
"otherEmployment": null,
"isRetired": "1",
"retiredAge": null
},
"familyMembers": [
{
"type": "residenceAddress",
"region": "111",
"city": "222",
"street": "333",
"location": "444"
"type": "1",
"needProvide": "1",
"age": "11"
},
{
"type": "residentialAddress",
"region": "111",
"city": "222",
"street": "333",
"location": "444"
"type": "2",
"needProvide": "1",
"age": "11"
},
{
"type": "mailingAddress",
"region": "333",
"city": "333",
"street": "444",
"location": "555"
"type": "3",
"needProvide": "1",
"age": "11"
},
{
"type": "companyAddress",
"region": "666",
"city": "777",
"street": "888",
"location": "999"
"type": "4",
"needProvide": "1",
"age": "11"
}
],
"companyName": "444",
"companyAreaCode": "+65",
"companyTelephone": "5555",
"position": "555",
"workYear": "55",
"salary": 55555
"existingSecurityOwner": [],
"existingSecurityInsured": [],
"incomeExpense": {
"monthlyIncome": null,
"monthlyExpense": null
},
"liquidAssets": {
"liquidAssets": null,
"liquidAssetType": null,
"otherLiquidAsset": null
},
"primaryResidence": null,
"investment": null,
"companyBusinessData": {
"averageNetProfit": null,
"estimatedTotalAssets": null,
"currency": null,
"assetPercentage": null
},
"other": {
"premiumFundingSource": null
}
}
......@@ -6,12 +6,12 @@ export function formatIsoToDateTime(isoStr) {
// 替换 T 为空格,返回 "YYYY-MM-DD HH:mm:ss"
return isoStr.replace('T', ' ')
}
console.log(dayjs)
const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss'
const DATE_FORMAT = 'YYYY-MM-DD'
export function formatToDateTime(date, format = DATE_TIME_FORMAT) {
if (!date) return ''
return dayjs(date).format(format)
}
......@@ -20,5 +20,6 @@ export function formatToDate(date, format = DATE_FORMAT) {
return dayjs(date).format(format)
}
export const getNowTime = (format = DATE_TIME_FORMAT) => {
if (!date) return ''
return dayjs().format(format)
}
import useDictStore from '@/store/modules/dict'
import { getDicts } from '@/api/system/dict/data'
import { getMoreDicts } from '@/api/common'
/**
* 获取字典数据
......@@ -22,7 +23,25 @@ export function useDict(...args) {
return toRefs(res.value)
})()
}
/**
* 获取多个字典数据
*/
export function useDictLists(typeLists) {
let params = { typeList: typeLists }
let dictArray = []
getMoreDicts(params).then(resp => {
if (resp.code === 200) {
dictArray = resp.data.map(item => {
item.dictItemList.forEach(dict => {
dict.label = dict.itemLabel
dict.value = dict.itemValue
})
return item
})
useDictStore().setDictTypeLists(dictArray)
}
})
}
// /**
// * 获取字典数据
// */
......
......@@ -104,15 +104,11 @@
<div>
<el-form :model="queryParams" ref="queryRef" :inline="true" label-width="68px">
<el-form-item label="客户姓名" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入姓名"
clearable
@keyup.enter="customerList"
/>
<el-input v-model="queryParams.name" placeholder="请输入姓名" @input="customerList" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" circle @click="customerList" />
<el-button type="info" icon="Refresh" circle @click="resetCustomerList" />
</el-form-item>
</el-form>
<div class="customerBox">
......@@ -187,7 +183,8 @@ import Address from '@/views/components/address'
import { getDicts } from '@/api/system/dict/data'
import { watch, nextTick } from 'vue'
import { addCustomer, getCustomerDetail, editCustomer, getCustomerList } from '@/api/sign/fna'
import useDictStore from '@/store/modules/dict'
const dictStore = useDictStore() //获取字典数据
const props = defineProps({
activeName: { type: String, default: '' }, //tab名称
fearthStatus: { type: String, default: '' }, //父组件状态,新增、修改
......@@ -279,6 +276,14 @@ const data = reactive({
}
})
const { form, rules, processedCustomerData, queryParams, oldCustomerData } = toRefs(data)
const resetCustomerList = () => {
queryParams.value = {
pageNo: 1,
pageSize: 4,
name: undefined
}
customerList()
}
const exportInfo = () => {
if (props.customerBizId && editStatus.value) {
......@@ -289,6 +294,8 @@ const exportInfo = () => {
customerList()
}
const customerList = () => {
console.log('触发了')
tableLoading.value = true
getCustomerList(queryParams.value).then(res => {
if (res.code == 200) {
......@@ -306,10 +313,15 @@ const handleExport = row => {
}
// 获取字典数据
const fetchDictData = async dictType => {
const fetchDictData = dictType => {
let options = []
try {
const resp = await getDicts(dictType)
return resp.data.map(p => ({ label: p.itemLabel, value: p.itemValue }))
dictStore.dictTypeLists.forEach(item => {
if (item.dictType == dictType) {
options = item.dictItemList
}
})
return options
} catch (error) {
console.error('获取字典数据失败:', error)
return []
......@@ -336,7 +348,7 @@ const processFormData = async () => {
for (const field of section.data) {
if (field.dictType) {
// 获取字典数据
field.options = await fetchDictData(field.dictType)
field.options = fetchDictData(field.dictType)
}
if (field.required) {
if (field.key === 'firstNamePinyin') {
......@@ -487,6 +499,8 @@ const handleSelectChange = child => {
// 改变编辑状态
const handleEditStatus = () => {
editStatus.value = !editStatus.value
console.log('触发了编辑状态', editStatus.value)
// 深拷贝原始数据
const processedData = JSON.parse(JSON.stringify(processedCustomerData.value))
for (const section of processedData) {
......@@ -730,12 +744,12 @@ const resetForm = () => {
.then(function () {
if (props.customerBizId) {
form.value = { ...oldObjInfo.value }
editStatus.value = true
} else {
resetShow('smokeQuantity', false)
proxy.$refs['customerRef'].resetFields()
}
processedCustomerData.value = JSON.parse(JSON.stringify(oldCustomerData.value))
console.log('processedCustomerData.value', processedCustomerData.value)
})
.catch(() => {})
......
......@@ -104,6 +104,8 @@
:activeName="activeName"
:fearthStatus="route.query.type"
:fnaFormBizId="processInfo.fnaFormBizId"
:customerBizId="processInfo.customerBizId"
:dictTypeLists="dictTypeLists"
@handleSuccess="handleSuccess"
/>
</div>
......@@ -119,12 +121,15 @@
</template>
<script setup name="FnaEdit">
import useUserStore from '@/store/modules/user'
import useDictStore from '@/store/modules/dict'
import { addFna, getProcessDetail, updateProcess } from '@/api/sign/fna'
import { listTenantUser } from '@/api/common'
import Customer from './components/customer'
import FanForm from './components/fanForm'
import { Check } from '@element-plus/icons-vue'
import { ref } from 'vue'
const userStore = useUserStore()
const dictStore = useDictStore()
const { proxy } = getCurrentInstance()
const route = useRoute()
const router = useRouter()
......@@ -136,6 +141,7 @@ const processInfo = ref({
customerName: userStore.name
}) // 流程详情信息
const updateStatus = ref(false)
const dictTypeLists = ref([])
const tabsList = ref([
{
label: '总览',
......@@ -180,6 +186,34 @@ const tabsList = ref([
])
const { csf_fna_status } = proxy.useDict('csf_fna_status')
// 获取各个流程所需要得字典数据
const getDictsData = async () => {
// 获取租户用户列表
const params = {
tenantBizId: userStore.projectInfo.tenantBizId,
pageNo: 1,
pageSize: 10
}
const response = await listTenantUser(params)
if (response.code == 200) {
dictStore.setTenantUserList(response.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'
])
}
// 更新流程
const processUpdate = (data, status) => {
updateProcess(data).then(res => {
......@@ -293,6 +327,23 @@ const handleSuccess = info => {
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 'newpolicy':
break
......@@ -302,6 +353,7 @@ const handleSuccess = info => {
break
}
}
getDictsData()
// handleDomData()
// 1.通过新建流程进来的,要请求创建/csf/api/Fna/add拿到头部dom等信息
//2.每次进来要请求根据id获取/csf/api/Fna/get/vo,根据流程BizId获取进行到哪一步了,还可以拿到头部dom等信息
......
......@@ -78,7 +78,8 @@
v-loading="loading"
:data="tenantList"
@selection-change="tableSelect"
:default-sort="{ prop: 'createTime', order: 'descending' }"
@sort-change="sortChange"
>
<el-table-column type="selection" width="55" />
<el-table-column label="流程编号" align="center" prop="fnaNo" width="200" />
......@@ -97,12 +98,12 @@
><span style="color: #43cf7c" class="iconfont icon-yiwancheng"></span> 已完成
</span>
<span v-if="scope.row.status == 'DRAFT'"
><span style="color: #86909C" class="iconfont icon-genjinjilu"></span> 草稿
><span style="color: #86909c" class="iconfont icon-genjinjilu"></span> 草稿
</span>
</template>
</el-table-column>
<!-- sortable 后端未做 -->
<el-table-column label="创建时间" align="center" prop="createTime">
<el-table-column label="创建时间" sortable align="center" prop="createTime">
<template #default="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
......@@ -116,13 +117,7 @@
<template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)">修改</el-button>
<!-- v-if="scope.row.status == 'COMPLETED'" -->
<el-button
v-if="scope.row.status == 'COMPLETED'"
link
type="primary"
@click="handleDelete(scope.row)"
>删除</el-button
>
<el-button link type="primary" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
......@@ -142,17 +137,6 @@
<script setup name="FnaList">
import Step from '@/views/components/moduleStep'
import useAppStore from '@/store/modules/app'
import {
changeUserStatus,
listTenant,
resetUserPwd,
delUser,
getTenant,
updateTenant,
addTenant,
changeTenantStatus
} from '@/api/system/tenant'
import { getFnaList, deleteFna } from '@/api/sign/fna'
import useUserStore from '@/store/modules/user'
......@@ -171,12 +155,9 @@ const { sys_status, csf_fna_status, sys_no_yes } = proxy.useDict(
)
const tenantList = ref([])
const open = ref(false)
const loading = ref(true)
const showSearch = ref(true)
const ids = ref([])
const single = ref(true)
const multiple = ref(true)
const total = ref(0)
const dateRange = ref([])
const selectIdsList = ref([])
......@@ -186,15 +167,27 @@ const data = reactive({
pageNo: 1,
pageSize: 8,
startTime: '',
endTime: ''
endTime: '',
sortField: '',
sortOrder: ''
}
})
const { queryParams, form, rules } = toRefs(data)
const sortChange = ({ prop, order }) => {
if (order == 'ascending') {
queryParams.value.sortOrder = 'ascend'
} else {
queryParams.value.sortOrder = 'descend'
}
if (prop) {
queryParams.value.sortField = prop
}
getList()
}
/** 多选框选中数据 */
function tableSelect(selection) {
selectIdsList.value = selection.map(item => item.projectBizId)
// selectIdsList.value = selection.map(item => item.projectBizId)
}
const goToAppointment = () => {
router.push({ path: '/sign/appointment' })
......@@ -252,20 +245,6 @@ function handleDelete(row) {
.catch(() => {})
}
/** 租户状态修改 */
function handleStatusChange(row, event) {
let text = row.status === 0 ? '停用' : '启用'
const tenantName = row.tenantName
proxy.$modal
.confirm(`确认要${text}"${tenantName}"租户吗?`)
.then(() => changeTenantStatus({ tenantBizId: row.tenantBizId, status: row.status }))
.then(() => proxy.$modal.msgSuccess(`${text}成功`))
.catch(() => {
// 操作取消时恢复原状态
row.status = row.status === 0 ? 1 : 0
})
}
/** 重置操作表单 */
function reset() {
form.value = {
......
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