diff --git a/src/api/crm/contract/index.ts b/src/api/crm/contract/index.ts
index 6434b95a7..7b0ac949c 100644
--- a/src/api/crm/contract/index.ts
+++ b/src/api/crm/contract/index.ts
@@ -86,6 +86,13 @@ export const getContractSimpleList = async (customerId: number) => {
})
}
+// 查询 CRM 合同下拉列表
+export const getContractSimpleAllList = async () => {
+ return await request.get({
+ url: `/crm/contract/simple-all-list`
+ })
+}
+
// 新增 CRM 合同
export const createContract = async (data: ContractVO) => {
return await request.post({ url: `/crm/contract/create`, data })
diff --git a/src/api/crm/customer/index.ts b/src/api/crm/customer/index.ts
index 15488e0bc..e56ff74f8 100644
--- a/src/api/crm/customer/index.ts
+++ b/src/api/crm/customer/index.ts
@@ -103,6 +103,11 @@ export const getCustomerSimpleList = async () => {
return await request.get({ url: `/crm/customer/simple-list` })
}
+// 客户列表
+export const getCustomerSimpleAllList = async () => {
+ return await request.get({ url: `/crm/customer/simple-list-all` })
+}
+
// ======================= 业务操作 =======================
// 客户转移
diff --git a/src/api/crm/project/index.ts b/src/api/crm/project/index.ts
new file mode 100644
index 000000000..294a03a02
--- /dev/null
+++ b/src/api/crm/project/index.ts
@@ -0,0 +1,55 @@
+import request from '@/config/axios'
+
+// CRM 项目信息 VO
+export interface ProjectVO {
+ id: number // 主键ID
+ deptId: number // 部门ID
+ siteId: number // 场地ID
+ totalInvestment: number // 项目总投资额
+ ownerUserId: string // 项目合伙人
+ ratio: string // 比例
+ investment: string // 投资额
+ cooperationAgreement: number // 场地租赁合同或合作协议
+ purchaseContractId: number // 设备采购合同ID
+ epcContractId: number // EPC施工合同ID
+ buildPermit: string // 同意建桩证明
+ ownershipProof: string // 场地权属证明
+ projectRecord: string // 项目备案
+ powerSupplyReply: string // 供电答复单
+ supplementaryMaterials: string // 其他补充材料文件路径
+ type: number // 类型
+ projectStatus: number // 状态
+}
+
+// CRM 项目信息 API
+export const ProjectApi = {
+ // 查询CRM 项目信息分页
+ getProjectPage: async (params: any) => {
+ return await request.get({ url: `/crm/project/page`, params })
+ },
+
+ // 查询CRM 项目信息详情
+ getProject: async (id: number) => {
+ return await request.get({ url: `/crm/project/get?id=` + id })
+ },
+
+ // 新增CRM 项目信息
+ createProject: async (data: ProjectVO) => {
+ return await request.post({ url: `/crm/project/create`, data })
+ },
+
+ // 修改CRM 项目信息
+ updateProject: async (data: ProjectVO) => {
+ return await request.put({ url: `/crm/project/update`, data })
+ },
+
+ // 删除CRM 项目信息
+ deleteProject: async (id: number) => {
+ return await request.delete({ url: `/crm/project/delete?id=` + id })
+ },
+
+ // 导出CRM 项目信息 Excel
+ exportProject: async (params) => {
+ return await request.download({ url: `/crm/project/export-excel`, params })
+ },
+}
\ No newline at end of file
diff --git a/src/api/crm/receivable/plan/index.ts b/src/api/crm/receivable/plan/index.ts
index 60344ffef..886574ab2 100644
--- a/src/api/crm/receivable/plan/index.ts
+++ b/src/api/crm/receivable/plan/index.ts
@@ -15,6 +15,9 @@ export interface ReceivablePlanVO {
deptName?: string
contractId?: number
contractNo?: string
+ type: number
+ auditStatus: number
+ processInstanceId: string
ownerUserId: number
ownerUserName?: string
remark: string
@@ -28,49 +31,55 @@ export interface ReceivablePlanVO {
}
}
-// 查询回款计划列表
+// 查询收款计划列表
export const getReceivablePlanPage = async (params) => {
return await request.get({ url: `/crm/receivable-plan/page`, params })
}
-// 查询回款计划列表
+// 查询收款计划列表
export const getReceivablePlanPageByCustomer = async (params) => {
return await request.get({ url: `/crm/receivable-plan/page-by-customer`, params })
}
-// 查询回款计划详情
+// 查询收款计划详情
export const getReceivablePlan = async (id: number) => {
return await request.get({ url: `/crm/receivable-plan/get?id=` + id })
}
-// 查询回款计划下拉数据
+// 查询收款计划下拉数据
export const getReceivablePlanSimpleList = async (customerId: number, contractId: number) => {
return await request.get({
url: `/crm/receivable-plan/simple-list?customerId=${customerId}&contractId=${contractId}`
})
}
-// 新增回款计划
+// 新增收款计划
export const createReceivablePlan = async (data: ReceivablePlanVO) => {
return await request.post({ url: `/crm/receivable-plan/create`, data })
}
-// 修改回款计划
+// 修改收款计划
export const updateReceivablePlan = async (data: ReceivablePlanVO) => {
return await request.put({ url: `/crm/receivable-plan/update`, data })
}
-// 删除回款计划
+// 删除收款计划
export const deleteReceivablePlan = async (id: number) => {
return await request.delete({ url: `/crm/receivable-plan/delete?id=` + id })
}
-// 导出回款计划 Excel
+// 导出收款计划 Excel
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' })
}
+
+// 提交支出申请审核
+export const submitReceivablePlan = async (id: number) => {
+ return await request.put({ url: `/crm/receivable-plan/submit?id=${id}`})
+}
+
diff --git a/src/api/crm/stationsite/index.ts b/src/api/crm/stationsite/index.ts
index 69fc512d8..d55bdfddf 100644
--- a/src/api/crm/stationsite/index.ts
+++ b/src/api/crm/stationsite/index.ts
@@ -33,41 +33,36 @@ export interface StationSiteVO {
}
// 场地信息 API
-export const StationSiteApi = {
- // 查询场地信息分页
- getStationSitePage: async (params: any) => {
- return await request.get({ url: `/crm/station-site/page`, params })
- },
-
- // 查询场地信息详情
- getStationSite: async (id: number) => {
- return await request.get({ url: `/crm/station-site/get?id=` + id })
- },
-
- // 新增场地信息
- createStationSite: async (data: StationSiteVO) => {
- return await request.post({ url: `/crm/station-site/create`, data })
- },
-
- // 修改场地信息
- updateStationSite: async (data: StationSiteVO) => {
- return await request.put({ url: `/crm/station-site/update`, data })
- },
-
- // 删除场地信息
- deleteStationSite: async (id: number) => {
- return await request.delete({ url: `/crm/station-site/delete?id=` + id })
- },
-
- // 导出场地信息 Excel
- exportStationSite: async (params) => {
- return await request.download({ url: `/crm/station-site/export-excel`, params })
- }
+export function getStationSitePage(params: any) {
+ return request.get({ url: `/crm/station-site/page`, params })
}
-// ======================= 业务操作 =======================
-// 转移场地信息
-export const transferStationSite = async (data: TransferReqVO) => {
+export function getStationSite(id: number) {
+ return request.get({ url: `/crm/station-site/get?id=` + id })
+}
+
+export function createStationSite(data: StationSiteVO) {
+ return request.post({ url: `/crm/station-site/create`, data })
+}
+
+export function updateStationSite(data: StationSiteVO) {
+ return request.put({ url: `/crm/station-site/update`, data })
+}
+
+export function deleteStationSite(id: number) {
+ return request.delete({ url: `/crm/station-site/delete?id=` + id })
+}
+
+export function exportStationSite(params: any) {
+ return request.download({ url: `/crm/station-site/export-excel`, params })
+}
+
+export function getStationSiteSimpleList() {
+ return request.get({ url: `/crm/station-site/simple-list` })
+}
+
+// ======================= 业务操作 =======================
+export async function transferStationSite(data: TransferReqVO) {
return await request.put({ url: `/crm/station-site/transfer`, data })
}
diff --git a/src/views/crm/project/ProjectForm.vue b/src/views/crm/project/ProjectForm.vue
new file mode 100644
index 000000000..351aabd12
--- /dev/null
+++ b/src/views/crm/project/ProjectForm.vue
@@ -0,0 +1,302 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/views/crm/project/component/ProjectPartnetForm.vue b/src/views/crm/project/component/ProjectPartnetForm.vue
new file mode 100644
index 000000000..752953310
--- /dev/null
+++ b/src/views/crm/project/component/ProjectPartnetForm.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ —
+
+
+
+
+
+ + 添加合伙人
+
+
+
diff --git a/src/views/crm/project/index.vue b/src/views/crm/project/index.vue
new file mode 100644
index 000000000..8c984c522
--- /dev/null
+++ b/src/views/crm/project/index.vue
@@ -0,0 +1,234 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+ 新增
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/crm/receivable/plan/ReceivablePlanForm.vue b/src/views/crm/receivable/plan/ReceivablePlanForm.vue
index 820d51007..c37057d21 100644
--- a/src/views/crm/receivable/plan/ReceivablePlanForm.vue
+++ b/src/views/crm/receivable/plan/ReceivablePlanForm.vue
@@ -178,7 +178,7 @@ const open = async (type: string, id?: number, customerId?: number, contractId?:
// 获得用户列表
userOptions.value = await UserApi.getSimpleUserList()
// 获得客户列表
- customerList.value = await CustomerApi.getCustomerSimpleList()
+ customerList.value = await CustomerApi.getCustomerSimpleAllList()
// 默认新建时选中自己
// if (formType.value === 'create') {
// formData.value.ownerUserId = useUserStore().getUser.id
diff --git a/src/views/crm/receivable/plan/index.vue b/src/views/crm/receivable/plan/index.vue
index e77966139..d81586c69 100644
--- a/src/views/crm/receivable/plan/index.vue
+++ b/src/views/crm/receivable/plan/index.vue
@@ -77,7 +77,7 @@
prop="returnTime"
width="180px"
/>
-
+
-
+
+
+ 合同
+ 临时
+ 未知
+
+
+
{{ erpPriceInputFormatter(scope.row.price) }}
-
+
-
+
+
+
+
+
+ ([]) // 客户列表
diff --git a/src/views/crm/receivable/request/RequestForm.vue b/src/views/crm/receivable/request/RequestForm.vue
index 8545a83bf..23f0838e6 100644
--- a/src/views/crm/receivable/request/RequestForm.vue
+++ b/src/views/crm/receivable/request/RequestForm.vue
@@ -9,9 +9,9 @@
>
-
+
-
-
+
+
+
+
@@ -92,12 +102,15 @@ const formLoading = ref(false) // 表单的加载中:1)修改时的数据加
const formType = ref('') // 表单的类型:create - 新增;update - 修改
const formData = ref({} as ReceivablePlanApi.ReceivablePlanVO)
const formRules = reactive({
+ deptId: [{ required: true, message: '付款单位不能为空', trigger: 'blur' }],
+ customerId: [{ required: true, message: '收款单位不能为空', trigger: 'blur' }],
price: [{ required: true, message: '计划付款金额不能为空', trigger: 'blur' }],
returnTime: [{ required: true, message: '计划付款日期不能为空', trigger: 'blur' }],
remark: [{ required: true, message: '用途不能为空', trigger: 'blur' }]
})
const formRef = ref() // 表单 Ref
const deptList = ref([])
+const customerList = ref([]) // 客户列表
/** 打开弹窗 */
const open = async (type: string, id?: number, customerId?: number, contractId?: number) => {
@@ -120,10 +133,12 @@ const open = async (type: string, id?: number, customerId?: number, contractId?:
userOptions.value = await UserApi.getSimpleUserList()
// 加载部门列表
deptList.value = await DeptApi.querySimpleDeptList()
+ // 获得客户列表
+ customerList.value = await CustomerApi.getCustomerSimpleAllList()
// 默认新建时选中自己
- // if (formType.value === 'create') {
- // formData.value.ownerUserId = useUserStore().getUser.id
- // }
+ if (formType.value === 'create') {
+ formData.value.ownerUserId = useUserStore().getUser.id
+ }
}
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
@@ -139,6 +154,8 @@ const submitForm = async () => {
try {
const data = formData.value as unknown as ReceivablePlanApi.ReceivablePlanVO
if (formType.value === 'create') {
+ data.auditStatus = 0
+ data.type = 1
await ReceivablePlanApi.createReceivablePlan(data)
message.success(t('common.createSuccess'))
} else {
diff --git a/src/views/crm/receivable/request/index.vue b/src/views/crm/receivable/request/index.vue
index ec268b227..d03760897 100644
--- a/src/views/crm/receivable/request/index.vue
+++ b/src/views/crm/receivable/request/index.vue
@@ -26,15 +26,7 @@
/>
-
-
-
+
@@ -45,7 +37,7 @@
重置
新增
-
导出
-
+ -->
@@ -128,6 +120,11 @@
{{ erpPriceInputFormatter(scope.row.price) }}
+
+
+
+
+
{{ scope.row.creatorName }}
@@ -137,7 +134,16 @@
+ 提交审核
+
+
([]) // 客户列表
/** 查询列表 */
@@ -256,6 +262,20 @@ const handleExport = async () => {
}
}
+
+/** 提交审核 **/
+const handleSubmit = async (row: ReceivablePlanApi.ReceivablePlanVO) => {
+ await message.confirm(`您确定提交 付款单位:【${row.deptName}】收款单位:【${row.customerName}】 支出申请审核吗?`)
+ await ReceivablePlanApi.submitReceivablePlan(row.id)
+ message.success('提交审核成功!')
+ await getList()
+}
+
+/** 查看审批 */
+const handleProcessDetail = (row: ReceivablePlanApi.ReceivablePlanVO) => {
+ push({ name: 'BpmProcessInstanceDetail', query: { id: row.processInstanceId } })
+}
+
/** 打开详情 */
const { push } = useRouter()
const openDetail = (id: number) => {