Commit 4f4b0e06 by Sweet Zhang

出入账管理第一阶段完成

parent 5f1a210e
...@@ -97,4 +97,26 @@ export function updatePolicyFortuneStatus(data) { ...@@ -97,4 +97,26 @@ export function updatePolicyFortuneStatus(data) {
}) })
} }
// 完成出账
// /csf/api/fortune/complete
export function completePolicyFortune(data) {
return request({
url: '/csf/api/fortune/complete/fortuneAccount',
method: 'post',
data: data
})
}
// 获取对账公司
// /csf/api/reconciliation_company/list/page
export function getReconciliationCompanyList(data) {
return request({
url: '/csf/api/reconciliation_company/list/page',
method: 'post',
data: data
})
}
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
v-if="!disabled" v-if="!disabled"
> >
<!-- 上传按钮 --> <!-- 上传按钮 -->
<el-button size="small" type="primary">{{ uploadBtnText }}</el-button> <el-button size="default" type="primary" :disabled="isDisabled">{{ uploadBtnText }}</el-button>
<!-- 上传提示 --> <!-- 上传提示 -->
<div class="el-upload__tip" v-if="showTip"> <div class="el-upload__tip" v-if="showTip">
请上传 请上传
...@@ -102,7 +102,12 @@ export default { ...@@ -102,7 +102,12 @@ export default {
multiple:{ multiple:{
type: Boolean, type: Boolean,
default: true default: true
} },
// 禁用上传按钮
isDisabled: {
type: Boolean,
default: false
},
}, },
data() { data() {
return { return {
......
...@@ -64,15 +64,19 @@ ...@@ -64,15 +64,19 @@
<!-- 出账信息 --> <!-- 出账信息 -->
<el-tab-pane label="出账信息" name="expense"> <el-tab-pane label="出账信息" name="expense">
<el-descriptions :column="2" border> <el-table :data="policyFortuneList" border size="small">
<el-descriptions-item label="出账状态">{{ detailData.expenseStatus || '-' }}</el-descriptions-item> <el-table-column type="index" width="30" />
<el-descriptions-item label="出账金额">{{ numberWithCommas(detailData.expenseAmount || 0) }}</el-descriptions-item> <el-table-column prop="fortunePeriod" label="佣金期数" align="center" />
<el-descriptions-item label="出账日期">{{ detailData.expenseDate || '-' }}</el-descriptions-item> <el-table-column prop="fortuneTotalPeriod" label="总佣金期数" align="center" />
<el-descriptions-item label="出账银行">{{ detailData.expenseBank || '-' }}</el-descriptions-item> <el-table-column prop="broker" label="转介人" align="center" />
<el-descriptions-item label="出账账号">{{ detailData.expenseAccount || '-' }}</el-descriptions-item> <el-table-column prop="team" label="所属团队" align="center" />
<el-descriptions-item label="出账凭证号">{{ detailData.expenseVoucherNo || '-' }}</el-descriptions-item> <el-table-column prop="fortuneName" label="出账名称" align="center" />
<el-descriptions-item label="出账备注">{{ detailData.expenseRemark || '-' }}</el-descriptions-item> <el-table-column prop="amount" label="金额" align="center" />
</el-descriptions> <el-table-column prop="currency" label="币种" align="center" />
<el-table-column prop="payoutDate" label="出账日期" align="center" />
<el-table-column prop="fortuneStatusLabel" label="出账状态" align="center" />
<el-table-column prop="remark" label="备注" align="center" />
</el-table>
</el-tab-pane> </el-tab-pane>
<!-- 转介人信息 --> <!-- 转介人信息 -->
<el-tab-pane label="转介人信息" name="broker"> <el-tab-pane label="转介人信息" name="broker">
...@@ -85,7 +89,7 @@ ...@@ -85,7 +89,7 @@
</el-tab-pane> </el-tab-pane>
<!-- 其他信息 --> <!-- 其他信息 -->
<el-tab-pane label="其他信息" name="other"> <!-- <el-tab-pane label="其他信息" name="other">
<el-descriptions :column="2" border> <el-descriptions :column="2" border>
<el-descriptions-item label="创建时间">{{ detailData.createTime || '-' }}</el-descriptions-item> <el-descriptions-item label="创建时间">{{ detailData.createTime || '-' }}</el-descriptions-item>
<el-descriptions-item label="更新时间">{{ detailData.updateTime || '-' }}</el-descriptions-item> <el-descriptions-item label="更新时间">{{ detailData.updateTime || '-' }}</el-descriptions-item>
...@@ -93,7 +97,7 @@ ...@@ -93,7 +97,7 @@
<el-descriptions-item label="更新人">{{ detailData.updateBy || '-' }}</el-descriptions-item> <el-descriptions-item label="更新人">{{ detailData.updateBy || '-' }}</el-descriptions-item>
<el-descriptions-item label="备注信息" :span="2">{{ detailData.remark || '-' }}</el-descriptions-item> <el-descriptions-item label="备注信息" :span="2">{{ detailData.remark || '-' }}</el-descriptions-item>
</el-descriptions> </el-descriptions>
</el-tab-pane> </el-tab-pane> -->
</el-tabs> </el-tabs>
<template #footer> <template #footer>
...@@ -130,6 +134,10 @@ const props = defineProps({ ...@@ -130,6 +134,10 @@ const props = defineProps({
type: Array, type: Array,
default: () => [] default: () => []
}, },
policyFortuneList: {
type: Array,
default: () => []
},
}) })
// 定义emits // 定义emits
......
...@@ -14,22 +14,6 @@ ...@@ -14,22 +14,6 @@
</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">
<el-form-item label="对账公司">
<el-select
v-model="queryParams.company"
placeholder="请选择对账公司"
clearable
>
<el-option
v-for="item in companyOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="8" :lg="6">
<el-form-item label="出账日期"> <el-form-item label="出账日期">
<el-date-picker <el-date-picker
v-model="queryParams.billingDate" v-model="queryParams.billingDate"
...@@ -51,19 +35,27 @@ ...@@ -51,19 +35,27 @@
</el-form> </el-form>
</el-card> </el-card>
<!-- 操作区域 --> <!-- 数据表格 -->
<el-card class="operation-card"> <el-card>
<el-row :gutter="10"> <el-row :gutter="20">
<el-col :span="12"> <el-text class="mx-1" type="danger" style="margin-right: 20px;">勾选出账记录,点击“下载选中项”按钮,下载导入模版</el-text>
<!-- <el-button type="primary" @click="handleCreate">新建出账记录</el-button> --> </el-row>
<div class="button-row" style="display: flex;gap: 1rem;justify-content: end;">
<el-button
type="primary"
:disabled="selectedRows.length === 0"
@click="downloadSelected"
>
下载选中项
</el-button>
<FileUpload :fileType="['xlsx', 'xls']" <FileUpload :fileType="['xlsx', 'xls']"
:action="'/csf/api/fortune/upload/excel'" :action="'/csf/api/fortune/upload/excel'"
:uploadBtnText="'批量导入'" :uploadBtnText="'批量导入'"
@input = 'getUploadFileFunc' :isShowTip="false"
@uploadEnd = 'getUploadFileFunc'
:responseType="'onlyStatus'" :responseType="'onlyStatus'"
/> />
</el-col>
<el-col :span="12" style="text-align: right;">
<el-button <el-button
type="success" type="success"
:disabled="selectedRows.length === 0" :disabled="selectedRows.length === 0"
...@@ -71,23 +63,7 @@ ...@@ -71,23 +63,7 @@
> >
生成出账清单 生成出账清单
</el-button> </el-button>
</el-col> </div>
</el-row>
</el-card>
<!-- 数据表格 -->
<el-card>
<!-- 增加勾选后下载按钮 -->
<el-col :span="24" style="text-align: right;" v-if="selectedRows.length > 0">
<el-button
type="primary"
@click="downloadSelected"
>
下载选中项
</el-button>
</el-col>
<el-table <el-table
:data="tableData" :data="tableData"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
...@@ -109,7 +85,7 @@ ...@@ -109,7 +85,7 @@
<el-table-column prop="status" label="出账状态" width="100"> <el-table-column prop="status" label="出账状态" width="100">
<template #default="{ row }"> <template #default="{ row }">
<el-tag :type="getStatusType(row.status)"> <el-tag :type="getStatusType(row.status)">
{{ row.status }} {{ convertStatusToDict(row.status) }}
</el-tag> </el-tag>
</template> </template>
</el-table-column> </el-table-column>
...@@ -208,7 +184,6 @@ import { ref, reactive, onMounted } from 'vue' ...@@ -208,7 +184,6 @@ import { ref, reactive, onMounted } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
// 引入API // 引入API
import { getPolicyFortuneList, downloadPolicyFortune ,downloadPolicyFortuneAccount} from "@/api/financial/commission" import { getPolicyFortuneList, downloadPolicyFortune ,downloadPolicyFortuneAccount} from "@/api/financial/commission"
import { download } from '@/utils/request' // 直接导入下载函数
// 查询参数 // 查询参数
const queryParams = reactive({ const queryParams = reactive({
...@@ -242,12 +217,6 @@ const formData = reactive({ ...@@ -242,12 +217,6 @@ const formData = reactive({
remark: '' remark: ''
}) })
// 对账公司选项
const companyOptions = [
{ label: '公司A', value: 'company_a' },
{ label: '公司B', value: 'company_b' },
{ label: '公司C', value: 'company_c' }
]
// 下载选中项 // 下载选中项
const downloadSelected = async () => { const downloadSelected = async () => {
...@@ -455,15 +424,44 @@ const formatCurrency = (amount) => { ...@@ -455,15 +424,44 @@ const formatCurrency = (amount) => {
// 获取状态标签类型 // 获取状态标签类型
const getStatusType = (status) => { const getStatusType = (status) => {
const types = { const types = {
pending: 'warning', 0: 'warning',
completed: 'success', 1: 'success',
cancelled: 'danger' 2: 'info'
} }
return types[status] || 'info' return types[status] || 'info'
} }
import { listType } from '@/api/system/dict/type'
const dictLists = ref([])
// 获取出账状态字典值
const getDictLists = () => {
return new Promise((resolve, reject) => {
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 || [];
console.log('获取到的字典数据:', dictLists.value);
resolve(dictLists.value);
} else {
dictLists.value = [];
resolve([]);
}
}).catch(error => {
console.error('获取状态列表失败:', error);
dictLists.value = [];
reject(error);
});
});
}
// 返回数据中状态需要转换为字典值
const convertStatusToDict = (status) => {
const dictItem = dictLists.value.find(item => item.itemValue == status);
return dictItem?.itemLabel ?? status;
}
// 初始化 // 初始化
onMounted(() => { onMounted(() => {
getDictLists()
getList() getList()
}) })
</script> </script>
......
...@@ -268,12 +268,29 @@ const searchForm = reactive({ ...@@ -268,12 +268,29 @@ const searchForm = reactive({
incomeDateRange: [] incomeDateRange: []
}) })
// 对账公司选项(示例数据) // 对账公司选项
const companyOptions = ref([
{ label: '公司A', value: 'company_a' }, const companyOptions = ref([])
{ label: '公司B', value: 'company_b' }, // 获取对账公司列表
{ label: '公司C', value: 'company_c' } import { getReconciliationCompanyList } from '@/api/financial/commission'
]) const fetchReconciliationCompanyList = async () => {
try {
const response = await getReconciliationCompanyList({
pageNo: 1,
pageSize: 1000
})
if (response.code === 200) {
companyOptions.value = response.data.records.map(item => ({
label: item.companyName,
value: item.reconciliationCompanyBizId
}))
} else {
ElMessage.error(response.msg)
}
} catch (error) {
ElMessage.error('获取对账公司列表失败')
}
}
// 表格数据 // 表格数据
const tableData = ref([]) const tableData = ref([])
...@@ -299,6 +316,7 @@ onMounted(() => { ...@@ -299,6 +316,7 @@ onMounted(() => {
const initialData = async () => { const initialData = async () => {
await getLists(); await getLists();
fetchTableData(); fetchTableData();
fetchReconciliationCompanyList()
} }
......
...@@ -218,6 +218,14 @@ const referrerOptions = [ ...@@ -218,6 +218,14 @@ const referrerOptions = [
{ label: '赵六', value: 'zhaoliu' } { label: '赵六', value: 'zhaoliu' }
] ]
// 初始化
onMounted(() => {
getDictLists()
getList()
})
// 获取数据列表 // 获取数据列表
const getList = async () => { const getList = async () => {
loading.value = true loading.value = true
...@@ -232,7 +240,7 @@ const getList = async () => { ...@@ -232,7 +240,7 @@ const getList = async () => {
loading.value = false loading.value = false
} catch (error) { } catch (error) {
loading.value = false loading.value = false
ElMessage.error('获取数据失败') // ElMessage.error('获取数据失败')
} }
} }
...@@ -325,7 +333,7 @@ const completeBilling = async () => { ...@@ -325,7 +333,7 @@ const completeBilling = async () => {
const arr = selectedRows.value.map(item => item.fortuneAccountBizId) const arr = selectedRows.value.map(item => item.fortuneAccountBizId)
// 调用出账API // 调用出账API
await updateStatus(arr) await fetchCompletePolicyFortune(arr)
} catch (error) { } catch (error) {
...@@ -428,11 +436,26 @@ const updateStatus = async (row) => { ...@@ -428,11 +436,26 @@ const updateStatus = async (row) => {
} }
} }
// 初始化 // 完成出账
onMounted(() => { import { completePolicyFortune } from '@/api/financial/commission'
getDictLists() const fetchCompletePolicyFortune = async (row) => {
try {
const res = await completePolicyFortune({
fortuneBizIdList: row
});
console.log(res)
if (res.code === 200) {
// 显示完成弹窗
billingCompleteDialogVisible.value = true
getList() getList()
}) } else {
ElMessage.error(res.msg)
}
} catch (error) {
}
}
</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