1、新增资金成本设置,需要优化页面

2、产品采购成本设置功能,需要修改页面内容,优化展示页面
pull/781/head
苑坤 2025-05-09 13:33:18 +08:00
parent 3aea6a3f13
commit b89f45e159
7 changed files with 925 additions and 1 deletions

View File

@ -0,0 +1,49 @@
import request from '@/config/axios'
// 资金成本 VO
export interface CapitalCostVO {
id: number // 主键
projectCode: string // 项目编码
paymentTerm: string // 结算账期
creditMethod: number // 授信方式
applicableProjects: number // 适用项目,全部产品、机票
creditCalcCycle: number // 授信额度计算周期
ticketIssuanceCycle: number // 出票周期
settlementCycle: number // 结算周期
usageDays: number // 实际资金使用天数
annualInterestRate: number // 年利率
remark: string // 备注
}
// 资金成本 API
export const CapitalCostApi = {
// 查询资金成本分页
getCapitalCostPage: async (params: any) => {
return await request.get({ url: `/crm/capital-cost/page`, params })
},
// 查询资金成本详情
getCapitalCost: async (id: number) => {
return await request.get({ url: `/crm/capital-cost/get?id=` + id })
},
// 新增资金成本
createCapitalCost: async (data: CapitalCostVO) => {
return await request.post({ url: `/crm/capital-cost/create`, data })
},
// 修改资金成本
updateCapitalCost: async (data: CapitalCostVO) => {
return await request.put({ url: `/crm/capital-cost/update`, data })
},
// 删除资金成本
deleteCapitalCost: async (id: number) => {
return await request.delete({ url: `/crm/capital-cost/delete?id=` + id })
},
// 导出资金成本 Excel
exportCapitalCost: async (params) => {
return await request.download({ url: `/crm/capital-cost/export-excel`, params })
},
}

View File

@ -0,0 +1,54 @@
import request from '@/config/axios'
// 产品采购成本 VO
export interface ProductProcurementCostVO {
projectId: number // 产品ID
projectCode: number // 产品编号
customerPrice: number // 客单价
purchaseCost: number // 采购成本
agentFeePreReturn: number // 代理费前返比例/金额
agentFeePostReturn: number // 代理费后返比例/金额
onlineMarkupRate: number // 线上溢价率
offlineMarkupRate: number // 线下溢价率
taxCost: number // 税费成本
managementCost: number // 管理成本
settlementReconciliationCost: number // 结算对账成本
settlementInvoiceCost: number // 结算开票成本
consultantOrderCost: number // 顾问订单成本
markupCommission: number // 溢价分佣
consultantManagement: number // 顾问管理
remark: string // 备注
}
// 产品采购成本 API
export const ProductProcurementCostApi = {
// 查询产品采购成本分页
getProductProcurementCostPage: async (params: any) => {
return await request.get({ url: `/crm/product-procurement-cost/page`, params })
},
// 查询产品采购成本详情
getProductProcurementCost: async (id: number) => {
return await request.get({ url: `/crm/product-procurement-cost/get?id=` + id })
},
// 新增产品采购成本
createProductProcurementCost: async (data: ProductProcurementCostVO) => {
return await request.post({ url: `/crm/product-procurement-cost/create`, data })
},
// 修改产品采购成本
updateProductProcurementCost: async (data: ProductProcurementCostVO) => {
return await request.put({ url: `/crm/product-procurement-cost/update`, data })
},
// 删除产品采购成本
deleteProductProcurementCost: async (id: number) => {
return await request.delete({ url: `/crm/product-procurement-cost/delete?id=` + id })
},
// 导出产品采购成本 Excel
exportProductProcurementCost: async (params) => {
return await request.download({ url: `/crm/product-procurement-cost/export-excel`, params })
},
}

View File

@ -226,7 +226,8 @@ export enum DICT_TYPE {
CRM_COMPLAINT_METHOD = "crm_complaint_method", // 投诉方式
CRM_COMPLAINT_LEVEL = "crm_complaint_level", // 投诉级别
TECH_SUPPORT = "tech_support", // 是否
CREDIT_METHOD="credit_method", //授信方式
CRM_APPLICABLE_PROJECTS="crm_applicable_projects", //适用项目
// 商机账期
PAYMENT_TERM = "payment_term", // 投诉级别
CREDIT_CALC_CYCLE = "credit_calc_cycle",//授信计算周期

View File

@ -0,0 +1,168 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="130px"
v-loading="formLoading"
>
<el-form-item label="项目编码" prop="projectCode">
<el-input v-model="formData.projectCode" placeholder="请输入项目编码" />
</el-form-item>
<el-form-item label="结算账期" prop="paymentTerm">
<el-select v-model="formData.paymentTerm" placeholder="请选择结算账期">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.PAYMENT_TERM)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="授信方式" prop="creditMethod">
<el-select v-model="formData.creditMethod" placeholder="请选择授信方式">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CREDIT_METHOD)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="适用项目" prop="applicableProjects">
<el-select v-model="formData.applicableProjects" placeholder="请选择适用项目">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_APPLICABLE_PROJECTS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="计算周期" prop="creditCalcCycle">
<el-input v-model="formData.creditCalcCycle" placeholder="请输入授信额度计算周期" />
</el-form-item>
<el-form-item label="出票周期" prop="ticketIssuanceCycle">
<el-input v-model="formData.ticketIssuanceCycle" placeholder="请输入出票周期" />
</el-form-item>
<el-form-item label="结算周期" prop="settlementCycle">
<el-input v-model="formData.settlementCycle" placeholder="请输入结算周期" />
</el-form-item>
<el-form-item label="使用天数" prop="usageDays">
<el-input v-model="formData.usageDays" placeholder="请输入实际资金使用天数" />
</el-form-item>
<el-form-item label="年利率" prop="annualInterestRate">
<el-input v-model="formData.annualInterestRate" placeholder="请输入年利率" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict'
import { CapitalCostApi, CapitalCostVO } from '@/api/crm/capitalcost'
/** 资金成本 表单 */
defineOptions({ name: 'CapitalCostForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
projectCode: undefined,
paymentTerm: undefined,
creditMethod: undefined,
applicableProjects: undefined,
creditCalcCycle: undefined,
ticketIssuanceCycle: undefined,
settlementCycle: undefined,
usageDays: undefined,
annualInterestRate: undefined,
remark: undefined,
})
const formRules = reactive({
projectCode: [{ required: true, message: '项目编码不能为空', trigger: 'blur' }],
paymentTerm: [{ required: true, message: '结算账期不能为空', trigger: 'change' }],
creditMethod: [{ required: true, message: '授信方式不能为空', trigger: 'change' }],
applicableProjects: [{ required: true, message: '适用项目不能为空', trigger: 'change' }],
creditCalcCycle: [{ required: true, message: '计算周期不能为空', trigger: 'blur' }],
ticketIssuanceCycle: [{ required: true, message: '出票周期不能为空', trigger: 'blur' }],
settlementCycle: [{ required: true, message: '结算周期不能为空', trigger: 'blur' }],
usageDays: [{ required: true, message: '使用天数不能为空', trigger: 'blur' }],
annualInterestRate: [{ required: true, message: '年利率不能为空', trigger: 'blur' }],
// remark: [{ required: true, message: '', trigger: 'blur' }],
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
if (id) {
formLoading.value = true
try {
formData.value = await CapitalCostApi.getCapitalCost(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as CapitalCostVO
if (formType.value === 'create') {
await CapitalCostApi.createCapitalCost(data)
message.success(t('common.createSuccess'))
} else {
await CapitalCostApi.updateCapitalCost(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
projectCode: undefined,
paymentTerm: undefined,
creditMethod: undefined,
applicableProjects: undefined,
creditCalcCycle: undefined,
ticketIssuanceCycle: undefined,
settlementCycle: undefined,
usageDays: undefined,
annualInterestRate: undefined,
remark: undefined,
}
formRef.value?.resetFields()
}
</script>

View File

@ -0,0 +1,263 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
>
<el-form-item label="项目编码" prop="projectCode">
<el-input
v-model="queryParams.projectCode"
placeholder="请输入项目编码"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="结算账期" prop="paymentTerm">
<el-select
v-model="queryParams.paymentTerm"
placeholder="请选择结算账期"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.PAYMENT_TERM)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="授信方式" prop="creditMethod">
<el-select
v-model="queryParams.creditMethod"
placeholder="请选择授信方式"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CREDIT_METHOD)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="适用项目" prop="applicableProjects">
<el-select
v-model="queryParams.applicableProjects"
placeholder="请选择适用项目"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_APPLICABLE_PROJECTS)"
:key="dict.value"
:label="dict.label"
:value="dict.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-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['crm:capital-cost:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['crm:capital-cost:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<!-- <el-table-column label="序号" align="center" prop="id" />-->
<el-table-column label="项目编码" align="center" prop="projectCode" />
<el-table-column label="结算账期" align="center" prop="paymentTerm">
<template #default="scope">
<dict-tag :type="DICT_TYPE.PAYMENT_TERM" :value="scope.row.paymentTerm" />
</template>
</el-table-column>
<el-table-column label="授信方式" align="center" prop="creditMethod">
<template #default="scope">
<dict-tag :type="DICT_TYPE.CREDIT_METHOD" :value="scope.row.creditMethod" />
</template>
</el-table-column>
<el-table-column label="适用项目" align="center" prop="applicableProjects">
<template #default="scope">
<dict-tag :type="DICT_TYPE.CRM_APPLICABLE_PROJECTS" :value="scope.row.applicableProjects" />
</template>
</el-table-column>
<el-table-column label="计算周期" align="center" prop="creditCalcCycle" />
<el-table-column label="出票周期" align="center" prop="ticketIssuanceCycle" />
<el-table-column label="结算周期" align="center" prop="settlementCycle" />
<el-table-column label="资金使用天数" align="center" prop="usageDays" />
<el-table-column label="年利率" align="center" prop="annualInterestRate" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center" min-width="120px">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['crm:capital-cost:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['crm:capital-cost:delete']"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<CapitalCostForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { CapitalCostApi, CapitalCostVO } from '@/api/crm/capitalcost'
import CapitalCostForm from './CapitalCostForm.vue'
/** 资金成本 列表 */
defineOptions({ name: 'CapitalCost' })
const message = useMessage() //
const { t } = useI18n() //
const loading = ref(true) //
const list = ref<CapitalCostVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
projectCode: undefined,
paymentTerm: undefined,
creditMethod: undefined,
applicableProjects: undefined,
creditCalcCycle: undefined,
ticketIssuanceCycle: undefined,
settlementCycle: undefined,
usageDays: undefined,
annualInterestRate: undefined,
remark: undefined,
createTime: [],
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await CapitalCostApi.getCapitalCostPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await CapitalCostApi.deleteCapitalCost(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await CapitalCostApi.exportCapitalCost(queryParams)
download.excel(data, '资金成本.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 初始化 **/
onMounted(() => {
getList()
})
</script>

View File

@ -0,0 +1,178 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="产品ID" prop="projectId">
<el-input v-model="formData.projectId" placeholder="请输入产品ID" />
</el-form-item>
<el-form-item label="产品编号" prop="projectCode">
<el-input v-model="formData.projectCode" placeholder="请输入产品编号" />
</el-form-item>
<el-form-item label="客单价" prop="customerPrice">
<el-input v-model="formData.customerPrice" placeholder="请输入客单价" />
</el-form-item>
<el-form-item label="采购成本" prop="purchaseCost">
<el-input v-model="formData.purchaseCost" placeholder="请输入采购成本" />
</el-form-item>
<el-form-item label="代理费前返比例/金额" prop="agentFeePreReturn">
<el-input v-model="formData.agentFeePreReturn" placeholder="请输入代理费前返比例/金额" />
</el-form-item>
<el-form-item label="代理费后返比例/金额" prop="agentFeePostReturn">
<el-input v-model="formData.agentFeePostReturn" placeholder="请输入代理费后返比例/金额" />
</el-form-item>
<el-form-item label="线上溢价率" prop="onlineMarkupRate">
<el-input v-model="formData.onlineMarkupRate" placeholder="请输入线上溢价率" />
</el-form-item>
<el-form-item label="线下溢价率" prop="offlineMarkupRate">
<el-input v-model="formData.offlineMarkupRate" placeholder="请输入线下溢价率" />
</el-form-item>
<el-form-item label="税费成本" prop="taxCost">
<el-input v-model="formData.taxCost" placeholder="请输入税费成本" />
</el-form-item>
<el-form-item label="管理成本" prop="managementCost">
<el-input v-model="formData.managementCost" placeholder="请输入管理成本" />
</el-form-item>
<el-form-item label="结算对账成本" prop="settlementReconciliationCost">
<el-input v-model="formData.settlementReconciliationCost" placeholder="请输入结算对账成本" />
</el-form-item>
<el-form-item label="结算开票成本" prop="settlementInvoiceCost">
<el-input v-model="formData.settlementInvoiceCost" placeholder="请输入结算开票成本" />
</el-form-item>
<el-form-item label="顾问订单成本" prop="consultantOrderCost">
<el-input v-model="formData.consultantOrderCost" placeholder="请输入顾问订单成本" />
</el-form-item>
<el-form-item label="溢价分佣" prop="markupCommission">
<el-input v-model="formData.markupCommission" placeholder="请输入溢价分佣" />
</el-form-item>
<el-form-item label="顾问管理" prop="consultantManagement">
<el-input v-model="formData.consultantManagement" placeholder="请输入顾问管理" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { ProductProcurementCostApi, ProductProcurementCostVO } from '@/api/crm/productprocurementcost'
/** 产品采购成本 表单 */
defineOptions({ name: 'ProductProcurementCostForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
projectId: undefined,
projectCode: undefined,
customerPrice: undefined,
purchaseCost: undefined,
agentFeePreReturn: undefined,
agentFeePostReturn: undefined,
onlineMarkupRate: undefined,
offlineMarkupRate: undefined,
taxCost: undefined,
managementCost: undefined,
settlementReconciliationCost: undefined,
settlementInvoiceCost: undefined,
consultantOrderCost: undefined,
markupCommission: undefined,
consultantManagement: undefined,
remark: undefined,
})
const formRules = reactive({
projectId: [{ required: true, message: '产品ID不能为空', trigger: 'blur' }],
customerPrice: [{ required: true, message: '客单价不能为空', trigger: 'blur' }],
purchaseCost: [{ required: true, message: '采购成本不能为空', trigger: 'blur' }],
agentFeePreReturn: [{ required: true, message: '代理费前返比例/金额不能为空', trigger: 'blur' }],
agentFeePostReturn: [{ required: true, message: '代理费后返比例/金额不能为空', trigger: 'blur' }],
onlineMarkupRate: [{ required: true, message: '线上溢价率不能为空', trigger: 'blur' }],
offlineMarkupRate: [{ required: true, message: '线下溢价率不能为空', trigger: 'blur' }],
taxCost: [{ required: true, message: '税费成本不能为空', trigger: 'blur' }],
managementCost: [{ required: true, message: '管理成本不能为空', trigger: 'blur' }],
settlementReconciliationCost: [{ required: true, message: '结算对账成本不能为空', trigger: 'blur' }],
settlementInvoiceCost: [{ required: true, message: '结算开票成本不能为空', trigger: 'blur' }],
consultantOrderCost: [{ required: true, message: '顾问订单成本不能为空', trigger: 'blur' }],
markupCommission: [{ required: true, message: '溢价分佣不能为空', trigger: 'blur' }],
consultantManagement: [{ required: true, message: '顾问管理不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
if (id) {
formLoading.value = true
try {
formData.value = await ProductProcurementCostApi.getProductProcurementCost(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as ProductProcurementCostVO
if (formType.value === 'create') {
await ProductProcurementCostApi.createProductProcurementCost(data)
message.success(t('common.createSuccess'))
} else {
await ProductProcurementCostApi.updateProductProcurementCost(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
projectId: undefined,
projectCode: undefined,
customerPrice: undefined,
purchaseCost: undefined,
agentFeePreReturn: undefined,
agentFeePostReturn: undefined,
onlineMarkupRate: undefined,
offlineMarkupRate: undefined,
taxCost: undefined,
managementCost: undefined,
settlementReconciliationCost: undefined,
settlementInvoiceCost: undefined,
consultantOrderCost: undefined,
markupCommission: undefined,
consultantManagement: undefined,
remark: undefined,
}
formRef.value?.resetFields()
}
</script>

View File

@ -0,0 +1,211 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
>
<el-form-item label="产品ID" prop="projectId">
<el-input
v-model="queryParams.projectId"
placeholder="请输入产品ID"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="产品编号" prop="projectCode">
<el-input
v-model="queryParams.projectCode"
placeholder="请输入产品编号"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</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-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['crm:product-procurement-cost:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['crm:product-procurement-cost:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="产品ID" align="center" prop="projectId" />
<el-table-column label="产品编号" align="center" prop="projectCode" />
<el-table-column label="客单价" align="center" prop="customerPrice" />
<el-table-column label="采购成本" align="center" prop="purchaseCost" />
<el-table-column label="代理费前返比例/金额" align="center" prop="agentFeePreReturn" />
<el-table-column label="代理费后返比例/金额" align="center" prop="agentFeePostReturn" />
<el-table-column label="线上溢价率" align="center" prop="onlineMarkupRate" />
<el-table-column label="线下溢价率" align="center" prop="offlineMarkupRate" />
<el-table-column label="税费成本" align="center" prop="taxCost" />
<el-table-column label="管理成本" align="center" prop="managementCost" />
<el-table-column label="结算对账成本" align="center" prop="settlementReconciliationCost" />
<el-table-column label="结算开票成本" align="center" prop="settlementInvoiceCost" />
<el-table-column label="顾问订单成本" align="center" prop="consultantOrderCost" />
<el-table-column label="溢价分佣" align="center" prop="markupCommission" />
<el-table-column label="顾问管理" align="center" prop="consultantManagement" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center" min-width="120px">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['crm:product-procurement-cost:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['crm:product-procurement-cost:delete']"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<ProductProcurementCostForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { ProductProcurementCostApi, ProductProcurementCostVO } from '@/api/crm/productprocurementcost'
import ProductProcurementCostForm from './ProductProcurementCostForm.vue'
/** 产品采购成本 列表 */
defineOptions({ name: 'ProductProcurementCost' })
const message = useMessage() //
const { t } = useI18n() //
const loading = ref(true) //
const list = ref<ProductProcurementCostVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
projectId: undefined,
projectCode: undefined,
createTime: [],
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await ProductProcurementCostApi.getProductProcurementCostPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await ProductProcurementCostApi.deleteProductProcurementCost(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await ProductProcurementCostApi.exportProductProcurementCost(queryParams)
download.excel(data, '产品采购成本.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 初始化 **/
onMounted(() => {
getList()
})
</script>