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
41e5cf66
authored
Feb 25, 2024
by
puhui999
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
CRM:完善回款
parent
6725318f
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
104 additions
and
66 deletions
+104
-66
src/api/crm/receivable/index.ts
+5
-1
src/api/crm/receivable/plan/index.ts
+7
-0
src/views/crm/receivable/ReceivableForm.vue
+0
-0
src/views/crm/receivable/index.vue
+90
-63
src/views/crm/receivable/plan/index.vue
+2
-2
No files found.
src/api/crm/receivable/index.ts
View file @
41e5cf66
...
@@ -12,7 +12,6 @@ export interface ReceivableVO {
...
@@ -12,7 +12,6 @@ export interface ReceivableVO {
returnType
:
string
returnType
:
string
price
:
number
price
:
number
ownerUserId
:
number
ownerUserId
:
number
sort
:
number
remark
:
string
remark
:
string
}
}
...
@@ -50,3 +49,8 @@ export const deleteReceivable = async (id: number) => {
...
@@ -50,3 +49,8 @@ export const deleteReceivable = async (id: number) => {
export
const
exportReceivable
=
async
(
params
)
=>
{
export
const
exportReceivable
=
async
(
params
)
=>
{
return
await
request
.
download
({
url
:
`/crm/receivable/export-excel`
,
params
})
return
await
request
.
download
({
url
:
`/crm/receivable/export-excel`
,
params
})
}
}
// 提交审核
export
const
submitReceivable
=
async
(
id
:
number
)
=>
{
return
await
request
.
put
({
url
:
`/crm/receivable/submit?id=
${
id
}
`
})
}
src/api/crm/receivable/plan/index.ts
View file @
41e5cf66
...
@@ -31,6 +31,13 @@ export const getReceivablePlan = async (id: number) => {
...
@@ -31,6 +31,13 @@ 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
})
}
}
// 查询回款计划下拉数据
export
const
getReceivablePlanListByContractId
=
async
(
customerId
:
number
,
contractId
:
number
)
=>
{
return
await
request
.
get
({
url
:
`/crm/receivable-plan/list-all-simple-by-customer?customerId=
${
customerId
}
&contractId=
${
contractId
}
`
})
}
// 新增回款计划
// 新增回款计划
export
const
createReceivablePlan
=
async
(
data
:
ReceivablePlanVO
)
=>
{
export
const
createReceivablePlan
=
async
(
data
:
ReceivablePlanVO
)
=>
{
return
await
request
.
post
({
url
:
`/crm/receivable-plan/create`
,
data
})
return
await
request
.
post
({
url
:
`/crm/receivable-plan/create`
,
data
})
...
...
src/views/crm/receivable/ReceivableForm.vue
View file @
41e5cf66
This diff is collapsed.
Click to expand it.
src/views/crm/receivable/index.vue
View file @
41e5cf66
...
@@ -2,49 +2,63 @@
...
@@ -2,49 +2,63 @@
<ContentWrap>
<ContentWrap>
<!-- 搜索工作栏 -->
<!-- 搜索工作栏 -->
<el-form
<el-form
class=
"-mb-15px"
:model=
"queryParams"
ref=
"queryFormRef"
ref=
"queryFormRef"
:inline=
"true"
:inline=
"true"
:model=
"queryParams"
class=
"-mb-15px"
label-width=
"68px"
label-width=
"68px"
>
>
<el-form-item
label=
"回款编号"
prop=
"no"
>
<el-form-item
label=
"回款编号"
prop=
"no"
>
<el-input
<el-input
v-model=
"queryParams.no"
v-model=
"queryParams.no"
placeholder=
"请输入回款编号
"
class=
"!w-240px
"
clearable
clearable
placeholder=
"请输入回款编号"
@
keyup
.
enter=
"handleQuery"
@
keyup
.
enter=
"handleQuery"
class=
"!w-240px"
/>
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"客户名称"
prop=
"customerId"
>
<el-form-item
label=
"客户名称"
prop=
"customerId"
>
<el-
inpu
t
<el-
selec
t
v-model=
"queryParams.customerId"
v-model=
"queryParams.customerId"
placeholder=
"请输入客户名称"
clearable
@
keyup
.
enter=
"handleQuery"
class=
"!w-240px"
class=
"!w-240px"
placeholder=
"请选择客户"
@
keyup
.
enter=
"handleQuery"
>
<el-option
v-for=
"item in customerList"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
/>
/>
</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"
>
<el-button
@
click=
"resetQuery"
><Icon
icon=
"ep:refresh"
class=
"mr-5px"
/>
重置
</el-button>
<Icon
class=
"mr-5px"
icon=
"ep:search"
/>
搜索
</el-button>
<el-button
@
click=
"resetQuery"
>
<Icon
class=
"mr-5px"
icon=
"ep:refresh"
/>
重置
</el-button>
<el-button
<el-button
type=
"primary
"
v-hasPermi=
"['crm:receivable:create']
"
plain
plain
type=
"primary"
@
click=
"openForm('create')"
@
click=
"openForm('create')"
v-hasPermi=
"['crm:receivable:create']"
>
>
<Icon
icon=
"ep:plus"
class=
"mr-5px"
/>
新增
<Icon
class=
"mr-5px"
icon=
"ep:plus"
/>
新增
</el-button>
</el-button>
<el-button
<el-button
type=
"success"
v-hasPermi=
"['crm:receivable:export']"
:loading=
"exportLoading"
plain
plain
type=
"success"
@
click=
"handleExport"
@
click=
"handleExport"
:loading=
"exportLoading"
v-hasPermi=
"['crm:receivable:export']"
>
>
<Icon
icon=
"ep:download"
class=
"mr-5px"
/>
导出
<Icon
class=
"mr-5px"
icon=
"ep:download"
/>
导出
</el-button>
</el-button>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
...
@@ -52,66 +66,63 @@
...
@@ -52,66 +66,63 @@
<!-- 列表 -->
<!-- 列表 -->
<ContentWrap>
<ContentWrap>
<el-table
v-loading=
"loading"
:data=
"list"
:stripe=
"true"
:show-overflow-tooltip=
"true"
>
<el-table
v-loading=
"loading"
:data=
"list"
:show-overflow-tooltip=
"true"
:stripe=
"true"
>
<el-table-column
label=
"ID"
align=
"center"
prop=
"id"
/>
<el-table-column
align=
"center"
label=
"回款编号"
prop=
"no"
/>
<el-table-column
label=
"回款编号"
align=
"center"
prop=
"no"
/>
<el-table-column
align=
"center"
label=
"客户"
prop=
"customerName"
/>
<!--
<el-table-column
label=
"回款计划ID"
align=
"center"
prop=
"planId"
/>
-->
<el-table-column
align=
"center"
label=
"合同"
prop=
"contractName"
/>
<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
<el-table-column
label=
"回款日期
"
:formatter=
"dateFormatter2
"
align=
"center"
align=
"center"
label=
"回款日期"
prop=
"returnTime"
prop=
"returnTime"
:formatter=
"dateFormatter2"
width=
"150px"
width=
"150px"
/>
/>
<el-table-column
label=
"回款方式"
align=
"center
"
prop=
"returnType"
width=
"130px"
>
<el-table-column
align=
"center"
label=
"回款方式
"
prop=
"returnType"
width=
"130px"
>
<template
#
default=
"scope"
>
<template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE"
:value=
"scope.row.returnType"
/>
<dict-tag
:type=
"DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE"
:value=
"scope.row.returnType"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"回款金额(元)"
align=
"center"
prop=
"price"
/>
<el-table-column
align=
"center"
label=
"回款金额(元)"
prop=
"price"
/>
<el-table-column
label=
"负责人"
align=
"center"
prop=
"ownerUserId"
/>
<el-table-column
align=
"center"
label=
"负责人"
prop=
"ownerUserId"
/>
<el-table-column
label=
"批次"
align=
"center"
prop=
"batchId"
/>
<el-table-column
align=
"center"
label=
"备注"
prop=
"remark"
/>
<!--<el-table-column label="显示顺序" align="center" prop="sort" />-->
<el-table-column
align=
"center"
fixed=
"right"
label=
"回款状态"
prop=
"auditStatus"
width=
"120"
>
<el-table-column
label=
"状态"
align=
"center"
prop=
"status"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.C
OMMON_STATUS"
:value=
"scope.row.s
tatus"
/>
<dict-tag
:type=
"DICT_TYPE.C
RM_AUDIT_STATUS"
:value=
"scope.row.auditS
tatus"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"备注"
align=
"center"
prop=
"remark"
/>
<el-table-column
align=
"center"
fixed=
"right"
label=
"操作"
width=
"180px"
>
<el-table-column
label=
"创建时间"
align=
"center"
prop=
"createTime"
:formatter=
"dateFormatter"
width=
"180px"
/>
<el-table-column
label=
"操作"
align=
"center"
width=
"180px"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<!-- todo @liuhongfeng:用路径参数哈,receivableId -->
<!--
<router-link
:to=
"'/crm/receivable-plan?receivableId=' + scope.row.receivableId"
>
<el-button
link
type=
"primary"
>
详情
</el-button>
</router-link>
-->
<el-button
<el-button
v-hasPermi=
"['crm:receivable:update']"
link
link
type=
"primary"
type=
"primary"
@
click=
"openForm('update', scope.row.id)"
@
click=
"openForm('update', scope.row.id)"
v-hasPermi=
"['crm:receivable:update']"
>
>
编辑
编辑
</el-button>
</el-button>
<el-button
<el-button
v-if=
"scope.row.auditStatus === 0"
v-hasPermi=
"['crm:receivable:update']"
link
type=
"primary"
@
click=
"handleSubmit(scope.row)"
>
提交审核
</el-button>
<el-button
v-else
v-hasPermi=
"['crm:receivable:update']"
link
type=
"primary"
@
click=
"handleProcessDetail(scope.row)"
>
查看审批
</el-button>
<el-button
v-hasPermi=
"['crm:receivable:delete']"
link
link
type=
"danger"
type=
"danger"
@
click=
"handleDelete(scope.row.id)"
@
click=
"handleDelete(scope.row.id)"
v-hasPermi=
"['crm:receivable:delete']"
>
>
删除
删除
</el-button>
</el-button>
...
@@ -120,9 +131,9 @@
...
@@ -120,9 +131,9 @@
</el-table>
</el-table>
<!-- 分页 -->
<!-- 分页 -->
<Pagination
<Pagination
:total=
"total"
v-model:page=
"queryParams.pageNo"
v-model:limit=
"queryParams.pageSize"
v-model:limit=
"queryParams.pageSize"
v-model:page=
"queryParams.pageNo"
:total=
"total"
@
pagination=
"getList"
@
pagination=
"getList"
/>
/>
</ContentWrap>
</ContentWrap>
...
@@ -131,26 +142,27 @@
...
@@ -131,26 +142,27 @@
<ReceivableForm
ref=
"formRef"
@
success=
"getList"
/>
<ReceivableForm
ref=
"formRef"
@
success=
"getList"
/>
</template>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
setup
>
import
{
DICT_TYPE
}
from
'@/utils/dict'
import
{
DICT_TYPE
}
from
'@/utils/dict'
import
{
dateFormatter
,
dateFormatter
2
}
from
'@/utils/formatTime'
import
{
dateFormatter2
}
from
'@/utils/formatTime'
import
download
from
'@/utils/download'
import
download
from
'@/utils/download'
import
*
as
ReceivableApi
from
'@/api/crm/receivable'
import
*
as
ReceivableApi
from
'@/api/crm/receivable'
import
ReceivableForm
from
'./ReceivableForm.vue'
import
ReceivableForm
from
'./ReceivableForm.vue'
import
*
as
CustomerApi
from
'@/api/crm/customer'
defineOptions
({
name
:
'Receivable'
})
defineOptions
({
name
:
'Receivable'
})
const
message
=
useMessage
()
// 消息弹窗
const
message
=
useMessage
()
// 消息弹窗
const
{
t
}
=
useI18n
()
// 国际化
const
{
t
}
=
useI18n
()
// 国际化
const
{
push
}
=
useRouter
()
// 路由
const
loading
=
ref
(
true
)
// 列表的加载中
const
loading
=
ref
(
true
)
// 列表的加载中
const
total
=
ref
(
0
)
// 列表的总页数
const
total
=
ref
(
0
)
// 列表的总页数
const
list
=
ref
([])
// 列表的数据
const
list
=
ref
([])
// 列表的数据
const
queryParams
=
reactive
({
const
queryParams
=
reactive
({
pageNo
:
1
,
pageNo
:
1
,
pageSize
:
10
,
pageSize
:
10
,
no
:
null
,
no
:
undefined
,
customerId
:
null
customerId
:
undefined
})
})
const
queryFormRef
=
ref
()
// 搜索的表单
const
queryFormRef
=
ref
()
// 搜索的表单
const
exportLoading
=
ref
(
false
)
// 导出的加载中
const
exportLoading
=
ref
(
false
)
// 导出的加载中
...
@@ -198,6 +210,19 @@ const handleDelete = async (id: number) => {
...
@@ -198,6 +210,19 @@ const handleDelete = async (id: number) => {
}
catch
{}
}
catch
{}
}
}
/** 提交审核 **/
const
handleSubmit
=
async
(
row
:
ReceivableApi
.
ReceivableVO
)
=>
{
await
message
.
confirm
(
`您确定提交编号为【
${
row
.
no
}
】的回款审核吗?`
)
await
ReceivableApi
.
submitReceivable
(
row
.
id
)
message
.
success
(
'提交审核成功!'
)
await
getList
()
}
/** 查看审批 */
const
handleProcessDetail
=
(
row
:
ReceivableApi
.
ReceivableVO
)
=>
{
push
({
name
:
'BpmProcessInstanceDetail'
,
query
:
{
id
:
row
.
processInstanceId
}
})
}
// TODO puhui999: 回款流程审批表单详情查看后面完善
/** 导出按钮操作 */
/** 导出按钮操作 */
const
handleExport
=
async
()
=>
{
const
handleExport
=
async
()
=>
{
try
{
try
{
...
@@ -212,9 +237,11 @@ const handleExport = async () => {
...
@@ -212,9 +237,11 @@ const handleExport = async () => {
exportLoading
.
value
=
false
exportLoading
.
value
=
false
}
}
}
}
const
customerList
=
ref
<
CustomerApi
.
CustomerVO
[]
>
([])
// 客户列表
/** 初始化 **/
/** 初始化 **/
onMounted
(()
=>
{
onMounted
(
async
()
=>
{
getList
()
await
getList
()
// 获得客户列表
customerList
.
value
=
await
CustomerApi
.
getCustomerSimpleList
()
})
})
</
script
>
</
script
>
src/views/crm/receivable/plan/index.vue
View file @
41e5cf66
...
@@ -8,7 +8,7 @@
...
@@ -8,7 +8,7 @@
class=
"-mb-15px"
class=
"-mb-15px"
label-width=
"68px"
label-width=
"68px"
>
>
<el-form-item
label=
"客户"
prop=
"customerId"
>
<el-form-item
label=
"客户
名称
"
prop=
"customerId"
>
<el-select
<el-select
v-model=
"queryParams.customerId"
v-model=
"queryParams.customerId"
class=
"!w-240px"
class=
"!w-240px"
...
@@ -70,7 +70,7 @@
...
@@ -70,7 +70,7 @@
<el-table-column
align=
"center"
label=
"客户名称"
prop=
"customerName"
width=
"150px"
/>
<el-table-column
align=
"center"
label=
"客户名称"
prop=
"customerName"
width=
"150px"
/>
<el-table-column
align=
"center"
label=
"合同编号"
prop=
"contractNo"
width=
"200px"
/>
<el-table-column
align=
"center"
label=
"合同编号"
prop=
"contractNo"
width=
"200px"
/>
<el-table-column
align=
"center"
label=
"期数"
prop=
"period"
/>
<el-table-column
align=
"center"
label=
"期数"
prop=
"period"
/>
<el-table-column
align=
"center"
label=
"计划回款
"
prop=
"price
"
/>
<el-table-column
align=
"center"
label=
"计划回款
(元)"
prop=
"price"
width=
"120
"
/>
<el-table-column
<el-table-column
:formatter=
"dateFormatter2"
:formatter=
"dateFormatter2"
align=
"center"
align=
"center"
...
...
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