Commit 15743704 authored by pengyunqian's avatar pengyunqian

update:团餐提测

parents 4e6f6f54 b683ffac
...@@ -8,10 +8,10 @@ ...@@ -8,10 +8,10 @@
"test": "sh ./bin/start.sh test", "test": "sh ./bin/start.sh test",
"prod": "sh ./bin/start.sh production", "prod": "sh ./bin/start.sh production",
"koa": "nodemon app.js", "koa": "nodemon app.js",
"web-dev": "NODE_ENV=development vue-cli-service serve", "web-dev": "cross-env NODE_ENV=development vue-cli-service serve",
"web-test": "NODE_ENV=test vue-cli-service build", "web-test": "cross-env NODE_ENV=test vue-cli-service build",
"web-build": "NODE_ENV=production vue-cli-service build", "web-build": "cross-env NODE_ENV=production vue-cli-service build",
"test:unit": "jest", "test:unit": "vue-cli-service test:unit",
"lint": "vue-cli-service lint" "lint": "vue-cli-service lint"
}, },
"dependencies": { "dependencies": {
......
...@@ -19,5 +19,6 @@ module.exports = { ...@@ -19,5 +19,6 @@ module.exports = {
API_INTERNAL_URI: API_INTERNAL_URI[env], API_INTERNAL_URI: API_INTERNAL_URI[env],
PANDORA_URI: PANDORA_URI[env], PANDORA_URI: PANDORA_URI[env],
GOODS_URI: API_INTERNAL_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],
}; };
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);
};
...@@ -7,6 +7,7 @@ const role = require('./controllers/role') ...@@ -7,6 +7,7 @@ const role = require('./controllers/role')
const life = require('./controllers/life-no'); const life = require('./controllers/life-no');
const goods = require('./controllers/goods'); const goods = require('./controllers/goods');
const withdrawal = require('./controllers/withdrawal'); const withdrawal = require('./controllers/withdrawal');
const groupmeal = require('./controllers/groupmeal');
const router = Router(); const router = Router();
const API_VERSION = "/api/v1"; const API_VERSION = "/api/v1";
...@@ -62,6 +63,23 @@ router.post(`${API_VERSION}/merchant/lifeinner/life_info`, life.get_life_info) ...@@ -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.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}/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 // 钱包提现审核 wallet/background/apply_detail
router.get(`${API_VERSION}/get_withdrawal_apply_list`, withdrawal.getApplyList) router.get(`${API_VERSION}/get_withdrawal_apply_list`, withdrawal.getApplyList)
......
.goods {
width: 100%;
height: 100%;
padding: 0 30px;
.header {
text-align: right;
margin-bottom: 30px;
}
.dioFor {
padding-left: 10%;
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;
}
}
This diff is collapsed.
<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>
const headerConfig = [
{
name: "订单管理",
path: "/op/groupmeal/orderManagement"
},
{
path: '/op/groupmeal/distrib',
name: '配送员管理'
},
];
export default headerConfig;
\ No newline at end of file
<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>
<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>
.layout {
display: flex;
flex-direction: column;
height: 100%;
}
.main {
flex: 1;
}
<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>
.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
This diff is collapsed.
<template>
<div class="fefundGoods">
<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
v-model="refundGoods.refundedGoodsSel"
label="商品标题"
name="type"
></el-checkbox>
</el-row>
<el-row>
<el-col :span="6">单价:{{ refundGoods.goodsUnitPrice }}</el-col>
<el-col :span="6">数量:{{ refundGoods.goodsQuantity }}</el-col>
<el-col :span="6">实付:{{ refundGoods.goodsActualPay }}</el-col>
</el-row>
<el-row>
可退数量:
<el-input-number
v-model="refundGoods.refundableQuantity"
@change="handleChange"
:min="1"
:max="10"
label="描述文字"
></el-input-number>
</el-row>
<el-row>
退款金额(可退金额{{ refundGoods.refundAmount }}元):
<el-input v-model="ipt" style="width: 150px"></el-input>
</el-row>
</div>
</div>
</template>
<script>
export default {
data() {
return {
// 退款
checkAll: false, // 全选
isIndeterminate: false,
refundGoods: [
{
refundedGoodsSel: false,
goodsUnitPrice: "", // 单价
goodsQuantity: "", // 数量
goodsActualPay: "", // 实付
refundableQuantity: "",
refundAmount: "",
ipt: "",
},
],
};
},
methods: {
// 全选
handleCheckAllChange(val) {
console.log(val);
this.refundGoods.refundedGoodsSel = val;
this.isIndeterminate = false;
},
},
};
</script>
<style scoped>
.refundCon /deep/ .el-row {
margin-bottom: 15px;
display: flex;
align-items: center;
}
</style>
\ No newline at end of file
<template>
<div>
<el-table :data="orderTableData" border stripe style="width: 100%">
<el-table-column
prop="marketing_name"
label="活动名称"
width
></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="商品信息"></el-table-column>
<el-table-column prop="user_name" label="收货人"></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="支付金额"></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-if="scope.row.order_status_text == '已支付'"
>退款</el-button
>
<el-button-group v-else>
<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 :totalNum="totalNum" @update="update" style="float: right" />
<!-- 退款弹窗 -->
<el-dialog title="退款" width="30%" top="10%" v-model="refundShow">
<refundPopup />
<template #footer>
<span class="dialog-footer refundBtnGroup">
<el-button @click="refundShow = false">取 消</el-button>
<el-button type="primary" @click="refundConfirm">退款</el-button>
</span>
</template>
</el-dialog>
</div>
</template>
<script>
import refundPopup from "../popup/refund.vue";
import { getOrderList} from "@/service/Groupmeal/groupmeal";
import page from "../../../components/Pagination.vue";
export default {
components: {
refundPopup,
page,
},
data() {
return {
refundShow: false,
// 表格数据
orderTableData: [],
params: {
page: 1,
page_size: 10,
},
totalNum: null, //总条数
};
},
methods: {
// 获取订单列表
async getOrderListMet() {
// let { page, page_size } = this.params;
// let params = {
// page,
// page_size,
// };
try {
const res = await getOrderList(this.params);
console.log(res);
this.totalNum = res.count;
this.orderTableData = res.result;
} catch (error) {
this.$message.error("发生未知错误,请稍后再试一下吧~~~");
console.error(error);
}
},
//列表分页
update(obj) {
Object.assign(this.params, obj);
// let { page, page_size } = this.parmas;
this.getOrderListMet(this.parmas);
},
// 退款
refund(val) {
console.log(val);
this.refundShow = true;
},
// 退款确认
refundConfirm() {},
// 拒绝
refuse(val) {
console.log(val);
this.$confirm("确定要拒绝退款么?", "拒绝", {
cancelButtonText: "取消",
confirmButtonText: "确定",
})
.then(() => {
this.$message({
type: "success",
message: "退款成功!",
});
})
.catch(() => {
this.$message({
type: "info",
message: "已取消",
});
});
},
},
created() {
this.getOrderListMet();
},
};
</script>
<style scoped>
.refundBtnGroup {
display: block;
text-align: center;
}
</style>
\ No newline at end of file
/**
* 团餐运营管理
*/
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
...@@ -11,6 +11,7 @@ import ManageRole from "../pages/Role/manage-role.vue"; ...@@ -11,6 +11,7 @@ import ManageRole from "../pages/Role/manage-role.vue";
import RoleDetail from "../pages/Role/role-detail.vue"; import RoleDetail from "../pages/Role/role-detail.vue";
import goodsRouter from "./Goods/index"; import goodsRouter from "./Goods/index";
import withdrawalRoutes from "./Withdrawal/index"; import withdrawalRoutes from "./Withdrawal/index";
import groupmealRouters from "./Groupmeal/index";
const routes = [ const routes = [
{ {
path: "/op/enterprise", path: "/op/enterprise",
...@@ -96,7 +97,9 @@ const routes = [ ...@@ -96,7 +97,9 @@ const routes = [
// 商品管理路由 // 商品管理路由
...goodsRouter, ...goodsRouter,
// 钱包审核 // 钱包审核
...withdrawalRoutes ...withdrawalRoutes,
// 团餐运营
...groupmealRouters
]; ];
console.log(routes); console.log(routes);
......
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() {
const res = await axios.get("/api/v1/order/background/sub_shop_list");
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) {
return `http://bp-dev.ini.yidian-inc.com/order/background/order_export?marketing_id=${eventId}&type=${type}`;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment