crm 收款

pull/853/head
wersd 2025-06-07 16:49:18 +08:00
parent c9d68e6a1c
commit 584d6978ae
18 changed files with 127 additions and 106 deletions

View File

@ -4,7 +4,7 @@ NODE_ENV=production
VITE_DEV=true VITE_DEV=true
# 请求路径 # 请求路径
VITE_BASE_URL='http://192.168.6.136:48080' VITE_BASE_URL='http://192.168.6.122:48080'
# 文件上传类型server - 后端上传, client - 前端直连上传仅支持S3服务 # 文件上传类型server - 后端上传, client - 前端直连上传仅支持S3服务
VITE_UPLOAD_TYPE=client VITE_UPLOAD_TYPE=client

View File

@ -7,6 +7,7 @@
"scripts": { "scripts": {
"i": "pnpm install", "i": "pnpm install",
"dev": "vite --mode env.local", "dev": "vite --mode env.local",
"test": "vite --mode env.test",
"dev-server": "vite --mode dev", "dev-server": "vite --mode dev",
"ts:check": "vue-tsc --noEmit", "ts:check": "vue-tsc --noEmit",
"build:local": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build", "build:local": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build",

View File

@ -49,17 +49,6 @@
</el-link> </el-link>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="center" label="商机名称" prop="businessName" width="130">
<template #default="scope">
<el-link
:underline="false"
type="primary"
@click="openBusinessDetail(scope.row.businessId)"
>
{{ scope.row.businessName }}
</el-link>
</template>
</el-table-column>
<el-table-column <el-table-column
align="center" align="center"
label="合同金额(元)" label="合同金额(元)"
@ -103,14 +92,14 @@
<el-table-column align="center" label="备注" prop="remark" width="200" /> <el-table-column align="center" label="备注" prop="remark" width="200" />
<el-table-column <el-table-column
align="center" align="center"
label="已款金额(元)" label="已款金额(元)"
prop="totalReceivablePrice" prop="totalReceivablePrice"
width="140" width="140"
:formatter="erpPriceTableColumnFormatter" :formatter="erpPriceTableColumnFormatter"
/> />
<el-table-column <el-table-column
align="center" align="center"
label="未款金额(元)" label="未款金额(元)"
prop="totalReceivablePrice" prop="totalReceivablePrice"
width="140" width="140"
:formatter="erpPriceTableColumnFormatter" :formatter="erpPriceTableColumnFormatter"

View File

@ -1,7 +1,7 @@
<!-- 待审核--> <!-- 待审核-->
<template> <template>
<ContentWrap> <ContentWrap>
<div class="pb-5 text-xl"> 待审核</div> <div class="pb-5 text-xl"> 待审核</div>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form <el-form
class="-mb-15px" class="-mb-15px"
@ -30,7 +30,7 @@
<!-- 列表 --> <!-- 列表 -->
<ContentWrap> <ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column align="center" fixed="left" label="款编号" prop="no" width="180"> <el-table-column align="center" fixed="left" label="款编号" prop="no" width="180">
<template #default="scope"> <template #default="scope">
<el-link :underline="false" type="primary" @click="openDetail(scope.row.id)"> <el-link :underline="false" type="primary" @click="openDetail(scope.row.id)">
{{ scope.row.no }} {{ scope.row.no }}
@ -62,18 +62,18 @@
<el-table-column <el-table-column
:formatter="dateFormatter2" :formatter="dateFormatter2"
align="center" align="center"
label="款日期" label="款日期"
prop="returnTime" prop="returnTime"
width="150px" width="150px"
/> />
<el-table-column <el-table-column
align="center" align="center"
label="款金额(元)" label="款金额(元)"
prop="price" prop="price"
width="140" width="140"
:formatter="erpPriceTableColumnFormatter" :formatter="erpPriceTableColumnFormatter"
/> />
<el-table-column align="center" label="款方式" prop="returnType" width="130px"> <el-table-column align="center" label="款方式" prop="returnType" width="130px">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE" :value="scope.row.returnType" /> <dict-tag :type="DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE" :value="scope.row.returnType" />
</template> </template>
@ -103,7 +103,7 @@
width="180px" width="180px"
/> />
<el-table-column align="center" label="创建人" prop="creatorName" width="120" /> <el-table-column align="center" label="创建人" prop="creatorName" width="120" />
<el-table-column align="center" fixed="right" label="款状态" prop="auditStatus" width="120"> <el-table-column align="center" fixed="right" label="款状态" prop="auditStatus" width="120">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.CRM_AUDIT_STATUS" :value="scope.row.auditStatus" /> <dict-tag :type="DICT_TYPE.CRM_AUDIT_STATUS" :value="scope.row.auditStatus" />
</template> </template>
@ -173,7 +173,7 @@ const handleProcessDetail = (row: ReceivableApi.ReceivableVO) => {
push({ name: 'BpmProcessInstanceDetail', query: { id: row.processInstanceId } }) push({ name: 'BpmProcessInstanceDetail', query: { id: row.processInstanceId } })
} }
/** 打开款详情 */ /** 打开款详情 */
const { push } = useRouter() const { push } = useRouter()
const openDetail = (id: number) => { const openDetail = (id: number) => {
push({ name: 'CrmReceivableDetail', params: { id } }) push({ name: 'CrmReceivableDetail', params: { id } })

View File

@ -1,7 +1,7 @@
<!-- 款提醒 --> <!-- 款提醒 -->
<template> <template>
<ContentWrap> <ContentWrap>
<div class="pb-5 text-xl">款提醒</div> <div class="pb-5 text-xl">款提醒</div>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form <el-form
ref="queryFormRef" ref="queryFormRef"
@ -51,7 +51,7 @@
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
label="计划款金额(元)" label="计划款金额(元)"
prop="price" prop="price"
width="160" width="160"
:formatter="erpPriceTableColumnFormatter" :formatter="erpPriceTableColumnFormatter"
@ -59,7 +59,7 @@
<el-table-column <el-table-column
:formatter="dateFormatter2" :formatter="dateFormatter2"
align="center" align="center"
label="计划款日期" label="计划款日期"
prop="returnTime" prop="returnTime"
width="180px" width="180px"
/> />
@ -71,7 +71,7 @@
width="180px" width="180px"
:formatter="dateFormatter2" :formatter="dateFormatter2"
/> />
<el-table-column align="center" label="款方式" prop="returnType" width="130px"> <el-table-column align="center" label="款方式" prop="returnType" width="130px">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE" :value="scope.row.returnType" /> <dict-tag :type="DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE" :value="scope.row.returnType" />
</template> </template>
@ -80,7 +80,7 @@
<el-table-column label="负责人" prop="ownerUserName" width="120" /> <el-table-column label="负责人" prop="ownerUserName" width="120" />
<el-table-column <el-table-column
align="center" align="center"
label="实际款金额(元)" label="实际款金额(元)"
prop="receivable.price" prop="receivable.price"
width="160" width="160"
> >
@ -93,14 +93,14 @@
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
label="实际款日期" label="实际款日期"
prop="receivable.returnTime" prop="receivable.returnTime"
width="180px" width="180px"
:formatter="dateFormatter2" :formatter="dateFormatter2"
/> />
<el-table-column <el-table-column
align="center" align="center"
label="实际款金额(元)" label="实际款金额(元)"
prop="receivable.price" prop="receivable.price"
width="160" width="160"
> >
@ -135,7 +135,7 @@
@click="openReceivableForm(scope.row)" @click="openReceivableForm(scope.row)"
:disabled="scope.row.receivableId" :disabled="scope.row.receivableId"
> >
创建 创建
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -191,7 +191,7 @@ const handleQuery = () => {
getList() getList()
} }
/** 创建款操作 */ /** 创建款操作 */
const receivableFormRef = ref() const receivableFormRef = ref()
const openReceivableForm = (row: ReceivablePlanApi.ReceivablePlanVO) => { const openReceivableForm = (row: ReceivablePlanApi.ReceivablePlanVO) => {
receivableFormRef.value.open('create', undefined, row) receivableFormRef.value.open('create', undefined, row)

View File

@ -36,6 +36,26 @@
<dict-tag :type="DICT_TYPE.CRM_AUDIT_STATUS" :value="scope.row.auditStatus" /> <dict-tag :type="DICT_TYPE.CRM_AUDIT_STATUS" :value="scope.row.auditStatus" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="center" fixed="right" label="操作" width="200">
<template #default="scope">
<el-button
v-hasPermi="['crm:contract:update']"
link
type="primary"
@click="openForm('update', scope.row.id)"
>
编辑
</el-button>
<el-button
v-hasPermi="['crm:contract:delete']"
link
type="danger"
@click="handleDelete(scope.row.id)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table> </el-table>
<!-- 分页 --> <!-- 分页 -->
<Pagination <Pagination
@ -107,8 +127,9 @@ const handleQuery = () => {
/** 添加 */ /** 添加 */
const formRef = ref() const formRef = ref()
const openForm = () => { //
formRef.value.open('create') const openForm = (type = 'create', id?: number) => {
formRef.value.open(type, id)
} }
/** 打开合同详情 */ /** 打开合同详情 */
@ -117,6 +138,16 @@ const openDetail = (id: number) => {
push({ name: 'CrmContractDetail', params: { id } }) push({ name: 'CrmContractDetail', params: { id } })
} }
/** 删除 */
const handleDelete = async (id: number) => {
try {
await ElMessageBox.confirm('确定要删除该合同吗?', '提示', { type: 'warning' })
await ContractApi.deleteContract(id)
ElMessage.success('删除成功')
getList()
} catch {}
}
/** 监听打开的 bizId + bizType从而加载最新的列表 */ /** 监听打开的 bizId + bizType从而加载最新的列表 */
watch( watch(
() => [props.bizId, props.bizType], () => [props.bizId, props.bizType],

View File

@ -26,7 +26,7 @@
<el-descriptions-item label="下单时间"> <el-descriptions-item label="下单时间">
{{ formatDate(contract.orderDate) }} {{ formatDate(contract.orderDate) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="款金额(元)"> <el-descriptions-item label="款金额(元)">
{{ erpPriceInputFormatter(contract.totalReceivablePrice) }} {{ erpPriceInputFormatter(contract.totalReceivablePrice) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="负责人"> <el-descriptions-item label="负责人">

View File

@ -19,7 +19,7 @@
<el-tab-pane label="产品"> <el-tab-pane label="产品">
<ContractProductList :contract="contract" /> <ContractProductList :contract="contract" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="款"> <el-tab-pane label="款">
<ReceivablePlanList <ReceivablePlanList
:contract-id="contract.id!" :contract-id="contract.id!"
:customer-id="contract.customerId" :customer-id="contract.customerId"
@ -106,8 +106,8 @@ const getOperateLog = async (contractId: number) => {
logList.value = data.list logList.value = data.list
} }
/** 从回款计划创建回款 */ /** 从付款计划创建付款 */
const receivableListRef = ref<InstanceType<typeof ReceivableList>>() // Ref const receivableListRef = ref<InstanceType<typeof ReceivableList>>() // Ref
const createReceivable = (planData: any) => { const createReceivable = (planData: any) => {
receivableListRef.value?.createReceivable(planData) receivableListRef.value?.createReceivable(planData)
} }

View File

@ -155,14 +155,14 @@
<el-table-column align="center" label="备注" prop="remark" width="200" /> <el-table-column align="center" label="备注" prop="remark" width="200" />
<el-table-column <el-table-column
align="center" align="center"
label="已款金额(元)" label="已款金额(元)"
prop="totalReceivablePrice" prop="totalReceivablePrice"
width="140" width="140"
:formatter="erpPriceTableColumnFormatter" :formatter="erpPriceTableColumnFormatter"
/> />
<el-table-column <el-table-column
align="center" align="center"
label="未款金额(元)" label="未款金额(元)"
prop="totalReceivablePrice" prop="totalReceivablePrice"
width="140" width="140"
:formatter="erpPriceTableColumnFormatter" :formatter="erpPriceTableColumnFormatter"

View File

@ -9,7 +9,7 @@
> >
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="款编号" prop="no"> <el-form-item label="款编号" prop="no">
<el-input v-model="formData.no" disabled placeholder="保存时自动生成" /> <el-input v-model="formData.no" disabled placeholder="保存时自动生成" />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -73,12 +73,12 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="款期数" prop="planId"> <el-form-item label="款期数" prop="planId">
<el-select <el-select
v-model="formData.planId" v-model="formData.planId"
:disabled="formType !== 'create' || !formData.contractId" :disabled="formType !== 'create' || !formData.contractId"
class="!w-1/1" class="!w-1/1"
placeholder="请选择款期数" placeholder="请选择款期数"
@change="handleReceivablePlanChange" @change="handleReceivablePlanChange"
> >
<el-option <el-option
@ -92,8 +92,8 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="款方式" prop="returnType"> <el-form-item label="款方式" prop="returnType">
<el-select v-model="formData.returnType" class="w-1/1" placeholder="请选择款方式"> <el-select v-model="formData.returnType" class="w-1/1" placeholder="请选择款方式">
<el-option <el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE)" v-for="dict in getIntDictOptions(DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE)"
:key="dict.value" :key="dict.value"
@ -106,22 +106,22 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="款金额" prop="price"> <el-form-item label="款金额" prop="price">
<el-input-number <el-input-number
v-model="formData.price" v-model="formData.price"
:min="0.01" :min="0.01"
:precision="2" :precision="2"
class="!w-100%" class="!w-100%"
controls-position="right" controls-position="right"
placeholder="请输入款金额" placeholder="请输入款金额"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="款日期" prop="returnTime"> <el-form-item label="款日期" prop="returnTime">
<el-date-picker <el-date-picker
v-model="formData.returnTime" v-model="formData.returnTime"
placeholder="选择款日期" placeholder="选择款日期"
type="date" type="date"
value-format="x" value-format="x"
class="!w-100%" class="!w-100%"
@ -164,13 +164,13 @@ const formData = ref<ReceivableApi.ReceivableVO>({} as ReceivableApi.ReceivableV
const formRules = reactive({ const formRules = reactive({
customerId: [{ required: true, message: '客户不能为空', trigger: 'blur' }], customerId: [{ required: true, message: '客户不能为空', trigger: 'blur' }],
contractId: [{ required: true, message: '合同不能为空', trigger: 'blur' }], contractId: [{ required: true, message: '合同不能为空', trigger: 'blur' }],
returnTime: [{ required: true, message: '款日期不能为空', trigger: 'blur' }], returnTime: [{ required: true, message: '款日期不能为空', trigger: 'blur' }],
price: [{ required: true, message: '款金额不能为空', trigger: 'blur' }] price: [{ required: true, message: '款金额不能为空', trigger: 'blur' }]
}) })
const formRef = ref() // Ref const formRef = ref() // Ref
const customerList = ref<CustomerApi.CustomerVO[]>([]) // const customerList = ref<CustomerApi.CustomerVO[]>([]) //
const contractList = ref<ContractApi.ContractVO[]>([]) // const contractList = ref<ContractApi.ContractVO[]>([]) //
const receivablePlanList = ref<ReceivablePlanApi.ReceivablePlanVO[]>([]) // const receivablePlanList = ref<ReceivablePlanApi.ReceivablePlanVO[]>([]) //
/** 打开弹窗 */ /** 打开弹窗 */
const open = async ( const open = async (
@ -202,7 +202,7 @@ const open = async (
if (formType.value === 'create') { if (formType.value === 'create') {
formData.value.ownerUserId = useUserStore().getUser.id formData.value.ownerUserId = useUserStore().getUser.id
} }
// //
if (receivablePlan) { if (receivablePlan) {
formData.value.customerId = receivablePlan.customerId formData.value.customerId = receivablePlan.customerId
await handleCustomerChange(receivablePlan.customerId) await handleCustomerChange(receivablePlan.customerId)
@ -262,10 +262,10 @@ const handleCustomerChange = async (customerId: number) => {
/** 处理切换合同 */ /** 处理切换合同 */
const handleContractChange = async (contractId: number) => { const handleContractChange = async (contractId: number) => {
// //
formData.value.planId = undefined formData.value.planId = undefined
if (contractId) { if (contractId) {
// //
receivablePlanList.value = [] receivablePlanList.value = []
receivablePlanList.value = await ReceivablePlanApi.getReceivablePlanSimpleList( receivablePlanList.value = await ReceivablePlanApi.getReceivablePlanSimpleList(
formData.value.customerId!, formData.value.customerId!,
@ -279,7 +279,7 @@ const handleContractChange = async (contractId: number) => {
} }
} }
/** 处理切换款计划 */ /** 处理切换款计划 */
const handleReceivablePlanChange = (planId: number) => { const handleReceivablePlanChange = (planId: number) => {
if (!planId) { if (!planId) {
return return

View File

@ -3,31 +3,31 @@
<el-row justify="end"> <el-row justify="end">
<el-button @click="openForm('create')"> <el-button @click="openForm('create')">
<Icon class="mr-5px" icon="icon-park:income-one" /> <Icon class="mr-5px" icon="icon-park:income-one" />
创建 创建
</el-button> </el-button>
</el-row> </el-row>
<!-- 列表 --> <!-- 列表 -->
<ContentWrap class="mt-10px"> <ContentWrap class="mt-10px">
<el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" :stripe="true"> <el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" :stripe="true">
<el-table-column align="center" label="款编号" prop="no" /> <el-table-column align="center" label="款编号" prop="no" />
<el-table-column align="center" label="客户" prop="customerName" /> <el-table-column align="center" label="客户" prop="customerName" />
<el-table-column align="center" label="合同" prop="contract.no" /> <el-table-column align="center" label="合同" prop="contract.no" />
<el-table-column <el-table-column
:formatter="dateFormatter2" :formatter="dateFormatter2"
align="center" align="center"
label="款日期" label="款日期"
prop="returnTime" prop="returnTime"
width="150px" width="150px"
/> />
<el-table-column align="center" label="款方式" prop="returnType" width="130px"> <el-table-column align="center" label="款方式" prop="returnType" width="130px">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE" :value="scope.row.returnType" /> <dict-tag :type="DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE" :value="scope.row.returnType" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
label="款金额(元)" label="款金额(元)"
prop="price" prop="price"
:formatter="erpPriceTableColumnFormatter" :formatter="erpPriceTableColumnFormatter"
/> />
@ -142,7 +142,7 @@ const handleDelete = async (id: number) => {
} catch {} } catch {}
} }
/** 从回款计划创建回款 */ /** 从付款计划创建付款 */
const createReceivable = (planData: any) => { const createReceivable = (planData: any) => {
const data = planData as unknown as ReceivablePlanApi.ReceivablePlanVO const data = planData as unknown as ReceivablePlanApi.ReceivablePlanVO
formRef.value.open('create', undefined, data) formRef.value.open('create', undefined, data)

View File

@ -11,12 +11,12 @@
class="-mb-15px" class="-mb-15px"
label-width="68px" label-width="68px"
> >
<el-form-item label="款编号" prop="no"> <el-form-item label="款编号" prop="no">
<el-input <el-input
v-model="queryParams.no" v-model="queryParams.no"
class="!w-240px" class="!w-240px"
clearable clearable
placeholder="请输入款编号" placeholder="请输入款编号"
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
@ -75,7 +75,7 @@
<el-tab-pane label="下属负责的" name="3" /> <el-tab-pane label="下属负责的" name="3" />
</el-tabs> </el-tabs>
<el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" :stripe="true"> <el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" :stripe="true">
<el-table-column align="center" fixed="left" label="款编号" prop="no" width="180"> <el-table-column align="center" fixed="left" label="款编号" prop="no" width="180">
<template #default="scope"> <template #default="scope">
<el-link :underline="false" type="primary" @click="openDetail(scope.row.id)"> <el-link :underline="false" type="primary" @click="openDetail(scope.row.id)">
{{ scope.row.no }} {{ scope.row.no }}
@ -107,18 +107,18 @@
<el-table-column <el-table-column
:formatter="dateFormatter2" :formatter="dateFormatter2"
align="center" align="center"
label="款日期" label="款日期"
prop="returnTime" prop="returnTime"
width="150px" width="150px"
/> />
<el-table-column <el-table-column
align="center" align="center"
label="款金额(元)" label="款金额(元)"
prop="price" prop="price"
width="140" width="140"
:formatter="erpPriceTableColumnFormatter" :formatter="erpPriceTableColumnFormatter"
/> />
<el-table-column align="center" label="款方式" prop="returnType" width="130px"> <el-table-column align="center" label="款方式" prop="returnType" width="130px">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE" :value="scope.row.returnType" /> <dict-tag :type="DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE" :value="scope.row.returnType" />
</template> </template>
@ -148,7 +148,7 @@
width="180px" width="180px"
/> />
<el-table-column align="center" label="创建人" prop="creatorName" width="120" /> <el-table-column align="center" label="创建人" prop="creatorName" width="120" />
<el-table-column align="center" fixed="right" label="款状态" prop="auditStatus" width="120"> <el-table-column align="center" fixed="right" label="款状态" prop="auditStatus" width="120">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.CRM_AUDIT_STATUS" :value="scope.row.auditStatus" /> <dict-tag :type="DICT_TYPE.CRM_AUDIT_STATUS" :value="scope.row.auditStatus" />
</template> </template>
@ -284,7 +284,7 @@ const handleDelete = async (id: number) => {
/** 提交审核 **/ /** 提交审核 **/
const handleSubmit = async (row: ReceivableApi.ReceivableVO) => { const handleSubmit = async (row: ReceivableApi.ReceivableVO) => {
await message.confirm(`您确定提交编号为【${row.no}】的款审核吗?`) await message.confirm(`您确定提交编号为【${row.no}】的款审核吗?`)
await ReceivableApi.submitReceivable(row.id) await ReceivableApi.submitReceivable(row.id)
message.success('提交审核成功!') message.success('提交审核成功!')
await getList() await getList()
@ -295,7 +295,7 @@ const handleProcessDetail = (row: ReceivableApi.ReceivableVO) => {
push({ name: 'BpmProcessInstanceDetail', query: { id: row.processInstanceId } }) push({ name: 'BpmProcessInstanceDetail', query: { id: row.processInstanceId } })
} }
/** 打开款详情 */ /** 打开款详情 */
const { push } = useRouter() const { push } = useRouter()
const openDetail = (id: number) => { const openDetail = (id: number) => {
push({ name: 'CrmReceivableDetail', params: { id } }) push({ name: 'CrmReceivableDetail', params: { id } })
@ -319,7 +319,7 @@ const handleExport = async () => {
// //
exportLoading.value = true exportLoading.value = true
const data = await ReceivableApi.exportReceivable(queryParams) const data = await ReceivableApi.exportReceivable(queryParams)
download.excel(data, '款.xls') download.excel(data, '款.xls')
} catch { } catch {
} finally { } finally {
exportLoading.value = false exportLoading.value = false

View File

@ -71,22 +71,22 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="计划款金额" prop="price"> <el-form-item label="计划款金额" prop="price">
<el-input-number <el-input-number
v-model="formData.price" v-model="formData.price"
:min="0.01" :min="0.01"
:precision="2" :precision="2"
class="!w-100%" class="!w-100%"
controls-position="right" controls-position="right"
placeholder="请输入计划款金额" placeholder="请输入计划款金额"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="计划款日期" prop="returnTime"> <el-form-item label="计划款日期" prop="returnTime">
<el-date-picker <el-date-picker
v-model="formData.returnTime" v-model="formData.returnTime"
placeholder="选择计划款日期" placeholder="选择计划款日期"
type="date" type="date"
value-format="x" value-format="x"
class="!w-100%" class="!w-100%"
@ -106,8 +106,8 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="款方式" prop="returnType"> <el-form-item label="款方式" prop="returnType">
<el-select v-model="formData.returnType" class="w-1/1" placeholder="请选择款方式"> <el-select v-model="formData.returnType" class="w-1/1" placeholder="请选择款方式">
<el-option <el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE)" v-for="dict in getIntDictOptions(DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE)"
:key="dict.value" :key="dict.value"
@ -148,8 +148,8 @@ const formLoading = ref(false) // 表单的加载中1修改时的数据加
const formType = ref('') // create - update - const formType = ref('') // create - update -
const formData = ref<ReceivablePlanApi.ReceivablePlanVO>({} as ReceivablePlanApi.ReceivablePlanVO) const formData = ref<ReceivablePlanApi.ReceivablePlanVO>({} as ReceivablePlanApi.ReceivablePlanVO)
const formRules = reactive({ const formRules = reactive({
price: [{ required: true, message: '计划款金额不能为空', trigger: 'blur' }], price: [{ required: true, message: '计划款金额不能为空', trigger: 'blur' }],
returnTime: [{ required: true, message: '计划款日期不能为空', trigger: 'blur' }], returnTime: [{ required: true, message: '计划款日期不能为空', trigger: 'blur' }],
customerId: [{ required: true, message: '客户编号不能为空', trigger: 'blur' }], customerId: [{ required: true, message: '客户编号不能为空', trigger: 'blur' }],
contractId: [{ required: true, message: '合同编号不能为空', trigger: 'blur' }], contractId: [{ required: true, message: '合同编号不能为空', trigger: 'blur' }],
ownerUserId: [{ required: true, message: '负责人不能为空', trigger: 'blur' }] ownerUserId: [{ required: true, message: '负责人不能为空', trigger: 'blur' }]

View File

@ -3,7 +3,7 @@
<el-row justify="end"> <el-row justify="end">
<el-button @click="openForm('create', undefined)"> <el-button @click="openForm('create', undefined)">
<Icon class="mr-5px" icon="icon-park:income" /> <Icon class="mr-5px" icon="icon-park:income" />
创建款计划 创建款计划
</el-button> </el-button>
</el-row> </el-row>
@ -15,7 +15,7 @@
<el-table-column align="center" label="期数" prop="period" /> <el-table-column align="center" label="期数" prop="period" />
<el-table-column <el-table-column
align="center" align="center"
label="计划款(元)" label="计划款(元)"
prop="price" prop="price"
width="120" width="120"
:formatter="erpPriceTableColumnFormatter" :formatter="erpPriceTableColumnFormatter"
@ -23,7 +23,7 @@
<el-table-column <el-table-column
:formatter="dateFormatter2" :formatter="dateFormatter2"
align="center" align="center"
label="计划款日期" label="计划款日期"
prop="returnTime" prop="returnTime"
width="180px" width="180px"
/> />
@ -46,7 +46,7 @@
@click="createReceivable(scope.row)" @click="createReceivable(scope.row)"
:disabled="scope.row.receivableId" :disabled="scope.row.receivableId"
> >
创建 创建
</el-button> </el-button>
<el-button <el-button
v-hasPermi="['crm:receivable-plan:update']" v-hasPermi="['crm:receivable-plan:update']"
@ -137,7 +137,7 @@ const openForm = (type: string, id?: number) => {
formRef.value.open(type, id, props.customerId, props.contractId) formRef.value.open(type, id, props.customerId, props.contractId)
} }
/** 创建款 */ /** 创建款 */
const emits = defineEmits<{ const emits = defineEmits<{
(e: 'createReceivable', v: ReceivablePlanApi.ReceivablePlanVO) (e: 'createReceivable', v: ReceivablePlanApi.ReceivablePlanVO)
}>() }>()

View File

@ -20,13 +20,13 @@
{{ receivablePlan.customerName }} {{ receivablePlan.customerName }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="合同编号">{{ receivablePlan.contractNo }}</el-descriptions-item> <el-descriptions-item label="合同编号">{{ receivablePlan.contractNo }}</el-descriptions-item>
<el-descriptions-item label="计划款金额"> <el-descriptions-item label="计划款金额">
{{ erpPriceInputFormatter(receivablePlan.price) }} {{ erpPriceInputFormatter(receivablePlan.price) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="计划款日期"> <el-descriptions-item label="计划款日期">
{{ formatDate(receivablePlan.returnTime) }} {{ formatDate(receivablePlan.returnTime) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="实际款金额"> <el-descriptions-item label="实际款金额">
<el-text v-if="receivablePlan.receivable"> <el-text v-if="receivablePlan.receivable">
{{ erpPriceInputFormatter(receivablePlan.receivable.price) }} {{ erpPriceInputFormatter(receivablePlan.receivable.price) }}
</el-text> </el-text>

View File

@ -13,13 +13,13 @@
<el-descriptions-item label="合同编号"> <el-descriptions-item label="合同编号">
{{ receivablePlan.contractNo }} {{ receivablePlan.contractNo }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="计划款金额"> <el-descriptions-item label="计划款金额">
{{ erpPriceInputFormatter(receivablePlan.price) }} {{ erpPriceInputFormatter(receivablePlan.price) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="计划款日期"> <el-descriptions-item label="计划款日期">
{{ formatDate(receivablePlan.returnTime, 'YYYY-MM-DD') }} {{ formatDate(receivablePlan.returnTime, 'YYYY-MM-DD') }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="计划款方式"> <el-descriptions-item label="计划款方式">
<dict-tag <dict-tag
:type="DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE" :type="DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE"
:value="receivablePlan.returnType" :value="receivablePlan.returnType"
@ -29,19 +29,19 @@
{{ receivablePlan.remindDays }} {{ receivablePlan.remindDays }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="备注">{{ receivablePlan.remark }}</el-descriptions-item> <el-descriptions-item label="备注">{{ receivablePlan.remark }}</el-descriptions-item>
<el-descriptions-item label="实际款金额"> <el-descriptions-item label="实际款金额">
<el-text v-if="receivablePlan.receivable"> <el-text v-if="receivablePlan.receivable">
{{ erpPriceInputFormatter(receivablePlan.receivable.price) }} {{ erpPriceInputFormatter(receivablePlan.receivable.price) }}
</el-text> </el-text>
<el-text v-else>{{ erpPriceInputFormatter(0) }}</el-text> <el-text v-else>{{ erpPriceInputFormatter(0) }}</el-text>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="未款金额"> <el-descriptions-item label="未款金额">
<el-text v-if="receivablePlan.receivable"> <el-text v-if="receivablePlan.receivable">
{{ erpPriceInputFormatter(receivablePlan.price - receivablePlan.receivable.price) }} {{ erpPriceInputFormatter(receivablePlan.price - receivablePlan.receivable.price) }}
</el-text> </el-text>
<el-text v-else>{{ erpPriceInputFormatter(receivablePlan.price) }}</el-text> <el-text v-else>{{ erpPriceInputFormatter(receivablePlan.price) }}</el-text>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="实际款日期"> <el-descriptions-item label="实际款日期">
{{ formatDate(receivablePlan.receivable?.returnTime, 'YYYY-MM-DD') }} {{ formatDate(receivablePlan.receivable?.returnTime, 'YYYY-MM-DD') }}
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>

View File

@ -45,11 +45,11 @@ defineOptions({ name: 'CrmReceivablePlanDetail' })
const message = useMessage() const message = useMessage()
const receivablePlanId = ref(0) // const receivablePlanId = ref(0) //
const loading = ref(true) // const loading = ref(true) //
const receivablePlan = ref<ReceivablePlanApi.ReceivablePlanVO>( const receivablePlan = ref<ReceivablePlanApi.ReceivablePlanVO>(
{} as ReceivablePlanApi.ReceivablePlanVO {} as ReceivablePlanApi.ReceivablePlanVO
) // ) //
const permissionListRef = ref<InstanceType<typeof PermissionList>>() // Ref const permissionListRef = ref<InstanceType<typeof PermissionList>>() // Ref
/** 获取详情 */ /** 获取详情 */
@ -93,7 +93,7 @@ const close = () => {
const { params } = useRoute() const { params } = useRoute()
onMounted(async () => { onMounted(async () => {
if (!params.id) { if (!params.id) {
message.warning('参数错误,款计划不能为空!') message.warning('参数错误,款计划不能为空!')
close() close()
return return
} }

View File

@ -95,7 +95,7 @@
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
label="计划款金额(元)" label="计划款金额(元)"
prop="price" prop="price"
width="160" width="160"
:formatter="erpPriceTableColumnFormatter" :formatter="erpPriceTableColumnFormatter"
@ -103,7 +103,7 @@
<el-table-column <el-table-column
:formatter="dateFormatter2" :formatter="dateFormatter2"
align="center" align="center"
label="计划款日期" label="计划款日期"
prop="returnTime" prop="returnTime"
width="180px" width="180px"
/> />
@ -115,7 +115,7 @@
width="180px" width="180px"
:formatter="dateFormatter2" :formatter="dateFormatter2"
/> />
<el-table-column align="center" label="款方式" prop="returnType" width="130px"> <el-table-column align="center" label="款方式" prop="returnType" width="130px">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE" :value="scope.row.returnType" /> <dict-tag :type="DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE" :value="scope.row.returnType" />
</template> </template>
@ -124,7 +124,7 @@
<el-table-column label="负责人" prop="ownerUserName" width="120" /> <el-table-column label="负责人" prop="ownerUserName" width="120" />
<el-table-column <el-table-column
align="center" align="center"
label="实际款金额(元)" label="实际款金额(元)"
prop="receivable.price" prop="receivable.price"
width="160" width="160"
> >
@ -137,14 +137,14 @@
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
label="实际款日期" label="实际款日期"
prop="receivable.returnTime" prop="receivable.returnTime"
width="180px" width="180px"
:formatter="dateFormatter2" :formatter="dateFormatter2"
/> />
<el-table-column <el-table-column
align="center" align="center"
label="实际款金额(元)" label="实际款金额(元)"
prop="receivable.price" prop="receivable.price"
width="160" width="160"
> >
@ -179,7 +179,7 @@
@click="openReceivableForm(scope.row)" @click="openReceivableForm(scope.row)"
:disabled="scope.row.receivableId" :disabled="scope.row.receivableId"
> >
创建 创建
</el-button> </el-button>
<el-button <el-button
v-hasPermi="['crm:receivable-plan:update']" v-hasPermi="['crm:receivable-plan:update']"
@ -281,7 +281,7 @@ const openForm = (type: string, id?: number) => {
formRef.value.open(type, id) formRef.value.open(type, id)
} }
/** 创建款操作 */ /** 创建款操作 */
const receivableFormRef = ref() const receivableFormRef = ref()
const openReceivableForm = (row: ReceivablePlanApi.ReceivablePlanVO) => { const openReceivableForm = (row: ReceivablePlanApi.ReceivablePlanVO) => {
receivableFormRef.value.open('create', undefined, row) receivableFormRef.value.open('create', undefined, row)
@ -308,7 +308,7 @@ const handleExport = async () => {
// //
exportLoading.value = true exportLoading.value = true
const data = await ReceivablePlanApi.exportReceivablePlan(queryParams) const data = await ReceivablePlanApi.exportReceivablePlan(queryParams)
download.excel(data, '款计划.xls') download.excel(data, '款计划.xls')
} catch { } catch {
} finally { } finally {
exportLoading.value = false exportLoading.value = false