Commit c5483caa by yuzhenWang

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

Test

See merge request !14
parents ab707eaa 3b2adcf6
{
"name": "ruoyi",
"name": "csf",
"version": "3.9.0",
"description": "CSF-CORE",
"author": "若依",
"author": "csf",
"license": "MIT",
"type": "module",
"scripts": {
......@@ -15,17 +15,17 @@
},
"repository": {
"type": "git",
"url": "https://gitee.com/y_project/RuoYi-Vue.git"
"url": ""
},
"dependencies": {
"@element-plus/icons-vue": "2.3.1",
"@element-plus/icons-vue": "^2.3.1",
"@vueup/vue-quill": "1.2.0",
"@vueuse/core": "13.3.0",
"axios": "1.9.0",
"clipboard": "2.0.11",
"dayjs": "^1.11.18",
"echarts": "5.6.0",
"element-plus": "2.9.9",
"element-plus": "^2.9.9",
"file-saver": "2.0.5",
"fuse.js": "6.6.2",
"js-beautify": "1.14.11",
......@@ -37,7 +37,8 @@
"vue": "3.5.16",
"vue-cropper": "1.1.1",
"vue-router": "4.5.1",
"vuedraggable": "4.1.0"
"vuedraggable": "4.1.0",
"xlsx": "^0.18.5"
},
"devDependencies": {
"@vitejs/plugin-vue": "5.2.4",
......
import request from '@/utils/request'
// 获取保单来佣列表
export function getPolicyCommissionList(data) {
return request({
url: '/csf/api/commission/list/page/vo',
method: 'post',
data: data
})
}
// 更新保单来佣信息
export function updatePolicyCommission(data) {
return request({
url: '/csf/api/commission/update',
method: 'post',
data: data
})
}
// 生成可出账记录
export function generateCommissionRecord(data) {
return request({
url: '/csf/api/commission/generate/fortune',
method: 'post',
data: data
})
}
// 更新保单发佣信息
export function updatePolicyFortune(data) {
return request({
url: '/csf/api/fortune/update',
method: 'post',
data: data
})
}
// 获取保单发佣列表
export function getPolicyFortuneList(data) {
return request({
url: '/csf/api/fortune/list/page/vo',
method: 'post',
data: data
})
}
// 下载选中的发佣数据
export function downloadPolicyFortune(data) {
return request({
url: '/csf/api/fortune/download/raw',
method: 'post',
data: data,
responseType: 'blob'
})
}
// 生成出账清单
// /csf/api/fortune/download/account
export function downloadPolicyFortuneAccount(data) {
return request({
url: '/csf/api/fortune/download/account',
method: 'post',
data: data,
responseType: 'blob'
})
}
// 按照人的维度,查询出账列表
export function getReferrerFortuneList(data) {
return request({
url: '/csf/api/fortune/list/page/fortuneAccount',
method: 'post',
data: data
})
}
// 删除来佣数据
// /csf/api/commission/delete
export function deletePolicyCommission(data) {
return request({
url: '/csf/api/commission/delete',
method: 'post',
data: data
})
}
// 更新出账状态
// /csf/api/fortune/update/status
export function updatePolicyFortuneStatus(data) {
return request({
url: '/csf/api/fortune/update/status',
method: 'post',
data: 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
})
}
// 删除出账
// /csf/api/fortune/delete
export function deletePolicyFortune(data) {
return request({
url: '/csf/api/fortune/delete/fortuneAccount',
method: 'post',
data: data
})
}
// 修改出账信息
// /csf/api/fortune/update/fortuneAccount
export function updatePolicyFortuneAccount(data) {
return request({
url: '/csf/api/fortune/update/fortuneAccount',
method: 'post',
data: data
})
}
// 新建出账
// /csf/api/fortune/add/fortuneAccount
export function addPolicyFortuneAccount(data) {
return request({
url: '/csf/api/fortune/add/fortuneAccount',
method: 'post',
data: data
})
}
// 删除发佣
// /csf/api/fortune/delete/fortuneAccount
export function deletePolicyFortuneAccount(data) {
return request({
url: '/csf/api/fortune/delete',
method: 'post',
data: data
})
}
// 新建来佣
// /csf/api/commission/add
export function addPolicyCommission(data) {
return request({
url: '/csf/api/commission/add',
method: 'post',
data: data
})
}
import request from '@/utils/request'
// 分页获取新单跟进列表
export function getPolicyFollowList(data) {
return request({
url: '/csf/api/policy_follow/list/page/vo',
method: 'post',
data: data
})
}
// 获取预计来佣列表
// /csf/api/commission/list/page/commission_expected
export function getExpectedCommissionList(data) {
return request({
url: '/csf/api/policy/list/page/commission_expected',
method: 'post',
data: data
})
}
// 更新至保单库
export function updateToPolicyLib(data) {
return request({
url: '/csf/api/policy_follow/addToPolicy',
method: 'post',
data: data
})
}
\ No newline at end of file
......@@ -3,9 +3,9 @@ import request from '@/utils/request'
// 查询字典类型列表
export function listType(query) {
return request({
url: '/system/dict/type/list',
method: 'get',
params: query
url: '/user/api/sysDict/type/list',
method: 'post',
data: query
})
}
......
<template>
<el-dialog
:model-value="visible"
:title="title"
width="80%"
top="5vh"
:close-on-click-modal="false"
class="detail-dialog"
@update:model-value="handleVisibleChange"
@close="handleClose"
>
<el-tabs v-model="activeTab" class="detail-tabs">
<!-- 保单信息 -->
<el-tab-pane label="保单信息" name="policy">
<el-descriptions :column="2" border>
<el-descriptions-item label="保单号">{{ detailData.policyNo || '-' }}</el-descriptions-item>
<el-descriptions-item label="客户名称">{{ detailData.customerName || '-' }}</el-descriptions-item>
<el-descriptions-item label="签单日期">{{ detailData.signDate || '-' }}</el-descriptions-item>
<el-descriptions-item label="签单人">{{ detailData.signer || '-' }}</el-descriptions-item>
<el-descriptions-item label="供款年期">{{ detailData.paymentTerm || '-' }}</el-descriptions-item>
<el-descriptions-item label="产品名称">{{ detailData.productName || '-' }}</el-descriptions-item>
<el-descriptions-item label="保险公司">{{ detailData.insurer || '-' }}</el-descriptions-item>
<el-descriptions-item label="对账公司">{{ detailData.reconciliationCompany || '-' }}</el-descriptions-item>
<el-descriptions-item label="保单持有人">{{ detailData.policyHolder || '-' }}</el-descriptions-item>
<el-descriptions-item label="受保人">{{ detailData.insured || '-' }}</el-descriptions-item>
<el-descriptions-item label="币种">{{ detailData.currency || '-' }}</el-descriptions-item>
<el-descriptions-item label="首期保费">{{ numberWithCommas(detailData.initialPremium || 0) }}</el-descriptions-item>
<el-descriptions-item label="新单状态">{{ convertStatusToDict(detailData.status) || '-' }}</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<!-- 入账信息 -->
<el-tab-pane label="入账信息" name="income">
<el-table :data="expectedCommissionList" border size="small">
<el-table-column type="index" width="30" />
<el-table-column prop="reconciliationCompany" label="对账公司" align="center" />
<el-table-column prop="commissionPeriod" label="佣金期数" align="center" />
<el-table-column prop="totalPeriod" label="总佣金期数" align="center" />
<el-table-column prop="commissionName" label="来佣名称" align="center" />
<!-- <el-table-column prop="commissionType" label="来佣类型" align="center" /> -->
<el-table-column prop="amount" label="来佣金额" align="center" />
<el-table-column prop="currency" label="币种" align="center" />
<el-table-column prop="commissionDate" label="来佣日期" align="center" />
<el-table-column prop="commissionStatusLabel" label="来佣状态" align="center" />
<el-table-column prop="remark" label="备注" align="center" />
<el-table-column prop="creatorId" label="创建人" align="center" />
<el-table-column prop="updaterId" label="更新人" align="center" />
<el-table-column prop="createTime" label="创建时间" align="center" />
<el-table-column prop="updateTime" label="更新时间" align="center" />
<!-- <template #append>
<div style="padding: 20px;display: flex;justify-content: end;">
<el-pagination
v-model:current-page="currentPage1"
:page-size="pageSize1"
background
layout="total, prev, pager, next"
:total="total1"
@current-change="handleCurrentChange('expectedCommissionList')"
/>
</div>
</template> -->
</el-table>
</el-tab-pane>
<!-- 出账信息 -->
<el-tab-pane label="出账信息" name="expense">
<el-table :data="policyFortuneList" border size="small">
<el-table-column type="index" width="30" />
<el-table-column prop="fortunePeriod" label="佣金期数" align="center" />
<el-table-column prop="fortuneTotalPeriod" label="总佣金期数" align="center" />
<el-table-column prop="broker" label="转介人" align="center" />
<el-table-column prop="team" label="所属团队" align="center" />
<el-table-column prop="fortuneName" label="出账名称" align="center" />
<el-table-column prop="amount" label="金额" align="center" />
<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 label="转介人信息" name="broker">
<el-table :data="detailData.brokerList" border size="small">
<el-table-column prop="brokerName" label="姓名" align="center" />
<el-table-column prop="team" label="团队" align="center" />
<el-table-column prop="brokerRatio" label="介绍费占比" align="center" />
<el-table-column prop="remark" label="备注" align="center" />
</el-table>
</el-tab-pane>
<!-- 其他信息 -->
<!-- <el-tab-pane label="其他信息" name="other">
<el-descriptions :column="2" border>
<el-descriptions-item label="创建时间">{{ detailData.createTime || '-' }}</el-descriptions-item>
<el-descriptions-item label="更新时间">{{ detailData.updateTime || '-' }}</el-descriptions-item>
<el-descriptions-item label="创建人">{{ detailData.createBy || '-' }}</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>
</el-tab-pane> -->
</el-tabs>
<template #footer>
<span class="dialog-footer">
<el-button @click="handleClose">关闭</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup>
import { ref, watch } from 'vue'
import { numberWithCommas } from '@/utils/index.js'
// 定义props
const props = defineProps({
visible: {
type: Boolean,
default: false
},
detailData: {
type: Object,
default: () => ({})
},
title: {
type: String,
default: '数据详情'
},
policyFollowStatusList: {
type: Array,
default: () => []
},
expectedCommissionList: {
type: Array,
default: () => []
},
policyFortuneList: {
type: Array,
default: () => []
},
})
// 定义emits
const emit = defineEmits(['update:visible', 'close', 'current-change'])
// 响应式数据
const activeTab = ref('policy')
const currentPage1 = ref(1)
const total1 = ref(1000)
const pageSize1 = ref(100)
// 监听visible变化
watch(() => props.visible, (newVal) => {
if (newVal) {
activeTab.value = 'policy'
}
})
// 处理visible变化
const handleVisibleChange = (value) => {
emit('update:visible', value)
}
// 状态转换函数
const convertStatusToDict = (status) => {
const dictItem = props.policyFollowStatusList.find(item => item.itemValue == status)
return dictItem?.itemLabel ?? status
}
// 关闭弹窗
const handleClose = () => {
emit('update:visible', false)
emit('close')
}
// 表格分页当前页改变
const handleCurrentChange = (val) => {
console.log(`当前页: ${val}`)
emit('current-change', val,currentPage1.value)
}
</script>
<style scoped>
.detail-dialog {
max-height: 80vh;
}
.detail-tabs {
max-height: 60vh;
overflow-y: auto;
}
.detail-tabs .el-tab-pane {
padding: 20px;
}
.broker-section {
margin-top: 20px;
}
.broker-section h4 {
margin-bottom: 15px;
color: #303133;
font-weight: 600;
}
/* 响应式调整详情弹窗 */
@media (max-width: 768px) {
.detail-dialog {
width: 95% !important;
}
.detail-tabs .el-descriptions {
font-size: 12px;
}
}
</style>
\ No newline at end of file
import dayjs from 'dayjs'
import { de } from 'element-plus/es/locales.mjs'
export function formatIsoToDateTime(isoStr) {
// 处理 null/undefined 情况,避免报错
......
......@@ -378,7 +378,7 @@ export const selectComponents = [
'color-format': '',
disabled: false,
required: true,
size: 'default',
size: '', // 将 'default' 改为 '' 或 'small'
regList: [],
changeTag: true,
document: 'https://element-plus.org/zh-CN/component/color-picker',
......@@ -449,4 +449,4 @@ export const trigger = {
'el-time-picker': 'change',
'el-date-picker': 'change',
'el-rate': 'change',
}
}
\ No newline at end of file
......@@ -387,4 +387,9 @@ export function camelCase(str) {
export function isNumberStr(str) {
return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str)
}
// 数字千分位格式化,保留2位小数
export function numberWithCommas(x, fixed = 2) {
return x.toFixed(fixed).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')
}
......@@ -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)
......
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