项目 付款优化
parent
0043a5e0d8
commit
b20779bf9f
|
|
@ -20,6 +20,7 @@ export interface ProjectVO {
|
||||||
investmentAgreement: string // 合作投资协议
|
investmentAgreement: string // 合作投资协议
|
||||||
supplementaryMaterials: string // 其他补充材料文件路径
|
supplementaryMaterials: string // 其他补充材料文件路径
|
||||||
type: number // 类型
|
type: number // 类型
|
||||||
|
partners: []
|
||||||
projectStatus: number // 状态
|
projectStatus: number // 状态
|
||||||
estimatedPiles: number //枪数
|
estimatedPiles: number //枪数
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,6 @@ export interface ReceivableVO {
|
||||||
no: string
|
no: string
|
||||||
totalPrice: number
|
totalPrice: number
|
||||||
}
|
}
|
||||||
isDeposit: boolean
|
|
||||||
auditStatus: number
|
auditStatus: number
|
||||||
processInstanceId: number
|
processInstanceId: number
|
||||||
returnTime: Date
|
returnTime: Date
|
||||||
|
|
|
||||||
|
|
@ -207,6 +207,7 @@ export enum DICT_TYPE {
|
||||||
CRM_RECEIVABLE_RETURN_TYPE = 'crm_receivable_return_type', // CRM 付款的付款方式
|
CRM_RECEIVABLE_RETURN_TYPE = 'crm_receivable_return_type', // CRM 付款的付款方式
|
||||||
CRM_RECEIVABLE_TRANSACTION_TYPE = 'crm_receivable_transaction_type', // CRM 付款的收支方向
|
CRM_RECEIVABLE_TRANSACTION_TYPE = 'crm_receivable_transaction_type', // CRM 付款的收支方向
|
||||||
CRM_RECEIVABLE_TYPE = 'crm_receivable_type', // CRM 付款类型
|
CRM_RECEIVABLE_TYPE = 'crm_receivable_type', // CRM 付款类型
|
||||||
|
CRM_PAYMENT_TYPE = 'crm_payment_type', // CRM 收款类型
|
||||||
CRM_RECEIVABLE_PLAN_STATUS = 'crm_receivable_plan_status', // CRM 付款计划状态
|
CRM_RECEIVABLE_PLAN_STATUS = 'crm_receivable_plan_status', // CRM 付款计划状态
|
||||||
CRM_CUSTOMER_INDUSTRY = 'crm_customer_industry', // CRM 客户所属行业
|
CRM_CUSTOMER_INDUSTRY = 'crm_customer_industry', // CRM 客户所属行业
|
||||||
CRM_CUSTOMER_DEAL_STATUS = 'crm_customer_deal_status', // CRM 客户成交状态
|
CRM_CUSTOMER_DEAL_STATUS = 'crm_customer_deal_status', // CRM 客户成交状态
|
||||||
|
|
@ -222,6 +223,7 @@ export enum DICT_TYPE {
|
||||||
CRM_CONTRACT_STATUS = 'crm_contract_status', // CRM 合同状态
|
CRM_CONTRACT_STATUS = 'crm_contract_status', // CRM 合同状态
|
||||||
CRM_CONTRACT_ATTRIBUTE = 'crm_contract_attribute', // CRM 合同属性
|
CRM_CONTRACT_ATTRIBUTE = 'crm_contract_attribute', // CRM 合同属性
|
||||||
CRM_PROJECT_TYPE = 'crm_project_type', // CRM 项目类型
|
CRM_PROJECT_TYPE = 'crm_project_type', // CRM 项目类型
|
||||||
|
CRM_PROJECT_POWER_SUPPLY_TYPE = 'crm_project_power_supply_type', // CRM 项目供电模式
|
||||||
|
|
||||||
// ========== ERP - 企业资源计划模块 ==========
|
// ========== ERP - 企业资源计划模块 ==========
|
||||||
ERP_AUDIT_STATUS = 'erp_audit_status', // ERP 审批状态
|
ERP_AUDIT_STATUS = 'erp_audit_status', // ERP 审批状态
|
||||||
|
|
|
||||||
|
|
@ -150,7 +150,6 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
|
|
||||||
<el-col>
|
<el-col>
|
||||||
<el-form-item label="备注" prop="remark">
|
<el-form-item label="备注" prop="remark">
|
||||||
<el-input v-model="formData.remark" placeholder="请输入备注" type="textarea" />
|
<el-input v-model="formData.remark" placeholder="请输入备注" type="textarea" />
|
||||||
|
|
|
||||||
|
|
@ -61,8 +61,8 @@
|
||||||
<el-radio-group
|
<el-radio-group
|
||||||
v-model="formData.projectStatus"
|
v-model="formData.projectStatus"
|
||||||
>
|
>
|
||||||
<el-radio value="0">关闭</el-radio>
|
<el-radio :value=0>开启</el-radio>
|
||||||
<el-radio value="1">开启</el-radio>
|
<el-radio :value=1>关闭</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
@ -141,24 +141,38 @@
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
<el-col :span="12">
|
||||||
|
<el-form-item label="供电类型" prop="powerSupplyType">
|
||||||
<el-row>
|
<el-select v-model="formData.powerSupplyType" placeholder="请选择类型">
|
||||||
<el-col>
|
<el-option
|
||||||
<el-form-item v-if="formData.type === 2" label="合伙人明细">
|
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_PROJECT_POWER_SUPPLY_TYPE)"
|
||||||
<ProjectPartnetForm
|
:key="dict.value"
|
||||||
ref="partnerFormRef"
|
:label="dict.label"
|
||||||
v-model:partners="formData.partners"
|
:value="dict.value"
|
||||||
:disabled="formLoading"
|
|
||||||
:price="formData.totalInvestment"
|
|
||||||
/>
|
/>
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col>
|
||||||
|
<el-tabs v-if="formData.type === 2" v-model="subTabsName" class="-mt-15px mb-10px">
|
||||||
|
<el-tab-pane label="合伙人明细" name="partner">
|
||||||
|
<ProjectPartnetForm
|
||||||
|
ref="partnerFormRef"
|
||||||
|
:partners="formData.partners"
|
||||||
|
:disabled="formLoading"
|
||||||
|
:price="formData.totalInvestment"
|
||||||
|
/>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
{{formData }}
|
||||||
|
<el-divider>附件</el-divider>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="同意建桩证明" prop="buildPermit">
|
<el-form-item label="同意建桩证明" prop="buildPermit" label-width="120px">
|
||||||
<UploadFile
|
<UploadFile
|
||||||
v-model="formData.buildPermit"
|
v-model="formData.buildPermit"
|
||||||
:isShowTip="false"
|
:isShowTip="false"
|
||||||
|
|
@ -168,7 +182,7 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="场地权属证明" prop="ownershipProof">
|
<el-form-item label="场地权属证明" prop="ownershipProof" label-width="120px">
|
||||||
<UploadFile
|
<UploadFile
|
||||||
v-model="formData.ownershipProof"
|
v-model="formData.ownershipProof"
|
||||||
:isShowTip="false"
|
:isShowTip="false"
|
||||||
|
|
@ -180,7 +194,7 @@
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="项目备案" prop="projectRecord">
|
<el-form-item label="项目备案" prop="projectRecord" label-width="120px">
|
||||||
<UploadFile
|
<UploadFile
|
||||||
v-model="formData.projectRecord"
|
v-model="formData.projectRecord"
|
||||||
:isShowTip="false"
|
:isShowTip="false"
|
||||||
|
|
@ -190,29 +204,7 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="供电答复单" prop="powerSupplyReply">
|
<el-form-item label="其他补充材料" prop="supplementaryMaterials" label-width="120px">
|
||||||
<UploadFile
|
|
||||||
v-model="formData.powerSupplyReply"
|
|
||||||
:isShowTip="false"
|
|
||||||
:limit="1"
|
|
||||||
:file-type="['pdf']"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row>
|
|
||||||
<el-col v-if="formData.type === 2" :span="12">
|
|
||||||
<el-form-item label="合作投资协议" prop="investmentAgreement">
|
|
||||||
<UploadFile
|
|
||||||
v-model="formData.investmentAgreement"
|
|
||||||
:isShowTip="false"
|
|
||||||
:limit="1"
|
|
||||||
:file-type="['pdf']"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="其他补充材料" prop="supplementaryMaterials">
|
|
||||||
<UploadFile
|
<UploadFile
|
||||||
v-model="formData.supplementaryMaterials"
|
v-model="formData.supplementaryMaterials"
|
||||||
:isShowTip="false"
|
:isShowTip="false"
|
||||||
|
|
@ -222,7 +214,28 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col v-if="formData.type === 2" :span="12">
|
||||||
|
<el-form-item label="合作投资协议" prop="investmentAgreement" label-width="120px">
|
||||||
|
<UploadFile
|
||||||
|
v-model="formData.investmentAgreement"
|
||||||
|
:isShowTip="false"
|
||||||
|
:limit="1"
|
||||||
|
:file-type="['pdf']"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item v-if="formData.powerSupplyType === 2" label="供电答复单" prop="powerSupplyReply" label-width="120px">
|
||||||
|
<UploadFile
|
||||||
|
v-model="formData.powerSupplyReply"
|
||||||
|
:isShowTip="false"
|
||||||
|
:limit="1"
|
||||||
|
:file-type="['pdf']"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||||
|
|
@ -256,35 +269,41 @@ const formData = ref({
|
||||||
deptId: undefined,
|
deptId: undefined,
|
||||||
siteId: undefined,
|
siteId: undefined,
|
||||||
totalInvestment: 0,
|
totalInvestment: 0,
|
||||||
partner: undefined,
|
|
||||||
ratio: undefined,
|
|
||||||
investment: 0,
|
|
||||||
cooperationAgreement: undefined,
|
|
||||||
purchaseContractId: undefined,
|
purchaseContractId: undefined,
|
||||||
|
cooperationAgreement:undefined,
|
||||||
epcContractId: undefined,
|
epcContractId: undefined,
|
||||||
buildPermit: '',
|
buildPermit: undefined,
|
||||||
ownershipProof: '',
|
ownershipProof: undefined,
|
||||||
projectRecord: '',
|
projectRecord: undefined,
|
||||||
powerSupplyReply: '',
|
powerSupplyReply: undefined,
|
||||||
investmentAgreement: '',
|
investmentAgreement: undefined,
|
||||||
supplementaryMaterials: [],
|
supplementaryMaterials: [],
|
||||||
partners:[],
|
partners:[],
|
||||||
type: undefined,
|
type: undefined,
|
||||||
projectStatus: undefined
|
projectStatus: undefined,
|
||||||
|
powerSupplyType: undefined
|
||||||
})
|
})
|
||||||
const formRules = reactive({
|
const formRules = computed(() => ({
|
||||||
deptId: [{ required: true, message: '部门ID不能为空', trigger: 'blur' }],
|
deptId: [{ required: true, message: '部门ID不能为空', trigger: 'blur' }],
|
||||||
siteId: [{ required: true, message: '场地ID不能为空', trigger: 'blur' }],
|
siteId: [{ required: true, message: '场地ID不能为空', trigger: 'blur' }],
|
||||||
totalInvestment: [{ required: true, message: '项目总投资额不能为空', trigger: 'blur' }],
|
totalInvestment: [{ required: true, message: '项目总投资额不能为空', trigger: 'blur' }],
|
||||||
type: [{ required: true, message: '类型不能为空', trigger: 'change' }],
|
type: [{ required: true, message: '类型不能为空', trigger: 'change' }],
|
||||||
projectStatus: [{ required: true, message: '状态不能为空', trigger: 'blur' }],
|
projectStatus: [{ required: true, message: '状态不能为空', trigger: 'blur' }],
|
||||||
})
|
powerSupplyType: [{ required: true, message: '供电类型不能为空', trigger: 'blur' }],
|
||||||
|
powerSupplyReply : formData.value.powerSupplyType === 2 ? [{ required: true, message: '供电答复单不能为空', trigger: 'blur' }] : [],
|
||||||
|
investmentAgreement: formData.value.type === 2 ?[{ required: true, message: '合作投资协议不能为空', trigger: 'blur' }] : [],
|
||||||
|
cooperationAgreement: [{ required: true, message: '场地合同不能为空', trigger: 'blur' }],
|
||||||
|
epcContractId: [{ required: true, message: 'EPC合同不能为空', trigger: 'blur' }],
|
||||||
|
purchaseContractId: [{ required: true, message: '设备合同不能为空', trigger: 'blur' }],
|
||||||
|
}))
|
||||||
const formRef = ref() // 表单 Ref
|
const formRef = ref() // 表单 Ref
|
||||||
const deptList = ref<DeptApi.DeptVO[]>([])
|
const deptList = ref<DeptApi.DeptVO[]>([])
|
||||||
const contractOptions = ref<ContractApi.ContractVO[]>([]) // 合同列表
|
const contractOptions = ref<ContractApi.ContractVO[]>([]) // 合同列表
|
||||||
const siteOptions = ref<StationSiteApi.StationSiteVO[]>([]) // 场地列表
|
const siteOptions = ref<StationSiteApi.StationSiteVO[]>([]) // 场地列表
|
||||||
const partnerFormRef = ref()
|
const partnerFormRef = ref()
|
||||||
const estimatedPiles = ref<number | undefined>(undefined)
|
const estimatedPiles = ref<number | undefined>(undefined)
|
||||||
|
/** 子表的表单 */
|
||||||
|
const subTabsName = ref('partner')
|
||||||
const gunCost = computed(() => {
|
const gunCost = computed(() => {
|
||||||
if (!estimatedPiles.value || !formData.value.totalInvestment) return ''
|
if (!estimatedPiles.value || !formData.value.totalInvestment) return ''
|
||||||
if (Number(estimatedPiles.value) === 0) return ''
|
if (Number(estimatedPiles.value) === 0) return ''
|
||||||
|
|
@ -363,21 +382,19 @@ const resetForm = () => {
|
||||||
deptId: undefined,
|
deptId: undefined,
|
||||||
siteId: undefined,
|
siteId: undefined,
|
||||||
totalInvestment: 0,
|
totalInvestment: 0,
|
||||||
partner: undefined,
|
|
||||||
ratio: undefined,
|
|
||||||
investment: 0,
|
|
||||||
cooperationAgreement: undefined,
|
|
||||||
purchaseContractId: undefined,
|
purchaseContractId: undefined,
|
||||||
|
cooperationAgreement:undefined,
|
||||||
epcContractId: undefined,
|
epcContractId: undefined,
|
||||||
buildPermit: '',
|
buildPermit: undefined,
|
||||||
ownershipProof: '',
|
ownershipProof: undefined,
|
||||||
projectRecord: '',
|
projectRecord: undefined,
|
||||||
powerSupplyReply: '',
|
powerSupplyReply: undefined,
|
||||||
investmentAgreement: '',
|
investmentAgreement: undefined,
|
||||||
supplementaryMaterials: [],
|
supplementaryMaterials: [],
|
||||||
partners:[],
|
partners:[],
|
||||||
type: undefined,
|
type: undefined,
|
||||||
projectStatus: undefined
|
projectStatus: undefined,
|
||||||
|
powerSupplyType: undefined
|
||||||
}
|
}
|
||||||
formRef.value?.resetFields()
|
formRef.value?.resetFields()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,9 +13,9 @@
|
||||||
<el-table-column label="序号" type="index" align="center" width="60" />
|
<el-table-column label="序号" type="index" align="center" width="60" />
|
||||||
<el-table-column label="项目合伙人" min-width="180">
|
<el-table-column label="项目合伙人" min-width="180">
|
||||||
<template #default="{ row, $index }">
|
<template #default="{ row, $index }">
|
||||||
<el-form-item :prop="`${$index}.partner`" :rules="formRules.partner" class="mb-0px!">
|
<el-form-item :prop="`${$index}.customerId`" :rules="formRules.customerId" class="mb-0px!">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="row.partner"
|
v-model="row.customerId"
|
||||||
filterable
|
filterable
|
||||||
clearable
|
clearable
|
||||||
placeholder="请选择"
|
placeholder="请选择"
|
||||||
|
|
@ -39,13 +39,14 @@
|
||||||
:min="0"
|
:min="0"
|
||||||
:step="1"
|
:step="1"
|
||||||
:max="getMaxRatio($index)"
|
:max="getMaxRatio($index)"
|
||||||
|
:precision="4"
|
||||||
placeholder="请输入比例"
|
placeholder="请输入比例"
|
||||||
class="w-1/1"
|
class="w-1/1"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="投资额(万元)" min-width="150">
|
<el-table-column label="投资额(元)" min-width="150">
|
||||||
<template #default="{ row, $index }">
|
<template #default="{ row, $index }">
|
||||||
<el-form-item :prop="`${$index}.investment`" class="mb-0px!">
|
<el-form-item :prop="`${$index}.investment`" class="mb-0px!">
|
||||||
<el-input v-model="row.investment" placeholder="自动计算" :value="calcInvestment(row)" readonly />
|
<el-input v-model="row.investment" placeholder="自动计算" :value="calcInvestment(row)" readonly />
|
||||||
|
|
@ -79,12 +80,12 @@ const userOptions = ref<any[]>([])
|
||||||
const formData = ref([])
|
const formData = ref([])
|
||||||
|
|
||||||
const formRules = reactive({
|
const formRules = reactive({
|
||||||
partner: [
|
customerId: [
|
||||||
{ required: true, message: '项目合伙人不能为空', trigger: 'blur' },
|
{ required: true, message: '项目合伙人不能为空', trigger: 'blur' },
|
||||||
{
|
{
|
||||||
validator: (_rule: any, value: string, callback: any) => {
|
validator: (_rule: any, value: string, callback: any) => {
|
||||||
// 检查合伙人是否重复
|
// 检查合伙人是否重复
|
||||||
const count = formData.value.filter(item => item.partner === value).length
|
const count = formData.value.filter(item => item.customerId === value).length
|
||||||
if (value && count > 1) {
|
if (value && count > 1) {
|
||||||
callback(new Error('项目合伙人不能重复'))
|
callback(new Error('项目合伙人不能重复'))
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -107,9 +108,9 @@ onMounted(async () => {
|
||||||
const handleAdd = () => {
|
const handleAdd = () => {
|
||||||
formData.value.push()
|
formData.value.push()
|
||||||
const row = {
|
const row = {
|
||||||
partner: '',
|
customerId: undefined,
|
||||||
ratio: '',
|
ratio: undefined,
|
||||||
investment: ''
|
investment: undefined
|
||||||
}
|
}
|
||||||
formData.value.push(row)
|
formData.value.push(row)
|
||||||
}
|
}
|
||||||
|
|
@ -132,7 +133,9 @@ const validate = async () => {
|
||||||
const calcInvestment = (row) => {
|
const calcInvestment = (row) => {
|
||||||
const ratio = Number(row.ratio) || 0
|
const ratio = Number(row.ratio) || 0
|
||||||
const price = Number(props.price) || 0
|
const price = Number(props.price) || 0
|
||||||
return ratio && price ? ((ratio * price) / 100).toFixed(2) : ''
|
const investment = Number( ((ratio * price) * 100).toFixed(2) ) || 0
|
||||||
|
row.investment = investment
|
||||||
|
return investment
|
||||||
}
|
}
|
||||||
const getMaxRatio = (index: number) => {
|
const getMaxRatio = (index: number) => {
|
||||||
// 计算除当前行外,其他合伙人已占用的比例
|
// 计算除当前行外,其他合伙人已占用的比例
|
||||||
|
|
@ -140,11 +143,11 @@ const getMaxRatio = (index: number) => {
|
||||||
return Math.max(0, 100 - used)
|
return Math.max(0, 100 - used)
|
||||||
}
|
}
|
||||||
watch(
|
watch(
|
||||||
() => formData.value,
|
() => props.partners,
|
||||||
(val) => {
|
(val) => {
|
||||||
emit('update:partners', val)
|
formData.value = val || []
|
||||||
},
|
},
|
||||||
{ deep: true }
|
{ immediate: true }
|
||||||
)
|
)
|
||||||
|
|
||||||
defineExpose({ validate })
|
defineExpose({ validate })
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,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" label="项目名称" prop="deptName" min-width="300"/>
|
<el-table-column align="center" label="项目名称" prop="deptName" min-width="300"/>
|
||||||
|
|
||||||
<el-table-column label="项目总投资额(万元)" align="center" prop="totalInvestment" width="180"/>
|
<el-table-column label="项目总投资额(万元)" align="center" prop="totalInvestment" width="180"/>
|
||||||
<el-table-column label="枪数" align="center" prop="estimatedPiles" />
|
<el-table-column label="枪数" align="center" prop="estimatedPiles" />
|
||||||
<el-table-column label="单枪成本(万元)" align="center" min-width="120">
|
<el-table-column label="单枪成本(万元)" align="center" min-width="120">
|
||||||
|
|
@ -88,8 +89,12 @@
|
||||||
<dict-tag :type="DICT_TYPE.CRM_PROJECT_TYPE" :value="scope.row.type" />
|
<dict-tag :type="DICT_TYPE.CRM_PROJECT_TYPE" :value="scope.row.type" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="项目合伙人" align="center" prop="ownerUserId" min-width="160" />
|
|
||||||
|
|
||||||
|
<el-table-column align="center" label="供电模式" prop="type" width="160">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :type="DICT_TYPE.CRM_PROJECT_POWER_SUPPLY_TYPE" :value="scope.row.powerSupplyType" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column align="center" label="状态" prop="projectStatus" width="160">
|
<el-table-column align="center" label="状态" prop="projectStatus" width="160">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.projectStatus" />
|
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.projectStatus" />
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,6 @@
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="付款单位" prop="customerId">
|
<el-form-item label="付款单位" prop="customerId">
|
||||||
<el-select
|
<el-select
|
||||||
|
|
@ -89,10 +87,10 @@
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="收支类型" prop="type">
|
<el-form-item label="收入类型" prop="type">
|
||||||
<el-select v-model="formData.type" placeholder="请选择收支类型" class="w-1/1">
|
<el-select v-model="formData.type" placeholder="请选择收入类型" class="w-1/1">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_RECEIVABLE_TYPE)"
|
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_PAYMENT_TYPE)"
|
||||||
:key="dict.value"
|
:key="dict.value"
|
||||||
:label="dict.label"
|
:label="dict.label"
|
||||||
:value="dict.value"
|
:value="dict.value"
|
||||||
|
|
@ -100,8 +98,6 @@
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12" v-if="showProject">
|
<el-col :span="12" v-if="showProject">
|
||||||
<el-form-item label="项目名称" prop="projectId">
|
<el-form-item label="项目名称" prop="projectId">
|
||||||
<el-select
|
<el-select
|
||||||
|
|
@ -120,11 +116,6 @@
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="是否押金" prop="isDeposit">
|
|
||||||
<el-switch v-model="formData.isDeposit" active-text="是" inactive-text="否" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
|
|
@ -162,7 +153,6 @@ const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||||
const formData = ref<ReceivableApi.ReceivableVO & {
|
const formData = ref<ReceivableApi.ReceivableVO & {
|
||||||
date?: number | string
|
date?: number | string
|
||||||
projectId?: number
|
projectId?: number
|
||||||
isDeposit?: boolean
|
|
||||||
}>({} as ReceivableApi.ReceivableVO)
|
}>({} as ReceivableApi.ReceivableVO)
|
||||||
const formRules = reactive({
|
const formRules = reactive({
|
||||||
customerId: [{ required: true, message: '客户不能为空', trigger: 'blur' }],
|
customerId: [{ required: true, message: '客户不能为空', trigger: 'blur' }],
|
||||||
|
|
@ -172,7 +162,6 @@ const formRules = reactive({
|
||||||
content: [{ required: true, message: '备注不能为空', trigger: 'blur' }],
|
content: [{ required: true, message: '备注不能为空', trigger: 'blur' }],
|
||||||
type: [{ required: true, message: '收支类型不能为空', trigger: 'change' }],
|
type: [{ required: true, message: '收支类型不能为空', trigger: 'change' }],
|
||||||
projectId: [{ required: true, message: '项目名称不能为空', trigger: 'change' }],
|
projectId: [{ required: true, message: '项目名称不能为空', trigger: 'change' }],
|
||||||
isDeposit: [{ required: true, message: '请选择是否押金', trigger: 'change' }],
|
|
||||||
remark: [{ required: true, message: '备注不能为空', trigger: 'blur' }]
|
remark: [{ required: true, message: '备注不能为空', trigger: 'blur' }]
|
||||||
})
|
})
|
||||||
const formRef = ref() // 表单 Ref
|
const formRef = ref() // 表单 Ref
|
||||||
|
|
@ -182,7 +171,7 @@ const contractList = ref<ContractApi.ContractVO[]>([]) // 合同列表
|
||||||
const receivablePlanList = ref<ReceivablePlanApi.ReceivablePlanVO[]>([]) // 收款计划列表
|
const receivablePlanList = ref<ReceivablePlanApi.ReceivablePlanVO[]>([]) // 收款计划列表
|
||||||
const projectList = ref<ProjectApi.ProjectVO[]>([]) // 项目列表
|
const projectList = ref<ProjectApi.ProjectVO[]>([]) // 项目列表
|
||||||
const maxPayableAmount = ref(Infinity)
|
const maxPayableAmount = ref(Infinity)
|
||||||
const showProject = computed(() => formData.value.type === 1 || formData.value.type === 2)
|
const showProject = computed(() => formData.value.type >= 11 && formData.value.type <= 14)
|
||||||
|
|
||||||
/** 打开弹窗 */
|
/** 打开弹窗 */
|
||||||
const open = async (
|
const open = async (
|
||||||
|
|
@ -277,7 +266,6 @@ const submitForm = async () => {
|
||||||
const resetForm = () => {
|
const resetForm = () => {
|
||||||
formData.value = {} as ReceivableApi.ReceivableVO
|
formData.value = {} as ReceivableApi.ReceivableVO
|
||||||
formRef.value?.resetFields()
|
formRef.value?.resetFields()
|
||||||
formData.value.isDeposit = false // 默认不是押金
|
|
||||||
formData.value.transactionType = 0 // 默认收支方向为收入
|
formData.value.transactionType = 0 // 默认收支方向为收入
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -330,7 +318,7 @@ const handleReceivablePlanChange = (planId: number) => {
|
||||||
watch(
|
watch(
|
||||||
() => formData.value.type,
|
() => formData.value.type,
|
||||||
(val) => {
|
(val) => {
|
||||||
if (val === 1 || val === 2) {
|
if (val === 11 || val === 12 || val === 13 || val === 14) {
|
||||||
formRules.projectId = [{ required: true, message: '项目名称不能为空', trigger: 'change' }]
|
formRules.projectId = [{ required: true, message: '项目名称不能为空', trigger: 'change' }]
|
||||||
} else {
|
} else {
|
||||||
formRules.projectId = []
|
formRules.projectId = []
|
||||||
|
|
|
||||||
|
|
@ -119,16 +119,11 @@
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="是否押金" prop="isDeposit">
|
|
||||||
<el-switch v-model="formData.isDeposit" active-text="是" inactive-text="否" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="收支类型" prop="type">
|
<el-form-item label="支出类型" prop="type">
|
||||||
<el-select v-model="formData.type" placeholder="请选择收支类型" class="w-1/1">
|
<el-select v-model="formData.type" placeholder="请选择支出类型" class="w-1/1">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_RECEIVABLE_TYPE)"
|
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_RECEIVABLE_TYPE)"
|
||||||
:key="dict.value"
|
:key="dict.value"
|
||||||
|
|
@ -193,7 +188,6 @@ const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||||
const formData = ref<ReceivableApi.ReceivableVO & {
|
const formData = ref<ReceivableApi.ReceivableVO & {
|
||||||
date?: number | string
|
date?: number | string
|
||||||
projectId?: number
|
projectId?: number
|
||||||
isDeposit?: boolean
|
|
||||||
}>({} as ReceivableApi.ReceivableVO)
|
}>({} as ReceivableApi.ReceivableVO)
|
||||||
const formRules = reactive({
|
const formRules = reactive({
|
||||||
customerId: [{ required: true, message: '客户不能为空', trigger: 'blur' }],
|
customerId: [{ required: true, message: '客户不能为空', trigger: 'blur' }],
|
||||||
|
|
@ -204,7 +198,6 @@ const formRules = reactive({
|
||||||
content: [{ required: true, message: '备注不能为空', trigger: 'blur' }],
|
content: [{ required: true, message: '备注不能为空', trigger: 'blur' }],
|
||||||
type: [{ required: true, message: '收支类型不能为空', trigger: 'change' }],
|
type: [{ required: true, message: '收支类型不能为空', trigger: 'change' }],
|
||||||
projectId: [{ required: true, message: '项目名称不能为空', trigger: 'change' }],
|
projectId: [{ required: true, message: '项目名称不能为空', trigger: 'change' }],
|
||||||
isDeposit: [{ required: true, message: '请选择是否押金', trigger: 'change' }],
|
|
||||||
remark: [{ required: true, message: '备注不能为空', trigger: 'blur' }]
|
remark: [{ required: true, message: '备注不能为空', trigger: 'blur' }]
|
||||||
})
|
})
|
||||||
const formRef = ref() // 表单 Ref
|
const formRef = ref() // 表单 Ref
|
||||||
|
|
@ -214,7 +207,7 @@ const contractList = ref<ContractApi.ContractVO[]>([]) // 合同列表
|
||||||
const receivablePlanList = ref<ReceivablePlanApi.ReceivablePlanVO[]>([]) // 付款计划列表
|
const receivablePlanList = ref<ReceivablePlanApi.ReceivablePlanVO[]>([]) // 付款计划列表
|
||||||
const projectList = ref<ProjectApi.ProjectVO[]>([]) // 项目列表
|
const projectList = ref<ProjectApi.ProjectVO[]>([]) // 项目列表
|
||||||
const maxPayableAmount = ref(Infinity)
|
const maxPayableAmount = ref(Infinity)
|
||||||
const showProject = computed(() => formData.value.type === 1 || formData.value.type === 2)
|
const showProject = computed(() => formData.value.type >= 1 && formData.value.type <= 7)
|
||||||
|
|
||||||
/** 打开弹窗 */
|
/** 打开弹窗 */
|
||||||
const open = async (
|
const open = async (
|
||||||
|
|
@ -358,7 +351,7 @@ const handleReceivablePlanChange = (planId: number) => {
|
||||||
watch(
|
watch(
|
||||||
() => formData.value.type,
|
() => formData.value.type,
|
||||||
(val) => {
|
(val) => {
|
||||||
if (val === 1 || val === 2) {
|
if (val === 1 || val === 2 || val === 3 || val === 4 || val === 5 || val === 6 || val === 7) {
|
||||||
formRules.projectId = [{ required: true, message: '项目名称不能为空', trigger: 'change' }]
|
formRules.projectId = [{ required: true, message: '项目名称不能为空', trigger: 'change' }]
|
||||||
} else {
|
} else {
|
||||||
formRules.projectId = []
|
formRules.projectId = []
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,36 @@
|
||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item v-if="queryParams.transactionType === 0" label="收入类型" prop="type">
|
||||||
|
<el-select
|
||||||
|
v-model="queryParams.type"
|
||||||
|
class="!w-150px"
|
||||||
|
clearable
|
||||||
|
placeholder="请选择收入类型"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_PAYMENT_TYPE)"
|
||||||
|
:key="dict.value"
|
||||||
|
:label="dict.label"
|
||||||
|
:value="dict.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item v-if="queryParams.transactionType === 1" label="支出类型" prop="type">
|
||||||
|
<el-select
|
||||||
|
v-model="queryParams.type"
|
||||||
|
class="!w-150px"
|
||||||
|
clearable
|
||||||
|
placeholder="请选择支出类型"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_RECEIVABLE_TYPE)"
|
||||||
|
:key="dict.value"
|
||||||
|
:label="dict.label"
|
||||||
|
:value="dict.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item label="收付主体" prop="deptId">
|
<el-form-item label="收付主体" prop="deptId">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="queryParams.deptId"
|
v-model="queryParams.deptId"
|
||||||
|
|
@ -84,21 +114,7 @@
|
||||||
placeholder="最大金额"
|
placeholder="最大金额"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="是否押金" prop="isDeposit">
|
|
||||||
<el-select
|
|
||||||
v-model="queryParams.isDeposit"
|
|
||||||
class="!w-240px"
|
|
||||||
clearable
|
|
||||||
placeholder="请选择是否押金"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in options"
|
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button @click="handleQuery">
|
<el-button @click="handleQuery">
|
||||||
<Icon class="mr-5px" icon="ep:search" />
|
<Icon class="mr-5px" icon="ep:search" />
|
||||||
|
|
@ -306,6 +322,7 @@ import { TabsPaneContext } from 'element-plus'
|
||||||
import { erpPriceInputFormatter } from '@/utils'
|
import { erpPriceInputFormatter } from '@/utils'
|
||||||
import { is } from 'bpmn-js/lib/util/ModelUtil'
|
import { is } from 'bpmn-js/lib/util/ModelUtil'
|
||||||
import SummaryForm from './components/SummaryForm.vue'
|
import SummaryForm from './components/SummaryForm.vue'
|
||||||
|
import PaymentForm from './PaymentForm.vue'
|
||||||
|
|
||||||
defineOptions({ name: 'Receivable' })
|
defineOptions({ name: 'Receivable' })
|
||||||
|
|
||||||
|
|
@ -443,7 +460,7 @@ onMounted(async () => {
|
||||||
// 获得客户列表
|
// 获得客户列表
|
||||||
customerList.value = await CustomerApi.getCustomerSimpleList()
|
customerList.value = await CustomerApi.getCustomerSimpleList()
|
||||||
// 加载部门列表
|
// 加载部门列表
|
||||||
deptList.value = await DeptApi.getSimpleDeptList()
|
deptList.value = await DeptApi.querySimpleDeptList(2)
|
||||||
})
|
})
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
|
|
|
||||||
|
|
@ -11,11 +11,13 @@
|
||||||
class="-mb-15px"
|
class="-mb-15px"
|
||||||
label-width="68px"
|
label-width="68px"
|
||||||
>
|
>
|
||||||
<el-form-item label="客户名称" prop="customerId">
|
<el-form-item label="收款单位" prop="customerId">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="queryParams.customerId"
|
v-model="queryParams.customerId"
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
placeholder="请选择客户"
|
clearable
|
||||||
|
filterable
|
||||||
|
placeholder="请选择收款单位"
|
||||||
@keyup.enter="handleQuery"
|
@keyup.enter="handleQuery"
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
|
|
@ -26,14 +28,22 @@
|
||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="合同编号" prop="contractNo">
|
<el-form-item label="合同名称" prop="contractId">
|
||||||
<el-input
|
<el-select
|
||||||
v-model="queryParams.contractNo"
|
v-model="queryParams.contractId"
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
clearable
|
clearable
|
||||||
placeholder="请输入合同编号"
|
filterable
|
||||||
|
placeholder="请选择合同名称"
|
||||||
@keyup.enter="handleQuery"
|
@keyup.enter="handleQuery"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in contractList"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"
|
||||||
/>
|
/>
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="类型" prop="status">
|
<el-form-item label="类型" prop="status">
|
||||||
<el-select
|
<el-select
|
||||||
|
|
@ -95,7 +105,7 @@
|
||||||
prop="returnTime"
|
prop="returnTime"
|
||||||
width="180px"
|
width="180px"
|
||||||
/>
|
/>
|
||||||
<el-table-column align="center" label="收款单位名称" prop="customerName" min-width="300">
|
<el-table-column align="center" label="收款单位" prop="customerName" min-width="300">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-link
|
<el-link
|
||||||
:underline="false"
|
:underline="false"
|
||||||
|
|
@ -235,10 +245,12 @@ import { DICT_TYPE,getIntDictOptions } from '@/utils/dict'
|
||||||
import { dateFormatter2 } from '@/utils/formatTime'
|
import { dateFormatter2 } from '@/utils/formatTime'
|
||||||
import download from '@/utils/download'
|
import download from '@/utils/download'
|
||||||
import * as ReceivablePlanApi from '@/api/crm/receivable/plan'
|
import * as ReceivablePlanApi from '@/api/crm/receivable/plan'
|
||||||
import ReceivablePlanForm from './ReceivablePlanForm.vue'
|
|
||||||
import * as CustomerApi from '@/api/crm/customer'
|
import * as CustomerApi from '@/api/crm/customer'
|
||||||
|
import * as ContractApi from '@/api/crm/contract'
|
||||||
import { erpPriceInputFormatter, erpPriceTableColumnFormatter } from '@/utils'
|
import { erpPriceInputFormatter, erpPriceTableColumnFormatter } from '@/utils'
|
||||||
import ReceivableForm from '@/views/crm/receivable/ReceivableForm.vue'
|
import ReceivableForm from '@/views/crm/receivable/ReceivableForm.vue'
|
||||||
|
import ReceivablePlanForm from './ReceivablePlanForm.vue'
|
||||||
|
import ContractList from '../../contract/components/ContractList.vue'
|
||||||
|
|
||||||
defineOptions({ name: 'ReceivablePlan' })
|
defineOptions({ name: 'ReceivablePlan' })
|
||||||
|
|
||||||
|
|
@ -253,13 +265,13 @@ const queryParams = reactive({
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
sceneType: undefined, // 默认和 activeName 相等
|
sceneType: undefined, // 默认和 activeName 相等
|
||||||
customerId: undefined,
|
customerId: undefined,
|
||||||
contractNo: undefined,
|
contractId: undefined,
|
||||||
status: undefined
|
status: undefined
|
||||||
})
|
})
|
||||||
const queryFormRef = ref() // 搜索的表单
|
const queryFormRef = ref() // 搜索的表单
|
||||||
const exportLoading = ref(false) // 导出的加载中
|
const exportLoading = ref(false) // 导出的加载中
|
||||||
const customerList = ref<CustomerApi.CustomerVO[]>([]) // 客户列表
|
const customerList = ref<CustomerApi.CustomerVO[]>([]) // 客户列表
|
||||||
|
const contractList = ref<ContractApi.ContractVO[]>([])
|
||||||
|
|
||||||
/** 查询列表 */
|
/** 查询列表 */
|
||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
|
|
@ -345,5 +357,7 @@ onMounted(async () => {
|
||||||
await getList()
|
await getList()
|
||||||
// 获得客户列表
|
// 获得客户列表
|
||||||
customerList.value = await CustomerApi.getCustomerSimpleList()
|
customerList.value = await CustomerApi.getCustomerSimpleList()
|
||||||
|
// 获得合同列表
|
||||||
|
contractList.value = await ContractApi.getContractSimpleAllList()
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue