Commit 9763ea54 by Sweet Zhang

新增流程注释代码解开

parent 4b9c18bc
......@@ -394,26 +394,12 @@ const handleSelectionChange = (rows) => {
// 下载模板
const downloadTemplate = () => {
const templateData = [
{
policyNo: '示例保单号',
reconciliationCompany: '对账公司代码',
currentPeriod: '1',
totalPeriods: '12',
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('模板下载成功')
// 下载地址
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()}`)
}
......
......@@ -5,19 +5,12 @@
<el-form :model="queryParams" label-width="80px">
<el-row :gutter="20">
<el-col :xs="24" :sm="12" :md="8" :lg="6">
<el-form-item label="出账状态">
<el-select
v-model="queryParams.status"
placeholder="请选择出账状态"
<el-form-item label="保单号">
<el-input
v-model="queryParams.policyNo"
placeholder="请输入保单号"
clearable
>
<el-option
v-for="item in dictLists"
:key="item.itemValue"
:label="item.itemLabel"
:value="item.itemValue"
/>
</el-select>
/>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="8" :lg="6">
......@@ -56,7 +49,7 @@
<el-row :gutter="10">
<el-col :span="12">
<el-button type="primary" @click="handleCreate">新建薪资记录</el-button>
<!-- <el-button @click="handleImport">批量导入</el-button> -->
<el-button @click="handleImport">批量导入</el-button>
</el-col>
<el-col :span="12" style="text-align: right;">
<el-button
......@@ -82,7 +75,7 @@
<el-table-column prop="team" label="所属团队" min-width="120" />
<el-table-column prop="amount" label="出账金额" width="120">
<template #default="{ row }">
{{ formatCurrency(row.amount, row.currency) }}
{{ formatCurrency(row.amount) }}
</template>
</el-table-column>
<el-table-column prop="currency" label="出账币种" width="100" />
......@@ -115,32 +108,15 @@
/>
</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
:title="dialogTitle"
v-model="salaryDialogVisible"
title="新建薪资记录"
v-model="createDialogVisible"
width="500px"
>
<el-form :model="salaryFormData" :rules="salaryFormRules" ref="salaryFormRef" label-width="100px">
<el-form-item label="转介人" prop="broker" required>
<el-select v-model="salaryFormData.broker" placeholder="请选择转介人">
<el-form :model="createFormData" label-width="100px">
<el-form-item label="转介人" required>
<el-select v-model="createFormData.referrer" placeholder="请选择转介人">
<el-option
v-for="item in referrerOptions"
:key="item.value"
......@@ -149,45 +125,23 @@
/>
</el-select>
</el-form-item>
<el-form-item label="出账金额" prop="amount" required>
<el-form-item label="出账金额" required>
<el-input-number
v-model="salaryFormData.amount"
v-model="createFormData.amount"
:min="0"
:precision="2"
placeholder="请输入出账金额"
/>
</el-form-item>
<el-form-item label="出账币种" prop="currency" required>
<el-select v-model="salaryFormData.currency" placeholder="请选择出账币种">
<el-option
v-for="item in currencyTypeOptions"
: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 label="出账项目" required>
<el-input
v-model="createFormData.billingItem"
placeholder="请输入出账项目"
/>
</el-form-item>
<el-form-item label="备注">
<el-input
v-model="salaryFormData.remark"
v-model="createFormData.remark"
type="textarea"
:rows="3"
placeholder="请输入备注信息"
......@@ -195,8 +149,26 @@
</el-form-item>
</el-form>
<template #footer>
<el-button @click="salaryDialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitSalaryForm">确认</el-button>
<el-button @click="createDialogVisible = false">取消</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>
</el-dialog>
</div>
......@@ -206,7 +178,7 @@
import { ref, reactive, onMounted } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { SuccessFilled } from '@element-plus/icons-vue'
import { getReferrerFortuneList } from '@/api/financial/commission'
import { getReferrerFortuneList,updatePolicyFortuneStatus } from '@/api/financial/commission'
// 查询参数
const queryParams = reactive({
......@@ -227,8 +199,16 @@ const loading = ref(false)
const selectedRows = ref([])
// 对话框相关
const createDialogVisible = ref(false)
const billingCompleteDialogVisible = ref(false)
// 新建表单数据
const createFormData = reactive({
referrer: '',
amount: 0,
billingItem: '',
remark: ''
})
// 转介人选项
const referrerOptions = [
......@@ -238,45 +218,6 @@ const referrerOptions = [
{ 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(() => {
getDictLists()
......@@ -289,13 +230,11 @@ onMounted(() => {
const getList = async () => {
loading.value = true
try {
const params = {
...queryParams,
accountDate:undefined,
accountDateStart: queryParams.accountDate.length > 0 ? queryParams.accountDate[0] + ' 00:00:00' : undefined,
accountDateEnd: queryParams.accountDate.length > 0 ? queryParams.accountDate[1] + ' 23:59:59' : undefined,
if (queryParams.accountDate.length > 0) {
queryParams.accountDateStart = queryParams.accountDate[0]
queryParams.accountDateEnd = queryParams.accountDate[1]
}
const response = await getReferrerFortuneList(params)
const response = await getReferrerFortuneList(queryParams)
tableData.value = response.data.records
total.value = response.data.total
loading.value = false
......@@ -339,30 +278,54 @@ const handleSelectionChange = (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) => {
try{
try {
await ElMessageBox.confirm('确认删除这条薪资记录吗?', '提示', {
type: 'warning'
}).then(async () => {
const res = await deletePolicyFortune({ fortuneAccountBizId: row.fortuneAccountBizId})
if (res.code === 200) {
ElMessage.success('删除成功')
getList()
}
else {
ElMessage.error(res.msg)
}
})
}
catch (error) {
await deletePolicyFortuneO(row.fortuneAccountBizId)
ElMessage.success('删除成功')
getList()
} catch (error) {
if (error !== 'cancel') {
ElMessage.error('删除失败')
}
}
}
// 批量导入
const handleImport = () => {
ElMessage.info('批量导入功能待实现')
}
// 完成出账
const completeBilling = async () => {
if (selectedRows.value.length === 0) {
......@@ -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 currencyConfig = {
'CNY': {
currency: 'CNY',
locale: 'zh-CN',
symbol: '¥'
},
'HKD': {
currency: 'HKD',
locale: 'zh-HK',
symbol: 'HK$'
},
'USD': {
currency: 'USD',
locale: 'en-US',
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['']
// 生成薪资单(批量)
const generateSalarySlips = () => {
// 调用批量生成薪资单API
// await api.generateSalarySlips(selectedRows.value.map(item => item.id))
ElMessage.success(`已为 ${selectedRows.value.length} 条记录生成薪资单`)
billingCompleteDialogVisible.value = false
selectedRows.value = []
}
// 提交新建表单
const submitCreateForm = async () => {
try {
return new Intl.NumberFormat(config.locale, {
style: 'currency',
currency: config.currency,
minimumFractionDigits: 2,
maximumFractionDigits: 2
}).format(amount)
// 表单验证
if (!createFormData.referrer || !createFormData.amount || !createFormData.billingItem) {
ElMessage.warning('请填写必填字段')
return
}
// 调用保存API
// await api.createSalary(createFormData)
ElMessage.success('新建成功')
createDialogVisible.value = false
getList()
} catch (error) {
// 如果Intl格式化失败,使用简单格式
return `${config.symbol}${amount.toFixed(2)}`
ElMessage.error('新建失败')
}
}
// 格式化金额
const formatCurrency = (amount) => {
return new Intl.NumberFormat('zh-CN', {
style: 'currency',
currency: 'CNY'
}).format(amount)
}
import { listType } from '@/api/system/dict/type'
const dictLists = ref([])
const currencyTypeOptions = ref([])
// 获取出账状态字典值
const getDictLists = () => {
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) {
const dictData = res.data.find(item => item.dictType === 'csf_fortune_status');
dictLists.value = dictData?.dictItemList || [];
currencyTypeOptions.value = res.data.find(item => item.dictType === 'bx_currency_type')?.dictItemList || [];
console.log('获取到的币种字典数据:', currencyTypeOptions.value);
resolve(dictLists.value,currencyTypeOptions.value);
console.log('获取到的字典数据:', dictLists.value);
resolve(dictLists.value);
} else {
currencyTypeOptions.value = [];
dictLists.value = [];
resolve([],[]);
resolve([]);
}
}).catch(error => {
console.error('获取状态列表失败:', error);
dictLists.value = [];
currencyTypeOptions.value = [];
reject(error);
});
});
......@@ -479,6 +426,26 @@ const convertStatusToDict = (status) => {
return dictItem?.itemLabel ?? status;
}
// 更新出账状态
const updateStatus = async (row) => {
try {
const res = await updatePolicyFortuneStatus({
fortuneBizIdList: row,
status: 2
});
console.log(res)
if (res.code === 200) {
// 显示完成弹窗
billingCompleteDialogVisible.value = true
getList()
} else {
ElMessage.error(res.msg)
}
} catch (error) {
}
}
// 完成出账
import { completePolicyFortune } from '@/api/financial/commission'
const fetchCompletePolicyFortune = async (row) => {
......@@ -499,109 +466,28 @@ const fetchCompletePolicyFortune = async (row) => {
}
}
// 新建薪资记录
const handleCreate = () => {
dialogTitle.value = '新建薪资记录'
isEditMode.value = false
currentEditId.value = ''
// 重置表单数据
Object.assign(salaryFormData, {
broker: '',
amount: 0,
currency: 'HKD',
fortuneAccountDate: '',
remark: ''
})
// 重置表单验证
if (salaryFormRef.value) {
salaryFormRef.value.clearValidate()
}
salaryDialogVisible.value = true
}
// 编辑薪资记录
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 () => {
try {
// 表单验证
const valid = await salaryFormRef.value.validate()
if (!valid) {
ElMessage.warning('请完善表单信息')
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)
}
// 删除出账
import { deletePolicyFortune } from '@/api/financial/commission'
// 删除出账
const deleteFortune = async (row) => {
try {
const res = await deletePolicyFortune({
fortuneAccountBizId: row
});
console.log(res)
if (res.code === 200) {
// 显示完成弹窗
billingCompleteDialogVisible.value = true
} else {
// 新建模式
const res = await addPolicyFortuneAccount(submitData)
if (res.code === 200) {
ElMessage.success('新建成功')
} else {
ElMessage.error(res.msg)
}
ElMessage.error(res.msg)
}
salaryDialogVisible.value = false
getList()
} catch (error) {
if (error.errors) {
// 表单验证失败
ElMessage.warning('请完善表单信息')
} else {
ElMessage.error(isEditMode.value ? '编辑失败' : '新建失败')
} catch (error) {
}
}
}
</script>
<style scoped>
......
......@@ -375,7 +375,7 @@ const handleBack = () => {
if (route.query.type == 'add') {
console.log('add router', router)
// getAddInfo()
getAddInfo()
} else if (route.query.type == 'edit') {
setTimeout(() => {
getProcessInfo(route.query.fnaBizId)
......
......@@ -556,6 +556,11 @@ const handleImport = async () => {
// 下载模板
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