Commit 9763ea54 by Sweet Zhang

新增流程注释代码解开

parent 4b9c18bc
...@@ -394,26 +394,12 @@ const handleSelectionChange = (rows) => { ...@@ -394,26 +394,12 @@ const handleSelectionChange = (rows) => {
// 下载模板 // 下载模板
const downloadTemplate = () => { const downloadTemplate = () => {
const templateData = [ // 下载地址
{ const templateUrl = 'https://yd-ali-oss.oss-cn-shanghai-finance-1-pub.aliyuncs.com/xlsx/2025/10/14/54ce715eabab4f1abd8652ba0fca0c51.xlsx'
policyNo: '示例保单号', // 修改下载文件名
reconciliationCompany: '对账公司代码', const fileName = '对账单导入模板.xlsx'
currentPeriod: '1', // 下载文件
totalPeriods: '12', window.open(templateUrl, '_blank', `download=${fileName}-${new Date().getTime()}`)
incomeItem: '入账项目',
incomeAmount: '1000',
currency: 'CNY',
incomeDate: '2024-01-01',
remark: '备注信息'
}
]
const worksheet = XLSX.utils.json_to_sheet(templateData)
const workbook = XLSX.utils.book_new()
XLSX.utils.book_append_sheet(workbook, worksheet, '对账单模板')
XLSX.writeFile(workbook, '对账单导入模板.xlsx')
ElMessage.success('模板下载成功')
} }
......
...@@ -5,19 +5,12 @@ ...@@ -5,19 +5,12 @@
<el-form :model="queryParams" label-width="80px"> <el-form :model="queryParams" label-width="80px">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :xs="24" :sm="12" :md="8" :lg="6"> <el-col :xs="24" :sm="12" :md="8" :lg="6">
<el-form-item label="出账状态"> <el-form-item label="保单号">
<el-select <el-input
v-model="queryParams.status" v-model="queryParams.policyNo"
placeholder="请选择出账状态" placeholder="请输入保单号"
clearable clearable
>
<el-option
v-for="item in dictLists"
:key="item.itemValue"
:label="item.itemLabel"
:value="item.itemValue"
/> />
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="8" :lg="6"> <el-col :xs="24" :sm="12" :md="8" :lg="6">
...@@ -56,7 +49,7 @@ ...@@ -56,7 +49,7 @@
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="12"> <el-col :span="12">
<el-button type="primary" @click="handleCreate">新建薪资记录</el-button> <el-button type="primary" @click="handleCreate">新建薪资记录</el-button>
<!-- <el-button @click="handleImport">批量导入</el-button> --> <el-button @click="handleImport">批量导入</el-button>
</el-col> </el-col>
<el-col :span="12" style="text-align: right;"> <el-col :span="12" style="text-align: right;">
<el-button <el-button
...@@ -82,7 +75,7 @@ ...@@ -82,7 +75,7 @@
<el-table-column prop="team" label="所属团队" min-width="120" /> <el-table-column prop="team" label="所属团队" min-width="120" />
<el-table-column prop="amount" label="出账金额" width="120"> <el-table-column prop="amount" label="出账金额" width="120">
<template #default="{ row }"> <template #default="{ row }">
{{ formatCurrency(row.amount, row.currency) }} {{ formatCurrency(row.amount) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="currency" label="出账币种" width="100" /> <el-table-column prop="currency" label="出账币种" width="100" />
...@@ -115,32 +108,15 @@ ...@@ -115,32 +108,15 @@
/> />
</el-card> </el-card>
<!-- 出账完成弹窗 --> <!-- 新建薪资记录对话框 -->
<el-dialog
title="出账完成"
v-model="billingCompleteDialogVisible"
width="400px"
>
<div style="text-align: center;">
<el-icon size="48" color="#67C23A">
<SuccessFilled />
</el-icon>
<p style="margin-top: 16px; font-size: 16px;">出账操作已完成!</p>
</div>
<template #footer>
<!-- <el-button type="primary" @click="generateSalarySlips">生成薪资单</el-button> -->
<el-button @click="billingCompleteDialogVisible = false">关闭</el-button>
</template>
</el-dialog>
<!-- 薪资记录对话框(新建/编辑共用) -->
<el-dialog <el-dialog
:title="dialogTitle" title="新建薪资记录"
v-model="salaryDialogVisible" v-model="createDialogVisible"
width="500px" width="500px"
> >
<el-form :model="salaryFormData" :rules="salaryFormRules" ref="salaryFormRef" label-width="100px"> <el-form :model="createFormData" label-width="100px">
<el-form-item label="转介人" prop="broker" required> <el-form-item label="转介人" required>
<el-select v-model="salaryFormData.broker" placeholder="请选择转介人"> <el-select v-model="createFormData.referrer" placeholder="请选择转介人">
<el-option <el-option
v-for="item in referrerOptions" v-for="item in referrerOptions"
:key="item.value" :key="item.value"
...@@ -149,45 +125,23 @@ ...@@ -149,45 +125,23 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="出账金额" prop="amount" required> <el-form-item label="出账金额" required>
<el-input-number <el-input-number
v-model="salaryFormData.amount" v-model="createFormData.amount"
:min="0" :min="0"
:precision="2" :precision="2"
placeholder="请输入出账金额" placeholder="请输入出账金额"
/> />
</el-form-item> </el-form-item>
<el-form-item label="出账币种" prop="currency" required> <el-form-item label="出账项目" required>
<el-select v-model="salaryFormData.currency" placeholder="请选择出账币种"> <el-input
<el-option v-model="createFormData.billingItem"
v-for="item in currencyTypeOptions" placeholder="请输入出账项目"
:key="item.itemValue"
:label="item.itemLabel"
:value="item.itemValue"
/>
</el-select>
</el-form-item>
<el-form-item label="出账状态" prop="status" required>
<el-select v-model="salaryFormData.status" placeholder="请选择出账状态">
<el-option
v-for="item in dictLists"
:key="item.itemValue"
:label="item.itemLabel"
:value="item.itemValue"
/>
</el-select>
</el-form-item>
<el-form-item label="出账日期" prop="fortuneAccountDate" required>
<el-date-picker
v-model="salaryFormData.fortuneAccountDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择出账日期"
/> />
</el-form-item> </el-form-item>
<el-form-item label="备注"> <el-form-item label="备注">
<el-input <el-input
v-model="salaryFormData.remark" v-model="createFormData.remark"
type="textarea" type="textarea"
:rows="3" :rows="3"
placeholder="请输入备注信息" placeholder="请输入备注信息"
...@@ -195,8 +149,26 @@ ...@@ -195,8 +149,26 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
<el-button @click="salaryDialogVisible = false">取消</el-button> <el-button @click="createDialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitSalaryForm">确认</el-button> <el-button type="primary" @click="submitCreateForm">确认</el-button>
</template>
</el-dialog>
<!-- 出账完成弹窗 -->
<el-dialog
title="出账完成"
v-model="billingCompleteDialogVisible"
width="400px"
>
<div style="text-align: center;">
<el-icon size="48" color="#67C23A">
<SuccessFilled />
</el-icon>
<p style="margin-top: 16px; font-size: 16px;">出账操作已完成!</p>
</div>
<template #footer>
<!-- <el-button type="primary" @click="generateSalarySlips">生成薪资单</el-button> -->
<el-button @click="billingCompleteDialogVisible = false">关闭</el-button>
</template> </template>
</el-dialog> </el-dialog>
</div> </div>
...@@ -206,7 +178,7 @@ ...@@ -206,7 +178,7 @@
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 { SuccessFilled } from '@element-plus/icons-vue' import { SuccessFilled } from '@element-plus/icons-vue'
import { getReferrerFortuneList } from '@/api/financial/commission' import { getReferrerFortuneList,updatePolicyFortuneStatus } from '@/api/financial/commission'
// 查询参数 // 查询参数
const queryParams = reactive({ const queryParams = reactive({
...@@ -227,8 +199,16 @@ const loading = ref(false) ...@@ -227,8 +199,16 @@ const loading = ref(false)
const selectedRows = ref([]) const selectedRows = ref([])
// 对话框相关 // 对话框相关
const createDialogVisible = ref(false)
const billingCompleteDialogVisible = ref(false) const billingCompleteDialogVisible = ref(false)
// 新建表单数据
const createFormData = reactive({
referrer: '',
amount: 0,
billingItem: '',
remark: ''
})
// 转介人选项 // 转介人选项
const referrerOptions = [ const referrerOptions = [
...@@ -238,45 +218,6 @@ const referrerOptions = [ ...@@ -238,45 +218,6 @@ const referrerOptions = [
{ label: '赵六', value: 'zhaoliu' } { label: '赵六', value: 'zhaoliu' }
] ]
// 对话框相关
const salaryDialogVisible = ref(false)
const dialogTitle = ref('新建薪资记录')
const isEditMode = ref(false)
const currentEditId = ref('')
// 薪资表单数据
const salaryFormData = reactive({
broker: '',
amount: 0,
currency: 'HKD',
status: '',
fortuneAccountDate: '',
remark: ''
})
// 表单验证规则
const salaryFormRules = {
broker: [
{ required: true, message: '请选择转介人', trigger: 'change' }
],
amount: [
{ required: true, message: '请输入出账金额', trigger: 'blur' },
{ type: 'number', min: 0, message: '金额不能为负数', trigger: 'blur' }
],
currency: [
{ required: true, message: '请选择出账币种', trigger: 'change' }
],
status: [
{ required: true, message: '请选择出账状态', trigger: 'change' }
],
fortuneAccountDate: [
{ required: true, message: '请选择出账日期', trigger: 'change' }
]
}
// 表单引用
const salaryFormRef = ref()
// 初始化 // 初始化
onMounted(() => { onMounted(() => {
getDictLists() getDictLists()
...@@ -289,13 +230,11 @@ onMounted(() => { ...@@ -289,13 +230,11 @@ onMounted(() => {
const getList = async () => { const getList = async () => {
loading.value = true loading.value = true
try { try {
const params = { if (queryParams.accountDate.length > 0) {
...queryParams, queryParams.accountDateStart = queryParams.accountDate[0]
accountDate:undefined, queryParams.accountDateEnd = queryParams.accountDate[1]
accountDateStart: queryParams.accountDate.length > 0 ? queryParams.accountDate[0] + ' 00:00:00' : undefined,
accountDateEnd: queryParams.accountDate.length > 0 ? queryParams.accountDate[1] + ' 23:59:59' : undefined,
} }
const response = await getReferrerFortuneList(params) const response = await getReferrerFortuneList(queryParams)
tableData.value = response.data.records tableData.value = response.data.records
total.value = response.data.total total.value = response.data.total
loading.value = false loading.value = false
...@@ -339,30 +278,54 @@ const handleSelectionChange = (selection) => { ...@@ -339,30 +278,54 @@ const handleSelectionChange = (selection) => {
selectedRows.value = selection selectedRows.value = selection
} }
import { deletePolicyFortune } from '@/api/financial/commission' // 新建薪资记录
const handleCreate = () => {
Object.assign(createFormData, {
referrer: '',
amount: 0,
billingItem: '',
remark: ''
})
createDialogVisible.value = true
}
// 编辑薪资记录
const handleEdit = (row) => {
// 这里可以打开编辑对话框
ElMessage.info(`编辑转介人:${row.referrer}`)
}
import { deletePolicyFortune, addPolicyFortuneAccount } from '@/api/financial/commission'
const deletePolicyFortuneO = async (fortuneAccountBizId) => {
try {
await deletePolicyFortune({ fortuneAccountBizId })
} catch (error) {
ElMessage.error('删除出账失败')
}
}
// 删除薪资记录 // 删除薪资记录
const handleDelete = async (row) => { const handleDelete = async (row) => {
try{ try {
await ElMessageBox.confirm('确认删除这条薪资记录吗?', '提示', { await ElMessageBox.confirm('确认删除这条薪资记录吗?', '提示', {
type: 'warning' type: 'warning'
}).then(async () => { })
const res = await deletePolicyFortune({ fortuneAccountBizId: row.fortuneAccountBizId}) await deletePolicyFortuneO(row.fortuneAccountBizId)
if (res.code === 200) {
ElMessage.success('删除成功') ElMessage.success('删除成功')
getList() getList()
} } catch (error) {
else {
ElMessage.error(res.msg)
}
})
}
catch (error) {
if (error !== 'cancel') { if (error !== 'cancel') {
ElMessage.error('删除失败') ElMessage.error('删除失败')
} }
} }
} }
// 批量导入
const handleImport = () => {
ElMessage.info('批量导入功能待实现')
}
// 完成出账 // 完成出账
const completeBilling = async () => { const completeBilling = async () => {
if (selectedRows.value.length === 0) { if (selectedRows.value.length === 0) {
...@@ -390,84 +353,68 @@ const completeBilling = async () => { ...@@ -390,84 +353,68 @@ const completeBilling = async () => {
} }
} }
// 生成薪资单(单条)
const generateSalarySlip = (row) => {
// 调用生成薪资单API
// await api.generateSalarySlip(row.id)
ElMessage.success(`已为 ${row.referrer} 生成薪资单`)
}
// 格式化金额 // 生成薪资单(批量)
const formatCurrency = (amount, currency = '') => { const generateSalarySlips = () => {
const currencyConfig = { // 调用批量生成薪资单API
'CNY': { // await api.generateSalarySlips(selectedRows.value.map(item => item.id))
currency: 'CNY', ElMessage.success(`已为 ${selectedRows.value.length} 条记录生成薪资单`)
locale: 'zh-CN', billingCompleteDialogVisible.value = false
symbol: '¥' selectedRows.value = []
}, }
'HKD': {
currency: 'HKD', // 提交新建表单
locale: 'zh-HK', const submitCreateForm = async () => {
symbol: 'HK$' try {
}, // 表单验证
'USD': { if (!createFormData.referrer || !createFormData.amount || !createFormData.billingItem) {
currency: 'USD', ElMessage.warning('请填写必填字段')
locale: 'en-US', return
symbol: '$'
},
'EUR': {
currency: 'EUR',
locale: 'de-DE',
symbol: '€'
},
'JPY': {
currency: 'JPY',
locale: 'ja-JP',
symbol: '¥'
},
'GBP': {
currency: 'GBP',
locale: 'en-GB',
symbol: '£'
},
'': {
currency: '',
locale: '',
symbol: ''
}
} }
const config = currencyConfig[currency] || currencyConfig[''] // 调用保存API
// await api.createSalary(createFormData)
try { ElMessage.success('新建成功')
return new Intl.NumberFormat(config.locale, { createDialogVisible.value = false
style: 'currency', getList()
currency: config.currency,
minimumFractionDigits: 2,
maximumFractionDigits: 2
}).format(amount)
} catch (error) { } catch (error) {
// 如果Intl格式化失败,使用简单格式 ElMessage.error('新建失败')
return `${config.symbol}${amount.toFixed(2)}`
} }
} }
// 格式化金额
const formatCurrency = (amount) => {
return new Intl.NumberFormat('zh-CN', {
style: 'currency',
currency: 'CNY'
}).format(amount)
}
import { listType } from '@/api/system/dict/type' import { listType } from '@/api/system/dict/type'
const dictLists = ref([]) const dictLists = ref([])
const currencyTypeOptions = ref([])
// 获取出账状态字典值 // 获取出账状态字典值
const getDictLists = () => { const getDictLists = () => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
listType({typeList: ['csf_fortune_status','bx_currency_type']}).then(res => { listType({typeList: ['csf_fortune_status']}).then(res => {
if (res.code === 200 && res.data) { if (res.code === 200 && res.data) {
const dictData = res.data.find(item => item.dictType === 'csf_fortune_status'); const dictData = res.data.find(item => item.dictType === 'csf_fortune_status');
dictLists.value = dictData?.dictItemList || []; dictLists.value = dictData?.dictItemList || [];
currencyTypeOptions.value = res.data.find(item => item.dictType === 'bx_currency_type')?.dictItemList || []; console.log('获取到的字典数据:', dictLists.value);
console.log('获取到的币种字典数据:', currencyTypeOptions.value); resolve(dictLists.value);
resolve(dictLists.value,currencyTypeOptions.value);
} else { } else {
currencyTypeOptions.value = [];
dictLists.value = []; dictLists.value = [];
resolve([],[]); resolve([]);
} }
}).catch(error => { }).catch(error => {
console.error('获取状态列表失败:', error); console.error('获取状态列表失败:', error);
dictLists.value = []; dictLists.value = [];
currencyTypeOptions.value = [];
reject(error); reject(error);
}); });
}); });
...@@ -479,12 +426,12 @@ const convertStatusToDict = (status) => { ...@@ -479,12 +426,12 @@ const convertStatusToDict = (status) => {
return dictItem?.itemLabel ?? status; return dictItem?.itemLabel ?? status;
} }
// 完成出账 // 更新出账状态
import { completePolicyFortune } from '@/api/financial/commission' const updateStatus = async (row) => {
const fetchCompletePolicyFortune = async (row) => {
try { try {
const res = await completePolicyFortune({ const res = await updatePolicyFortuneStatus({
fortuneAccountBizIdList: row fortuneBizIdList: row,
status: 2
}); });
console.log(res) console.log(res)
if (res.code === 200) { if (res.code === 200) {
...@@ -499,109 +446,48 @@ const fetchCompletePolicyFortune = async (row) => { ...@@ -499,109 +446,48 @@ const fetchCompletePolicyFortune = async (row) => {
} }
} }
// 完成出账
import { completePolicyFortune } from '@/api/financial/commission'
// 新建薪资记录 const fetchCompletePolicyFortune = async (row) => {
const handleCreate = () => { try {
dialogTitle.value = '新建薪资记录' const res = await completePolicyFortune({
isEditMode.value = false fortuneAccountBizIdList: row
currentEditId.value = '' });
console.log(res)
// 重置表单数据 if (res.code === 200) {
Object.assign(salaryFormData, { // 显示完成弹窗
broker: '', billingCompleteDialogVisible.value = true
amount: 0, getList()
currency: 'HKD', } else {
fortuneAccountDate: '', ElMessage.error(res.msg)
remark: ''
})
// 重置表单验证
if (salaryFormRef.value) {
salaryFormRef.value.clearValidate()
} }
salaryDialogVisible.value = true } catch (error) {
}
// 编辑薪资记录
const handleEdit = (row) => {
dialogTitle.value = '编辑薪资记录'
isEditMode.value = true
currentEditId.value = row.fortuneAccountBizId || ''
// 填充表单数据
Object.assign(salaryFormData, {
broker: row.broker || row.broker,
amount: row.amount || 0,
currency: row.currency || 'HKD',
fortuneAccountDate: row.fortuneAccountDate || '',
remark: row.remark || '',
status: row.status || ''
})
// 重置表单验证
if (salaryFormRef.value) {
salaryFormRef.value.clearValidate()
} }
salaryDialogVisible.value = true
} }
import { addPolicyFortuneAccount } from '@/api/financial/commission'
// 提交薪资表单(新建/编辑共用)
const submitSalaryForm = async () => {
// 删除出账
import { deletePolicyFortune } from '@/api/financial/commission'
// 删除出账
const deleteFortune = async (row) => {
try { try {
// 表单验证 const res = await deletePolicyFortune({
const valid = await salaryFormRef.value.validate() fortuneAccountBizId: row
if (!valid) { });
ElMessage.warning('请完善表单信息') console.log(res)
return
}
// 准备提交数据
const submitData = {
broker: salaryFormData.broker,
amount: salaryFormData.amount,
remark: salaryFormData.remark,
currency: salaryFormData.currency,
status: salaryFormData.status,
fortuneAccountDate: salaryFormData.fortuneAccountDate
}
if (isEditMode.value && currentEditId.value) {
// 编辑模式
submitData.fortuneAccountBizId = currentEditId.value
// 调用编辑API
const res = await addPolicyFortuneAccount(submitData)
if (res.code === 200) {
ElMessage.success('编辑成功')
} else {
ElMessage.error(res.msg)
}
} else {
// 新建模式
const res = await addPolicyFortuneAccount(submitData)
if (res.code === 200) { if (res.code === 200) {
ElMessage.success('新建成功') // 显示完成弹窗
billingCompleteDialogVisible.value = true
} else { } else {
ElMessage.error(res.msg) ElMessage.error(res.msg)
} }
}
salaryDialogVisible.value = false
getList()
} catch (error) { } catch (error) {
if (error.errors) {
// 表单验证失败
ElMessage.warning('请完善表单信息')
} else {
ElMessage.error(isEditMode.value ? '编辑失败' : '新建失败')
}
} }
} }
</script> </script>
<style scoped> <style scoped>
......
...@@ -375,7 +375,7 @@ const handleBack = () => { ...@@ -375,7 +375,7 @@ const handleBack = () => {
if (route.query.type == 'add') { if (route.query.type == 'add') {
console.log('add router', router) console.log('add router', router)
// getAddInfo() getAddInfo()
} else if (route.query.type == 'edit') { } else if (route.query.type == 'edit') {
setTimeout(() => { setTimeout(() => {
getProcessInfo(route.query.fnaBizId) getProcessInfo(route.query.fnaBizId)
......
...@@ -556,6 +556,11 @@ const handleImport = async () => { ...@@ -556,6 +556,11 @@ const handleImport = async () => {
// 下载模板 // 下载模板
const downloadTemplate = () => { const downloadTemplate = () => {
// 下载地址 // 下载地址
const templateUrl = 'https://yd-ali-oss.oss-cn-shanghai-finance-1-pub.aliyuncs.com/xlsx/2025/10/14/54ce715eabab4f1abd8652ba0fca0c51.xlsx'
// 修改下载文件名
const fileName = '保单导入模板.xlsx'
// 下载文件
window.open(templateUrl, '_blank', `download=${fileName}-${new Date().getTime()}`)
} }
......
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