diff --git a/src/api/crm/backlog/index.ts b/src/api/crm/backlog/index.ts deleted file mode 100644 index 7ea01990..00000000 --- a/src/api/crm/backlog/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -import request from '@/config/axios' -// TODO 芋艿:融合下 - -// 5. 获得待审核合同数量 -export const getCheckContractCount = async () => { - return await request.get({ url: '/crm/contract/check-contract-count' }) -} - -// 6. 获得待审核回款数量 -export const getCheckReceivablesCount = async () => { - return await request.get({ url: '/crm/receivable/check-receivables-count' }) -} - -// 7. 获得待回款提醒数量 -export const getRemindReceivablePlanCount = async () => { - return await request.get({ url: '/crm/receivable-plan/remind-receivable-plan-count' }) -} - -// 8. 获得即将到期的合同数量 -export const getEndContractCount = async () => { - return await request.get({ url: '/crm/contract/end-contract-count' }) -} diff --git a/src/api/crm/contract/index.ts b/src/api/crm/contract/index.ts index bd9e93e0..faee9495 100644 --- a/src/api/crm/contract/index.ts +++ b/src/api/crm/contract/index.ts @@ -21,6 +21,7 @@ export interface ContractVO { totalProductPrice: number discountPercent: number totalPrice: number + totalReceivablePrice: number signContactId: number signContactName?: string signUserId: number @@ -66,9 +67,9 @@ export const getContract = async (id: number) => { } // 查询 CRM 合同下拉列表 -export const getCrmContractSimpleListByCustomerId = async (customerId: number) => { +export const getContractSimpleList = async (customerId: number) => { return await request.get({ - url: `/crm/contract/list-all-simple-by-customer?customerId=${customerId}` + url: `/crm/contract/simple-list?customerId=${customerId}` }) } diff --git a/src/api/crm/receivable/index.ts b/src/api/crm/receivable/index.ts index 7d2d3a2d..069d6c4a 100644 --- a/src/api/crm/receivable/index.ts +++ b/src/api/crm/receivable/index.ts @@ -5,14 +5,24 @@ export interface ReceivableVO { no: string planId: number customerId: number + customerName?: string contractId: number + contract?: { + no: string + totalPrice: number + } auditStatus: number processInstanceId: number returnTime: Date returnType: string price: number ownerUserId: number + ownerUserName?: string remark: string + creator: string // 创建人 + creatorName?: string // 创建人名称 + createTime: Date // 创建时间 + updateTime: Date // 更新时间 } // 查询回款列表 @@ -54,3 +64,8 @@ export const exportReceivable = async (params) => { export const submitReceivable = async (id: number) => { return await request.put({ url: `/crm/receivable/submit?id=${id}` }) } + +// 获得待审核回款数量 +export const getAuditReceivableCount = async () => { + return await request.get({ url: '/crm/receivable/audit-count' }) +} diff --git a/src/api/crm/receivable/plan/index.ts b/src/api/crm/receivable/plan/index.ts index be5a4535..6e0cab4a 100644 --- a/src/api/crm/receivable/plan/index.ts +++ b/src/api/crm/receivable/plan/index.ts @@ -4,16 +4,26 @@ export interface ReceivablePlanVO { id: number period: number receivableId: number - finishStatus: number - processInstanceId: number price: number returnTime: Date remindDays: number + returnType: number remindTime: Date customerId: number + customerName?: string contractId: number + contractNo?: string ownerUserId: number + ownerUserName?: string remark: string + creator: string // 创建人 + creatorName?: string // 创建人名称 + createTime: Date // 创建时间 + updateTime: Date // 更新时间 + receivable?: { + price: number + returnTime: Date + } } // 查询回款计划列表 @@ -32,9 +42,9 @@ export const getReceivablePlan = async (id: number) => { } // 查询回款计划下拉数据 -export const getReceivablePlanListByContractId = async (customerId: number, contractId: number) => { +export const getReceivablePlanSimpleList = async (customerId: number, contractId: number) => { return await request.get({ - url: `/crm/receivable-plan/list-all-simple-by-customer?customerId=${customerId}&contractId=${contractId}` + url: `/crm/receivable-plan/simple-list?customerId=${customerId}&contractId=${contractId}` }) } @@ -57,3 +67,8 @@ export const deleteReceivablePlan = async (id: number) => { export const exportReceivablePlan = async (params) => { return await request.download({ url: `/crm/receivable-plan/export-excel`, params }) } + +// 获得待回款提醒数量 +export const getReceivablePlanRemindCount = async () => { + return await request.get({ url: '/crm/receivable-plan/remind-count' }) +} diff --git a/src/router/modules/remaining.ts b/src/router/modules/remaining.ts index 08d5db98..f63bee6e 100644 --- a/src/router/modules/remaining.ts +++ b/src/router/modules/remaining.ts @@ -539,6 +539,28 @@ const remainingRouter: AppRouteRecordRaw[] = [ }, component: () => import('@/views/crm/contract/detail/index.vue') }, + { + path: 'receivable-plan/detail/:id', + name: 'CrmReceivablePlanDetail', + meta: { + title: '回款计划详情', + noCache: true, + hidden: true, + activeMenu: '/crm/receivable-plan' + }, + component: () => import('@/views/crm/receivable/plan/detail/index.vue') + }, + { + path: 'receivable/detail/:id', + name: 'CrmReceivableDetail', + meta: { + title: '回款详情', + noCache: true, + hidden: true, + activeMenu: '/crm/receivable' + }, + component: () => import('@/views/crm/receivable/detail/index.vue') + }, { path: 'contact/detail/:id', name: 'CrmContactDetail', diff --git a/src/views/crm/backlog/components/ContractAuditList.vue b/src/views/crm/backlog/components/ContractAuditList.vue index 62a80b4d..9c13237c 100644 --- a/src/views/crm/backlog/components/ContractAuditList.vue +++ b/src/views/crm/backlog/components/ContractAuditList.vue @@ -101,7 +101,24 @@ - + + + + {{ erpPriceInputFormatter(scope.row.totalPrice - scope.row.totalReceivablePrice) }} + + - + + + + {{ erpPriceInputFormatter(scope.row.totalPrice - scope.row.totalReceivablePrice) }} + + + + + 待审核回款 + + + + + + + + + + + + + + + + {{ scope.row.no }} + + + + + + + {{ scope.row.customerName }} + + + + + + + {{ scope.row.contract.no }} + + + + + + + + + + + + + + + + + + + + + + + + + + 查看审批 + + + + + + + + + + diff --git a/src/views/crm/backlog/components/ReceivablePlanRemindList.vue b/src/views/crm/backlog/components/ReceivablePlanRemindList.vue new file mode 100644 index 00000000..9a3cf0cf --- /dev/null +++ b/src/views/crm/backlog/components/ReceivablePlanRemindList.vue @@ -0,0 +1,220 @@ + + + + 待回款提醒 + + + + + + + + + + + + + + + + {{ scope.row.customerName }} + + + + + + + + {{ scope.row.period }} + + + + + + + + + + + + + + + + + + {{ erpPriceInputFormatter(scope.row.receivable.price) }} + + {{ erpPriceInputFormatter(0) }} + + + + + + + {{ erpPriceInputFormatter(scope.row.price - scope.row.receivable.price) }} + + {{ erpPriceInputFormatter(scope.row.price) }} + + + + + + + + + 创建回款 + + + + + + + + + + + + + diff --git a/src/views/crm/backlog/index.vue b/src/views/crm/backlog/index.vue index b5c3a9a4..3dc069c0 100644 --- a/src/views/crm/backlog/index.vue +++ b/src/views/crm/backlog/index.vue @@ -18,28 +18,29 @@ - + - + - - diff --git a/src/views/crm/backlog/tables/RemindReceivables.vue b/src/views/crm/backlog/tables/RemindReceivables.vue deleted file mode 100644 index 8ca3fd4d..00000000 --- a/src/views/crm/backlog/tables/RemindReceivables.vue +++ /dev/null @@ -1,128 +0,0 @@ - - - - 待回款提醒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {{ userList.find((user) => user.id === scope.row.ownerUserId)?.nickname }} - - - - - - - - - - - - - - diff --git a/src/views/crm/backlog/tables/common.ts b/src/views/crm/backlog/tables/common.ts deleted file mode 100644 index fafc154f..00000000 --- a/src/views/crm/backlog/tables/common.ts +++ /dev/null @@ -1,38 +0,0 @@ -/** 跟进状态 */ -export const FOLLOWUP_STATUS = [ - { label: '已跟进', value: true }, - { label: '待跟进', value: false } -] - -/** 归属范围 */ -export const SCENE_TYPES = [ - { label: '我负责的', value: 1 }, - { label: '我参与的', value: 2 }, - { label: '下属负责的', value: 3 } -] - -/** 联系状态 */ -export const CONTACT_STATUS = [ - { label: '今日需联系', value: 1 }, - { label: '已逾期', value: 2 }, - { label: '已联系', value: 3 } -] - -/** 审批状态 */ -export const AUDIT_STATUS = [ - { label: '已审批', value: 20 }, - { label: '待审批', value: 10 } -] - -/** 回款提醒类型 */ -export const RECEIVABLE_REMIND_TYPE = [ - { label: '待回款', value: 1 }, - { label: '已逾期', value: 2 }, - { label: '已回款', value: 3 } -] - -/** 合同过期状态 */ -export const CONTRACT_EXPIRY_TYPE = [ - { label: '即将过期', value: 1 }, - { label: '已过期', value: 2 } -] diff --git a/src/views/crm/business/BusinessForm.vue b/src/views/crm/business/BusinessForm.vue index 4c7d253f..6b03047b 100644 --- a/src/views/crm/business/BusinessForm.vue +++ b/src/views/crm/business/BusinessForm.vue @@ -175,7 +175,6 @@ const formRules = reactive({ const formRef = ref() // 表单 Ref const userOptions = ref([]) // 用户列表 const statusTypeList = ref([]) // 商机状态类型列表 -// TODO 芋艿:统一的客户选择面板 const customerList = ref([]) // 客户列表的数据 /** 子表的表单 */ diff --git a/src/views/crm/contact/ContactForm.vue b/src/views/crm/contact/ContactForm.vue index 14f0d1f2..ac749da9 100644 --- a/src/views/crm/contact/ContactForm.vue +++ b/src/views/crm/contact/ContactForm.vue @@ -214,7 +214,6 @@ const formRules = reactive({ }) const formRef = ref() // 表单 Ref const userOptions = ref([]) // 用户列表 -// TODO 芋艿:统一的客户选择面板 const customerList = ref([]) // 客户列表 const contactList = ref([]) // 联系人列表 diff --git a/src/views/crm/contract/ContractForm.vue b/src/views/crm/contract/ContractForm.vue index 5ea55720..9c5b2c6a 100644 --- a/src/views/crm/contract/ContractForm.vue +++ b/src/views/crm/contract/ContractForm.vue @@ -235,7 +235,6 @@ const formRules = reactive({ }) const formRef = ref() // 表单 Ref const userOptions = ref([]) // 用户列表 -// TODO 芋艿:统一的客户选择面板 const customerList = ref([]) // 客户列表的数据 const businessList = ref([]) const contactList = ref([]) diff --git a/src/views/crm/contract/detail/ContractDetailsHeader.vue b/src/views/crm/contract/detail/ContractDetailsHeader.vue index 775a3f47..9cfbfc74 100644 --- a/src/views/crm/contract/detail/ContractDetailsHeader.vue +++ b/src/views/crm/contract/detail/ContractDetailsHeader.vue @@ -26,8 +26,9 @@ {{ formatDate(contract.orderDate) }} - - 待实现 + + {{ erpPriceInputFormatter(contract.totalReceivablePrice) }} + {{ contract.ownerUserName }} diff --git a/src/views/crm/contract/detail/index.vue b/src/views/crm/contract/detail/index.vue index 96613dac..bd30489a 100644 --- a/src/views/crm/contract/detail/index.vue +++ b/src/views/crm/contract/detail/index.vue @@ -23,7 +23,7 @@ { /** 从回款计划创建回款 */ const receivableListRef = ref>() // 回款列表 Ref -const crateReceivable = (planData: any) => { - receivableListRef.value?.crateReceivable(planData) +const createReceivable = (planData: any) => { + receivableListRef.value?.createReceivable(planData) } /** 转移 */ diff --git a/src/views/crm/contract/index.vue b/src/views/crm/contract/index.vue index ed266057..1461df04 100644 --- a/src/views/crm/contract/index.vue +++ b/src/views/crm/contract/index.vue @@ -150,7 +150,24 @@ - + + + + {{ erpPriceInputFormatter(scope.row.totalPrice - scope.row.totalReceivablePrice) }} + + ([]) // 客户列表 +/** tab 切换 */ +const handleTabClick = (tab: TabsPaneContext) => { + queryParams.sceneType = tab.paneName + handleQuery() +} + /** 查询列表 */ const getList = async () => { loading.value = true diff --git a/src/views/crm/customer/CustomerImportForm.vue b/src/views/crm/customer/CustomerImportForm.vue index af802ab2..7f92dc83 100644 --- a/src/views/crm/customer/CustomerImportForm.vue +++ b/src/views/crm/customer/CustomerImportForm.vue @@ -81,6 +81,7 @@ const submitForm = async () => { const formData = new FormData() formData.append('updateSupport', updateSupport.value) formData.append('file', fileList.value[0].raw) + // TODO @芋艿:后面是不是可以采用这种形式,去掉 uploadHeaders await CustomerApi.handleImport(formData) } diff --git a/src/views/crm/customer/detail/index.vue b/src/views/crm/customer/detail/index.vue index aed4c6f2..031fcfbf 100644 --- a/src/views/crm/customer/detail/index.vue +++ b/src/views/crm/customer/detail/index.vue @@ -64,7 +64,7 @@ - + @@ -199,8 +199,8 @@ const getOperateLog = async () => { /** 从回款计划创建回款 */ const receivableListRef = ref>() // 回款列表 Ref -const crateReceivable = (planData: any) => { - receivableListRef.value?.crateReceivable(planData) +const createReceivable = (planData: any) => { + receivableListRef.value?.createReceivable(planData) } const close = () => { diff --git a/src/views/crm/customer/limitConfig/CustomerLimitConfigForm.vue b/src/views/crm/customer/limitConfig/CustomerLimitConfigForm.vue index d8aa9240..c7338a43 100644 --- a/src/views/crm/customer/limitConfig/CustomerLimitConfigForm.vue +++ b/src/views/crm/customer/limitConfig/CustomerLimitConfigForm.vue @@ -82,7 +82,6 @@ const formRules = reactive({ maxCount: [{ required: true, message: '数量上限不能为空', trigger: 'blur' }] }) const formRef = ref() // 表单 Ref -// TODO @芋艿:看看怎么搞个部门选择组件 const deptTree = ref() // 部门树形结构 const userOptions = ref([]) // 用户列表 diff --git a/src/views/crm/permission/components/PermissionForm.vue b/src/views/crm/permission/components/PermissionForm.vue index 3eff4e6a..c86e8bd0 100644 --- a/src/views/crm/permission/components/PermissionForm.vue +++ b/src/views/crm/permission/components/PermissionForm.vue @@ -129,7 +129,6 @@ const resetForm = (bizType: number, bizId: number) => { } onMounted(async () => { // 获得用户列表 - // TODO 芋艿:用户列表的选择组件 userOptions.value = await UserApi.getSimpleUserList() }) diff --git a/src/views/crm/permission/components/TransferForm.vue b/src/views/crm/permission/components/TransferForm.vue index c9f5eed1..3b4e6dfb 100644 --- a/src/views/crm/permission/components/TransferForm.vue +++ b/src/views/crm/permission/components/TransferForm.vue @@ -40,7 +40,7 @@ - + 确 定 取 消 @@ -117,7 +117,6 @@ const resetForm = () => { } onMounted(async () => { // 获得用户列表 - // TODO 芋艿:用户列表的选择组件 userOptions.value = await UserApi.getSimpleUserList() }) diff --git a/src/views/crm/product/ProductForm.vue b/src/views/crm/product/ProductForm.vue index 1748c804..1bc5aaca 100644 --- a/src/views/crm/product/ProductForm.vue +++ b/src/views/crm/product/ProductForm.vue @@ -207,6 +207,6 @@ onMounted(async () => { const data = await ProductCategoryApi.getProductCategoryList({}) productCategoryList.value = handleTree(data, 'id', 'parentId') // 系统用户列表 - userList.value = await getSimpleUserList() // TODO 芋艿:替换成用户组件 + userList.value = await getSimpleUserList() }) diff --git a/src/views/crm/receivable/ReceivableForm.vue b/src/views/crm/receivable/ReceivableForm.vue index 6738cd99..aa9937bd 100644 --- a/src/views/crm/receivable/ReceivableForm.vue +++ b/src/views/crm/receivable/ReceivableForm.vue @@ -10,12 +10,37 @@ - + + + + + + + + + + - + + + - - - - - - - - + + + @@ -103,14 +127,11 @@ /> + + - + @@ -128,21 +149,20 @@ import * as UserApi from '@/api/system/user' import * as CustomerApi from '@/api/crm/customer' import * as ContractApi from '@/api/crm/contract' import { useUserStore } from '@/store/modules/user' -import { DICT_TYPE, getStrDictOptions } from '@/utils/dict' +import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' +import form from '@/components/Form/src/Form.vue' const { t } = useI18n() // 国际化 const message = useMessage() // 消息弹窗 -const userList = ref([]) // 用户列表 +const userOptions = ref([]) // 用户列表 const dialogVisible = ref(false) // 弹窗的是否展示 const dialogTitle = ref('') // 弹窗的标题 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 const formType = ref('') // 表单的类型:create - 新增;update - 修改 const formData = ref({} as ReceivableApi.ReceivableVO) const formRules = reactive({ - no: [{ required: true, message: '回款编号不能为空', trigger: 'blur' }], customerId: [{ required: true, message: '客户不能为空', trigger: 'blur' }], contractId: [{ required: true, message: '合同不能为空', trigger: 'blur' }], - auditStatus: [{ required: true, message: '审批状态不能为空', trigger: 'blur' }], returnTime: [{ required: true, message: '回款日期不能为空', trigger: 'blur' }], price: [{ required: true, message: '回款金额不能为空', trigger: 'blur' }] }) @@ -150,8 +170,13 @@ const formRef = ref() // 表单 Ref const customerList = ref([]) // 客户列表 const contractList = ref([]) // 合同列表 const receivablePlanList = ref([]) // 回款计划列表 + /** 打开弹窗 */ -const open = async (type: string, id?: number, planData?: ReceivablePlanApi.ReceivablePlanVO) => { +const open = async ( + type: string, + id?: number, + receivablePlan?: ReceivablePlanApi.ReceivablePlanVO +) => { dialogVisible.value = true dialogTitle.value = t('action.' + type) formType.value = type @@ -166,7 +191,7 @@ const open = async (type: string, id?: number, planData?: ReceivablePlanApi.Rece } } // 获得用户列表 - userList.value = await UserApi.getSimpleUserList() + userOptions.value = await UserApi.getSimpleUserList() // 获得客户列表 customerList.value = await CustomerApi.getCustomerSimpleList() // 默认新建时选中自己 @@ -174,10 +199,16 @@ const open = async (type: string, id?: number, planData?: ReceivablePlanApi.Rece formData.value.ownerUserId = useUserStore().getUser.id } // 从回款计划创建回款 - if (planData) { - formData.value.customerId = planData.customerId - formData.value.contractId = planData.contractId - formData.value.planId = planData.id + if (receivablePlan) { + formData.value.customerId = receivablePlan.customerId + await handleCustomerChange(receivablePlan.customerId) + formData.value.contractId = receivablePlan.contractId + await handleContractChange(receivablePlan.contractId) + if (receivablePlan.id) { + formData.value.planId = receivablePlan.id + formData.value.price = receivablePlan.price + formData.value.returnType = receivablePlan.returnType + } } } defineExpose({ open }) // 提供 open 方法,用于打开弹窗 @@ -214,53 +245,46 @@ const resetForm = () => { formRef.value?.resetFields() } -const getContractList = async (customerId: number) => { - contractList.value = await ContractApi.getCrmContractSimpleListByCustomerId(customerId) +/** 处理切换客户 */ +const handleCustomerChange = async (customerId: number) => { + // 重置合同编号 + formData.value.contractId = undefined + // 获得合同列表 + if (customerId) { + contractList.value = [] + contractList.value = await ContractApi.getContractSimpleList(customerId) + } } -const getReceivablePlanList = async (contractId: number) => { - receivablePlanList.value = await ReceivablePlanApi.getReceivablePlanListByContractId( - formData.value.customerId, - contractId - ) + +/** 处理切换合同 */ +const handleContractChange = async (contractId: number) => { + // 重置回款计划编号 + formData.value.planId = undefined + if (contractId) { + // 获得回款计划列表 + receivablePlanList.value = [] + receivablePlanList.value = await ReceivablePlanApi.getReceivablePlanSimpleList( + formData.value.customerId, + contractId + ) + // 设置金额 + const contract = contractList.value.find((item) => item.id === contractId) + if (contract) { + formData.value.price = contract.totalPrice - contract.totalReceivablePrice + } + } } -watch( - () => formData.value.customerId, - (newVal) => { - if (!newVal) { - return - } - getContractList(newVal) - }, - { - immediate: true + +/** 处理切换回款计划 */ +const handleReceivablePlanChange = (planId: number) => { + if (!planId) { + return } -) -watch( - () => formData.value.contractId, - (newVal) => { - if (!newVal) { - return - } - getReceivablePlanList(newVal) - }, - { - immediate: true + const receivablePlan = receivablePlanList.value.find((item) => item.id === planId) + if (!receivablePlan) { + return } -) -watch( - () => formData.value.planId, - (newVal) => { - if (!newVal) { - return - } - const receivablePlan = receivablePlanList.value.find((item) => item.id === newVal) - if (!receivablePlan) { - return - } - // 只有没有金额的时候才设置 - if (!formData.value.price || formData.value.price === 0) { - formData.value.price = receivablePlan.price - } - } -) + formData.value.price = receivablePlan.price + formData.value.returnType = receivablePlan.returnType +} diff --git a/src/views/crm/receivable/components/ReceivableList.vue b/src/views/crm/receivable/components/ReceivableList.vue index 587db1c5..67287ea7 100644 --- a/src/views/crm/receivable/components/ReceivableList.vue +++ b/src/views/crm/receivable/components/ReceivableList.vue @@ -1,7 +1,7 @@ - + 创建回款 @@ -12,7 +12,7 @@ - + - + @@ -67,6 +72,7 @@ import * as ReceivableApi from '@/api/crm/receivable' import ReceivableForm from './../ReceivableForm.vue' import { dateFormatter2 } from '@/utils/formatTime' import { DICT_TYPE } from '@/utils/dict' +import { erpPriceTableColumnFormatter } from '@/utils' defineOptions({ name: 'CrmReceivableList' }) const props = defineProps<{ @@ -117,7 +123,10 @@ const handleQuery = () => { /** 添加/修改操作 */ const formRef = ref() const openForm = (type: string, id?: number) => { - formRef.value.open(type, id) + formRef.value.open(type, id, { + customerId: props.customerId, + contractId: props.contractId + }) } /** 删除按钮操作 */ @@ -134,11 +143,12 @@ const handleDelete = async (id: number) => { } /** 从回款计划创建回款 */ -const crateReceivable = (planData: any) => { +const createReceivable = (planData: any) => { const data = planData as unknown as ReceivablePlanApi.ReceivablePlanVO formRef.value.open('create', undefined, data) } -defineExpose({ crateReceivable }) +defineExpose({ createReceivable }) + /** 监听打开的 customerId + contractId,从而加载最新的列表 */ watch( () => [props.customerId, props.contractId], diff --git a/src/views/crm/receivable/detail/ReceivableDetailsHeader.vue b/src/views/crm/receivable/detail/ReceivableDetailsHeader.vue new file mode 100644 index 00000000..62201dec --- /dev/null +++ b/src/views/crm/receivable/detail/ReceivableDetailsHeader.vue @@ -0,0 +1,43 @@ + + + + + + + {{ receivable.no }} + + + + + + + + + + + + + {{ receivable.customerName }} + + + {{ erpPriceInputFormatter(receivable.contract?.totalPrice) }} + + + {{ formatDate(receivable.returnTime) }} + + + {{ erpPriceInputFormatter(receivable.price) }} + + + {{ receivable.ownerUserName }} + + + + + diff --git a/src/views/crm/receivable/detail/ReceivableDetailsInfo.vue b/src/views/crm/receivable/detail/ReceivableDetailsInfo.vue new file mode 100644 index 00000000..003029fb --- /dev/null +++ b/src/views/crm/receivable/detail/ReceivableDetailsInfo.vue @@ -0,0 +1,62 @@ + + + + + + 基本信息 + + + {{ receivable.no }} + + {{ receivable.customerName }} + + + {{ receivable.contract?.no }} + + + {{ formatDate(receivable.returnTime, 'YYYY-MM-DD') }} + + + {{ erpPriceInputFormatter(receivable.price) }} + + + + + {{ receivable.remark }} + + + + + 系统信息 + + + + {{ receivable.ownerUserName }} + + + {{ receivable.creatorName }} + + + {{ formatDate(receivable.createTime) }} + + + {{ formatDate(receivable.updateTime) }} + + + + + + + diff --git a/src/views/crm/receivable/detail/index.vue b/src/views/crm/receivable/detail/index.vue new file mode 100644 index 00000000..ef9e8469 --- /dev/null +++ b/src/views/crm/receivable/detail/index.vue @@ -0,0 +1,100 @@ + + + + 编辑 + + + + + + + + + + + + + + + + + + + + diff --git a/src/views/crm/receivable/index.vue b/src/views/crm/receivable/index.vue index afacc34e..608f6158 100644 --- a/src/views/crm/receivable/index.vue +++ b/src/views/crm/receivable/index.vue @@ -66,10 +66,41 @@ + + + + + - - - + + + + {{ scope.row.no }} + + + + + + + {{ scope.row.customerName }} + + + + + + + {{ scope.row.contract.no }} + + + + - - - + + + + + + + @@ -141,31 +201,40 @@ - diff --git a/src/views/crm/receivable/plan/components/ReceivablePlanList.vue b/src/views/crm/receivable/plan/components/ReceivablePlanList.vue index 0a3b56d6..3b80526b 100644 --- a/src/views/crm/receivable/plan/components/ReceivablePlanList.vue +++ b/src/views/crm/receivable/plan/components/ReceivablePlanList.vue @@ -1,7 +1,7 @@ - + 创建回款计划 @@ -13,7 +13,13 @@ - + - - - - - 创建回款 @@ -86,8 +82,8 @@ diff --git a/src/views/crm/receivable/plan/detail/ReceivablePlanDetailsInfo.vue b/src/views/crm/receivable/plan/detail/ReceivablePlanDetailsInfo.vue new file mode 100644 index 00000000..c25259b1 --- /dev/null +++ b/src/views/crm/receivable/plan/detail/ReceivablePlanDetailsInfo.vue @@ -0,0 +1,83 @@ + + + + + + 基本信息 + + + {{ receivablePlan.period }} + + {{ receivablePlan.customerName }} + + + {{ receivablePlan.contractNo }} + + + {{ erpPriceInputFormatter(receivablePlan.price) }} + + + {{ formatDate(receivablePlan.returnTime, 'YYYY-MM-DD') }} + + + + + + {{ receivablePlan.remindDays }} + + {{ receivablePlan.remark }} + + + {{ erpPriceInputFormatter(receivablePlan.receivable.price) }} + + {{ erpPriceInputFormatter(0) }} + + + + {{ erpPriceInputFormatter(receivablePlan.price - receivablePlan.receivable.price) }} + + {{ erpPriceInputFormatter(receivablePlan.price) }} + + + {{ formatDate(receivablePlan.receivable?.returnTime, 'YYYY-MM-DD') }} + + + + + + 系统信息 + + + + {{ receivablePlan.ownerUserName }} + + + {{ receivablePlan.creatorName }} + + + {{ formatDate(receivablePlan.createTime) }} + + + {{ formatDate(receivablePlan.updateTime) }} + + + + + + + diff --git a/src/views/crm/receivable/plan/detail/index.vue b/src/views/crm/receivable/plan/detail/index.vue new file mode 100644 index 00000000..3d8a4598 --- /dev/null +++ b/src/views/crm/receivable/plan/detail/index.vue @@ -0,0 +1,103 @@ + + + + 编辑 + + + + + + + + + + + + + + + + + + + + diff --git a/src/views/crm/receivable/plan/index.vue b/src/views/crm/receivable/plan/index.vue index 39923080..cd01375e 100644 --- a/src/views/crm/receivable/plan/index.vue +++ b/src/views/crm/receivable/plan/index.vue @@ -66,11 +66,37 @@ + + + + - + + + + {{ scope.row.customerName }} + + + - - + + + + {{ scope.row.period }} + + + + - - - + - + - + + + + + {{ erpPriceInputFormatter(scope.row.receivable.price) }} + + {{ erpPriceInputFormatter(0) }} + + + + + + + {{ erpPriceInputFormatter(scope.row.price - scope.row.receivable.price) }} + + {{ erpPriceInputFormatter(scope.row.price) }} + + + + + + + + + 创建回款 + +