Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
admin
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
b0c1e55c
authored
Dec 01, 2023
by
YunaiV
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
crm: 增加基于客户查询回款计划分页
parent
bdc80ea5
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
143 additions
and
106 deletions
+143
-106
src/api/crm/receivable/plan/index.ts
+5
-0
src/utils/dict.ts
+1
-1
src/views/crm/contact/components/ContactList.vue
+1
-0
src/views/crm/customer/detail/index.vue
+2
-0
src/views/crm/receivable/ReceivableForm.vue
+1
-1
src/views/crm/receivable/index.vue
+1
-1
src/views/crm/receivable/plan/ReceivablePlanForm.vue
+1
-1
src/views/crm/receivable/plan/components/ReceivablePlanList.vue
+128
-0
src/views/crm/receivable/plan/index.vue
+3
-102
No files found.
src/api/crm/receivable
P
lan/index.ts
→
src/api/crm/receivable
/p
lan/index.ts
View file @
b0c1e55c
...
@@ -23,6 +23,11 @@ export const getReceivablePlanPage = async (params) => {
...
@@ -23,6 +23,11 @@ export const getReceivablePlanPage = async (params) => {
return
await
request
.
get
({
url
:
`/crm/receivable-plan/page`
,
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
)
=>
{
export
const
getReceivablePlan
=
async
(
id
:
number
)
=>
{
return
await
request
.
get
({
url
:
`/crm/receivable-plan/get?id=`
+
id
})
return
await
request
.
get
({
url
:
`/crm/receivable-plan/get?id=`
+
id
})
...
...
src/utils/dict.ts
View file @
b0c1e55c
...
@@ -192,7 +192,7 @@ export enum DICT_TYPE {
...
@@ -192,7 +192,7 @@ export enum DICT_TYPE {
// ========== CRM - 客户管理模块 ==========
// ========== CRM - 客户管理模块 ==========
CRM_AUDIT_STATUS
=
'crm_audit_status'
,
// CRM 审批状态
CRM_AUDIT_STATUS
=
'crm_audit_status'
,
// CRM 审批状态
CRM_BIZ_TYPE
=
'crm_biz_type'
,
// CRM 业务类型
CRM_BIZ_TYPE
=
'crm_biz_type'
,
// CRM 业务类型
CRM_RE
TURN_TYPE
=
'crm_return_type'
,
CRM_RE
CEIVABLE_RETURN_TYPE
=
'crm_receivable_return_type'
,
// CRM 回款的还款方式
CRM_CUSTOMER_INDUSTRY
=
'crm_customer_industry'
,
CRM_CUSTOMER_INDUSTRY
=
'crm_customer_industry'
,
CRM_CUSTOMER_LEVEL
=
'crm_customer_level'
,
CRM_CUSTOMER_LEVEL
=
'crm_customer_level'
,
CRM_CUSTOMER_SOURCE
=
'crm_customer_source'
,
CRM_CUSTOMER_SOURCE
=
'crm_customer_source'
,
...
...
src/views/crm/contact/components/ContactList.vue
View file @
b0c1e55c
...
@@ -25,6 +25,7 @@
...
@@ -25,6 +25,7 @@
<dict-tag
:type=
"DICT_TYPE.INFRA_BOOLEAN_STRING"
:value=
"scope.row.master"
/>
<dict-tag
:type=
"DICT_TYPE.INFRA_BOOLEAN_STRING"
:value=
"scope.row.master"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<!-- TODO 芋艿:【操作:设为首要联系人】 -->
</el-table>
</el-table>
<!-- 分页 -->
<!-- 分页 -->
<Pagination
<Pagination
...
...
src/views/crm/customer/detail/index.vue
View file @
b0c1e55c
...
@@ -19,6 +19,7 @@
...
@@ -19,6 +19,7 @@
<ContractList
:biz-id=
"customer.id!"
:biz-type=
"BizTypeEnum.CRM_CUSTOMER"
/>
<ContractList
:biz-id=
"customer.id!"
:biz-type=
"BizTypeEnum.CRM_CUSTOMER"
/>
</el-tab-pane>
</el-tab-pane>
<el-tab-pane
label=
"回款"
lazy
>
<el-tab-pane
label=
"回款"
lazy
>
<ReceivablePlanList
:biz-id=
"customer.id!"
:biz-type=
"BizTypeEnum.CRM_CUSTOMER"
/>
<ReceivableList
:biz-id=
"customer.id!"
:biz-type=
"BizTypeEnum.CRM_CUSTOMER"
/>
<ReceivableList
:biz-id=
"customer.id!"
:biz-type=
"BizTypeEnum.CRM_CUSTOMER"
/>
</el-tab-pane>
</el-tab-pane>
<el-tab-pane
label=
"回访"
lazy
>
TODO 待开发
</el-tab-pane>
<el-tab-pane
label=
"回访"
lazy
>
TODO 待开发
</el-tab-pane>
...
@@ -34,6 +35,7 @@ import ContactList from '@/views/crm/contact/components/ContactList.vue' // 联
...
@@ -34,6 +35,7 @@ import ContactList from '@/views/crm/contact/components/ContactList.vue' // 联
import
ContractList
from
'@/views/crm/contract/components/ContractList.vue'
// 合同列表
import
ContractList
from
'@/views/crm/contract/components/ContractList.vue'
// 合同列表
import
BusinessList
from
'@/views/crm/business/components/BusinessList.vue'
// 商机列表
import
BusinessList
from
'@/views/crm/business/components/BusinessList.vue'
// 商机列表
import
ReceivableList
from
'@/views/crm/receivable/components/ReceivableList.vue'
// 回款列表
import
ReceivableList
from
'@/views/crm/receivable/components/ReceivableList.vue'
// 回款列表
import
ReceivablePlanList
from
'@/views/crm/receivable/plan/components/ReceivablePlanList.vue'
// 回款计划列表
import
PermissionList
from
'@/views/crm/permission/components/PermissionList.vue'
// 团队成员列表(权限)
import
PermissionList
from
'@/views/crm/permission/components/PermissionList.vue'
// 团队成员列表(权限)
import
{
BizTypeEnum
}
from
'@/api/crm/permission'
import
{
BizTypeEnum
}
from
'@/api/crm/permission'
...
...
src/views/crm/receivable/ReceivableForm.vue
View file @
b0c1e55c
...
@@ -43,7 +43,7 @@
...
@@ -43,7 +43,7 @@
<el-form-item
label=
"回款方式"
prop=
"returnType"
>
<el-form-item
label=
"回款方式"
prop=
"returnType"
>
<el-select
v-model=
"formData.returnType"
placeholder=
"请选择回款方式"
>
<el-select
v-model=
"formData.returnType"
placeholder=
"请选择回款方式"
>
<el-option
<el-option
v-for=
"dict in getStrDictOptions(DICT_TYPE.CRM_RETURN_TYPE)"
v-for=
"dict in getStrDictOptions(DICT_TYPE.CRM_RE
CEIVABLE_RE
TURN_TYPE)"
:key=
"dict.value"
:key=
"dict.value"
:label=
"dict.label"
:label=
"dict.label"
:value=
"dict.value"
:value=
"dict.value"
...
...
src/views/crm/receivable/index.vue
View file @
b0c1e55c
...
@@ -73,7 +73,7 @@
...
@@ -73,7 +73,7 @@
/>
/>
<el-table-column
label=
"回款方式"
align=
"center"
prop=
"returnType"
width=
"130px"
>
<el-table-column
label=
"回款方式"
align=
"center"
prop=
"returnType"
width=
"130px"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.CRM_RETURN_TYPE"
:value=
"scope.row.returnType"
/>
<dict-tag
:type=
"DICT_TYPE.CRM_RE
CEIVABLE_RE
TURN_TYPE"
:value=
"scope.row.returnType"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"回款金额(元)"
align=
"center"
prop=
"price"
/>
<el-table-column
label=
"回款金额(元)"
align=
"center"
prop=
"price"
/>
...
...
src/views/crm/receivable
P
lan/ReceivablePlanForm.vue
→
src/views/crm/receivable
/p
lan/ReceivablePlanForm.vue
View file @
b0c1e55c
...
@@ -88,7 +88,7 @@
...
@@ -88,7 +88,7 @@
</Dialog>
</Dialog>
</template>
</template>
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
*
as
ReceivablePlanApi
from
'@/api/crm/receivable
P
lan'
import
*
as
ReceivablePlanApi
from
'@/api/crm/receivable
/p
lan'
import
*
as
UserApi
from
'@/api/system/user'
import
*
as
UserApi
from
'@/api/system/user'
const
{
t
}
=
useI18n
()
// 国际化
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/crm/receivable/plan/components/ReceivablePlanList.vue
0 → 100644
View file @
b0c1e55c
<
template
>
<!-- 操作栏 -->
<el-row
justify=
"end"
>
<el-button
@
click=
"openForm"
>
<Icon
class=
"mr-5px"
icon=
"icon-park:income"
/>
创建回款计划
</el-button>
</el-row>
<!-- 列表 -->
<ContentWrap
class=
"mt-10px"
>
<el-table
v-loading=
"loading"
:data=
"list"
:stripe=
"true"
:show-overflow-tooltip=
"true"
>
<el-table-column
label=
"期数"
fixed=
"left"
align=
"center"
prop=
"no"
>
<template
#
default=
"scope"
>
<el-link
type=
"primary"
:underline=
"false"
@
click=
"openDetail(scope.row.id)"
>
{{
scope
.
row
.
period
}}
</el-link>
</
template
>
</el-table-column>
<el-table-column
label=
"客户名称"
align=
"center"
prop=
"customerName"
/>
<el-table-column
label=
"合同编号"
align=
"center"
prop=
"contractNo"
/>
<el-table-column
label=
"计划还款金额(元)"
align=
"center"
prop=
"price"
:formatter=
"fenToYuanFormat"
/>
<el-table-column
label=
"计划还款日期"
align=
"center"
prop=
"returnTime"
:formatter=
"dateFormatter"
width=
"180px"
/>
<el-table-column
align=
"center"
label=
"计划还款方式"
prop=
"auditStatus"
>
<
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=
"remindDays"
/>
<el-table-column
label=
"备注"
align=
"center"
prop=
"remark"
/>
<!-- TODO 芋艿:新建回款、编辑、删除 -->
</el-table>
<!-- 分页 -->
<Pagination
:total=
"total"
v-model:page=
"queryParams.pageNo"
v-model:limit=
"queryParams.pageSize"
@
pagination=
"getList"
/>
</ContentWrap>
<!-- 表单弹窗:添加 -->
<ReceivableForm
ref=
"formRef"
@
success=
"getList"
/>
</template>
<
script
setup
lang=
"ts"
>
import
*
as
ReceivablePlanApi
from
'@/api/crm/receivable/plan'
import
ReceivableForm
from
'./../ReceivablePlanForm.vue'
import
{
BizTypeEnum
}
from
'@/api/crm/permission'
import
{
dateFormatter
}
from
'@/utils/formatTime'
import
{
fenToYuanFormat
}
from
'@/utils/formatter'
import
{
DICT_TYPE
}
from
'@/utils/dict'
defineOptions
({
name
:
'CrmReceivablePlanList'
})
const
props
=
defineProps
<
{
bizType
:
number
// 业务类型
bizId
:
number
// 业务编号
}
>
()
const
loading
=
ref
(
true
)
// 列表的加载中
const
total
=
ref
(
0
)
// 列表的总页数
const
list
=
ref
([])
// 列表的数据
const
queryParams
=
reactive
({
pageNo
:
1
,
pageSize
:
10
,
customerId
:
undefined
as
unknown
// 允许 undefined + number
})
/** 查询列表 */
const
getList
=
async
()
=>
{
loading
.
value
=
true
try
{
// 置空参数
queryParams
.
customerId
=
undefined
// 执行查询
let
data
=
{
list
:
[],
total
:
0
}
switch
(
props
.
bizType
)
{
case
BizTypeEnum
.
CRM_CUSTOMER
:
queryParams
.
customerId
=
props
.
bizId
data
=
await
ReceivablePlanApi
.
getReceivablePlanPageByCustomer
(
queryParams
)
break
default
:
return
}
list
.
value
=
data
.
list
total
.
value
=
data
.
total
}
finally
{
loading
.
value
=
false
}
}
/** 搜索按钮操作 */
const
handleQuery
=
()
=>
{
queryParams
.
pageNo
=
1
getList
()
}
/** 添加 */
const
formRef
=
ref
()
const
openForm
=
()
=>
{
formRef
.
value
.
open
(
'create'
)
}
/** 打开合同详情 */
const
{
push
}
=
useRouter
()
const
openDetail
=
(
id
:
number
)
=>
{
push
({
name
:
'CrmReceivablePlanDetail'
,
params
:
{
id
}
})
}
/** 监听打开的 bizId + bizType,从而加载最新的列表 */
watch
(
()
=>
[
props
.
bizId
,
props
.
bizType
],
()
=>
{
handleQuery
()
},
{
immediate
:
true
,
deep
:
true
}
)
</
script
>
src/views/crm/receivable
P
lan/index.vue
→
src/views/crm/receivable
/p
lan/index.vue
View file @
b0c1e55c
...
@@ -26,96 +26,6 @@
...
@@ -26,96 +26,6 @@
class=
"!w-240px"
class=
"!w-240px"
/>
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"完成状态"
prop=
"status"
>
<el-select
v-model=
"queryParams.status"
placeholder=
"请选择完成状态"
clearable
class=
"!w-240px"
>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"审批状态"
prop=
"checkStatus"
>
<el-select
v-model=
"queryParams.checkStatus"
placeholder=
"请选择审批状态"
clearable
class=
"!w-240px"
>
<el-option
v-for=
"dict in getStrDictOptions(DICT_TYPE.CRM_AUDIT_STATUS)"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"回款日期"
prop=
"returnTime"
>
<el-date-picker
v-model=
"queryParams.returnTime"
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-240px"
/>
</el-form-item>
<!--
<el-form-item
label=
"提前几天提醒"
prop=
"remindDays"
>
<el-input
v-model=
"queryParams.remindDays"
placeholder=
"请输入提前几天提醒"
clearable
@
keyup
.
enter=
"handleQuery"
class=
"!w-240px"
/>
</el-form-item>
-->
<!--
<el-form-item
label=
"提醒日期"
prop=
"remindTime"
>
<el-date-picker
v-model=
"queryParams.remindTime"
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-240px"
/>
</el-form-item>
-->
<!--
<el-form-item
label=
"负责人"
prop=
"ownerUserId"
>
<el-input
v-model=
"queryParams.ownerUserId"
placeholder=
"请输入负责人"
clearable
@
keyup
.
enter=
"handleQuery"
class=
"!w-240px"
/>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
v-model=
"queryParams.remark"
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-240px"
/>
</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>
<el-button
@
click=
"resetQuery"
><Icon
icon=
"ep:refresh"
class=
"mr-5px"
/>
重置
</el-button>
<el-button
@
click=
"resetQuery"
><Icon
icon=
"ep:refresh"
class=
"mr-5px"
/>
重置
</el-button>
...
@@ -224,10 +134,10 @@
...
@@ -224,10 +134,10 @@
</template>
</template>
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
{
DICT_TYPE
,
getIntDictOptions
,
getStrDictOptions
}
from
'@/utils/dict'
import
{
DICT_TYPE
}
from
'@/utils/dict'
import
{
dateFormatter
,
dateFormatter2
}
from
'@/utils/formatTime'
import
{
dateFormatter
,
dateFormatter2
}
from
'@/utils/formatTime'
import
download
from
'@/utils/download'
import
download
from
'@/utils/download'
import
*
as
ReceivablePlanApi
from
'@/api/crm/receivable
P
lan'
import
*
as
ReceivablePlanApi
from
'@/api/crm/receivable
/p
lan'
import
ReceivablePlanForm
from
'./ReceivablePlanForm.vue'
import
ReceivablePlanForm
from
'./ReceivablePlanForm.vue'
import
*
as
UserApi
from
'@/api/system/user'
import
*
as
UserApi
from
'@/api/system/user'
...
@@ -243,17 +153,8 @@ const userList = ref<UserApi.UserVO[]>([]) // 用户列表
...
@@ -243,17 +153,8 @@ const userList = ref<UserApi.UserVO[]>([]) // 用户列表
const
queryParams
=
reactive
({
const
queryParams
=
reactive
({
pageNo
:
1
,
pageNo
:
1
,
pageSize
:
10
,
pageSize
:
10
,
period
:
null
,
status
:
null
,
checkStatus
:
null
,
returnTime
:
[],
remindDays
:
null
,
remindTime
:
[],
customerId
:
null
,
customerId
:
null
,
contractId
:
null
,
contractId
:
null
ownerUserId
:
null
,
remark
:
null
,
createTime
:
[]
})
})
const
queryFormRef
=
ref
()
// 搜索的表单
const
queryFormRef
=
ref
()
// 搜索的表单
const
exportLoading
=
ref
(
false
)
// 导出的加载中
const
exportLoading
=
ref
(
false
)
// 导出的加载中
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment