diff --git a/src/api/crm/project/index.ts b/src/api/crm/project/index.ts
index 4f9007fb3..cc9674d33 100644
--- a/src/api/crm/project/index.ts
+++ b/src/api/crm/project/index.ts
@@ -21,6 +21,7 @@ export interface ProjectVO {
supplementaryMaterials: string // 其他补充材料文件路径
type: number // 类型
partners: []
+ RevenueSharePartners: []
projectStatus: number // 状态
estimatedPiles: number //枪数
}
diff --git a/src/api/crm/receivable/index.ts b/src/api/crm/receivable/index.ts
index 72c1e118f..f2ce88552 100644
--- a/src/api/crm/receivable/index.ts
+++ b/src/api/crm/receivable/index.ts
@@ -8,8 +8,10 @@ export interface ReceivableVO {
customerId?: number
customerName?: string
contractId?: number
- type: number
+ receivableType: number
+ paymentType: number
deptId: number
+ deptName?: string
projectId?: number
contract?: {
id?: number
diff --git a/src/views/crm/contract/ContractForm.vue b/src/views/crm/contract/ContractForm.vue
index 8ecd8f864..38dce8ebc 100644
--- a/src/views/crm/contract/ContractForm.vue
+++ b/src/views/crm/contract/ContractForm.vue
@@ -205,7 +205,7 @@
-
+
diff --git a/src/views/crm/project/ProjectForm.vue b/src/views/crm/project/ProjectForm.vue
index b0771f8ac..46c08491d 100644
--- a/src/views/crm/project/ProjectForm.vue
+++ b/src/views/crm/project/ProjectForm.vue
@@ -9,7 +9,7 @@
>
-
+
-
+
+
+
+
+
附件
@@ -176,6 +185,7 @@
v-model="formData.buildPermit"
:isShowTip="false"
:limit="1"
+ :file-size="20"
:file-type="['pdf']"
/>
@@ -186,6 +196,7 @@
v-model="formData.ownershipProof"
:isShowTip="false"
:limit="1"
+ :file-size="20"
:file-type="['pdf']"
/>
@@ -198,6 +209,7 @@
v-model="formData.projectRecord"
:isShowTip="false"
:limit="1"
+ :file-size="20"
:file-type="['pdf']"
/>
@@ -208,6 +220,7 @@
v-model="formData.supplementaryMaterials"
:isShowTip="false"
:limit="5"
+ :file-size="20"
:file-type="['pdf']"
/>
@@ -220,6 +233,7 @@
v-model="formData.investmentAgreement"
:isShowTip="false"
:limit="1"
+ :file-size="20"
:file-type="['pdf']"
/>
@@ -230,6 +244,7 @@
v-model="formData.powerSupplyReply"
:isShowTip="false"
:limit="1"
+ :file-size="20"
:file-type="['pdf']"
/>
@@ -248,7 +263,8 @@ import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import * as DeptApi from '@/api/system/dept'
import * as ContractApi from '@/api/crm/contract'
import * as StationSiteApi from '@/api/crm/stationsite'
-import ProjectPartnetForm from './component/ProjectPartnetForm.vue'
+import ProjectPartnerForm from './component/ProjectPartnerForm.vue'
+import ProjectRevenueSharePartnerForm from './component/ProjectRevenueSharePartnerForm.vue'
import { totalCountFormat } from '@/views/mall/promotion/coupon/formatter'
import UploadFile from '@/components/UploadFile/src/UploadFile.vue'
@@ -278,6 +294,7 @@ const formData = ref({
investmentAgreement: undefined,
supplementaryMaterials: [],
partners:[],
+ revenueSharePartners:[],
type: undefined,
projectStatus: undefined,
powerSupplyType: undefined
@@ -300,6 +317,7 @@ const deptList = ref([])
const contractOptions = ref([]) // 合同列表
const siteOptions = ref([]) // 场地列表
const partnerFormRef = ref()
+const revenueSharePartnerFromRef = ref()
const estimatedPiles = ref(undefined)
/** 子表的表单 */
const subTabsName = ref('partner')
@@ -355,6 +373,10 @@ const submitForm = async () => {
message.error('请完善合伙人明细')
return
}
+ if (revenueSharePartnerFromRef.value && !(await revenueSharePartnerFromRef.value.validate())) {
+ message.error('请完善分成方明细')
+ return
+ }
// 提交请求
formLoading.value = true
try {
@@ -391,6 +413,7 @@ const resetForm = () => {
investmentAgreement: undefined,
supplementaryMaterials: [],
partners:[],
+ revenueSharePartners:[],
type: undefined,
projectStatus: undefined,
powerSupplyType: undefined
diff --git a/src/views/crm/project/component/ProjectPartnetForm.vue b/src/views/crm/project/component/ProjectPartnerForm.vue
similarity index 94%
rename from src/views/crm/project/component/ProjectPartnetForm.vue
rename to src/views/crm/project/component/ProjectPartnerForm.vue
index d25dc9b1f..ba3d2cd08 100644
--- a/src/views/crm/project/component/ProjectPartnetForm.vue
+++ b/src/views/crm/project/component/ProjectPartnerForm.vue
@@ -13,9 +13,9 @@
-
+
([])
const formData = ref([])
const formRules = reactive({
- customerId: [
+ userId: [
{ required: true, message: '项目合伙人不能为空', trigger: 'blur' },
{
validator: (_rule: any, value: string, callback: any) => {
// 检查合伙人是否重复
- const count = formData.value.filter(item => item.customerId === value).length
+ const count = formData.value.filter(item => item.userId === value).length
if (value && count > 1) {
callback(new Error('项目合伙人不能重复'))
} else {
@@ -108,7 +108,7 @@ onMounted(async () => {
const handleAdd = () => {
formData.value.push()
const row = {
- customerId: undefined,
+ userId: undefined,
ratio: undefined,
investment: undefined
}
diff --git a/src/views/crm/project/component/ProjectRevenueSharePartnerForm.vue b/src/views/crm/project/component/ProjectRevenueSharePartnerForm.vue
new file mode 100644
index 000000000..86e571cfb
--- /dev/null
+++ b/src/views/crm/project/component/ProjectRevenueSharePartnerForm.vue
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ —
+
+
+
+
+
+ + 添加分成方
+
+
+
diff --git a/src/views/crm/receivable/PaymentForm.vue b/src/views/crm/receivable/PaymentForm.vue
index 5e7fb9496..21ceec6bb 100644
--- a/src/views/crm/receivable/PaymentForm.vue
+++ b/src/views/crm/receivable/PaymentForm.vue
@@ -87,8 +87,8 @@
-
-
+
+
([]) // 合同列表
const receivablePlanList = ref([]) // 收款计划列表
const projectList = ref([]) // 项目列表
const maxPayableAmount = ref(Infinity)
-const showProject = computed(() => formData.value.type >= 11 && formData.value.type <= 14)
+const showProject = computed(() => formData.value.paymentType >= 11 && formData.value.paymentType <= 14)
/** 打开弹窗 */
const open = async (
@@ -316,7 +316,7 @@ const handleReceivablePlanChange = (planId: number) => {
watch(
- () => formData.value.type,
+ () => formData.value.paymentType,
(val) => {
if (val === 11 || val === 12 || val === 13 || val === 14) {
formRules.projectId = [{ required: true, message: '项目名称不能为空', trigger: 'change' }]
diff --git a/src/views/crm/receivable/ReceivableForm.vue b/src/views/crm/receivable/ReceivableForm.vue
index 79d9b89a5..a9a6a61d5 100644
--- a/src/views/crm/receivable/ReceivableForm.vue
+++ b/src/views/crm/receivable/ReceivableForm.vue
@@ -122,8 +122,8 @@
-
-
+
+
({} as ReceivableApi.ReceivableVO)
const formRules = reactive({
customerId: [{ required: true, message: '客户不能为空', trigger: 'blur' }],
- contractId: [{ required: true, message: '合同不能为空', trigger: 'blur' }],
+ // contractId: [{ required: true, message: '合同不能为空', trigger: 'blur' }],
returnTime: [{ required: true, message: '付款日期不能为空', trigger: 'blur' }],
price: [{ required: true, message: '付款金额不能为空', trigger: 'blur' }],
date: [{ required: true, message: '日期不能为空', trigger: 'blur' }],
@@ -207,7 +207,7 @@ const contractList = ref([]) // 合同列表
const receivablePlanList = ref([]) // 付款计划列表
const projectList = ref([]) // 项目列表
const maxPayableAmount = ref(Infinity)
-const showProject = computed(() => formData.value.type >= 1 && formData.value.type <= 7)
+const showProject = computed(() => formData.value.receivableType >= 1 && formData.value.receivableType <= 7)
/** 打开弹窗 */
const open = async (
@@ -249,6 +249,7 @@ const open = async (
formData.value.customerId = receivablePlan.customerId
formData.value.period = receivablePlan.period
formData.value.remark = receivablePlan.remark
+ formData.value.deptId = receivablePlan.deptId
await handleCustomerChange(receivablePlan.customerId)
if (receivablePlan.contractId) {
formData.value.contractId = receivablePlan.contractId
@@ -349,7 +350,7 @@ const handleReceivablePlanChange = (planId: number) => {
}
watch(
- () => formData.value.type,
+ () => formData.value.receivableType,
(val) => {
if (val === 1 || val === 2 || val === 3 || val === 4 || val === 5 || val === 6 || val === 7) {
formRules.projectId = [{ required: true, message: '项目名称不能为空', trigger: 'change' }]
diff --git a/src/views/crm/receivable/index.vue b/src/views/crm/receivable/index.vue
index da329906d..0b5f6ae73 100644
--- a/src/views/crm/receivable/index.vue
+++ b/src/views/crm/receivable/index.vue
@@ -27,6 +27,7 @@
v-model="queryParams.customerId"
class="!w-240px"
placeholder="请选择实际收付单位"
+ filterable
@keyup.enter="handleQuery"
>
-
+
+
-
+
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.projectName }}
@@ -318,6 +347,7 @@ import * as ReceivableApi from '@/api/crm/receivable'
import ReceivableForm from './ReceivableForm.vue'
import * as CustomerApi from '@/api/crm/customer'
import * as DeptApi from '@/api/system/dept'
+import * as ProjectApi from '@/api/crm/project'
import { TabsPaneContext } from 'element-plus'
import { erpPriceInputFormatter } from '@/utils'
import { is } from 'bpmn-js/lib/util/ModelUtil'
@@ -337,8 +367,10 @@ const queryParams = reactive({
sceneType: undefined, // 默认和 activeName 相等
returnTime: [], // 收付日期
customerId: undefined,
+ projectId: undefined,
deptId: undefined, // 收付主体
- type: undefined,
+ paymentType: undefined,
+ receivableType: undefined,
priceMin: undefined, // 金额最小值
priceMax: undefined, // 金额最大值
isDeposit: undefined, // 是否押金
@@ -350,6 +382,7 @@ const exportLoading = ref(false) // 导出的加载中
const activeName = ref('1') // 列表 tab
const customerList = ref([]) // 客户列表
const deptList = ref([])
+const projectList = ref([])
const showSummaryDialog = ref(false)
const options = ref([
{ label: '是', value: 1 },
@@ -461,6 +494,8 @@ onMounted(async () => {
customerList.value = await CustomerApi.getCustomerSimpleList()
// 加载部门列表
deptList.value = await DeptApi.querySimpleDeptList(2)
+ // 加载项目列表
+ projectList.value = await ProjectApi.getProjectSimpleList()
})
watch(
diff --git a/src/views/crm/receivable/plan/ReceivablePlanForm.vue b/src/views/crm/receivable/plan/ReceivablePlanForm.vue
index 899919459..784ccc543 100644
--- a/src/views/crm/receivable/plan/ReceivablePlanForm.vue
+++ b/src/views/crm/receivable/plan/ReceivablePlanForm.vue
@@ -16,7 +16,7 @@
@@ -190,6 +190,9 @@ const open = async (type: string, id?: number, customerId?: number, contractId?:
}
if (contractId) {
formData.value.contractId = contractId
+ const contractData = await ContractApi.getContract(contractId)
+ formData.value.deptId = contractData.deptId
+ formData.value.deptName = contractData.deptName
}
}
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
diff --git a/src/views/crm/receivable/plan/index.vue b/src/views/crm/receivable/plan/index.vue
index fb319e126..a9510ee12 100644
--- a/src/views/crm/receivable/plan/index.vue
+++ b/src/views/crm/receivable/plan/index.vue
@@ -207,14 +207,14 @@
>
创建付款
-
编辑
-
+ -->
+
+
+
+
+
+
@@ -95,7 +112,7 @@
>
- {{ erpPriceInputFormatter(scope.row.receivable.price) }}
+ {{ erpPriceInputFormatter((scope.row.receivable && Array.isArray(scope.row.receivable) && scope.row.receivable.length > 0) ? scope.row.receivable.reduce((sum, r) => sum + (r.price || 0), 0) : 0) }}
{{ erpPriceInputFormatter(0) }}
@@ -115,16 +132,21 @@
>
- {{ erpPriceInputFormatter(scope.row.price - scope.row.receivable.price) }}
+ {{ erpPriceInputFormatter(scope.row.price - ((scope.row.receivable && Array.isArray(scope.row.receivable) && scope.row.receivable.length > 0) ? scope.row.receivable.reduce((sum, r) => sum + (r.price || 0), 0) : 0)) }}
{{ erpPriceInputFormatter(scope.row.price) }}
-
+
+
+
+
+
+
{{ scope.row.creatorName }}
@@ -175,7 +197,7 @@