Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
op-web-service
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
bp
op-web-service
Commits
e57c8e76
Commit
e57c8e76
authored
Aug 02, 2021
by
lihui
Browse files
Options
Browse Files
Download
Plain Diff
fix: bug 8月2日
parents
114b91a0
704ca965
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
23244 additions
and
23 deletions
+23244
-23
package-lock.json
package-lock.json
+21532
-21
config.js
server/config.js
+2
-1
groupmeal.js
server/controllers/groupmeal.js
+134
-0
router.js
server/router.js
+18
-0
index.less
src/pages/Groupmeal/Distrib/index.less
+28
-0
index.vue
src/pages/Groupmeal/Distrib/index.vue
+419
-0
User.vue
src/pages/Groupmeal/components/PageHeader/User.vue
+54
-0
config.js
src/pages/Groupmeal/components/PageHeader/config.js
+13
-0
index.vue
src/pages/Groupmeal/components/PageHeader/index.vue
+56
-0
index.vue
src/pages/Groupmeal/components/Pagination/index.vue
+22
-0
index.less
src/pages/Groupmeal/layout/index.less
+9
-0
index.vue
src/pages/Groupmeal/layout/index.vue
+21
-0
index.less
src/pages/Groupmeal/orderManagement/index.less
+23
-0
index.vue
src/pages/Groupmeal/orderManagement/index.vue
+776
-0
index.js
src/router/Groupmeal/index.js
+19
-0
index.js
src/router/index.js
+4
-1
groupmeal.js
src/service/Groupmeal/groupmeal.js
+114
-0
No files found.
package-lock.json
View file @
e57c8e76
This source diff could not be displayed because it is too large. You can
view the blob
instead.
server/config.js
View file @
e57c8e76
...
...
@@ -19,5 +19,6 @@ module.exports = {
API_INTERNAL_URI
:
API_INTERNAL_URI
[
env
],
PANDORA_URI
:
PANDORA_URI
[
env
],
GOODS_URI
:
API_INTERNAL_URI
[
env
],
WITHDRAWAL_URI
:
API_INTERNAL_URI
[
env
]
WITHDRAWAL_URI
:
API_INTERNAL_URI
[
env
],
GROUPMEAL_URI
:
API_INTERNAL_URI
[
env
],
};
server/controllers/groupmeal.js
0 → 100644
View file @
e57c8e76
const
GROUPMEAL_URI
=
require
(
"../config.js"
).
GROUPMEAL_URI
;
const
req
=
require
(
"../utils/request"
).
httpReq
;
// 获取订单管理列表
exports
.
getOrderList
=
async
ctx
=>
{
const
url
=
`
${
GROUPMEAL_URI
}
/order/background/order_list`
;
const
opts
=
{
url
,
method
:
"GET"
};
ctx
.
body
=
await
req
(
ctx
,
opts
);
};
// 获取主页配送列表
exports
.
getList
=
async
ctx
=>
{
const
opts
=
{
url
:
`
${
GROUPMEAL_URI
}
/order/deliverer/list_day_deliverer_conf`
,
method
:
"POST"
,
json
:
true
,
body
:
ctx
.
request
.
body
};
ctx
.
body
=
await
req
(
ctx
,
opts
);
};
// 获取配送列表
exports
.
getDelivererList
=
async
ctx
=>
{
const
opts
=
{
url
:
`
${
GROUPMEAL_URI
}
/order/deliverer/list_day_deliverer`
,
method
:
"POST"
,
json
:
true
,
body
:
ctx
.
request
.
body
};
ctx
.
body
=
await
req
(
ctx
,
opts
);
};
// 添加骑手
exports
.
getAddDeliverer
=
async
ctx
=>
{
const
opts
=
{
url
:
`
${
GROUPMEAL_URI
}
/order/deliverer/add_deliverer`
,
method
:
"POST"
,
json
:
true
,
body
:
ctx
.
request
.
body
};
ctx
.
body
=
await
req
(
ctx
,
opts
);
};
// 分配骑手
exports
.
getSaveDeliverer
=
async
ctx
=>
{
const
opts
=
{
url
:
`
${
GROUPMEAL_URI
}
/order/deliverer/save_day_deliverer`
,
method
:
"POST"
,
json
:
true
,
body
:
ctx
.
request
.
body
};
ctx
.
body
=
await
req
(
ctx
,
opts
);
};
// 获取活动名称
exports
.
getMarketingList
=
async
ctx
=>
{
const
url
=
`
${
GROUPMEAL_URI
}
/order/background/marketing_list`
;
const
opts
=
{
url
,
method
:
"GET"
};
ctx
.
body
=
await
req
(
ctx
,
opts
);
};
// 获取商品名称
exports
.
getGoodsList
=
async
ctx
=>
{
const
url
=
`
${
GROUPMEAL_URI
}
/order/background/goods_list`
;
const
opts
=
{
url
,
method
:
"GET"
};
ctx
.
body
=
await
req
(
ctx
,
opts
);
};
// 获取自提点
exports
.
getSubShopList
=
async
ctx
=>
{
const
url
=
`
${
GROUPMEAL_URI
}
/order/background/sub_shop_list`
;
const
opts
=
{
url
,
method
:
"GET"
};
ctx
.
body
=
await
req
(
ctx
,
opts
);
};
// 导出订单
exports
.
orderExport
=
async
ctx
=>
{
const
url
=
`
${
GROUPMEAL_URI
}
/order/background/order_export`
;
const
opts
=
{
url
,
method
:
"GET"
};
ctx
.
body
=
await
req
(
ctx
,
opts
);
};
// 打印订单
exports
.
orderPrint
=
async
ctx
=>
{
const
url
=
`
${
GROUPMEAL_URI
}
/order/background/order_print`
;
const
opts
=
{
url
,
method
:
"GET"
};
ctx
.
body
=
await
req
(
ctx
,
opts
);
};
// 订单退款列表
exports
.
orderItemList
=
async
ctx
=>
{
const
url
=
`
${
GROUPMEAL_URI
}
/order/background/order_item_list`
;
const
opts
=
{
url
,
method
:
"GET"
};
ctx
.
body
=
await
req
(
ctx
,
opts
);
};
// 订单退款列表
exports
.
orderRefund
=
async
ctx
=>
{
const
url
=
`
${
GROUPMEAL_URI
}
/order/background/order_refund`
;
const
opts
=
{
url
,
method
:
"POST"
,
json
:
true
,
body
:
ctx
.
request
.
body
};
ctx
.
body
=
await
req
(
ctx
,
opts
);
};
// 订单驳回
exports
.
orderRefundReject
=
async
ctx
=>
{
const
url
=
`
${
GROUPMEAL_URI
}
/order/background/order_refund_reject`
;
const
opts
=
{
url
,
method
:
"GET"
};
ctx
.
body
=
await
req
(
ctx
,
opts
);
};
server/router.js
View file @
e57c8e76
...
...
@@ -7,6 +7,7 @@ const role = require('./controllers/role')
const
life
=
require
(
'./controllers/life-no'
);
const
goods
=
require
(
'./controllers/goods'
);
const
withdrawal
=
require
(
'./controllers/withdrawal'
);
const
groupmeal
=
require
(
'./controllers/groupmeal'
);
const
router
=
Router
();
const
API_VERSION
=
"/api/v1"
;
...
...
@@ -62,6 +63,23 @@ router.post(`${API_VERSION}/merchant/lifeinner/life_info`, life.get_life_info)
router
.
get
(
`
${
API_VERSION
}
/merchant/lifeinner/life_list`
,
life
.
get_life_list
)
//用户
router
.
post
(
`
${
API_VERSION
}
/merchant/authority/get_user_info`
,
user
.
getUser_detail
)
// 团餐运营--配送
router
.
post
(
`
${
API_VERSION
}
/order/deliverer/list_day_deliverer_conf`
,
groupmeal
.
getList
)
router
.
post
(
`
${
API_VERSION
}
/order/deliverer/list_day_deliverer`
,
groupmeal
.
getDelivererList
)
router
.
post
(
`
${
API_VERSION
}
/order/deliverer/add_deliverer`
,
groupmeal
.
getAddDeliverer
)
router
.
post
(
`
${
API_VERSION
}
/order/deliverer/save_day_deliverer`
,
groupmeal
.
getSaveDeliverer
)
// 订单管理
router
.
get
(
`
${
API_VERSION
}
/order/background/order_list`
,
groupmeal
.
getOrderList
);
router
.
get
(
`
${
API_VERSION
}
/order/background/marketing_list`
,
groupmeal
.
getMarketingList
);
router
.
get
(
`
${
API_VERSION
}
/order/background/goods_list`
,
groupmeal
.
getGoodsList
);
router
.
get
(
`
${
API_VERSION
}
/order/background/sub_shop_list`
,
groupmeal
.
getSubShopList
);
router
.
get
(
`
${
API_VERSION
}
/order/background/order_export`
,
groupmeal
.
orderExport
);
router
.
get
(
`
${
API_VERSION
}
/order/background/order_export`
,
groupmeal
.
orderExport
);
router
.
get
(
`
${
API_VERSION
}
/order/background/order_print`
,
groupmeal
.
orderPrint
);
router
.
get
(
`
${
API_VERSION
}
/order/background/order_item_list`
,
groupmeal
.
orderItemList
);
router
.
get
(
`
${
API_VERSION
}
/order/background/order_refund_reject`
,
groupmeal
.
orderRefundReject
);
router
.
post
(
`
${
API_VERSION
}
/order/background/order_refund`
,
groupmeal
.
orderRefund
);
// 钱包提现审核 wallet/background/apply_detail
router
.
get
(
`
${
API_VERSION
}
/get_withdrawal_apply_list`
,
withdrawal
.
getApplyList
)
...
...
src/pages/Groupmeal/Distrib/index.less
0 → 100644
View file @
e57c8e76
.goods {
width: 100%;
height: 100%;
padding: 0 30px;
.header {
text-align: right;
margin-bottom: 30px;
}
.dioFor {
margin-left: 5%;
width: 70%;
}
.diotab {
margin-left: 5%;
margin-top: 10px;
}
.dialog-footer {
display: flex;
align-items: center;
justify-content: center;
}
.commodity_list {
margin-top: 30px;
}
.pagination {
margin-top: 30px;
}
}
src/pages/Groupmeal/Distrib/index.vue
0 → 100644
View file @
e57c8e76
<
template
>
<Layout>
<el-card
class=
"goods"
>
<div
class=
"header"
>
<el-button
type=
"primary"
@
click=
"assignDeliverer"
>
分配配送员
</el-button
>
<el-button
type=
"primary"
@
click=
"dialogFormAdd = true"
>
添加配送员
</el-button
>
</div>
<el-table
:data=
"distribList"
border
stripe
style=
"width: 100%"
>
<el-table-column
align=
"center"
prop=
"activeName"
label=
"活动名称"
width=
"width"
>
</el-table-column>
<el-table-column
align=
"center"
label=
"配送员数量"
width=
"width"
>
<template
#
default=
"scope"
>
{{
scope
.
row
.
list
.
length
}}
</
template
>
</el-table-column>
<el-table-column
align=
"center"
prop=
"deliverer_name"
label=
"配送人员"
width=
"width"
>
<
template
#
default=
"scope"
>
{{
scope
.
row
.
list
.
map
((
item
)
=>
item
.
deliverer_name
).
join
(
"、"
)
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"prop"
label=
"操作"
width=
"width"
align=
"center"
>
<
template
#
default=
"scope"
>
<el-button
type=
"primary"
@
click=
"handleModify(scope.row)"
>
修改
</el-button
>
<el-button
type=
"primary"
v-show=
scope.row.url
@
click=
"handleDownload(scope.row.url)"
>
下载配送路线
</el-button
>
</
template
>
</el-table-column>
</el-table>
<!-- 页码区 -->
<Pagination
@
current-change=
"handleCurrentChange"
v-model:current-page=
"page"
:page-size=
"pageSize"
:total=
"total"
></Pagination>
<!-- 添加配送员弹框 -->
<el-dialog
title=
"添加配送员"
v-model=
"dialogFormAdd"
width=
"70%"
:show-close=
"false"
>
<el-form
class=
"dioFor"
:model=
"addDeliverer"
:rules=
"rules"
>
<el-form-item
label=
"姓名"
label-width=
"100px"
prop=
"name"
>
<el-input
v-model=
"addDeliverer.name"
maxlength=
"10"
type=
"text"
show-word-limit
clearable
autocomplete=
"off"
@
input=
"
addDeliverer.name = $event
.replace(/[^a-z0-9A-Z\u4e00-\u9fa5()()\\-]+/g, '')
.replace(/\s/g, '')
"
></el-input>
</el-form-item>
<el-form-item
label=
"配送上限"
label-width=
"100px"
prop=
"max_capacity"
>
<el-input
v-model
.
number=
"addDeliverer.max_capacity"
onkeyup=
"value=value.replace(/[^\d]/g,'')"
clearable
autocomplete=
"off"
@
input=
"
addDeliverer.max_capacity = $event
.replace(/[^a-z0-9A-Z\u4e00-\u9fa5()()\\-]+/g, '')
.replace(/\s/g, '')
"
></el-input>
</el-form-item>
<el-form-item
label=
"最小配送量"
label-width=
"100px"
prop=
"min_capacity"
>
<el-input
v-model
.
number=
"addDeliverer.min_capacity"
onkeyup=
"value=value.replace(/[^\d]/g,'')"
clearable
autocomplete=
"off"
></el-input>
</el-form-item>
<el-form-item
label=
"配送工具"
label-width=
"100px"
prop=
"tool_type"
>
<el-select
v-model=
"addDeliverer.tool_type"
clearable
placeholder=
"请选择配送工具"
>
<el-option
label=
"电动车"
value=
"1"
></el-option>
<el-option
label=
"摩托车"
value=
"2"
></el-option>
</el-select>
</el-form-item>
</el-form>
<
template
#
footer
>
<span
class=
"dialog-footer"
>
<el-button
@
click=
"addCancel"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"addSave"
>
保 存
</el-button>
</span>
</
template
>
</el-dialog>
<!-- 分配配送员弹框 -->
<el-dialog
title=
"分配配送员"
v-model=
"dialogFormAssign"
width=
"70%"
:show-close=
"false"
>
<el-form
class=
"dioFor"
>
<el-form-item
label=
"活动名称"
label-width=
"100px"
>
<el-select
v-model=
"selectActivity"
:disabled=
"isEdit"
clearable
filterable
>
<el-option
:label=
"item.label"
:value=
"item.value"
v-for=
"item in marketingList"
:key=
"item.value"
></el-option>
</el-select>
</el-form-item>
<span
class=
"dioFor"
>
已选:{{ multipleSelection.length }}人
</span>
<el-table
ref=
"multipleTable"
class=
"diotab"
align=
"center"
:data=
"deliverer"
max-height=
"300"
border
size=
"small"
style=
"width: 100%"
@
selection-change=
"selectGoodsChange"
>
<el-table-column
width=
"60"
align=
"center"
type=
"selection"
>
</el-table-column>
<el-table-column
align=
"center"
prop=
"deliverer_name"
label=
"配送员姓名"
>
</el-table-column>
<el-table-column
align=
"center"
prop=
"deliverer_max_capacity"
label=
"配送上限"
width=
"130"
>
</el-table-column>
<el-table-column
align=
"center"
prop=
"deliverer_min_capacity"
label=
"最小配送量"
>
</el-table-column>
<el-table-column
align=
"center"
prop=
"deliverer_tool_type"
label=
"配送工具"
>
<
template
#
default=
"scope"
>
{{
scope
.
row
.
deliverer_tool_type
==
0
?
"电动车"
:
"摩托车"
}}
</
template
>
</el-table-column>
</el-table>
</el-form>
<
template
#
footer
>
<span
class=
"dialog-footer"
>
<el-button
@
click=
"assignCancel"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"save"
>
保 存
</el-button>
</span>
</
template
>
</el-dialog>
</el-card>
</Layout>
</template>
<
script
>
import
Layout
from
"../layout/index.vue"
;
import
Pagination
from
"../components/Pagination/index.vue"
;
import
{
getDelivererList
,
getList
,
getSaveDeliverer
,
getAddDeliverer
,
getMarketingList
}
from
"../../../service/Groupmeal/groupmeal"
;
import
{
ElMessage
}
from
"element-plus"
;
export
default
{
name
:
"Distrib"
,
components
:
{
Layout
,
Pagination
},
data
()
{
return
{
rules
:
{
name
:
[{
required
:
true
,
message
:
"请输入姓名"
,
trigger
:
"blur"
}],
max_capacity
:
[
{
required
:
true
,
message
:
"请填写配送上限"
,
trigger
:
"blur"
},
// { type: "number", message: "请填写数值哦", trigger: "change" },
],
min_capacity
:
[
{
type
:
"number"
,
message
:
"请填写数值哦"
,
trigger
:
"change"
},
],
},
dialogFormAdd
:
false
,
// 列表
distribList
:
[],
// 添加配送员弹框
addDeliverer
:
{
name
:
""
,
max_capacity
:
""
,
//配送上限
min_capacity
:
""
,
//最小配送量
tool_type
:
[],
//配送工具
},
//分配配送员弹框
dialogFormAssign
:
false
,
deliverer
:
[],
multipleSelection
:
[],
selectActivity
:
""
,
//活动下拉框
total
:
0
,
page
:
1
,
pageSize
:
20
,
isEdit
:
false
,
marketingList
:[]
};
},
created
()
{
this
.
getList
();
this
.
getDelivererList
();
this
.
getMarketingList
()
},
methods
:
{
selectGoodsChange
(
val
)
{
this
.
multipleSelection
=
val
;
},
// 页码变化
handleCurrentChange
(
e
)
{
this
.
page
=
e
;
this
.
getList
();
},
// 清空
resetDate
()
{
// 添加配送员弹框
(
this
.
addDeliverer
=
{
name
:
""
,
max_capacity
:
""
,
//配送上限
min_capacity
:
""
,
//最小配送量
tool_type
:
[],
//配送工具
}),
this
.
deliverer
=
[],
this
.
multipleSelection
=
[];
this
.
selectActivity
=
""
;
//活动下拉框
},
// 获取主页列表
async
getList
()
{
const
{
page
,
pageSize
}
=
this
const
params
=
{
page
,
pageSize
}
try
{
const
res
=
await
getList
(
params
);
this
.
distribList
=
res
.
response
.
list
;
this
.
total
=
res
.
response
.
total
;
}
catch
(
error
)
{
console
.
log
(
error
);
}
},
// 添加配送员
async
addSave
()
{
const
{
name
,
max_capacity
,
min_capacity
,
tool_type
}
=
this
.
addDeliverer
;
if
(
!
name
)
return
ElMessage
(
"请填写配送员姓名"
);
if
(
!
max_capacity
)
return
ElMessage
(
"请填写配送上限"
);
if
(
min_capacity
!==
''
&&
min_capacity
<=
0
)
return
ElMessage
(
"最小配送量不能为0或小于0"
);
if
(
!
min_capacity
)
return
ElMessage
(
"请填写最小配送量"
);
if
(
!
tool_type
)
return
ElMessage
(
"请选择配送工具"
);
const
params
=
{
name
,
max_capacity
:
+
max_capacity
,
min_capacity
:
+
min_capacity
,
tool_type
:
+
tool_type
,
};
try
{
const
{
code
,
reason
}
=
await
getAddDeliverer
(
params
);
if
(
code
!==
0
)
return
this
.
$message
.
error
(
reason
||
"添加配送员失败"
)
ElMessage
(
"添加配送员成功"
);
this
.
getDelivererList
();
this
.
dialogFormAdd
=
false
;
this
.
addDeliverer
=
{
name
:
""
,
max_capacity
:
""
,
//配送上限
min_capacity
:
""
,
//最小配送量
tool_type
:
[],
//配送工具
};
}
catch
(
error
)
{
ElMessage
(
"请求添加配送员失败"
);
}
},
// 添加的取消
addCancel
(){
this
.
dialogFormAdd
=
false
this
.
resetDate
()
},
// 分配配送员
assignDeliverer
()
{
this
.
dialogFormAssign
=
true
;
this
.
getDelivererList
();
this
.
multipleSelection
=
[];
this
.
deliverer
=
[]
this
.
isEdit
=
false
},
// 修改
async
handleModify
(
row
)
{
this
.
dialogFormAssign
=
true
;
const
{
code
}
=
row
;
this
.
selectActivity
=
code
;
console
.
log
(
code
);
try
{
const
res
=
await
getDelivererList
({
code
});
this
.
deliverer
=
res
.
response
;
this
.
isEdit
=
true
;
this
.
getList
();
this
.
$nextTick
(()
=>
{
this
.
$refs
.
multipleTable
.
clearSelection
();
this
.
deliverer
.
forEach
((
row
)
=>
{
if
(
row
.
checked
)
{
this
.
$refs
.
multipleTable
.
toggleRowSelection
(
row
,
true
);
}
});
});
}
catch
(
error
)
{
console
.
log
(
error
);
}
},
// 下载路线
handleDownload
(
url
)
{
url
&&
window
.
open
(
"http://bp-dev.ini.yidian-inc.com"
+
url
)
console
.
log
(
url
)
},
// 分配保存
async
save
()
{
const
{
selectActivity
,
multipleSelection
}
=
this
;
const
uids
=
multipleSelection
.
map
((
item
)
=>
item
.
deliverer_id
);
if
(
!
selectActivity
)
return
ElMessage
(
"请选择活动姓名"
);
// if (!uids.length) return this.$message.info("请至少选择一名骑手");
try
{
const
{
code
,
reason
}
=
await
getSaveDeliverer
({
code
:
selectActivity
,
uids
:
uids
.
join
(
","
)
});
if
(
code
!==
0
)
return
this
.
$message
.
error
(
reason
||
(
this
.
isEdit
?
"修改配送员失败"
:
"分配配送员失败"
))
ElMessage
(
this
.
isEdit
?
"修改配送员成功"
:
"分配配送员成功"
);
this
.
dialogFormAssign
=
false
;
this
.
isEdit
=
false
;
this
.
getList
();
this
.
resetDate
();
}
catch
(
error
)
{
ElMessage
(
"请求分配配送员失败"
);
}
},
// 分配取消
assignCancel
(){
this
.
dialogFormAssign
=
false
this
.
getDelivererList
()
this
.
resetDate
()
},
// 活动名称列表
async
getMarketingList
()
{
try
{
const
res
=
await
getMarketingList
();
this
.
marketingList
=
res
.
result
.
map
(
item
=>
{
return
{
value
:
item
.
marketing_id
,
label
:
item
.
marketing_name
}
})
}
catch
(
error
)
{
console
.
log
(
error
)
}
},
// 分配配送员列表
async
getDelivererList
()
{
try
{
const
res
=
await
getDelivererList
();
// this.deliverer.code = res.response.code;
this
.
deliverer
=
res
.
response
;
console
.
log
(
this
.
deliverer
);
}
catch
(
error
)
{
console
.
log
(
error
);
}
},
},
};
</
script
>
<
style
lang=
"less"
src=
"./index.less"
scope
>
</
style
>
\ No newline at end of file
src/pages/Groupmeal/components/PageHeader/User.vue
0 → 100644
View file @
e57c8e76
<
template
>
<el-dropdown>
<div
class=
"user-info"
>
<el-avatar
:src=
"userInfo.avatar || DEFAULT_AVATAR"
size=
"small"
></el-avatar>
<span
class=
"user-name"
>
{{
userInfo
.
name
}}
</span>
</div>
<template
#
dropdown
>
<el-dropdown-menu>
<el-dropdown-item>
<i
class=
"el-icon-message"
></i>
{{
userInfo
.
email
}}
</el-dropdown-item>
<el-dropdown-item>
<span><a
class=
"link"
href=
"//pandora.yidian-inc.com/"
>
返回pandora工具平台
</a></span>
</el-dropdown-item>
</el-dropdown-menu>
</
template
>
</el-dropdown>
</template>
<
script
>
import
{
mapState
}
from
'vuex'
import
{
HEADER_CONFIG
}
from
'@/config/pageconfig'
;
export
default
{
computed
:
mapState
({
userInfo
:
state
=>
(
state
.
userInfo
||
{}),
}),
data
()
{
return
{
DEFAULT_AVATAR
:
HEADER_CONFIG
.
miscellaneous
.
defaultAvatar
,
};
},
};
</
script
>
<
style
lang=
"less"
scoped
>
.user-info {
display: flex;
align-items: center;
}
.user-name {
margin-left: 12px;
color: #fff;
}
</
style
>
src/pages/Groupmeal/components/PageHeader/config.js
0 → 100644
View file @
e57c8e76
const
headerConfig
=
[
{
name
:
"订单管理"
,
path
:
"/op/groupmeal/orderManagement"
},
{
path
:
'/op/groupmeal/distrib'
,
name
:
'配送员管理'
},
];
export
default
headerConfig
;
\ No newline at end of file
src/pages/Groupmeal/components/PageHeader/index.vue
0 → 100644
View file @
e57c8e76
<
template
>
<div
id=
"pageheader"
>
<div
class=
"line"
></div>
<el-menu
class=
"header-menu"
mode=
"horizontal"
:router=
"true"
background-color=
"#545c64"
text-color=
"#fff"
:default-active=
"activeMenu"
active-text-color=
"#ffd04b"
unique-opened
>
<el-menu-item
v-for=
"item in headerConfig"
:index=
"item.path"
:key=
"item.path"
>
{{
item
.
name
}}
</el-menu-item>
<el-menu-item
key=
"usermenu"
class=
"user-menu"
>
<user></user>
</el-menu-item>
</el-menu>
</div>
</
template
>
<
script
>
import
headerConfig
from
"./config"
;
import
User
from
"./User.vue"
;
export
default
{
name
:
"PageHeader"
,
components
:
{
User
},
data
()
{
return
{
headerConfig
};
},
computed
:
{
activeMenu
()
{
return
this
.
$route
.
path
;
}
},
beforeMount
()
{
},
methods
:
{}
};
</
script
>
<
style
lang=
"less"
>
</
style
>
src/pages/Groupmeal/components/Pagination/index.vue
0 → 100644
View file @
e57c8e76
<
template
>
<div
class=
"block"
>
<el-pagination
class=
"pagination"
layout=
"prev, pager, next, jumper, ->,page , total"
v-bind=
"$attrs"
v-on=
"$listener"
>
</el-pagination>
</div>
</
template
>
<
script
>
export
default
{
name
:
'Pagination'
};
</
script
>
<
style
lang=
"less"
>
.block {
margin-top: 50px;
}
</
style
>
src/pages/Groupmeal/layout/index.less
0 → 100644
View file @
e57c8e76
.layout {
display: flex;
flex-direction: column;
height: 100%;
}
.main {
flex: 1;
}
src/pages/Groupmeal/layout/index.vue
0 → 100644
View file @
e57c8e76
<
template
>
<div
class=
"layout"
>
<!-- 页面公共 header -->
<page-header
class=
"page-header"
></page-header>
<!-- 页面主体部分 -->
<div
class=
"main"
>
<slot></slot>
</div>
</div>
</
template
>
<
script
>
import
PageHeader
from
'../components/PageHeader'
;
export
default
{
components
:
{
PageHeader
},
};
</
script
>
<
style
lang=
"less"
src=
"./index.less"
></
style
>
src/pages/Groupmeal/orderManagement/index.less
0 → 100644
View file @
e57c8e76
.orderManage {
padding: 30px;
box-sizing: border-box;
}
.tabHead{
margin-bottom:10px;
}
.exportForm,.exportBtn{
text-align:center;
}
.refundBtnGroup {
display: block;
text-align: center;
}
.refundCon /deep/ .el-row {
margin-bottom: 15px;
display: flex;
align-items: center;
}
\ No newline at end of file
src/pages/Groupmeal/orderManagement/index.vue
0 → 100644
View file @
e57c8e76
<
template
>
<Layout>
<div
class=
"orderManage"
>
<!-- 查询栏 -->
<el-form
:inline=
"true"
:model=
"orderQueryObj"
ref=
"ruleForm"
class=
"demo-form-inline"
>
<el-form-item
label=
"活动名称:"
prop=
"marketing_id"
>
<el-select
v-model=
"orderQueryObj.marketing_id"
placeholder=
"请选择"
@
change=
"activityNameSel"
@
focus=
"activityNameFocus"
filterable
>
<el-option
v-for=
"item in activityNameArr"
:key=
"item.marketing_id"
:label=
"item.marketing_name"
:value=
"item.marketing_id"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"订单状态:"
prop=
"order_status"
>
<el-select
v-model=
"orderQueryObj.order_status"
placeholder=
"请选择"
>
<el-option
v-for=
"item in orderStatusArr"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
:disabled=
"item.disabled"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"商品名称:"
prop=
"goods_id"
>
<el-select
v-model=
"orderQueryObj.goods_id"
placeholder=
"请选择"
filterable
>
<el-option
v-for=
"item in tradeNameArr"
:key=
"item.goods_id"
:label=
"item.goods_name"
:value=
"item.goods_id"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"收货人:"
prop=
"cust_user"
>
<el-input
placeholder=
"请输入收货人姓名或手机号"
prefix-icon=
"el-icon-search"
v-model=
"orderQueryObj.cust_user"
></el-input>
</el-form-item>
<el-form-item
label=
"订单编号:"
prop=
"order_id"
>
<el-input
placeholder=
"请输入订单号"
prefix-icon=
"el-icon-search"
v-model=
"orderQueryObj.order_id"
></el-input>
</el-form-item>
<el-form-item
label=
"自提点:"
prop=
"sub_shop_id"
>
<el-select
v-model=
"orderQueryObj.sub_shop_id"
placeholder=
"请选择"
filterable
>
<el-option
v-for=
"item in selLiftPoinArr"
:key=
"item.sub_shop_id"
:label=
"item.sub_shop_name"
:value=
"item.sub_shop_id"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button
@
click=
"resetOrder('ruleForm')"
>
重置
</el-button>
<el-button
type=
"primary"
@
click=
"searchOrder"
>
搜索
</el-button>
</el-form-item>
</el-form>
<!-- Tabs标签页 -->
<el-tabs
v-model=
"activeName"
@
tab-click=
"handleClick"
>
<el-row
class=
"tabHead"
>
<el-col
:span=
"12"
>
<div>
商品共计:
{{
goodsNum
}}
</div>
</el-col>
<el-col
:span=
"12"
style=
"text-align: right"
>
<el-button
@
click=
"exportOrder"
>
导出
</el-button>
<el-button
@
click=
"printOrder"
>
打印
</el-button>
</el-col>
</el-row>
<el-tab-pane
label=
"全部"
name=
"all"
>
<el-table
:data=
"orderTableData"
border
stripe
style=
"width: 100%"
>
<el-table-column
prop=
"marketing_name"
label=
"活动名称"
>
<template
#
default=
"scope"
>
<div>
{{
scope
.
row
.
marketing_name
}}
(
{{
scope
.
row
.
marketing_id
}}
)
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"order_id"
label=
"订单号"
width
></el-table-column>
<el-table-column
prop=
"order_status_text"
label=
"订单状态"
></el-table-column>
<el-table-column
prop=
"order_item"
label=
"商品信息"
>
<
template
#
default=
"scope"
>
<div
v-for=
"(item, index) in scope.row.order_item"
:key=
"index"
>
{{
item
.
goods_name
}}
<span
style=
"color: red"
>
*
{{
item
.
goods_num
}}
</span>
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"user_name"
label=
"收货人"
>
<
template
#
default=
"scope"
>
<div>
<span
>
{{
scope
.
row
.
user_name
}}
(
{{
scope
.
row
.
user_nick
}}
)
</span
>
<p>
{{
scope
.
row
.
user_mobile
}}
</p>
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"sub_shop_name"
label=
"自提点"
></el-table-column>
<el-table-column
prop=
"comment"
label=
"备注"
></el-table-column>
<el-table-column
prop=
"pay_time"
label=
"支付时间"
></el-table-column>
<el-table-column
prop=
"payment"
label=
"支付金额"
>
<
template
#
default=
"scope"
>
<div>
¥
{{
scope
.
row
.
payment
}}
<span
v-show=
"scope.row.refund_amount"
>
(已退¥
{{
scope
.
row
.
refund_amount
}}
)
</span
>
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"discount_fee"
label=
"优惠金额"
></el-table-column>
<el-table-column
fixed=
"right"
label=
"操作"
width=
"100"
>
<
template
#
default=
"scope"
>
<el-button
type=
"text"
size=
"small"
@
click=
"refund(scope.row)"
v-show=
"
scope.row.order_status == '2' ||
scope.row.order_status == '6' ||
scope.row.order_status == '8'
"
>
退款
</el-button
>
<el-button-group
v-show=
"scope.row.order_status == '3'"
>
<el-button
type=
"text"
size=
"small"
@
click=
"agree(scope.row)"
>
同意
</el-button
>
<el-button
type=
"text"
size=
"small"
@
click=
"refuse(scope.row)"
>
拒绝
</el-button
>
</el-button-group>
</
template
>
</el-table-column>
</el-table>
<page
@
current-change=
"handleCurrentChange"
:current-page=
"orderQueryObj.page"
:page-size=
"orderQueryObj.page_size"
:total=
"totalNum"
/>
</el-tab-pane>
<el-tab-pane
label=
"售后"
name=
"afterSale"
>
<!-- start -->
<el-table
:data=
"orderTableData"
border
stripe
style=
"width: 100%"
>
<el-table-column
prop=
"marketing_name"
label=
"活动名称"
>
<
template
#
default=
"scope"
>
<div>
{{
scope
.
row
.
marketing_name
}}
(
{{
scope
.
row
.
marketing_id
}}
)
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"order_id"
label=
"订单号"
width
></el-table-column>
<el-table-column
prop=
"order_status_text"
label=
"订单状态"
></el-table-column>
<el-table-column
prop=
"order_item"
label=
"商品信息"
>
<
template
#
default=
"scope"
>
<div
v-for=
"(item, index) in scope.row.order_item"
:key=
"index"
>
{{
item
.
goods_name
}}
<span
style=
"color: red"
>
*
{{
item
.
goods_num
}}
</span>
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"user_name"
label=
"收货人"
>
<
template
#
default=
"scope"
>
<div>
<span
>
{{
scope
.
row
.
user_name
}}
(
{{
scope
.
row
.
user_nick
}}
)
</span
>
<p>
{{
scope
.
row
.
user_mobile
}}
</p>
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"sub_shop_name"
label=
"自提点"
></el-table-column>
<el-table-column
prop=
"comment"
label=
"备注"
></el-table-column>
<el-table-column
prop=
"pay_time"
label=
"支付时间"
></el-table-column>
<el-table-column
prop=
"payment"
label=
"支付金额"
>
<
template
#
default=
"scope"
>
<div>
¥
{{
scope
.
row
.
payment
}}
<span
v-show=
"scope.row.refund_amount"
>
(已退¥
{{
scope
.
row
.
refund_amount
}}
)
</span
>
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"discount_fee"
label=
"优惠金额"
></el-table-column>
<el-table-column
fixed=
"right"
label=
"操作"
width=
"100"
>
<
template
#
default=
"scope"
>
<el-button
type=
"text"
size=
"small"
@
click=
"refund(scope.row)"
v-show=
"
scope.row.order_status == '2' ||
scope.row.order_status == '6' ||
scope.row.order_status == '8'
"
>
退款
</el-button
>
<el-button-group
v-show=
"scope.row.order_status == '3'"
>
<el-button
type=
"text"
size=
"small"
@
click=
"agree(scope.row)"
>
同意
</el-button
>
<el-button
type=
"text"
size=
"small"
@
click=
"refuse(scope.row)"
>
拒绝
</el-button
>
</el-button-group>
</
template
>
</el-table-column>
</el-table>
<page
@
current-change=
"handleCurrentChange"
:current-page=
"orderQueryObj.page"
:page-size=
"orderQueryObj.page_size"
:total=
"totalNum"
/>
<!-- end -->
</el-tab-pane>
</el-tabs>
<!-- 导出弹窗 -->
<el-dialog
title=
"导出订单"
width=
"25%"
top=
"10%"
v-model=
"exportShow"
>
<el-form-item
class=
"exportForm"
label
>
<div
style=
"margin-bottom: 15px"
>
请选择导出活动{{ exportType }}的表格类型
</div>
<a
:href=
"exportURL1"
style=
"margin-right: 10px"
><el-button
type=
"primary"
@
click=
"exportShow = false"
>
总表
</el-button
></a
>
<a
:href=
"exportURL2"
style=
"margin-right: 10px"
><el-button
type=
"primary"
@
click=
"exportShow = false"
>
商品表
</el-button
></a
>
<a
:href=
"exportURL3"
><el-button
type=
"primary"
@
click=
"exportShow = false"
>
配送表
</el-button
></a
>
<!-- <el-checkbox-group v-model="exportSel">
<el-checkbox
v-for="i in exportSelOpt"
:label="i.type"
:key="i.type"
>{{ i.name }}</el-checkbox
>
</el-checkbox-group> -->
</el-form-item>
<!-- <el-form-item class="exportBtn">
<el-button @click="exportShow = false">取消</el-button>
<a :href="exportURL" style="margin-left: 20px"><el-button type="primary" @click="exportShow = false">确定导出</el-button></a>
</el-form-item> -->
</el-dialog>
<!-- 退款弹窗 -->
<el-dialog
title=
"退款"
width=
"30%"
top=
"10%"
v-model=
"refundShow"
>
<el-checkbox
:indeterminate=
"isIndeterminate"
v-model=
"checkAll"
@
change=
"handleCheckAllChange"
style=
"margin-bottom: 15px"
>
全选
</el-checkbox>
<div
class=
"refundCon"
v-for=
"(item, index) in refundGoods"
:key=
"index"
>
<el-row>
<el-checkbox
class=
"check-wrap"
v-model=
"item.refundedGoodsSel"
:label=
"item.goods_name"
name=
"type"
></el-checkbox>
</el-row>
<el-row>
<el-col
:span=
"6"
>
单价:{{ item.price }}
</el-col>
<el-col
:span=
"6"
>
数量:{{ item.goods_num }}
</el-col>
<el-col
:span=
"6"
>
实付:{{ item.payment }}
</el-col>
</el-row>
<el-row>
可退数量:
<el-input-number
v-model=
"item.refundableQuantity"
@
change=
"handleChange"
:min=
"0"
:max=
"item.goods_num - item.refund_count"
></el-input-number>
</el-row>
<el-row>
退款金额(可退金额{{ item.amountToRefund }}元):
<el-input
v-model=
"item.amountToRefund"
style=
"width: 150px"
></el-input>
</el-row>
</div>
<
template
#
footer
>
<span
class=
"dialog-footer refundBtnGroup"
>
<el-button
@
click=
"refundShow = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"handleConfirmRefund"
>
退款
</el-button
>
</span>
</
template
>
</el-dialog>
</div>
</Layout>
</template>
<
script
>
import
Layout
from
"../layout/index.vue"
;
import
{
getOrderList
,
getMarketingList
,
getGoodsList
,
getSubShopList
,
orderPrint
,
orderItemList
,
orderRefundReject
,
refundOrder
,
getOrderExportURL
,
}
from
"@/service/Groupmeal/groupmeal"
;
// import page from "../../components/Pagination.vue";
import
page
from
"../components/Pagination/index.vue"
;
export
default
{
name
:
"orderManagement"
,
components
:
{
Layout
,
page
,
},
data
()
{
return
{
// 查询
orderQueryObj
:
{
page
:
1
,
page_size
:
10
,
marketing_id
:
""
,
// 活动名称
order_status
:
"0"
,
// 订单状态
goods_id
:
""
,
// 商品名称
cust_user
:
""
,
// 收货人
order_id
:
""
,
// 订单编号
sub_shop_id
:
""
,
// 自提点
},
// 下拉框数据
// 活动名称
activityNameArr
:
[],
// 订单状态
orderStatusArr
:
[
{
value
:
"0"
,
label
:
"全部"
,
},
{
value
:
"1"
,
label
:
"未支付"
,
},
{
value
:
"2"
,
label
:
"已支付"
,
},
{
value
:
"3"
,
label
:
"待退款"
,
},
{
value
:
"4"
,
label
:
"已退款"
,
},
{
value
:
"5"
,
label
:
"退款中"
,
},
{
value
:
"6"
,
label
:
"已拒绝"
,
},
{
value
:
"7"
,
label
:
"售后"
,
},
],
// 商品名称
tradeNameArr
:
[],
// 自提点
selLiftPoinArr
:
[],
activeName
:
"all"
,
// Tabs标签页
goodsNum
:
""
,
// 商品总计
// 导出
exportShow
:
false
,
exportType
:
""
,
// exportSel: [],
// exportSelOpt: [
// { type: "1", name: "总表" },
// { type: "2", name: "商品表" },
// { type: "3", name: "配送表" },
// ],
// 表格数据
orderTableData
:
[],
totalNum
:
null
,
//总条数
// 退款
refundShow
:
false
,
// 退款状态
checkAll
:
false
,
// 全选
isIndeterminate
:
false
,
refundGoods
:
[
{
refundedGoodsSel
:
false
,
goods_name
:
""
,
price
:
""
,
// 单价
goods_num
:
""
,
// 数量
payment
:
""
,
// 实付
refundableQuantity
:
""
,
refundAmount
:
""
,
amountToRefund
:
""
,
},
],
};
},
computed
:
{
exportURL1
()
{
return
getOrderExportURL
(
this
.
orderQueryObj
.
marketing_id
,
"1"
);
},
exportURL2
()
{
return
getOrderExportURL
(
this
.
orderQueryObj
.
marketing_id
,
"2"
);
},
exportURL3
()
{
return
getOrderExportURL
(
this
.
orderQueryObj
.
marketing_id
,
"3"
);
},
},
methods
:
{
activityNameFocus
()
{
this
.
getMarketingListMet
();
},
// 获取活动名称
async
getMarketingListMet
()
{
try
{
const
res
=
await
getMarketingList
();
this
.
activityNameArr
=
res
.
result
;
}
catch
(
error
)
{
this
.
$message
.
error
(
"发生未知错误,请稍后再试一下吧~~~"
);
console
.
error
(
error
);
}
},
// 活动名称的change事件 获取商品名称+获取自提点
async
activityNameSel
(
val
)
{
this
.
orderQueryObj
.
goods_id
=
""
;
const
params
=
{
marketing_id
:
val
,
};
const
res
=
await
getGoodsList
(
params
);
// 商品名称
this
.
getSubShopListMet
(
val
)
//自提点
// const res = await getSubShopList(params);
this
.
tradeNameArr
=
res
.
result
;
// this.selLiftPoinArr = res.result;
},
// 获取自提点
async
getSubShopListMet
(
params
)
{
try
{
let
marketing_id
=
''
if
(
params
){
marketing_id
=
params
}
const
res
=
await
getSubShopList
({
'marketing_id'
:
marketing_id
});
this
.
selLiftPoinArr
=
res
.
result
;
}
catch
(
error
)
{
this
.
$message
.
error
(
"发生未知错误,请稍后再试一下吧~~~"
);
console
.
error
(
error
);
}
},
// 重置
resetOrder
(
formName
)
{
this
.
$refs
[
formName
].
resetFields
();
this
.
orderQueryObj
.
page
=
1
;
this
.
orderQueryObj
.
page_size
=
10
;
this
.
getOrderListMet
(
this
.
orderQueryObj
);
},
// 搜索
searchOrder
()
{
this
.
orderQueryObj
.
page
=
1
;
this
.
orderQueryObj
.
page_size
=
10
;
this
.
getOrderListMet
(
this
.
orderQueryObj
);
},
// 标签页切换
handleClick
(
targetName
)
{
if
(
targetName
.
props
.
name
==
"all"
)
{
this
.
orderQueryObj
.
order_status
=
"0"
;
this
.
orderStatusArr
[
1
].
disabled
=
false
;
this
.
orderStatusArr
[
2
].
disabled
=
false
;
}
else
{
this
.
orderQueryObj
.
order_status
=
"7"
;
this
.
orderStatusArr
[
1
].
disabled
=
true
;
this
.
orderStatusArr
[
2
].
disabled
=
true
;
}
this
.
getOrderListMet
(
this
.
orderQueryObj
);
},
// 导出
exportOrder
()
{
if
(
this
.
orderQueryObj
.
marketing_id
===
""
)
{
this
.
$message
.
error
(
"请选择活动名称"
);
return
;
}
this
.
exportShow
=
true
;
this
.
exportType
=
this
.
orderQueryObj
.
marketing_id
;
},
async
printOrderMet
(
forcePrint
)
{
const
params
=
{
marketing_id
:
this
.
orderQueryObj
.
marketing_id
,
// marketing_id: "1NJETU",
force_print
:
forcePrint
?
"1"
:
""
,
};
const
res
=
await
orderPrint
(
params
);
return
res
;
},
// 打印
async
printOrder
()
{
if
(
this
.
orderQueryObj
.
marketing_id
===
""
)
{
this
.
$message
.
error
(
"请选择活动名称"
);
return
;
}
let
res
=
await
this
.
printOrderMet
(
false
);
if
(
res
.
code
===
0
)
{
this
.
$message
({
type
:
"success"
,
message
:
"打印成功"
,
});
return
;
}
if
(
res
.
code
!==
5111040
)
{
if
(
res
.
reason
)
{
this
.
$message
.
error
(
res
.
reason
);
}
else
{
this
.
$message
.
error
(
"打印失败"
);
}
return
;
}
if
(
res
.
reason
)
{
try
{
await
this
.
$confirm
(
res
.
reason
,
"打印"
,
{
cancelButtonText
:
"取消"
,
confirmButtonText
:
"确定"
,
});
}
catch
(
e
)
{
// 取消
return
;
}
}
else
{
this
.
$message
.
error
(
"打印失败"
);
}
res
=
await
this
.
printOrderMet
(
true
);
// if (res.code !== 0) {
// this.$message.error("打印失败");
// }
},
// 获取订单列表
async
getOrderListMet
()
{
try
{
const
res
=
await
getOrderList
(
this
.
orderQueryObj
);
this
.
goodsNum
=
res
.
goods_num
;
// 商品共计
this
.
totalNum
=
res
.
count
;
// 商品总数
this
.
orderTableData
=
res
.
result
;
}
catch
(
error
)
{
this
.
$message
.
error
(
"发生未知错误,请稍后再试一下吧~~~"
);
console
.
error
(
error
);
}
},
//列表分页
// 页码变化
handleCurrentChange
(
e
)
{
this
.
orderQueryObj
.
page
=
e
;
this
.
getOrderListMet
();
},
// 拒绝
async
refuse
(
val
)
{
try
{
await
this
.
$confirm
(
"确定要拒绝退款么?"
,
"拒绝"
,
{
cancelButtonText
:
"取消"
,
confirmButtonText
:
"确定"
,
});
}
catch
(
e
)
{
// 取消
return
;
}
const
params
=
{
order_id
:
val
.
order_id
,
};
const
res
=
await
orderRefundReject
(
params
);
if
(
res
.
code
===
0
)
{
this
.
$message
({
type
:
"success"
,
message
:
"订单已驳回"
,
});
}
else
{
this
.
$message
.
error
(
res
.
reason
);
}
this
.
getOrderListMet
();
},
// 同意
agree
(
val
)
{
this
.
refund
(
val
);
},
// 全选
handleCheckAllChange
(
val
)
{
for
(
var
i
in
this
.
refundGoods
)
{
this
.
refundGoods
[
i
].
refundedGoodsSel
=
val
;
}
// this.isIndeterminate = false;
},
// 退款
async
refund
(
val
)
{
this
.
refundShow
=
true
;
this
.
checkAll
=
false
;
this
.
refundGoods
=
[];
const
params
=
{
order_id
:
val
.
order_id
,
};
const
res
=
await
orderItemList
(
params
);
this
.
refundGoods
=
res
.
result
;
for
(
var
i
in
res
.
result
)
{
this
.
refundGoods
[
i
].
refundableQuantity
=
Number
(
res
.
result
[
i
].
goods_num
-
res
.
result
[
i
].
refund_count
);
this
.
refundGoods
[
i
].
payment
=
Number
(
res
.
result
[
i
].
payment
//res.result[i].payment - res.result[i].refund_amount
);
// console.log( res.result[i]);
this
.
refundGoods
[
i
].
amountToRefund
=
Number
(
res
.
result
[
i
].
payment
-
res
.
result
[
i
].
refund_amount
);
}
},
// 退款确认
async
handleConfirmRefund
()
{
const
isCheckAllSelected
=
()
=>
this
.
refundGoods
.
refundedGoodsSel
;
const
getAllItems
=
()
=>
this
.
refundGoods
;
const
getSelectedItems
=
()
=>
{
const
isSelected
=
({
refundedGoodsSel
})
=>
refundedGoodsSel
;
return
this
.
refundGoods
.
filter
(
isSelected
);
};
const
convertToNumber
=
(
str
)
=>
{
return
!
Number
.
isNaN
(
parseFloat
(
str
))
?
parseFloat
(
str
)
:
0
;
};
const
processRefundItem
=
(
item
)
=>
{
return
{
order_item_id
:
item
.
order_item_id
,
refund_num
:
item
.
refundableQuantity
||
0
,
refund_amount
:
convertToNumber
(
item
.
amountToRefund
),
};
};
const
orderId
=
this
.
refundGoods
[
0
].
order_id
;
let
itemsToRefund
=
null
;
if
(
isCheckAllSelected
())
{
itemsToRefund
=
getAllItems
();
}
else
{
itemsToRefund
=
getSelectedItems
();
}
itemsToRefund
=
itemsToRefund
.
map
(
processRefundItem
);
// if ((itemsToRefund.length = 0)) {
// this.$message.error("请选择退款商品");
// return;
// }
const
res
=
await
refundOrder
(
orderId
,
itemsToRefund
);
if
(
res
.
code
===
0
)
{
this
.
$message
.
success
(
"退款成功"
);
this
.
refundShow
=
false
;
return
;
}
// this.refundShow = false;
this
.
$message
.
error
(
res
.
reason
);
},
},
created
()
{
this
.
getMarketingListMet
();
// 活动名称
this
.
getSubShopListMet
();
// 自提点
this
.
getOrderListMet
();
// table列表
},
};
</
script
>
<
style
lang=
"less"
src=
"./index.less"
scope
></
style
>
<
style
lang=
"less"
scoped
>
.check-wrap{
/deep/ .el-checkbox__label {
white-space: normal;
word-break: break-all;
}
}
</
style
>
src/router/Groupmeal/index.js
0 → 100644
View file @
e57c8e76
/**
* 团餐运营管理
*/
const
groupmealRouters
=
[
{
path
:
"/op/groupmeal/orderManagement"
,
name
:
"orderManagement"
,
// redirect: "/op/groupmeal/orderManagement",
component
:
()
=>
import
(
/* webpackChunkName: "goods" */
"@/pages/Groupmeal/orderManagement"
)
},
{
path
:
"/op/groupmeal/distrib"
,
name
:
"Distrib"
,
component
:
()
=>
import
(
/* webpackChunkName: "goods" */
"@/pages/Groupmeal/Distrib"
)
},
];
export
default
groupmealRouters
;
\ No newline at end of file
src/router/index.js
View file @
e57c8e76
...
...
@@ -11,6 +11,7 @@ import ManageRole from "../pages/Role/manage-role.vue";
import
RoleDetail
from
"../pages/Role/role-detail.vue"
;
import
goodsRouter
from
"./Goods/index"
;
import
withdrawalRoutes
from
"./Withdrawal/index"
;
import
groupmealRouters
from
"./Groupmeal/index"
;
const
routes
=
[
{
path
:
"/op/enterprise"
,
...
...
@@ -96,7 +97,9 @@ const routes = [
// 商品管理路由
...
goodsRouter
,
// 钱包审核
...
withdrawalRoutes
...
withdrawalRoutes
,
// 团餐运营
...
groupmealRouters
];
console
.
log
(
routes
);
...
...
src/service/Groupmeal/groupmeal.js
0 → 100644
View file @
e57c8e76
import
axios
from
"@/utils/request"
;
// 获取主页配送员列表
export
async
function
getList
(
params
)
{
const
res
=
await
axios
.
post
(
"/api/v1/order/deliverer/list_day_deliverer_conf"
,
params
);
return
res
;
}
// 获取分配配送员列表
export
async
function
getDelivererList
(
params
)
{
const
res
=
await
axios
.
post
(
"/api/v1/order/deliverer/list_day_deliverer"
,
params
);
return
res
;
}
// 添加配送员
export
async
function
getAddDeliverer
(
params
)
{
const
res
=
await
axios
.
post
(
"/api/v1/order/deliverer/add_deliverer"
,
params
);
return
res
;
}
// 分配配送员
export
async
function
getSaveDeliverer
(
params
)
{
const
res
=
await
axios
.
post
(
"/api/v1/order/deliverer/save_day_deliverer"
,
params
);
return
res
;
}
// 获取订单列表
export
async
function
getOrderList
(
params
)
{
const
res
=
await
axios
.
get
(
"/api/v1/order/background/order_list"
,
{
params
});
return
res
;
}
// 获取活动名称
export
async
function
getMarketingList
()
{
const
res
=
await
axios
.
get
(
"/api/v1/order/background/marketing_list"
);
return
res
;
}
// 获取商品名称
export
async
function
getGoodsList
(
params
)
{
const
res
=
await
axios
.
get
(
"/api/v1/order/background/goods_list"
,
{
params
});
return
res
;
}
// 获取自提点
export
async
function
getSubShopList
(
params
)
{
const
res
=
await
axios
.
get
(
"/api/v1/order/background/sub_shop_list"
,{
params
});
return
res
;
}
// 导出订单
export
async
function
orderExport
(
params
)
{
const
res
=
await
axios
.
get
(
"/api/v1/order/background/order_export"
,
{
params
});
return
res
;
}
// 打印订单
export
async
function
orderPrint
(
params
)
{
const
res
=
await
axios
.
get
(
"/api/v1/order/background/order_print"
,
{
params
});
return
res
;
}
// 订单退款列表
export
async
function
orderItemList
(
params
)
{
const
res
=
await
axios
.
get
(
"/api/v1/order/background/order_item_list"
,
{
params
});
return
res
;
}
// 订单退款
export
async
function
refundOrder
(
orderId
,
itemsToRefund
)
{
// const params = {
// order_id: orderId,
// refund_list: itemsToRefund
// };
const
res
=
await
axios
.
post
(
"/api/v1/order/background/order_refund"
,
{
order_id
:
orderId
,
refund_list
:
itemsToRefund
});
return
res
;
}
// 订单驳回
export
async
function
orderRefundReject
(
params
)
{
const
res
=
await
axios
.
get
(
"/api/v1/order/background/order_refund_reject"
,
{
params
});
return
res
;
}
// 导出订单
export
function
getOrderExportURL
(
eventId
,
type
)
{
var
ENV
;
if
(
process
.
env
.
NODE_ENV
==
"development"
){
ENV
=
"http://bp-dev.ini.yidian-inc.com/"
}
else
{
ENV
=
"http://bp-test.ini.yidian-inc.com/"
}
return
`
${
ENV
}
order/background/order_export?marketing_id=
${
eventId
}
&type=
${
type
}
`
;
}
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