收付记录
parent
551ff57329
commit
94530a85ed
|
|
@ -21,6 +21,7 @@ export interface ProjectVO {
|
||||||
supplementaryMaterials: string // 其他补充材料文件路径
|
supplementaryMaterials: string // 其他补充材料文件路径
|
||||||
type: number // 类型
|
type: number // 类型
|
||||||
projectStatus: number // 状态
|
projectStatus: number // 状态
|
||||||
|
estimatedPiles: number //枪数
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询CRM 项目信息分页
|
// 查询CRM 项目信息分页
|
||||||
|
|
|
||||||
|
|
@ -11,15 +11,6 @@
|
||||||
class="-mb-15px"
|
class="-mb-15px"
|
||||||
label-width="68px"
|
label-width="68px"
|
||||||
>
|
>
|
||||||
<el-form-item label="合同编号" prop="no">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.no"
|
|
||||||
class="!w-240px"
|
|
||||||
clearable
|
|
||||||
placeholder="请输入合同编号"
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="合同名称" prop="name">
|
<el-form-item label="合同名称" prop="name">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="queryParams.name"
|
v-model="queryParams.name"
|
||||||
|
|
@ -28,11 +19,13 @@
|
||||||
placeholder="请输入合同名称"
|
placeholder="请输入合同名称"
|
||||||
@keyup.enter="handleQuery"
|
@keyup.enter="handleQuery"
|
||||||
/>
|
/>
|
||||||
<el-form-item label="客户签约方" prop="customerId">
|
</el-form-item>
|
||||||
|
<el-form-item label="客户签约方" prop="customerId" label-width="100px">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="queryParams.customerId"
|
v-model="queryParams.customerId"
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
clearable
|
clearable
|
||||||
|
filterable
|
||||||
lable-key="name"
|
lable-key="name"
|
||||||
placeholder="请选择客户签约方"
|
placeholder="请选择客户签约方"
|
||||||
value-key="id"
|
value-key="id"
|
||||||
|
|
@ -46,7 +39,37 @@
|
||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="合同状态" prop="contractStatus">
|
||||||
|
<el-select
|
||||||
|
v-model="queryParams.contractStatus"
|
||||||
|
class="!w-150px"
|
||||||
|
clearable
|
||||||
|
placeholder="请选择合同状态"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CONTRACT_STATUS)"
|
||||||
|
:key="dict.value"
|
||||||
|
:label="dict.label"
|
||||||
|
:value="dict.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="合同类型" prop="contractType">
|
||||||
|
<el-select
|
||||||
|
v-model="queryParams.contractType"
|
||||||
|
class="!w-150px"
|
||||||
|
clearable
|
||||||
|
placeholder="请选择合同类型"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CONTRACT_TYPE)"
|
||||||
|
:key="dict.value"
|
||||||
|
:label="dict.label"
|
||||||
|
:value="dict.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" />
|
||||||
|
|
@ -205,7 +228,7 @@ import { dateFormatter, dateFormatter2 } from '@/utils/formatTime'
|
||||||
import download from '@/utils/download'
|
import download from '@/utils/download'
|
||||||
import * as ContractApi from '@/api/crm/contract'
|
import * as ContractApi from '@/api/crm/contract'
|
||||||
import ContractForm from './ContractForm.vue'
|
import ContractForm from './ContractForm.vue'
|
||||||
import { DICT_TYPE } from '@/utils/dict'
|
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||||
import { erpPriceInputFormatter, erpPriceTableColumnFormatter } from '@/utils'
|
import { erpPriceInputFormatter, erpPriceTableColumnFormatter } from '@/utils'
|
||||||
import * as CustomerApi from '@/api/crm/customer'
|
import * as CustomerApi from '@/api/crm/customer'
|
||||||
import { TabsPaneContext } from 'element-plus'
|
import { TabsPaneContext } from 'element-plus'
|
||||||
|
|
@ -224,7 +247,9 @@ const queryParams = reactive({
|
||||||
name: null,
|
name: null,
|
||||||
customerId: null,
|
customerId: null,
|
||||||
orderDate: [],
|
orderDate: [],
|
||||||
no: null
|
no: null,
|
||||||
|
contractType: null,
|
||||||
|
contractStatus: null,
|
||||||
})
|
})
|
||||||
const queryFormRef = ref() // 搜索的表单
|
const queryFormRef = ref() // 搜索的表单
|
||||||
const exportLoading = ref(false) // 导出的加载中
|
const exportLoading = ref(false) // 导出的加载中
|
||||||
|
|
@ -342,12 +367,12 @@ const tableRowClassName = ({ row }: { row: any }) => {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
// 计算剩余天数
|
// 计算剩余天数
|
||||||
const diffTime = today.getTime() - endTime.getTime();
|
const diffTime = endTime.getTime() - today.getTime();
|
||||||
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
|
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
|
||||||
console.log('diffDays', diffDays, endTime);
|
console.log('diffDays', diffDays, today, endTime);
|
||||||
if (diffDays <= 90) { // 少于3个月
|
if (diffDays <= 90 && (row.contractStatus === 1 || row.contractStatus === 2)) { // 少于3个月
|
||||||
return 'expiring-soon-row';
|
return 'expiring-soon-row';
|
||||||
} else if (diffDays <= 180) { // 少于6个月
|
} else if (diffDays <= 180 && (row.contractStatus === 1 || row.contractStatus === 2)) { // 少于6个月
|
||||||
return 'expiring-row';
|
return 'expiring-row';
|
||||||
}
|
}
|
||||||
return '';
|
return '';
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,9 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="状态" prop="projectStatus">
|
<el-form-item label="状态" prop="projectStatus">
|
||||||
<el-radio-group v-model="formData.projectStatus">
|
<el-radio-group
|
||||||
|
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>
|
||||||
|
|
@ -145,10 +147,10 @@
|
||||||
<el-col>
|
<el-col>
|
||||||
<el-form-item v-if="formData.type === 2" label="合伙人明细">
|
<el-form-item v-if="formData.type === 2" label="合伙人明细">
|
||||||
<ProjectPartnetForm
|
<ProjectPartnetForm
|
||||||
v-model:partners="partners"
|
ref="partnerFormRef"
|
||||||
|
v-model:partners="formData.partners"
|
||||||
:disabled="formLoading"
|
:disabled="formLoading"
|
||||||
:price="formData.totalInvestment"
|
:price="formData.totalInvestment"
|
||||||
ref="partnerFormRef"
|
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
@ -157,36 +159,66 @@
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="同意建桩证明" prop="buildPermit">
|
<el-form-item label="同意建桩证明" prop="buildPermit">
|
||||||
<UploadFile v-model="formData.buildPermit" :isShowTip="false" :limit="1" :file-type="['pdf']" />
|
<UploadFile
|
||||||
|
v-model="formData.buildPermit"
|
||||||
|
:isShowTip="false"
|
||||||
|
:limit="1"
|
||||||
|
:file-type="['pdf']"
|
||||||
|
/>
|
||||||
</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">
|
||||||
<UploadFile v-model="formData.ownershipProof" :isShowTip="false" :limit="1" :file-type="['pdf']" />
|
<UploadFile
|
||||||
|
v-model="formData.ownershipProof"
|
||||||
|
:isShowTip="false"
|
||||||
|
:limit="1"
|
||||||
|
:file-type="['pdf']"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</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">
|
||||||
<UploadFile v-model="formData.projectRecord" :isShowTip="false" :limit="1" :file-type="['pdf']" />
|
<UploadFile
|
||||||
|
v-model="formData.projectRecord"
|
||||||
|
:isShowTip="false"
|
||||||
|
:limit="1"
|
||||||
|
:file-type="['pdf']"
|
||||||
|
/>
|
||||||
</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="powerSupplyReply">
|
||||||
<UploadFile v-model="formData.powerSupplyReply" :isShowTip="false" :limit="1" :file-type="['pdf']" />
|
<UploadFile
|
||||||
|
v-model="formData.powerSupplyReply"
|
||||||
|
:isShowTip="false"
|
||||||
|
:limit="1"
|
||||||
|
:file-type="['pdf']"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col v-if="formData.type === 2" :span="12">
|
<el-col v-if="formData.type === 2" :span="12">
|
||||||
<el-form-item label="合作投资协议" prop="investmentAgreement">
|
<el-form-item label="合作投资协议" prop="investmentAgreement">
|
||||||
<UploadFile v-model="formData.investmentAgreement" :isShowTip="false" :limit="1" :file-type="['pdf']" />
|
<UploadFile
|
||||||
|
v-model="formData.investmentAgreement"
|
||||||
|
:isShowTip="false"
|
||||||
|
:limit="1"
|
||||||
|
:file-type="['pdf']"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="其他补充材料" prop="supplementaryMaterials">
|
<el-form-item label="其他补充材料" prop="supplementaryMaterials">
|
||||||
<UploadFile v-model="formData.supplementaryMaterials" :isShowTip="false" :limit="5" :file-type="['pdf']" />
|
<UploadFile
|
||||||
|
v-model="formData.supplementaryMaterials"
|
||||||
|
:isShowTip="false"
|
||||||
|
:limit="5"
|
||||||
|
:file-type="['pdf']"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
@ -218,7 +250,6 @@ const dialogVisible = ref(false) // 弹窗的是否展示
|
||||||
const dialogTitle = ref('') // 弹窗的标题
|
const dialogTitle = ref('') // 弹窗的标题
|
||||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||||
const partners = ref([]) // 合伙人列表
|
|
||||||
|
|
||||||
const formData = ref({
|
const formData = ref({
|
||||||
id: undefined,
|
id: undefined,
|
||||||
|
|
@ -237,6 +268,7 @@ const formData = ref({
|
||||||
powerSupplyReply: '',
|
powerSupplyReply: '',
|
||||||
investmentAgreement: '',
|
investmentAgreement: '',
|
||||||
supplementaryMaterials: [],
|
supplementaryMaterials: [],
|
||||||
|
partners:[],
|
||||||
type: undefined,
|
type: undefined,
|
||||||
projectStatus: undefined
|
projectStatus: undefined
|
||||||
})
|
})
|
||||||
|
|
@ -287,7 +319,7 @@ const open = async (type: string, id?: number) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 加载部门列表
|
// 加载部门列表
|
||||||
deptList.value = await DeptApi.getSimpleDeptList()
|
deptList.value = await DeptApi.querySimpleDeptList(3)
|
||||||
// 获得合同列表
|
// 获得合同列表
|
||||||
contractOptions.value = await ContractApi.getContractSimpleAllList()
|
contractOptions.value = await ContractApi.getContractSimpleAllList()
|
||||||
// 获得场地列表
|
// 获得场地列表
|
||||||
|
|
@ -343,6 +375,7 @@ const resetForm = () => {
|
||||||
powerSupplyReply: '',
|
powerSupplyReply: '',
|
||||||
investmentAgreement: '',
|
investmentAgreement: '',
|
||||||
supplementaryMaterials: [],
|
supplementaryMaterials: [],
|
||||||
|
partners:[],
|
||||||
type: undefined,
|
type: undefined,
|
||||||
projectStatus: undefined
|
projectStatus: undefined
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -76,13 +76,7 @@ const emit = defineEmits(['update:partners'])
|
||||||
const formLoading = ref(false)
|
const formLoading = ref(false)
|
||||||
const userOptions = ref<any[]>([])
|
const userOptions = ref<any[]>([])
|
||||||
|
|
||||||
interface PartnerRow {
|
const formData = ref([])
|
||||||
partner?: string
|
|
||||||
ratio?: string | number
|
|
||||||
investment?: string | number
|
|
||||||
}
|
|
||||||
|
|
||||||
const formData = ref<PartnerRow[]>([])
|
|
||||||
|
|
||||||
const formRules = reactive({
|
const formRules = reactive({
|
||||||
partner: [
|
partner: [
|
||||||
|
|
@ -109,19 +103,15 @@ onMounted(async () => {
|
||||||
userOptions.value = await UserApi.getSimpleUserList()
|
userOptions.value = await UserApi.getSimpleUserList()
|
||||||
})
|
})
|
||||||
|
|
||||||
watch(
|
|
||||||
() => props.partners,
|
|
||||||
(val) => {
|
|
||||||
formData.value = (val || []).map(item => ({
|
|
||||||
...item,
|
|
||||||
partner: item.partner ? String(item.partner) : ''
|
|
||||||
}))
|
|
||||||
},
|
|
||||||
{ immediate: true }
|
|
||||||
)
|
|
||||||
|
|
||||||
const handleAdd = () => {
|
const handleAdd = () => {
|
||||||
formData.value.push({ partner: '', ratio: '', investment: '' })
|
formData.value.push()
|
||||||
|
const row = {
|
||||||
|
partner: '',
|
||||||
|
ratio: '',
|
||||||
|
investment: ''
|
||||||
|
}
|
||||||
|
formData.value.push(row)
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleDelete = (index: number) => {
|
const handleDelete = (index: number) => {
|
||||||
|
|
@ -139,7 +129,7 @@ const validate = async () => {
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
const calcInvestment = (row: PartnerRow) => {
|
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) : ''
|
return ratio && price ? ((ratio * price) / 100).toFixed(2) : ''
|
||||||
|
|
@ -149,16 +139,6 @@ const getMaxRatio = (index: number) => {
|
||||||
const used = formData.value.reduce((sum, item, idx) => idx !== index ? sum + (Number(item.ratio) || 0) : sum, 0)
|
const used = formData.value.reduce((sum, item, idx) => idx !== index ? sum + (Number(item.ratio) || 0) : sum, 0)
|
||||||
return Math.max(0, 100 - used)
|
return Math.max(0, 100 - used)
|
||||||
}
|
}
|
||||||
watch(
|
|
||||||
() => formData.value.map(item => item.ratio),
|
|
||||||
() => {
|
|
||||||
formData.value.forEach(row => {
|
|
||||||
row.investment = calcInvestment(row)
|
|
||||||
})
|
|
||||||
},
|
|
||||||
{ deep: true }
|
|
||||||
)
|
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => formData.value,
|
() => formData.value,
|
||||||
(val) => {
|
(val) => {
|
||||||
|
|
|
||||||
|
|
@ -8,25 +8,22 @@
|
||||||
:inline="true"
|
:inline="true"
|
||||||
label-width="68px"
|
label-width="68px"
|
||||||
>
|
>
|
||||||
<el-form-item label="部门ID" prop="deptId">
|
<el-form-item label="项目名称" prop="deptId">
|
||||||
<el-input
|
<el-select
|
||||||
v-model="queryParams.deptId"
|
v-model="queryParams.deptId"
|
||||||
placeholder="请输入部门ID"
|
|
||||||
clearable
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
/>
|
placeholder="请选择项目名称"
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="场地ID" prop="siteId">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.siteId"
|
|
||||||
placeholder="请输入场地ID"
|
|
||||||
clearable
|
|
||||||
@keyup.enter="handleQuery"
|
@keyup.enter="handleQuery"
|
||||||
class="!w-240px"
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in deptList"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"
|
||||||
/>
|
/>
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="项目合伙人" prop="ownerUserId">
|
<!-- <el-form-item label="项目合伙人" prop="ownerUserId">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="queryParams.ownerUserId"
|
v-model="queryParams.ownerUserId"
|
||||||
placeholder="请输入项目合伙人"
|
placeholder="请输入项目合伙人"
|
||||||
|
|
@ -34,7 +31,7 @@
|
||||||
@keyup.enter="handleQuery"
|
@keyup.enter="handleQuery"
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item> -->
|
||||||
<el-form-item label="类型" prop="type">
|
<el-form-item label="类型" prop="type">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="queryParams.type"
|
v-model="queryParams.type"
|
||||||
|
|
@ -42,29 +39,14 @@
|
||||||
clearable
|
clearable
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
>
|
>
|
||||||
<el-option label="请选择字典生成" value="" />
|
<el-option
|
||||||
</el-select>
|
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_PROJECT_TYPE)"
|
||||||
</el-form-item>
|
:key="dict.value"
|
||||||
<el-form-item label="状态" prop="projectStatus">
|
:label="dict.label"
|
||||||
<el-select
|
:value="dict.value"
|
||||||
v-model="queryParams.projectStatus"
|
|
||||||
placeholder="请选择状态"
|
|
||||||
clearable
|
|
||||||
class="!w-240px"
|
|
||||||
>
|
|
||||||
<el-option label="请选择字典生成" value="" />
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="创建时间" prop="createTime">
|
|
||||||
<el-date-picker
|
|
||||||
v-model="queryParams.createTime"
|
|
||||||
value-format="YYYY-MM-DD HH:mm:ss"
|
|
||||||
type="daterange"
|
|
||||||
start-placeholder="开始日期"
|
|
||||||
end-placeholder="结束日期"
|
|
||||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
|
||||||
class="!w-220px"
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||||
|
|
@ -93,21 +75,27 @@
|
||||||
<!-- 列表 -->
|
<!-- 列表 -->
|
||||||
<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 label="主键ID" align="center" prop="id" />
|
<el-table-column align="center" label="项目名称" prop="deptName" min-width="300"/>
|
||||||
<el-table-column label="部门ID" align="center" prop="deptId" />
|
<el-table-column label="项目总投资额(万元)" align="center" prop="totalInvestment" width="180"/>
|
||||||
<el-table-column label="场地ID" align="center" prop="siteId" />
|
<el-table-column label="枪数" align="center" prop="estimatedPiles" />
|
||||||
<el-table-column label="项目总投资额" align="center" prop="totalInvestment" />
|
<el-table-column label="单枪成本(万元)" align="center" min-width="120">
|
||||||
<el-table-column label="项目合伙人" align="center" prop="ownerUserId" />
|
<template #default="{ row }">
|
||||||
<el-table-column label="类型" align="center" prop="type" />
|
<span>{{ calculateCostPerPile(row) }}</span>
|
||||||
<el-table-column label="状态" align="center" prop="projectStatus" />
|
</template>
|
||||||
<el-table-column
|
</el-table-column>
|
||||||
label="创建时间"
|
<el-table-column align="center" label="类型" prop="type" width="160">
|
||||||
align="center"
|
<template #default="scope">
|
||||||
prop="createTime"
|
<dict-tag :type="DICT_TYPE.CRM_PROJECT_TYPE" :value="scope.row.type" />
|
||||||
:formatter="dateFormatter"
|
</template>
|
||||||
width="180px"
|
</el-table-column>
|
||||||
/>
|
<el-table-column label="项目合伙人" align="center" prop="ownerUserId" min-width="160" />
|
||||||
<el-table-column label="操作" align="center" min-width="120px">
|
|
||||||
|
<el-table-column align="center" label="状态" prop="projectStatus" width="160">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.projectStatus" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" fixed="right" align="center" min-width="120px">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button
|
<el-button
|
||||||
link
|
link
|
||||||
|
|
@ -145,7 +133,9 @@
|
||||||
import { dateFormatter } from '@/utils/formatTime'
|
import { dateFormatter } from '@/utils/formatTime'
|
||||||
import download from '@/utils/download'
|
import download from '@/utils/download'
|
||||||
import * as ProjectApi from '@/api/crm/project'
|
import * as ProjectApi from '@/api/crm/project'
|
||||||
|
import * as DeptApi from '@/api/system/dept'
|
||||||
import ProjectForm from './ProjectForm.vue'
|
import ProjectForm from './ProjectForm.vue'
|
||||||
|
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||||
|
|
||||||
/** CRM 项目信息 列表 */
|
/** CRM 项目信息 列表 */
|
||||||
defineOptions({ name: 'CrmProject' })
|
defineOptions({ name: 'CrmProject' })
|
||||||
|
|
@ -164,10 +154,12 @@ const queryParams = reactive({
|
||||||
ownerUserId: undefined,
|
ownerUserId: undefined,
|
||||||
type: undefined,
|
type: undefined,
|
||||||
projectStatus: undefined,
|
projectStatus: undefined,
|
||||||
|
estimatedPiles: undefined,
|
||||||
createTime: [],
|
createTime: [],
|
||||||
})
|
})
|
||||||
const queryFormRef = ref() // 搜索的表单
|
const queryFormRef = ref() // 搜索的表单
|
||||||
const exportLoading = ref(false) // 导出的加载中
|
const exportLoading = ref(false) // 导出的加载中
|
||||||
|
const deptList = ref<DeptApi.DeptVO[]>([])
|
||||||
|
|
||||||
/** 查询列表 */
|
/** 查询列表 */
|
||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
|
|
@ -181,6 +173,11 @@ const getList = async () => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 打开场地详情 */
|
||||||
|
const { push } = useRouter()
|
||||||
|
const openSiteDetail = (id: number) => {
|
||||||
|
push({ name: 'CrmStationSiteDetail', params: { id } })
|
||||||
|
}
|
||||||
/** 搜索按钮操作 */
|
/** 搜索按钮操作 */
|
||||||
const handleQuery = () => {
|
const handleQuery = () => {
|
||||||
queryParams.pageNo = 1
|
queryParams.pageNo = 1
|
||||||
|
|
@ -227,8 +224,26 @@ const handleExport = async () => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const calculateCostPerPile = (row) => {
|
||||||
|
// 检查枪数是否有效(非空、非零、数字类型)
|
||||||
|
if (!row.estimatedPiles || isNaN(row.estimatedPiles) || row.estimatedPiles <= 0) {
|
||||||
|
return ''; // 无效值返回空字符串
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查总投资额是否有效
|
||||||
|
if (!row.totalInvestment || isNaN(row.totalInvestment)) {
|
||||||
|
return ''; // 无效值返回空字符串
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算并保留两位小数
|
||||||
|
const cost = (row.totalInvestment / row.estimatedPiles).toFixed(2);
|
||||||
|
return parseFloat(cost); // 转为数字类型避免显示多余的0
|
||||||
|
};
|
||||||
|
|
||||||
/** 初始化 **/
|
/** 初始化 **/
|
||||||
onMounted(() => {
|
onMounted(async () => {
|
||||||
getList()
|
await getList()
|
||||||
|
// 加载部门列表
|
||||||
|
deptList.value = await DeptApi.querySimpleDeptList(3)
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
@ -44,7 +44,7 @@
|
||||||
<el-form-item label="收款单位" prop="customerId">
|
<el-form-item label="收款单位" prop="customerId">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="formData.customerId"
|
v-model="formData.customerId"
|
||||||
:disabled="formType !== 'create'"
|
disabled
|
||||||
class="w-1/1"
|
class="w-1/1"
|
||||||
filterable
|
filterable
|
||||||
placeholder="请选择收款单位"
|
placeholder="请选择收款单位"
|
||||||
|
|
@ -63,7 +63,7 @@
|
||||||
<el-form-item label="合同名称" prop="contractId">
|
<el-form-item label="合同名称" prop="contractId">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="formData.contractId"
|
v-model="formData.contractId"
|
||||||
:disabled="formType !== 'create' || !formData.customerId"
|
disabled
|
||||||
class="w-1/1"
|
class="w-1/1"
|
||||||
filterable
|
filterable
|
||||||
placeholder="请选择合同"
|
placeholder="请选择合同"
|
||||||
|
|
@ -80,12 +80,13 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
<!-- :max="maxPayableAmount" -->
|
||||||
<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"
|
||||||
:max="maxPayableAmount"
|
|
||||||
:precision="2"
|
:precision="2"
|
||||||
class="!w-100%"
|
class="!w-100%"
|
||||||
controls-position="right"
|
controls-position="right"
|
||||||
|
|
@ -118,6 +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">
|
||||||
|
|
@ -132,8 +138,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
|
||||||
|
|
@ -152,11 +156,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">
|
||||||
|
|
|
||||||
|
|
@ -157,16 +157,17 @@
|
||||||
</el-text>
|
</el-text>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="审核状态" align="center" width="90" prop="auditStatus">
|
<!-- <el-table-column label="审核状态" align="center" width="90" prop="auditStatus">
|
||||||
<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>
|
||||||
</el-table-column>
|
</el-table-column> -->
|
||||||
<!-- v-if ="(scope.row.type === 1 && scope.row.auditStatus === 20) || (scope.row.type === 0)" -->
|
<!-- v-if ="(scope.row.type === 1 && scope.row.auditStatus === 20) || (scope.row.type === 0)" -->
|
||||||
|
<!-- v-if="(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) > 0)" -->
|
||||||
<el-table-column align="center" fixed="right" label="操作" min-width="180px">
|
<el-table-column align="center" fixed="right" label="操作" min-width="180px">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button
|
<el-button
|
||||||
v-if="(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) > 0)"
|
|
||||||
v-hasPermi="['crm:receivable:create']"
|
v-hasPermi="['crm:receivable:create']"
|
||||||
link
|
link
|
||||||
type="success"
|
type="success"
|
||||||
|
|
|
||||||
|
|
@ -191,8 +191,6 @@ const exportLoading = ref(false) // 导出的加载中
|
||||||
const areaList = ref([])
|
const areaList = ref([])
|
||||||
const mapDialogVisible = ref(false)
|
const mapDialogVisible = ref(false)
|
||||||
const tencentLbsUrl = ref('')
|
const tencentLbsUrl = ref('')
|
||||||
const currentRow = ref<any>(null)
|
|
||||||
const TENCENT_MAP_KEY = import.meta.env.VITE_APP_TENCENT_MAP_KEY // 你的腾讯地图key
|
|
||||||
|
|
||||||
/** 打开场地信息详情 */
|
/** 打开场地信息详情 */
|
||||||
const { currentRoute, push } = useRouter()
|
const { currentRoute, push } = useRouter()
|
||||||
|
|
@ -259,19 +257,6 @@ const handleExport = async () => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 地图弹窗相关操作 */
|
|
||||||
const openMapDialog = (row: any) => {
|
|
||||||
currentRow.value = row
|
|
||||||
// 拼接带初始点的 url
|
|
||||||
|
|
||||||
let url = `https://apis.map.qq.com/tools/locpicker?type=1&key=${TENCENT_MAP_KEY}&referer=myapp`
|
|
||||||
if (row.locationLat && row.locationLng) {
|
|
||||||
url += `&coord=${row.locationLat},${row.locationLng}`
|
|
||||||
}
|
|
||||||
tencentLbsUrl.value = url
|
|
||||||
mapDialogVisible.value = true
|
|
||||||
}
|
|
||||||
|
|
||||||
watch(mapDialogVisible, (val) => {
|
watch(mapDialogVisible, (val) => {
|
||||||
if (!val) {
|
if (!val) {
|
||||||
tencentLbsUrl.value = '' // 关闭时重置,避免缓存
|
tencentLbsUrl.value = '' // 关闭时重置,避免缓存
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue