diff --git a/src/api/crm/backlog/index.ts b/src/api/crm/backlog/index.ts deleted file mode 100644 index 7ea01990..00000000 --- a/src/api/crm/backlog/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -import request from '@/config/axios' -// TODO 芋艿:融合下 - -// 5. 获得待审核合同数量 -export const getCheckContractCount = async () => { - return await request.get({ url: '/crm/contract/check-contract-count' }) -} - -// 6. 获得待审核回款数量 -export const getCheckReceivablesCount = async () => { - return await request.get({ url: '/crm/receivable/check-receivables-count' }) -} - -// 7. 获得待回款提醒数量 -export const getRemindReceivablePlanCount = async () => { - return await request.get({ url: '/crm/receivable-plan/remind-receivable-plan-count' }) -} - -// 8. 获得即将到期的合同数量 -export const getEndContractCount = async () => { - return await request.get({ url: '/crm/contract/end-contract-count' }) -} diff --git a/src/api/crm/receivable/index.ts b/src/api/crm/receivable/index.ts index 1c184925..069d6c4a 100644 --- a/src/api/crm/receivable/index.ts +++ b/src/api/crm/receivable/index.ts @@ -64,3 +64,8 @@ export const exportReceivable = async (params) => { export const submitReceivable = async (id: number) => { return await request.put({ url: `/crm/receivable/submit?id=${id}` }) } + +// 获得待审核回款数量 +export const getAuditReceivableCount = async () => { + return await request.get({ url: '/crm/receivable/audit-count' }) +} diff --git a/src/api/crm/receivable/plan/index.ts b/src/api/crm/receivable/plan/index.ts index ce379beb..6e0cab4a 100644 --- a/src/api/crm/receivable/plan/index.ts +++ b/src/api/crm/receivable/plan/index.ts @@ -67,3 +67,8 @@ export const deleteReceivablePlan = async (id: number) => { export const exportReceivablePlan = async (params) => { return await request.download({ url: `/crm/receivable-plan/export-excel`, params }) } + +// 获得待回款提醒数量 +export const getReceivablePlanRemindCount = async () => { + return await request.get({ url: '/crm/receivable-plan/remind-count' }) +} diff --git a/src/views/crm/backlog/components/ReceivableAuditList.vue b/src/views/crm/backlog/components/ReceivableAuditList.vue new file mode 100644 index 00000000..2831d45b --- /dev/null +++ b/src/views/crm/backlog/components/ReceivableAuditList.vue @@ -0,0 +1,201 @@ +<!-- 待审核回款 --> +<template> + <ContentWrap> + <div class="pb-5 text-xl"> 待审核回款 </div> + <!-- 搜索工作栏 --> + <el-form + class="-mb-15px" + :model="queryParams" + ref="queryFormRef" + :inline="true" + label-width="68px" + > + <el-form-item label="合同状态" prop="auditStatus"> + <el-select + v-model="queryParams.auditStatus" + class="!w-240px" + placeholder="状态" + @change="handleQuery" + > + <el-option + v-for="(option, index) in AUDIT_STATUS" + :label="option.label" + :value="option.value" + :key="index" + /> + </el-select> + </el-form-item> + </el-form> + </ContentWrap> + <!-- 列表 --> + <ContentWrap> + <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> + <el-table-column align="center" fixed="left" label="回款编号" prop="no" width="180"> + <template #default="scope"> + <el-link :underline="false" type="primary" @click="openDetail(scope.row.id)"> + {{ scope.row.no }} + </el-link> + </template> + </el-table-column> + <el-table-column align="center" label="客户名称" prop="customerName" width="120"> + <template #default="scope"> + <el-link + :underline="false" + type="primary" + @click="openCustomerDetail(scope.row.customerId)" + > + {{ scope.row.customerName }} + </el-link> + </template> + </el-table-column> + <el-table-column align="center" label="合同编号" prop="contractNo" width="180"> + <template #default="scope"> + <el-link + :underline="false" + type="primary" + @click="openContractDetail(scope.row.contractId)" + > + {{ scope.row.contract.no }} + </el-link> + </template> + </el-table-column> + <el-table-column + :formatter="dateFormatter2" + align="center" + label="回款日期" + prop="returnTime" + width="150px" + /> + <el-table-column + align="center" + label="回款金额(元)" + prop="price" + width="140" + :formatter="erpPriceTableColumnFormatter" + /> + <el-table-column align="center" label="回款方式" prop="returnType" width="130px"> + <template #default="scope"> + <dict-tag :type="DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE" :value="scope.row.returnType" /> + </template> + </el-table-column> + <el-table-column align="center" label="备注" prop="remark" width="200" /> + <el-table-column + align="center" + label="合同金额(元)" + prop="contract.totalPrice" + width="140" + :formatter="erpPriceTableColumnFormatter" + /> + <el-table-column align="center" label="负责人" prop="ownerUserName" width="120" /> + <el-table-column align="center" label="所属部门" prop="ownerUserDeptName" width="100px" /> + <el-table-column + :formatter="dateFormatter" + align="center" + label="更新时间" + prop="updateTime" + width="180px" + /> + <el-table-column + :formatter="dateFormatter" + align="center" + label="创建时间" + prop="createTime" + width="180px" + /> + <el-table-column align="center" label="创建人" prop="creatorName" width="120" /> + <el-table-column align="center" fixed="right" label="回款状态" prop="auditStatus" width="120"> + <template #default="scope"> + <dict-tag :type="DICT_TYPE.CRM_AUDIT_STATUS" :value="scope.row.auditStatus" /> + </template> + </el-table-column> + <el-table-column align="center" fixed="right" label="操作" width="180px"> + <template #default="scope"> + <el-button + v-hasPermi="['crm:receivable:update']" + link + type="primary" + @click="handleProcessDetail(scope.row)" + > + 查看审批 + </el-button> + </template> + </el-table-column> + </el-table> + <!-- 分页 --> + <Pagination + :total="total" + v-model:page="queryParams.pageNo" + v-model:limit="queryParams.pageSize" + @pagination="getList" + /> + </ContentWrap> +</template> + +<script setup lang="ts"> +import { DICT_TYPE } from '@/utils/dict' +import { dateFormatter, dateFormatter2 } from '@/utils/formatTime' +import * as ReceivableApi from '@/api/crm/receivable' +import { AUDIT_STATUS } from './common' +import { erpPriceTableColumnFormatter } from '@/utils' + +defineOptions({ name: 'CrmReceivableAuditList' }) + +const loading = ref(true) // 列表的加载中 +const total = ref(0) // 列表的总页数 +const list = ref([]) // 列表的数据 +const queryParams = reactive({ + pageNo: 1, + pageSize: 10, + auditStatus: 10 +}) +const queryFormRef = ref() // 搜索的表单 + +/** 查询列表 */ +const getList = async () => { + loading.value = true + try { + const data = await ReceivableApi.getReceivablePage(queryParams) + list.value = data.list + total.value = data.total + } finally { + loading.value = false + } +} + +/** 搜索按钮操作 */ +const handleQuery = () => { + queryParams.pageNo = 1 + getList() +} + +/** 查看审批 */ +const handleProcessDetail = (row: ReceivableApi.ReceivableVO) => { + push({ name: 'BpmProcessInstanceDetail', query: { id: row.processInstanceId } }) +} + +/** 打开回款详情 */ +const { push } = useRouter() +const openDetail = (id: number) => { + push({ name: 'CrmReceivableDetail', params: { id } }) +} + +/** 打开客户详情 */ +const openCustomerDetail = (id: number) => { + push({ name: 'CrmCustomerDetail', params: { id } }) +} + +/** 打开合同详情 */ +const openContractDetail = (id: number) => { + push({ name: 'CrmContractDetail', params: { id } }) +} + +/** 激活时 */ +onActivated(async () => { + await getList() +}) + +/** 初始化 **/ +onMounted(() => { + getList() +}) +</script> diff --git a/src/views/crm/backlog/components/ReceivablePlanRemindList.vue b/src/views/crm/backlog/components/ReceivablePlanRemindList.vue new file mode 100644 index 00000000..9a3cf0cf --- /dev/null +++ b/src/views/crm/backlog/components/ReceivablePlanRemindList.vue @@ -0,0 +1,220 @@ +<!-- 待回款提醒 --> +<template> + <ContentWrap> + <div class="pb-5 text-xl">待回款提醒</div> + <!-- 搜索工作栏 --> + <el-form + ref="queryFormRef" + :inline="true" + :model="queryParams" + class="-mb-15px" + label-width="68px" + > + <el-form-item label="合同状态" prop="remindType"> + <el-select + v-model="queryParams.remindType" + class="!w-240px" + placeholder="状态" + @change="handleQuery" + > + <el-option + v-for="(option, index) in RECEIVABLE_REMIND_TYPE" + :label="option.label" + :value="option.value" + :key="index" + /> + </el-select> + </el-form-item> + </el-form> + </ContentWrap> + + <ContentWrap> + <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> + <el-table-column align="center" fixed="left" label="客户名称" prop="customerName" width="150"> + <template #default="scope"> + <el-link + :underline="false" + type="primary" + @click="openCustomerDetail(scope.row.customerId)" + > + {{ scope.row.customerName }} + </el-link> + </template> + </el-table-column> + <el-table-column align="center" label="合同编号" prop="contractNo" width="200px" /> + <el-table-column align="center" label="期数" prop="period"> + <template #default="scope"> + <el-link :underline="false" type="primary" @click="openDetail(scope.row.id)"> + {{ scope.row.period }} + </el-link> + </template> + </el-table-column> + <el-table-column + align="center" + label="计划回款金额(元)" + prop="price" + width="160" + :formatter="erpPriceTableColumnFormatter" + /> + <el-table-column + :formatter="dateFormatter2" + align="center" + label="计划回款日期" + prop="returnTime" + width="180px" + /> + <el-table-column align="center" label="提前几天提醒" prop="remindDays" width="150" /> + <el-table-column + align="center" + label="提醒日期" + prop="remindTime" + width="180px" + :formatter="dateFormatter2" + /> + <el-table-column align="center" label="回款方式" prop="returnType" width="130px"> + <template #default="scope"> + <dict-tag :type="DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE" :value="scope.row.returnType" /> + </template> + </el-table-column> + <el-table-column align="center" label="备注" prop="remark" /> + <el-table-column label="负责人" prop="ownerUserName" width="120" /> + <el-table-column + align="center" + label="实际回款金额(元)" + prop="receivable.price" + width="160" + > + <template #default="scope"> + <el-text v-if="scope.row.receivable"> + {{ erpPriceInputFormatter(scope.row.receivable.price) }} + </el-text> + <el-text v-else>{{ erpPriceInputFormatter(0) }}</el-text> + </template> + </el-table-column> + <el-table-column + align="center" + label="实际回款日期" + prop="receivable.returnTime" + width="180px" + :formatter="dateFormatter2" + /> + <el-table-column + align="center" + label="实际回款金额(元)" + prop="receivable.price" + width="160" + > + <template #default="scope"> + <el-text v-if="scope.row.receivable"> + {{ erpPriceInputFormatter(scope.row.price - scope.row.receivable.price) }} + </el-text> + <el-text v-else>{{ erpPriceInputFormatter(scope.row.price) }}</el-text> + </template> + </el-table-column> + <el-table-column + :formatter="dateFormatter" + align="center" + label="更新时间" + prop="updateTime" + width="180px" + /> + <el-table-column + :formatter="dateFormatter" + align="center" + label="创建时间" + prop="createTime" + width="180px" + /> + <el-table-column align="center" label="创建人" prop="creatorName" width="100px" /> + <el-table-column align="center" fixed="right" label="操作" width="180px"> + <template #default="scope"> + <el-button + v-hasPermi="['crm:receivable:create']" + link + type="success" + @click="openReceivableForm(scope.row)" + :disabled="scope.row.receivableId" + > + 创建回款 + </el-button> + </template> + </el-table-column> + </el-table> + <!-- 分页 --> + <Pagination + :total="total" + v-model:page="queryParams.pageNo" + v-model:limit="queryParams.pageSize" + @pagination="getList" + /> + </ContentWrap> + + <!-- 表单弹窗:添加/修改 --> + <ReceivableForm ref="receivableFormRef" @success="getList" /> +</template> + +<script setup lang="ts"> +import { DICT_TYPE } from '@/utils/dict' +import { dateFormatter, dateFormatter2 } from '@/utils/formatTime' +import * as ReceivablePlanApi from '@/api/crm/receivable/plan' +import { RECEIVABLE_REMIND_TYPE } from './common' +import { erpPriceInputFormatter, erpPriceTableColumnFormatter } from '@/utils' +import ReceivableForm from '@/views/crm/receivable/ReceivableForm.vue' + +defineOptions({ name: 'ReceivablePlanRemindList' }) + +const loading = ref(true) // 列表的加载中 +const total = ref(0) // 列表的总页数 +const list = ref([]) // 列表的数据 +const queryParams = reactive({ + pageNo: 1, + pageSize: 10, + remindType: 1 +}) +const queryFormRef = ref() // 搜索的表单 + +/** 查询列表 */ +const getList = async () => { + loading.value = true + try { + const data = await ReceivablePlanApi.getReceivablePlanPage(queryParams) + list.value = data.list + total.value = data.total + } finally { + loading.value = false + } +} + +/** 搜索按钮操作 */ +const handleQuery = () => { + queryParams.pageNo = 1 + getList() +} + +/** 创建回款操作 */ +const receivableFormRef = ref() +const openReceivableForm = (row: ReceivablePlanApi.ReceivablePlanVO) => { + receivableFormRef.value.open('create', undefined, row) +} + +/** 打开详情 */ +const { push } = useRouter() +const openDetail = (id: number) => { + push({ name: 'CrmReceivablePlanDetail', params: { id } }) +} + +/** 打开客户详情 */ +const openCustomerDetail = (id: number) => { + push({ name: 'CrmCustomerDetail', params: { id } }) +} + +/** 激活时 */ +onActivated(async () => { + await getList() +}) + +/** 初始化 **/ +onMounted(async () => { + await getList() +}) +</script> diff --git a/src/views/crm/backlog/index.vue b/src/views/crm/backlog/index.vue index b5c3a9a4..3dc069c0 100644 --- a/src/views/crm/backlog/index.vue +++ b/src/views/crm/backlog/index.vue @@ -18,28 +18,29 @@ <CustomerTodayContactList v-if="leftMenu === 'customerTodayContact'" /> <ClueFollowList v-if="leftMenu === 'clueFollow'" /> <ContractAuditList v-if="leftMenu === 'contractAudit'" /> - <CheckReceivables v-if="leftMenu === 'checkReceivables'" /> + <ReceivableAuditList v-if="leftMenu === 'receivableAudit'" /> <ContractRemindList v-if="leftMenu === 'contractRemind'" /> <CustomerFollowList v-if="leftMenu === 'customerFollow'" /> <CustomerPutPoolRemindList v-if="leftMenu === 'customerPutPoolRemind'" /> - <RemindReceivables v-if="leftMenu === 'remindReceivables'" /> + <ReceivablePlanRemindList v-if="leftMenu === 'receivablePlanRemind'" /> </el-col> </el-row> </template> <script lang="ts" setup> -import * as BacklogApi from '@/api/crm/backlog' import CustomerFollowList from './components/CustomerFollowList.vue' import CustomerTodayContactList from './components/CustomerTodayContactList.vue' import CustomerPutPoolRemindList from './components/CustomerPutPoolRemindList.vue' import ClueFollowList from './components/ClueFollowList.vue' import ContractAuditList from './components/ContractAuditList.vue' import ContractRemindList from './components/ContractRemindList.vue' -import RemindReceivables from './tables/RemindReceivables.vue' -import CheckReceivables from './tables/CheckReceivables.vue' +import ReceivablePlanRemindList from './components/ReceivablePlanRemindList.vue' +import ReceivableAuditList from './components/ReceivableAuditList.vue' import * as CustomerApi from '@/api/crm/customer' import * as ClueApi from '@/api/crm/clue' import * as ContractApi from '@/api/crm/contract' +import * as ReceivableApi from '@/api/crm/receivable' +import * as ReceivablePlanApi from '@/api/crm/receivable/plan' defineOptions({ name: 'CrmBacklog' }) @@ -51,8 +52,8 @@ const customerPutPoolRemindCount = ref(0) const customerTodayContactCount = ref(0) const contractAuditCount = ref(0) const contractRemindCount = ref(0) -const checkReceivablesCount = ref(0) -const remindReceivablesCount = ref(0) +const receivableAuditCount = ref(0) +const receivablePlanRemindCount = ref(0) const leftSides = ref([ { @@ -82,13 +83,13 @@ const leftSides = ref([ }, { name: '待审核回款', - menu: 'checkReceivables', - count: checkReceivablesCount + menu: 'receivableAudit', + count: receivableAuditCount }, { name: '待回款提醒', - menu: 'remindReceivables', - count: remindReceivablesCount + menu: 'receivablePlanRemind', + count: receivablePlanRemindCount }, { name: '即将到期的合同', @@ -113,8 +114,10 @@ const getCount = () => { ClueApi.getFollowClueCount().then((count) => (clueFollowCount.value = count)) ContractApi.getAuditContractCount().then((count) => (contractAuditCount.value = count)) ContractApi.getRemindContractCount().then((count) => (contractRemindCount.value = count)) - BacklogApi.getCheckReceivablesCount().then((count) => (checkReceivablesCount.value = count)) - BacklogApi.getRemindReceivablePlanCount().then((count) => (remindReceivablesCount.value = count)) + ReceivableApi.getAuditReceivableCount().then((count) => (receivableAuditCount.value = count)) + ReceivablePlanApi.getReceivablePlanRemindCount().then( + (count) => (receivablePlanRemindCount.value = count) + ) } /** 激活时 */ diff --git a/src/views/crm/backlog/tables/CheckReceivables.vue b/src/views/crm/backlog/tables/CheckReceivables.vue deleted file mode 100644 index 7ca310a3..00000000 --- a/src/views/crm/backlog/tables/CheckReceivables.vue +++ /dev/null @@ -1,124 +0,0 @@ -<!-- 待审核回款 --> -<template> - <ContentWrap> - <div class="pb-5 text-xl"> 待审核回款 </div> - <!-- 搜索工作栏 --> - <el-form - class="-mb-15px" - :model="queryParams" - ref="queryFormRef" - :inline="true" - label-width="68px" - > - <el-form-item label="合同状态" prop="auditStatus"> - <el-select - v-model="queryParams.auditStatus" - class="!w-240px" - placeholder="状态" - @change="handleQuery" - > - <el-option - v-for="(option, index) in AUDIT_STATUS" - :label="option.label" - :value="option.value" - :key="index" - /> - </el-select> - </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="id" /> - <el-table-column label="回款编号" align="center" prop="no" /> - <!-- <el-table-column label="回款计划ID" align="center" prop="planId" />--> - <el-table-column label="客户" align="center" prop="customerId" /> - <el-table-column label="合同" align="center" prop="contractId" /> - <el-table-column label="审批状态" align="center" prop="checkStatus" width="130px"> - <template #default="scope"> - <dict-tag :type="DICT_TYPE.CRM_AUDIT_STATUS" :value="scope.row.checkStatus" /> - </template> - </el-table-column> - <!-- <el-table-column label="工作流编号" align="center" prop="processInstanceId" />--> - <el-table-column - label="回款日期" - align="center" - prop="returnTime" - :formatter="dateFormatter2" - width="150px" - /> - <el-table-column label="回款方式" align="center" prop="returnType" width="130px"> - <template #default="scope"> - <dict-tag :type="DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE" :value="scope.row.returnType" /> - </template> - </el-table-column> - <el-table-column label="回款金额(元)" align="center" prop="price" /> - <el-table-column label="负责人" align="center" prop="ownerUserId" /> - <el-table-column label="批次" align="center" prop="batchId" /> - <!--<el-table-column label="显示顺序" align="center" prop="sort" />--> - <el-table-column label="状态" align="center" prop="status"> - <template #default="scope"> - <dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" /> - </template> - </el-table-column> - <el-table-column label="备注" align="center" prop="remark" /> - <el-table-column - label="创建时间" - align="center" - prop="createTime" - :formatter="dateFormatter" - width="180px" - /> - </el-table> - <!-- 分页 --> - <Pagination - :total="total" - v-model:page="queryParams.pageNo" - v-model:limit="queryParams.pageSize" - @pagination="getList" - /> - </ContentWrap> -</template> - -<script setup lang="ts" name="CheckReceivables"> -import { DICT_TYPE } from '@/utils/dict' -import { dateFormatter, dateFormatter2 } from '@/utils/formatTime' -import * as ReceivableApi from '@/api/crm/receivable' -import { AUDIT_STATUS } from './common' - -const loading = ref(true) // 列表的加载中 -const total = ref(0) // 列表的总页数 -const list = ref([]) // 列表的数据 -const queryParams = reactive({ - pageNo: 1, - pageSize: 10, - auditStatus: 20 -}) -const queryFormRef = ref() // 搜索的表单 - -/** 查询列表 */ -const getList = async () => { - loading.value = true - try { - const data = await ReceivableApi.getReceivablePage(queryParams) - list.value = data.list - total.value = data.total - } finally { - loading.value = false - } -} - -/** 搜索按钮操作 */ -const handleQuery = () => { - queryParams.pageNo = 1 - getList() -} - -/** 初始化 **/ -onMounted(() => { - getList() -}) -</script> - -<style scoped></style> diff --git a/src/views/crm/backlog/tables/RemindReceivables.vue b/src/views/crm/backlog/tables/RemindReceivables.vue deleted file mode 100644 index 8ca3fd4d..00000000 --- a/src/views/crm/backlog/tables/RemindReceivables.vue +++ /dev/null @@ -1,128 +0,0 @@ -<!-- 待回款提醒 --> -<template> - <ContentWrap> - <div class="pb-5 text-xl">待回款提醒</div> - <!-- 搜索工作栏 --> - <el-form - ref="queryFormRef" - :inline="true" - :model="queryParams" - class="-mb-15px" - label-width="68px" - > - <el-form-item label="合同状态" prop="remindType"> - <el-select - v-model="queryParams.remindType" - class="!w-240px" - placeholder="状态" - @change="handleQuery" - > - <el-option - v-for="(option, index) in RECEIVABLE_REMIND_TYPE" - :label="option.label" - :value="option.value" - :key="index" - /> - </el-select> - </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="id" />--> - <el-table-column label="客户名称" align="center" prop="customerId" width="150px" /> - <el-table-column label="合同名称" align="center" prop="contractId" width="150px" /> - <el-table-column label="期数" align="center" prop="period" /> - <el-table-column label="计划回款" align="center" prop="price" /> - <el-table-column - label="计划回款日期" - align="center" - prop="returnTime" - :formatter="dateFormatter2" - width="180px" - /> - <el-table-column label="提前几天提醒" align="center" prop="remindDays" /> - <el-table-column label="完成状态" align="center" prop="status"> - <template #default="scope"> - <dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" /> - </template> - </el-table-column> - <el-table-column label="审批状态" align="center" prop="checkStatus" width="130px"> - <template #default="scope"> - <dict-tag :type="DICT_TYPE.CRM_AUDIT_STATUS" :value="scope.row.checkStatus" /> - </template> - </el-table-column> - <!--<el-table-column label="工作流编号" align="center" prop="processInstanceId" />--> - <el-table-column prop="ownerUserId" label="负责人" width="120"> - <template #default="scope"> - {{ userList.find((user) => user.id === scope.row.ownerUserId)?.nickname }} - </template> - </el-table-column> - <el-table-column label="显示顺序" align="center" prop="sort" /> - <el-table-column label="备注" align="center" prop="remark" /> - <el-table-column - label="创建时间" - align="center" - prop="createTime" - :formatter="dateFormatter" - width="180px" - /> - </el-table> - <!-- 分页 --> - <Pagination - :total="total" - v-model:page="queryParams.pageNo" - v-model:limit="queryParams.pageSize" - @pagination="getList" - /> - </ContentWrap> -</template> - -<script setup lang="ts" name="RemindReceivables"> -import { DICT_TYPE } from '@/utils/dict' -import { dateFormatter, dateFormatter2 } from '@/utils/formatTime' -import * as ReceivablePlanApi from '@/api/crm/receivable/plan' -import * as UserApi from '@/api/system/user' -import { RECEIVABLE_REMIND_TYPE } from './common' - -defineOptions({ name: 'ReceivablePlan' }) - -const loading = ref(true) // 列表的加载中 -const total = ref(0) // 列表的总页数 -const list = ref([]) // 列表的数据 -const userList = ref<UserApi.UserVO[]>([]) // 用户列表 -const queryParams = reactive({ - pageNo: 1, - pageSize: 10, - remindType: 1 -}) -const queryFormRef = ref() // 搜索的表单 - -/** 查询列表 */ -const getList = async () => { - loading.value = true - try { - const data = await ReceivablePlanApi.getReceivablePlanPage(queryParams) - list.value = data.list - total.value = data.total - } finally { - loading.value = false - } -} - -/** 搜索按钮操作 */ -const handleQuery = () => { - queryParams.pageNo = 1 - getList() -} - -/** 初始化 **/ -onMounted(async () => { - await getList() - // 获取用户列表 - userList.value = await UserApi.getSimpleUserList() -}) -</script> - -<style scoped></style> diff --git a/src/views/crm/backlog/tables/common.ts b/src/views/crm/backlog/tables/common.ts deleted file mode 100644 index fafc154f..00000000 --- a/src/views/crm/backlog/tables/common.ts +++ /dev/null @@ -1,38 +0,0 @@ -/** 跟进状态 */ -export const FOLLOWUP_STATUS = [ - { label: '已跟进', value: true }, - { label: '待跟进', value: false } -] - -/** 归属范围 */ -export const SCENE_TYPES = [ - { label: '我负责的', value: 1 }, - { label: '我参与的', value: 2 }, - { label: '下属负责的', value: 3 } -] - -/** 联系状态 */ -export const CONTACT_STATUS = [ - { label: '今日需联系', value: 1 }, - { label: '已逾期', value: 2 }, - { label: '已联系', value: 3 } -] - -/** 审批状态 */ -export const AUDIT_STATUS = [ - { label: '已审批', value: 20 }, - { label: '待审批', value: 10 } -] - -/** 回款提醒类型 */ -export const RECEIVABLE_REMIND_TYPE = [ - { label: '待回款', value: 1 }, - { label: '已逾期', value: 2 }, - { label: '已回款', value: 3 } -] - -/** 合同过期状态 */ -export const CONTRACT_EXPIRY_TYPE = [ - { label: '即将过期', value: 1 }, - { label: '已过期', value: 2 } -] diff --git a/src/views/crm/business/BusinessForm.vue b/src/views/crm/business/BusinessForm.vue index 4c7d253f..6b03047b 100644 --- a/src/views/crm/business/BusinessForm.vue +++ b/src/views/crm/business/BusinessForm.vue @@ -175,7 +175,6 @@ const formRules = reactive({ const formRef = ref() // 表单 Ref const userOptions = ref<UserApi.UserVO[]>([]) // 用户列表 const statusTypeList = ref([]) // 商机状态类型列表 -// TODO 芋艿:统一的客户选择面板 const customerList = ref([]) // 客户列表的数据 /** 子表的表单 */ diff --git a/src/views/crm/contact/ContactForm.vue b/src/views/crm/contact/ContactForm.vue index 14f0d1f2..ac749da9 100644 --- a/src/views/crm/contact/ContactForm.vue +++ b/src/views/crm/contact/ContactForm.vue @@ -214,7 +214,6 @@ const formRules = reactive({ }) const formRef = ref() // 表单 Ref const userOptions = ref<UserApi.UserVO[]>([]) // 用户列表 -// TODO 芋艿:统一的客户选择面板 const customerList = ref<CustomerApi.CustomerVO[]>([]) // 客户列表 const contactList = ref<ContactApi.ContactVO[]>([]) // 联系人列表 diff --git a/src/views/crm/contract/ContractForm.vue b/src/views/crm/contract/ContractForm.vue index 5ea55720..9c5b2c6a 100644 --- a/src/views/crm/contract/ContractForm.vue +++ b/src/views/crm/contract/ContractForm.vue @@ -235,7 +235,6 @@ const formRules = reactive({ }) const formRef = ref() // 表单 Ref const userOptions = ref<UserApi.UserVO[]>([]) // 用户列表 -// TODO 芋艿:统一的客户选择面板 const customerList = ref([]) // 客户列表的数据 const businessList = ref<BusinessApi.BusinessVO[]>([]) const contactList = ref<ContactApi.ContactVO[]>([]) diff --git a/src/views/crm/customer/limitConfig/CustomerLimitConfigForm.vue b/src/views/crm/customer/limitConfig/CustomerLimitConfigForm.vue index d8aa9240..c7338a43 100644 --- a/src/views/crm/customer/limitConfig/CustomerLimitConfigForm.vue +++ b/src/views/crm/customer/limitConfig/CustomerLimitConfigForm.vue @@ -82,7 +82,6 @@ const formRules = reactive({ maxCount: [{ required: true, message: '数量上限不能为空', trigger: 'blur' }] }) const formRef = ref() // 表单 Ref -// TODO @芋艿:看看怎么搞个部门选择组件 const deptTree = ref() // 部门树形结构 const userOptions = ref<UserApi.UserVO[]>([]) // 用户列表 diff --git a/src/views/crm/permission/components/PermissionForm.vue b/src/views/crm/permission/components/PermissionForm.vue index 3eff4e6a..c86e8bd0 100644 --- a/src/views/crm/permission/components/PermissionForm.vue +++ b/src/views/crm/permission/components/PermissionForm.vue @@ -129,7 +129,6 @@ const resetForm = (bizType: number, bizId: number) => { } onMounted(async () => { // 获得用户列表 - // TODO 芋艿:用户列表的选择组件 userOptions.value = await UserApi.getSimpleUserList() }) </script> diff --git a/src/views/crm/permission/components/TransferForm.vue b/src/views/crm/permission/components/TransferForm.vue index c9f5eed1..3b4e6dfb 100644 --- a/src/views/crm/permission/components/TransferForm.vue +++ b/src/views/crm/permission/components/TransferForm.vue @@ -40,7 +40,7 @@ </el-radio-group> </el-form-item> </el-form> - <!-- TODO 转移客户时,需要额外有【联系人】【商机】【合同】的 checkbox 选择 --> + <!-- TODO @puhui999 转移客户时,需要额外有【联系人】【商机】【合同】的 checkbox 选择 --> <template #footer> <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button> <el-button @click="dialogVisible = false">取 消</el-button> @@ -117,7 +117,6 @@ const resetForm = () => { } onMounted(async () => { // 获得用户列表 - // TODO 芋艿:用户列表的选择组件 userOptions.value = await UserApi.getSimpleUserList() }) </script> diff --git a/src/views/crm/product/ProductForm.vue b/src/views/crm/product/ProductForm.vue index 1748c804..1bc5aaca 100644 --- a/src/views/crm/product/ProductForm.vue +++ b/src/views/crm/product/ProductForm.vue @@ -207,6 +207,6 @@ onMounted(async () => { const data = await ProductCategoryApi.getProductCategoryList({}) productCategoryList.value = handleTree(data, 'id', 'parentId') // 系统用户列表 - userList.value = await getSimpleUserList() // TODO 芋艿:替换成用户组件 + userList.value = await getSimpleUserList() }) </script> diff --git a/src/views/crm/receivable/detail/index.vue b/src/views/crm/receivable/detail/index.vue index 162825f2..ef9e8469 100644 --- a/src/views/crm/receivable/detail/index.vue +++ b/src/views/crm/receivable/detail/index.vue @@ -39,9 +39,10 @@ import { getOperateLogPage } from '@/api/crm/operateLog' import ReceivableForm from '@/views/crm/receivable/ReceivableForm.vue' defineOptions({ name: 'CrmReceivablePlanDetail' }) +const props = defineProps<{ id?: number }>() +const route = useRoute() const message = useMessage() - const receivableId = ref(0) // 回款编号 const loading = ref(true) // 加载中 const receivable = ref<ReceivableApi.ReceivableVO>({} as ReceivableApi.ReceivableVO) // 回款详情 diff --git a/src/views/crm/receivable/index.vue b/src/views/crm/receivable/index.vue index 1a8b32de..608f6158 100644 --- a/src/views/crm/receivable/index.vue +++ b/src/views/crm/receivable/index.vue @@ -287,6 +287,11 @@ const handleSubmit = async (row: ReceivableApi.ReceivableVO) => { await getList() } +/** 查看审批 */ +const handleProcessDetail = (row: ReceivableApi.ReceivableVO) => { + push({ name: 'BpmProcessInstanceDetail', query: { id: row.processInstanceId } }) +} + /** 打开回款详情 */ const { push } = useRouter() const openDetail = (id: number) => { @@ -303,11 +308,6 @@ const openContractDetail = (id: number) => { push({ name: 'CrmContractDetail', params: { id } }) } -/** 查看审批 */ -const handleProcessDetail = (row: ReceivableApi.ReceivableVO) => { - push({ name: 'BpmProcessInstanceDetail', query: { id: row.processInstanceId } }) -} - /** 导出按钮操作 */ const handleExport = async () => { try {