Commit bf445651 authored by 李汶鸿's avatar 李汶鸿

Merge branch 'release-activity' into 'master'

Release activity

See merge request bp/op-web-service!21
parents f37bb5b5 22738111
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
"dependencies": { "dependencies": {
"axios": "^0.21.1", "axios": "^0.21.1",
"core-js": "^3.6.5", "core-js": "^3.6.5",
"dayjs": "^1.10.6",
"element-plus": "^1.0.2-beta.44", "element-plus": "^1.0.2-beta.44",
"form-data": "^4.0.0", "form-data": "^4.0.0",
"json-bigint": "^1.0.0", "json-bigint": "^1.0.0",
...@@ -7299,9 +7300,15 @@ ...@@ -7299,9 +7300,15 @@
"dev": true "dev": true
}, },
"node_modules/dayjs": { "node_modules/dayjs": {
<<<<<<< HEAD
"version": "1.10.6",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.6.tgz",
"integrity": "sha512-AztC/IOW4L1Q41A86phW5Thhcrco3xuAA+YX/BLpLWWjRcTj5TOt/QImBLmCKlrF7u7k47arTnOyL6GnbG8Hvw=="
=======
"version": "1.10.5", "version": "1.10.5",
"resolved": "https://registry.nlark.com/dayjs/download/dayjs-1.10.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdayjs%2Fdownload%2Fdayjs-1.10.5.tgz", "resolved": "https://registry.nlark.com/dayjs/download/dayjs-1.10.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdayjs%2Fdownload%2Fdayjs-1.10.5.tgz",
"integrity": "sha1-VgDfRUj8JFOz8WPrsqu+llzPuYY=" "integrity": "sha1-VgDfRUj8JFOz8WPrsqu+llzPuYY="
>>>>>>> master
}, },
"node_modules/deasync": { "node_modules/deasync": {
"version": "0.1.21", "version": "0.1.21",
...@@ -28546,9 +28553,9 @@ ...@@ -28546,9 +28553,9 @@
"dev": true "dev": true
}, },
"dayjs": { "dayjs": {
"version": "1.10.5", "version": "1.10.6",
"resolved": "https://registry.nlark.com/dayjs/download/dayjs-1.10.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdayjs%2Fdownload%2Fdayjs-1.10.5.tgz", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.6.tgz",
"integrity": "sha1-VgDfRUj8JFOz8WPrsqu+llzPuYY=" "integrity": "sha512-AztC/IOW4L1Q41A86phW5Thhcrco3xuAA+YX/BLpLWWjRcTj5TOt/QImBLmCKlrF7u7k47arTnOyL6GnbG8Hvw=="
}, },
"deasync": { "deasync": {
"version": "0.1.21", "version": "0.1.21",
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
"dependencies": { "dependencies": {
"axios": "^0.21.1", "axios": "^0.21.1",
"core-js": "^3.6.5", "core-js": "^3.6.5",
"dayjs": "^1.10.6",
"element-plus": "^1.0.2-beta.44", "element-plus": "^1.0.2-beta.44",
"form-data": "^4.0.0", "form-data": "^4.0.0",
"json-bigint": "^1.0.0", "json-bigint": "^1.0.0",
......
...@@ -19,6 +19,7 @@ module.exports = { ...@@ -19,6 +19,7 @@ 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],
ACTIVITY_URI: API_INTERNAL_URI[env],
WITHDRAWAL_URI: API_INTERNAL_URI[env], WITHDRAWAL_URI: API_INTERNAL_URI[env],
GROUPMEAL_URI: API_INTERNAL_URI[env], GROUPMEAL_URI: API_INTERNAL_URI[env],
}; };
const ACTIVITY_URI = require("../config.js").ACTIVITY_URI;
const req = require("../utils/request").httpReq;
// 获取商家列表
exports.getBusinessList = async ctx => {
const url = `${ACTIVITY_URI}/goods/background/ota_list`;
const opts = {
url,
method: "GET"
};
ctx.body = await req(ctx, opts);
};
// 添加商品
exports.addGoods = async ctx => {
const url = `${ACTIVITY_URI}/goods/background/add_goods`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
};
// 商品库列表
exports.pindanGoods = async ctx => {
const url = `${ACTIVITY_URI}/goods/background/pindan_goods`;
const opts = {
url,
method: "GET"
};
ctx.body = await req(ctx, opts);
};
// 查看商品详情
exports.markGoodsInfo = async ctx => {
const url = `${ACTIVITY_URI}/goods/background/marketing_goods_info`;
const opts = {
url,
method: "GET"
};
ctx.body = await req(ctx, opts);
};
// 编辑商品
exports.editGoods = async ctx => {
const url = `${ACTIVITY_URI}/goods/background/edit_goods`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
};
// 获取活动过列表
exports.getActivityList = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/marketing_list`;
const opts = {
url,
method: "GET"
};
ctx.body = await req(ctx, opts);
};
// 修改商品
exports.editGoodsDetail = async ctx => {
const url = `${ACTIVITY_URI}/goods/background/edit_goods`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
};
// 添加营销活动
exports.addMarketing = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/add_marketing`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
};
// 编辑营销活动
exports.updateMarketing = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/update_marketing`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
};
// 营销活动详情
exports.marketingInfo = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/marketing_info`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
};
// 关闭/开启 活动
exports.updateActivity = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/update_marketing_online_status`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
};
// 查看活动订单
exports.checkActivityDetail = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/marketing_info`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
};
// 查看活动订单
exports.checkActivityDetailInfo = async ctx => {
const url = `${ACTIVITY_URI}/order/background/pindan_marketing_info_data_statistics`;
const opts = {
url,
method: "GET",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
};
// 获取自提点列表
exports.getPlaceList = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/take_place_list`;
const opts = {
url,
method: "GET"
};
ctx.body = await req(ctx, opts);
};
// 添加自提点
exports.addPlace = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/add_take_place`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
};
//删除自提点
exports.deletePlace = async ctx => {
const url = `${ACTIVITY_URI}/marketing/background/delete_take_place`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
};
...@@ -42,6 +42,8 @@ exports.getSaveDeliverer = async ctx => { ...@@ -42,6 +42,8 @@ exports.getSaveDeliverer = async ctx => {
ctx.body = await req(ctx, opts); ctx.body = await req(ctx, opts);
}; };
// 老订单管理
// 获取订单管理列表 // 获取订单管理列表
exports.getOrderList = async ctx => { exports.getOrderList = async ctx => {
const url = `${GROUPMEAL_URI}/order/oldbackground/order_list`; const url = `${GROUPMEAL_URI}/order/oldbackground/order_list`;
...@@ -133,3 +135,97 @@ exports.orderRefundReject = async ctx => { ...@@ -133,3 +135,97 @@ exports.orderRefundReject = async ctx => {
}; };
ctx.body = await req(ctx, opts); ctx.body = await req(ctx, opts);
}; };
// 新订单管理
// 获取订单管理列表
exports.newGetOrderList = async ctx => {
const url = `${GROUPMEAL_URI}/order/background/order_list`;
const opts = {
url,
method: "GET"
};
ctx.body = await req(ctx, opts);
};
// 获取活动名称
exports.newGetMarketingList = async ctx => {
const url = `${GROUPMEAL_URI}/order/background/order_condition_marketing_list`;
const opts = {
url,
method: "GET"
};
ctx.body = await req(ctx, opts);
};
// 获取商品名称
exports.newGetGoodsList = async ctx => {
const url = `${GROUPMEAL_URI}/order/background/order_condition_goods_list`;
const opts = {
url,
method: "GET"
};
ctx.body = await req(ctx, opts);
};
// 获取自提点
exports.newGetSubShopList = async ctx => {
const url = `${GROUPMEAL_URI}/order/background/order_condition_take_place_list`;
const opts = {
url,
method: "GET"
};
ctx.body = await req(ctx, opts);
};
// 导出订单
exports.newOrderExport = async ctx => {
const url = `${GROUPMEAL_URI}/order/background/order_export`;
const opts = {
url,
method: "GET"
};
ctx.body = await req(ctx, opts);
};
// 打印订单
exports.newOrderPrint = async ctx => {
const url = `${GROUPMEAL_URI}/order/background/order_print`;
const opts = {
url,
method: "GET"
};
ctx.body = await req(ctx, opts);
};
// 订单退款列表
exports.newOrderItemList = async ctx => {
const url = `${GROUPMEAL_URI}/order/background/order_item_list`;
const opts = {
url,
method: "GET"
};
ctx.body = await req(ctx, opts);
};
// 订单退款列表
exports.newOrderRefund = 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.newOrderRefundReject = async ctx => {
const url = `${GROUPMEAL_URI}/order/background/order_refund_reject`;
const opts = {
url,
method: "GET"
};
ctx.body = await req(ctx, opts);
};
...@@ -71,6 +71,50 @@ exports.getApplyDetail = async ctx => { ...@@ -71,6 +71,50 @@ exports.getApplyDetail = async ctx => {
ctx.body = await req(ctx, opts) ctx.body = await req(ctx, opts)
} }
// 提现审核迭代
// 获取钱包账户列表
exports.getAccountList = async ctx => {
const url = `${WITHDRAWAL_URI}/wallet/background/account_list`;
const opts = {
url,
method: "GET",
qs: ctx.request.query
}
ctx.body = await req(ctx, opts)
}
// 获取钱包账户流水列表
exports.getRecordList = async ctx => {
const url = `${WITHDRAWAL_URI}/wallet/background/record_list`;
const opts = {
url,
method: "GET",
qs: ctx.request.query
}
ctx.body = await req(ctx, opts)
}
// 钱包账户黑名单
exports.getAccountBlackList = async ctx => {
const url = `${WITHDRAWAL_URI}/wallet/background/blacklist`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
}
ctx.body = await req(ctx, opts)
}
// 钱包账户释放
exports.getReblackList = async ctx => {
const url = `${WITHDRAWAL_URI}/wallet/background/reblacklist`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body
}
ctx.body = await req(ctx, opts)
}
const getUserPermission = async (ctx) => { const getUserPermission = async (ctx) => {
const url = `${WITHDRAWAL_URI}/merchant/authority/get_role_list`; const url = `${WITHDRAWAL_URI}/merchant/authority/get_role_list`;
const { email, op_cur_user } = ctx.request.query; const { email, op_cur_user } = ctx.request.query;
......
...@@ -6,6 +6,7 @@ const enterprise = require("./controllers/enterprise"); ...@@ -6,6 +6,7 @@ const enterprise = require("./controllers/enterprise");
const role = require('./controllers/role') 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 activity = require('./controllers/activity');
const withdrawal = require('./controllers/withdrawal'); const withdrawal = require('./controllers/withdrawal');
const groupmeal = require('./controllers/groupmeal'); const groupmeal = require('./controllers/groupmeal');
...@@ -52,7 +53,7 @@ router.get(`${API_VERSION}/shop/background/shop_list`, goods.getShopsList); ...@@ -52,7 +53,7 @@ router.get(`${API_VERSION}/shop/background/shop_list`, goods.getShopsList);
router.post(`${API_VERSION}/shop/background/add_shop`, goods.addShop); router.post(`${API_VERSION}/shop/background/add_shop`, goods.addShop);
router.post(`${API_VERSION}/goods/background/edit_goods`, goods.editGoods) router.post(`${API_VERSION}/goods/background/edit_goods`, goods.editGoods)
router.get(`${API_VERSION}/get_goods_category_list`, goods.getCategoryList) router.get(`${API_VERSION}/get_goods_category_list`, goods.getCategoryList)
// 营销活动 // 营销活动
router.post(`${API_VERSION}/get_marketing_list`, goods.getMarketingList) router.post(`${API_VERSION}/get_marketing_list`, goods.getMarketingList)
router.post(`${API_VERSION}/get_addmarketing_list`, goods.getAddMarketingList) router.post(`${API_VERSION}/get_addmarketing_list`, goods.getAddMarketingList)
router.post(`${API_VERSION}/get_find_goods_list`, goods.getFindGoodsList) router.post(`${API_VERSION}/get_find_goods_list`, goods.getFindGoodsList)
...@@ -63,13 +64,33 @@ router.post(`${API_VERSION}/merchant/lifeinner/life_info`, life.get_life_info) ...@@ -63,13 +64,33 @@ 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.get(`${API_VERSION}/marketing/background/marketing_list`, activity.getActivityList)
router.get(`${API_VERSION}/order/background/pindan_marketing_info_data_statistics`, activity.checkActivityDetailInfo)
router.post(`${API_VERSION}/goods/background/edit_goods`, activity.editGoodsDetail)
router.post(`${API_VERSION}/marketing/background/update_marketing_online_status`, activity.updateActivity)
router.post(`${API_VERSION}/marketing/background/marketing_info`, activity.checkActivityDetail)
//
router.get(`${API_VERSION}/marketing/background/take_place_list`, activity.getPlaceList)
router.post(`${API_VERSION}/marketing/background/add_take_place`, activity.addPlace)
router.post(`${API_VERSION}/marketing/background/delete_take_place`, activity.deletePlace)
router.get(`${API_VERSION}/goods/background/ota_list`, activity.getBusinessList);
router.post(`${API_VERSION}/goods/background/add_goods`, activity.addGoods);
router.get(`${API_VERSION}/goods/background/pindan_goods`, activity.pindanGoods);
router.get(`${API_VERSION}/goods/background/marketing_goods_info`, activity.markGoodsInfo);
router.post(`${API_VERSION}/goods/background/edit_activity_goods`, activity.editGoods);
router.post(`${API_VERSION}/marketing/background/add_marketing`, activity.addMarketing);
router.post(`${API_VERSION}/marketing/background/marketing_info`, activity.marketingInfo);
router.post(`${API_VERSION}/marketing/background/update_marketing`, activity.updateMarketing);
// 团餐运营--配送 // 团餐运营--配送
router.post(`${API_VERSION}/order/deliverer/list_day_deliverer_conf`, groupmeal.getList) 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/list_day_deliverer`, groupmeal.getDelivererList)
router.post(`${API_VERSION}/order/deliverer/add_deliverer`, groupmeal.getAddDeliverer) router.post(`${API_VERSION}/order/deliverer/add_deliverer`, groupmeal.getAddDeliverer)
router.post(`${API_VERSION}/order/deliverer/save_day_deliverer`, groupmeal.getSaveDeliverer) router.post(`${API_VERSION}/order/deliverer/save_day_deliverer`, groupmeal.getSaveDeliverer)
// 订单管理 // 订单管理
router.get(`${API_VERSION}/order/oldbackground/order_list`, groupmeal.getOrderList); router.get(`${API_VERSION}/order/oldbackground/order_list`, groupmeal.getOrderList);
router.get(`${API_VERSION}/order/oldbackground/marketing_list`, groupmeal.getMarketingList); router.get(`${API_VERSION}/order/oldbackground/marketing_list`, groupmeal.getMarketingList);
router.get(`${API_VERSION}/order/oldbackground/goods_list`, groupmeal.getGoodsList); router.get(`${API_VERSION}/order/oldbackground/goods_list`, groupmeal.getGoodsList);
...@@ -80,11 +101,27 @@ router.get(`${API_VERSION}/order/oldbackground/order_item_list`, groupmeal.order ...@@ -80,11 +101,27 @@ router.get(`${API_VERSION}/order/oldbackground/order_item_list`, groupmeal.order
router.get(`${API_VERSION}/order/oldbackground/order_refund_reject`, groupmeal.orderRefundReject); router.get(`${API_VERSION}/order/oldbackground/order_refund_reject`, groupmeal.orderRefundReject);
router.post(`${API_VERSION}/order/oldbackground/order_refund`, groupmeal.orderRefund); router.post(`${API_VERSION}/order/oldbackground/order_refund`, groupmeal.orderRefund);
// 钱包提现审核 wallet/background/apply_detail // 新订单管理
router.get(`${API_VERSION}/order/background/order_list`, groupmeal.newGetOrderList);
router.get(`${API_VERSION}/order/background/order_condition_marketing_list`, groupmeal.newGetMarketingList);
router.get(`${API_VERSION}/order/background/order_condition_goods_list`, groupmeal.newGetGoodsList);
router.get(`${API_VERSION}/order/background/order_condition_take_place_list`, groupmeal.newGetSubShopList);
router.get(`${API_VERSION}/order/background/order_export`, groupmeal.newOrderExport);
router.get(`${API_VERSION}/order/background/order_print`, groupmeal.newOrderPrint);
router.get(`${API_VERSION}/order/background/order_item_list`, groupmeal.newOrderItemList);
router.get(`${API_VERSION}/order/background/order_refund_reject`, groupmeal.newOrderRefundReject);
router.post(`${API_VERSION}/order/background/order_refund`, groupmeal.newOrderRefund);
// 钱包提现审核
router.get(`${API_VERSION}/get_withdrawal_apply_list`, withdrawal.getApplyList) router.get(`${API_VERSION}/get_withdrawal_apply_list`, withdrawal.getApplyList)
router.post(`${API_VERSION}/get_withdrawal_black_list`, withdrawal.getBlackList) router.post(`${API_VERSION}/get_withdrawal_black_list`, withdrawal.getBlackList)
router.post(`${API_VERSION}/get_withdraw_audit`, withdrawal.getWithdrawAudit) router.post(`${API_VERSION}/get_withdraw_audit`, withdrawal.getWithdrawAudit)
router.post(`${API_VERSION}/get_freezing_fund`, withdrawal.getFreezingFund) router.post(`${API_VERSION}/get_freezing_fund`, withdrawal.getFreezingFund)
router.get(`${API_VERSION}/get_apply_detail`, withdrawal.getApplyDetail) router.get(`${API_VERSION}/get_apply_detail`, withdrawal.getApplyDetail)
// 钱包账户
router.get(`${API_VERSION}/get_account_list`, withdrawal.getAccountList)
router.get(`${API_VERSION}/get_record_list`, withdrawal.getRecordList)
router.post(`${API_VERSION}/get_account_black_list`, withdrawal.getAccountBlackList)
router.post(`${API_VERSION}/get_reblack_list`, withdrawal.getReblackList)
module.exports = router; module.exports = router;
\ No newline at end of file
<template> <template>
<div> <div class="app-wrapper">
<router-view v-slot="{ Component }"> <router-view v-slot="{ Component }">
<keep-alive v-if="$route.meta.keepAlive"> <keep-alive v-if="$route.meta.keepAlive">
<component :is="Component"> </component> <component :is="Component"> </component>
...@@ -28,8 +28,13 @@ export default { ...@@ -28,8 +28,13 @@ export default {
} else { } else {
redirectToLogin(); redirectToLogin();
} }
}, }
}; };
</script> </script>
<style lang="less" src="./global.less"></style> <style lang="less" src="./global.less"></style>
<style lang="less" scoped>
.app-wrapper {
height: 100%;
}
</style>
<template>
<el-dialog
title="提示"
v-model="dialogVisible"
width="30%"
:before-close="handleClose"
>
<span>这是一段信息</span>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="dialogVisible = false"
>确 定</el-button
>
</span>
</template>
</el-dialog>
</template>
<script>
export default {
components: {},
props: {},
data() {
return {
dialogVisible: true
};
},
watch: {},
computed: {},
methods: {},
created() {},
mounted() {}
};
</script>
<style lang="less" scoped></style>
...@@ -14,7 +14,6 @@ import { redirectToLogin } from "./utils/util"; ...@@ -14,7 +14,6 @@ import { redirectToLogin } from "./utils/util";
// 处理路由权限 // 处理路由权限
router.beforeResolve(async (to, from, next) => { router.beforeResolve(async (to, from, next) => {
if (!to.meta.requireAuth) { if (!to.meta.requireAuth) {
next(); next();
return true; return true;
...@@ -22,9 +21,9 @@ router.beforeResolve(async (to, from, next) => { ...@@ -22,9 +21,9 @@ router.beforeResolve(async (to, from, next) => {
if (!store.state.permissions) { if (!store.state.permissions) {
const { status, user } = await fetchCurrentUser(); const { status, user } = await fetchCurrentUser();
if (status === 'success') { if (status === "success") {
store.commit('updateUserInfo', user); store.commit("updateUserInfo", user);
await store.dispatch('updateUserPermission', { email: user.email }) await store.dispatch("updateUserPermission", { email: user.email });
} else { } else {
redirectToLogin(); redirectToLogin();
return false; return false;
...@@ -32,11 +31,11 @@ router.beforeResolve(async (to, from, next) => { ...@@ -32,11 +31,11 @@ router.beforeResolve(async (to, from, next) => {
} }
if (!checkPathAuth(to.path)) { if (!checkPathAuth(to.path)) {
router.push({name: 'Forbidden'}) router.push({ name: "Forbidden" });
} else { } else {
next() next();
} }
}) });
createApp(App) createApp(App)
.use(router) .use(router)
......
<template>
<div
class="wrapper"
v-loading="pageLoading"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
>
<!-- 商品详情信息 -->
<div class="activityInfo-wrapper">
<el-card class="activityInfo">
<div class="infoItem">
<p class="infoItemText">{{ detailInfo.sumOrder }}</p>
<p>订单数量</p>
</div>
<div class="infoItem">
<p class="infoItemText">{{ detailInfo.sumGoods }}</p>
<p>已售商品数量</p>
</div>
<div class="infoItem">
<p class="infoItemText">{{ detailInfo.payAmount }}</p>
<p>支付金额</p>
</div>
<div class="infoItem">
<p class="infoItemText">{{ detailInfo.sumCouponAmount }}</p>
<p>优惠金额</p>
</div>
<div class="infoItem">
<p class="infoItemText">{{ detailInfo.refundAmount }}</p>
<p>退款</p>
</div>
<div class="infoItem">
<p class="infoItemText">{{ detailInfo.income }}</p>
<p>实际收入</p>
</div>
</el-card>
</div>
<!-- 商品详情 -->
<div class="activityDetail">
<section class="content">
<!-- 商品列表 -->
<el-card class="activityGoods box-card">
<div class="my-header">
<h3>{{ marketingInfo.marketing_name }}</h3>
<p class="endTime">{{ showTimer }}</p>
</div>
<p class="title">拼单商品</p>
<div class="images-wrapper">
<div
class="image-block"
v-for="picItem in goodsList"
:key="picItem.audit_status"
>
<el-image
class="activityImage"
style="width: 100px; height: 100px"
:src="picItem.desc_pic_url_list[0]"
fit="cover"
></el-image>
<span class="goodsPrice">{{ `¥${picItem.price}` }}</span>
</div>
</div>
</el-card>
<!-- 商品描述 -->
<el-card class="activityIntroduce box-card">
<p class="introduceText">
{{ marketingInfo.pindan_desc }}
</p>
<el-image
v-for="(picItem, index) in marketingInfo.pindan_pic_url"
:key="index"
class="activityImage"
style="width: 100%; height: 400px"
:src="picItem"
fit="contain"
></el-image>
</el-card>
<el-card class="activities box-card">
<div
v-for="goodsItem in goodsList"
:key="goodsItem.goods_sku_id"
class="activityItem"
>
<el-image
class="activityImage"
style="width: 100px; height: 100px"
:src="goodsItem.desc_pic_url_list[0]"
fit="fit"
></el-image>
<div class="itemIntroduce">
<p>{{ goodsItem.goods_name }}</p>
<p class="price">
<span class="nowPrice">{{ `¥${goodsItem.price}` }}</span>
<span class="originPrice">{{
`¥${goodsItem.original_price} `
}}</span>
</p>
</div>
</div>
</el-card>
</section>
</div>
<div class="button-close">
<el-button
class="button-block"
size="medium"
type="primary"
@click="closePage"
> </el-button
>
</div>
</div>
</template>
<script>
import ActivityService from "@/service/Activity/index";
import { ElMessage } from "element-plus";
import dayJs from "dayjs";
export default {
props: {},
data() {
return {
pageLoading: false,
goodsList: [],
marketingInfo: {},
endTime: "",
showTimer: "",
detailInfo: {}
};
},
watch: {},
computed: {},
methods: {
async checkActivityDetail() {
try {
this.pageLoading = true;
let dataArr = await Promise.all([
ActivityService.checkActivityDetail({
marketing_id: this.$route.query.marketing_id,
marketing_type: this.$route.query.marketing_type
}),
ActivityService.checkActivityDetailInfo({
marketing_id: this.$route.query.marketing_id
})
]);
this.pageLoading = false;
this.goodsList = dataArr[0].result.goods_list;
this.marketingInfo = dataArr[0].result.marketing_info;
this.endTime = dataArr[0].result.marketing_info.end_time;
this.detailInfo = dataArr[1].result;
} catch {
this.pageLoading = false;
ElMessage.error("加载失败");
}
},
// 时间差转时分秒
getTimeout(timeCount) {
if (timeCount > 0) {
var days = parseInt(timeCount / (1000 * 60 * 60 * 24));
var hours = parseInt(
(timeCount % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)
);
var minutes = parseInt((timeCount % (1000 * 60 * 60)) / (1000 * 60));
var seconds = parseInt((timeCount % (1000 * 60)) / 1000);
this.showTimer =
"距结束:" +
days +
" 天 " +
hours +
" 小时 " +
minutes +
" 分钟 " +
seconds +
" 秒 ";
} else {
this.showTimer = "已结束";
}
},
// 定时器
myTimer() {
let dateNow = dayJs();
this.timer = setInterval(() => {
dateNow = dayJs().subtract(1, "minute");
let myTime = dayJs(this.endTime).diff(dateNow); // 时间差
this.getTimeout(myTime);
if (this.myTime <= 0) {
clearInterval(this.timer);
}
}, 1000);
},
closePage() {
this.$router.go(-1);
}
},
async created() {
await this.checkActivityDetail();
this.myTimer();
},
beforeUnmount() {
clearInterval(this.timer);
}
};
</script>
<style lang="less" scoped>
.wrapper {
height: 100%;
display: flex;
overflow-y: scroll;
flex-direction: column;
justify-content: flex-start;
align-items: center;
padding: 45px 10px 0;
.activityInfo {
width: 500px;
/deep/ .el-card__body {
width: 100%;
display: flex;
flex-wrap: wrap;
}
.infoItem {
width: 33%;
text-align: center;
margin-bottom: 20px;
.infoItemText {
font-weight: bolder;
}
}
}
.activityDetail {
width: 500px;
.content {
.my-header {
.endTime {
margin: 5px 0;
font-size: 15px;
color: red;
}
}
.box-card {
margin: 10px 0;
}
.activityGoods {
.images-wrapper {
display: flex;
flex-wrap: wrap;
.image-block {
margin: 0 5px 0 0px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
.goodsPrice {
color: red;
font-size: 18px;
}
}
.image-block:nth-child(4n + 0) {
margin-right: 0;
}
}
.activityImage {
margin: 10px 10px 0 0;
}
}
.activityIntroduce {
padding: 5px 0;
.introduceText {
margin-bottom: 20px;
}
}
.activities {
.activityItem {
display: flex;
margin: 15px 0;
.itemIntroduce {
display: flex;
flex-direction: column;
justify-content: space-around;
margin-left: 10px;
> p {
width: 200px;
}
.price {
.nowPrice {
color: red;
padding-right: 10px;
}
.originPrice {
text-decoration: line-through;
}
}
}
}
}
}
}
.button-close {
margin: 10px 0 30px;
.button-block {
width: 200px;
}
}
}
</style>
.header {
width: 100%;
height: 100%;
padding: 0 30px;
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
<template>
<div class="infoEditing">
<el-form ref="infoEditForm" :model="infoEditForm" label-width="80px">
<el-form-item label="标题:">
<el-input v-model="infoEditForm.title" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="介绍:">
<el-input
type="textarea"
v-model="infoEditForm.desc"
maxlength="1000"
rows="4"
></el-input>
</el-form-item>
<el-form-item label="图片:">
<el-upload
:class="{ hide: hideUpload }"
:data="{ type: 1 }"
:action="uploadUrl"
:on-preview="previewImage"
:on-success="handleDetailSuccess"
:on-change="handleDetailChange"
:before-remove="removeDetailFiles"
:file-list="infoEditForm.picUrlList"
auto-upload
ref="picUpload"
:limit="limitCount"
list-type="picture-card"
multiple
>
<template #default>
<i class="el-icon-plus"></i>
</template>
</el-upload>
</el-form-item>
</el-form>
<!-- 展示缩略图 -->
<el-dialog width="40%" v-model="isShowPopver">
<el-image :src="popoverImage" fit="fill" style="width: 100%"></el-image>
</el-dialog>
</div>
</template>
<script>
import { GOODS_URI } from "../../../../../server/config";
export default {
props: {
infoEditArr: {
type: Object,
default: () => {
return {
pindan_pic_url: []
};
},
require: true
}
},
data() {
return {
infoEditForm: {
title: "", // 标题
desc: "", // 介绍
picUploadList: [], // 上传详情图片列表
picUrlList: [] // 图片回显列表
},
picSubmitList: [], // 发布功能需要的图片列表
propData: {},
isShowPopver: false, // 是否展示图片框
uploadUrl: `${GOODS_URI}/ksy/ks3apiunencrypt/ks3api_upload`, // 金山云上传地址
hideUpload: false,
limitCount: 9
};
},
watch: {
infoEditArr: {
// 监听props属性 展示自提点列表
handler: function(newVal) {
if (this.$route.query.marketing_id) {
this.propData = newVal;
this.infoEditForm.title = this.propData.marketing_name;
this.infoEditForm.desc = this.propData.pindan_desc;
for (var i in this.propData.pindan_pic_url) {
this.infoEditForm.picUrlList.push({
url: this.propData.pindan_pic_url[i]
});
this.picSubmitList.push({
url: this.propData.pindan_pic_url[i]
});
}
this.hideUpload = this.picSubmitList.length >= this.limitCount; // 大于9 隐藏
}
},
deep: true,
immediate: true
}
},
methods: {
// 展示商品大图
previewImage(file) {
this.popoverImage = file.url;
this.isShowPopver = true;
},
handleDetailChange() {
this.hideUpload = this.picSubmitList.length >= this.limitCount;
},
// 图片上传成功时
handleDetailSuccess(res) {
this.infoEditForm.picUploadList.push(res.result.image_id); // 上传成功图片的id
this.picSubmitList.push({
// 发布功能需要的图片列表
url: res.result.url
});
this.hideUpload = this.picSubmitList.length >= this.limitCount;
},
// 图片删除后
removeDetailFiles(file, fileList) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].uid == file.uid) {
this.picSubmitList.splice(i, 1);
}
}
this.hideUpload = this.picSubmitList.length >= this.limitCount;
},
// 获取营销活动详情
marketingInfoMet() {
let marketingId = this.$route.query.marketing_id;
if (marketingId == undefined) {
return;
}
this.propData = JSON.parse(localStorage.getItem("propData"));
this.infoEditForm.title = this.propData.marketing_name;
this.infoEditForm.desc = this.propData.pindan_desc;
for (var i in this.propData.pindan_pic_url) {
this.infoEditForm.picUrlList.push({
url: this.propData.pindan_pic_url[i]
});
}
}
},
created() {
// this.marketingInfoMet();
}
};
</script>
<style scoped>
.infoEditing {
width: 64%;
margin: 0 auto;
}
.hide /deep/ .el-upload--picture-card {
display: none;
}
</style>
<template>
<div id="map" class="mapContainer">
<div class="mapWrapper">
<div class="search">
<el-form ref="form" label-width="80px">
<el-form-item label-position="left">
<el-button @click="handleSearch">搜索</el-button>
<el-input
class="dialog-input"
v-model="searchKey"
placeholder="请输入关键字"
autocomplete="on"
>
<template #suffix>
<i
@click="searchKey = ''"
class="el-input__icon el-icon-close"
></i>
</template>
</el-input>
</el-form-item>
</el-form>
<div id="js-result" v-show="searchKey" class="result"></div>
</div>
<div id="js-container" class="myMap">
正在加载数据 ...
</div>
</div>
<div class="mapInfo">
<h3 class="title">拖拽选址</h3>
<ul class="info">
<li><span>经度:</span>{{ dragData.lng }}</li>
<li><span>纬度:</span>{{ dragData.lat }}</li>
<li><span>地址:</span>{{ dragData.address }}</li>
</ul>
</div>
<div class="confirmButton">
<el-button @click="cancel">取 消</el-button>
<el-button type="primary" @click="confirm">确 定</el-button>
</div>
</div>
</template>
<script>
import remoteLoad from "@/utils/remoteLoad.js";
export default {
name: "app",
data() {
return {
dialogVisible: true,
MapCityName: "北京",
searchKey: "",
dragData: {
lng: null,
lat: null,
address: null,
nearestJunction: null,
nearestRoad: null,
nearestPOI: null
}
};
},
methods: {
// 取消
cancel() {
this.$emit("hideMapDialog", false);
},
// 确认
confirm() {
this.$emit("getMapInfo", this.dragData);
this.$emit("hideMapDialog", false);
},
// 搜索
handleSearch() {
if (this.searchKey) {
this.placeSearch.search(this.searchKey);
}
},
dragMap(data) {
this.dragData = {
lng: data.position.lng,
lat: data.position.lat,
address: data.address,
province: data.regeocode.addressComponent.province,
city: data.regeocode.addressComponent.city,
area: data.regeocode.addressComponent.district
};
},
// 初始化地图
initMap() {
// 加载PositionPicker,loadUI的路径参数为模块名中 'ui/' 之后的部分
let AMapUI = (this.AMapUI = window.AMapUI);
let AMap = (this.AMap = window.AMap);
AMapUI.loadUI(["misc/PositionPicker"], PositionPicker => {
let mapConfig = {
zoom: 16
// cityName: this.MapCityName
};
if (this.lat && this.lng) {
mapConfig.center = [this.lng, this.lat];
}
let map = new AMap.Map("js-container", mapConfig);
// 加载地图搜索插件
AMap.service("AMap.PlaceSearch", () => {
this.placeSearch = new AMap.PlaceSearch({
pageSize: 5,
pageIndex: 1,
citylimit: true,
// city: this.MapCityName,
map: map,
panel: "js-result"
});
});
// 启用工具条
AMap.plugin(["AMap.ToolBar"], function() {
map.addControl(
new AMap.ToolBar({
position: "RB"
})
);
});
// 地图地图定位
AMap.plugin("AMap.Geolocation", function() {
var geolocation = new AMap.Geolocation({
// 是否使用高精度定位,默认:true
enableHighAccuracy: true,
// 设置定位超时时间,默认:无穷大
timeout: 10000,
// 定位按钮的停靠位置的偏移量,默认:Pixel(10, 20)
buttonOffset: new AMap.Pixel(10, 20),
// 定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
zoomToAccuracy: true,
// 定位按钮的排放位置, RB表示右下
buttonPosition: "RB"
});
map.addControl(geolocation);
geolocation.getCurrentPosition();
AMap.event.addListener(geolocation, "complete", onComplete);
AMap.event.addListener(geolocation, "error", onError);
function onComplete(data) {
console.log(data);
// data是具体的定位信息
}
function onError(data) {
console.log(data);
// 定位出错
}
});
// 创建地图拖拽
let positionPicker = new PositionPicker({
mode: "dragMap", // 设定为拖拽地图模式,可选'dragMap'、'dragMarker',默认为'dragMap'
map: map, // 依赖地图对象
iconStyle: {
//自定义外观
url: "//webapi.amap.com/ui/1.0/assets/position-picker2.png", //图片地址
size: [50, 50], //要显示的点大小,将缩放图片
ancher: [24, 40] //锚点的位置,即被size缩放之后,图片的什么位置作为选中的位置
}
});
// 拖拽完成发送自定义 drag 事件
positionPicker.on("success", positionResult => {
this.dragMap(positionResult);
});
// 启动拖放
positionPicker.start();
});
}
},
async created() {
// 已载入高德地图API,则直接初始化地图
if (window.AMap && window.AMapUI) {
this.initMap();
// 未载入高德地图API,则先载入API再初始化
} else {
await remoteLoad(
`http://webapi.amap.com/maps?v=1.3&key=bb057625545d8cf77df1379e7aaae0b5`
);
await remoteLoad("http://webapi.amap.com/ui/1.0/main.js");
this.initMap();
}
}
};
</script>
<style lang="less" scoped>
.mapDialog {
margin-top: 11vh !important;
display: flex !important;
flex-direction: column !important;
background: red !important;
/deep/ .el-dialog__body {
height: 90%;
}
}
.mapContainer {
height: 100%;
width: 100%;
display: flex;
flex-direction: row;
.mapWrapper {
position: relative;
width: 80%;
height: 100%;
.search {
position: absolute;
top: 10px;
left: 20px;
z-index: 100000;
.dialog-input {
width: 250px;
}
}
.myMap {
height: 100%;
height: 100%;
}
}
.mapInfo {
width: 20%;
padding-left: 20px;
display: flex;
flex-direction: column;
justify-content: start;
align-items: flex-start;
.info {
text-align: left;
}
}
.confirmButton {
position: absolute;
bottom: 100px;
right: 100px;
}
}
.m-map .search {
position: absolute;
top: 10px;
left: 10px;
width: 285px;
z-index: 1;
}
.m-map .search input {
width: 180px;
border: 1px solid #ccc;
line-height: 20px;
padding: 5px;
outline: none;
}
</style>
This diff is collapsed.
<template>
<div class="releaseProduc">
<h4 class="headTitle">发布活动</h4>
<el-steps
class="steps"
:active="active"
finish-status="success"
space="30%"
:align-center="true"
>
<el-step title="信息编辑"></el-step>
<el-step title="添加商品"></el-step>
<el-step title="拼单设置"></el-step>
</el-steps>
<div class="content">
<infoEditing
ref="infoEdit"
v-show="active === 1"
:infoEditArr="infoEditArr"
/>
<addProduc
ref="addProduc"
v-show="active === 2"
:addProduc="addProducArr"
:editInfo="infoEditArr"
:stepTwoTitle="stepTwoTitle"
/>
<spellOrderSet
ref="spellOrderSet"
v-show="active === 3"
:spellOrderSetArr="spellOrderSetArr"
:startTime="startTime"
:endTime="endTime"
@getTakeTakePlaceListFromChild="getTakeTakePlaceListFromChild"
/>
</div>
<div class="stepsBtn">
<el-button @click="prev" v-show="active >= 2" style="margin-right: 20px"
>上一步</el-button
>
<el-button @click="next" v-show="active < 3" style="margin-right: 20px"
>下一步</el-button
>
<el-button @click="cancel" v-show="active == 1">取消</el-button>
<el-button @click="confirmRelease" v-show="active == 3" type="primary"
>确认发布</el-button
>
</div>
</div>
</template>
<script>
import dayJs from "dayjs";
import { ElMessage } from "element-plus";
import infoEditing from "./components/infoEditing.vue";
import addProduc from "./components/addProduc.vue";
import spellOrderSet from "./components/spellOrderSet.vue";
import {
addMarketing,
marketingInfo,
updateMarketing
} from "../../../service/Activity/index";
export default {
components: {
infoEditing,
addProduc,
spellOrderSet
},
data() {
return {
active: 1, // 步骤条状态
infoEditArr: [], // 信息编辑数据
addProducArr: [], // 添加商品
goodsSkuIDArr: [], // 接收goods_sku_id
spellOrderSetArr: [],
startDate: "", // 开始时间
endDate: "", // 结束时间
takePlaceIDArr: [],
startTime: "",
endTime: "",
stepTwoTitle: "" // 传给addProduct的title
};
},
methods: {
// 上一步
prev() {
this.active--;
},
// 下一步
next() {
if (this.active === 1) {
if (this.$refs.infoEdit.infoEditForm.title == "") {
ElMessage.error("请填写商品标题");
return;
}
this.stepTwoTitle = this.$refs.infoEdit.infoEditForm.title;
this.active = 2;
} else if (this.active === 2) {
if (this.$refs.addProduc.comTableData.length == 0) {
ElMessage.error("请至少选择一个商品");
return;
}
this.addProducArr = this.$refs.addProduc.comTableData;
this.active = 3;
}
},
// 获取营销活动详情
async marketingInfoMet() {
let marketingId = this.$route.query.marketing_id;
if (marketingId == undefined) {
return;
}
let params = {
marketing_id: marketingId,
marketing_type: "4"
};
const res = await marketingInfo(params);
this.infoEditArr = res.result.marketing_info;
this.addProducArr = res.result.goods_list;
this.spellOrderSetArr = res.result.take_place;
this.startTime = res.result.marketing_info.start_time;
this.endTime = res.result.marketing_info.end_time;
localStorage.setItem("propData", JSON.stringify(this.infoEditArr));
},
// 取消
cancel() {
this.$router.go(-1);
},
// 确认发布
async confirmRelease() {
function getUrlParms(path, name) {
var reg = new RegExp("(^|\\?|&)" + name + "=([^&]*)(\\s|&|$)", "i");
if (reg.test(path)) return unescape(RegExp.$2.replace(/\+/g, " "));
return "";
}
let list = this.$refs.infoEdit.picSubmitList.map(item => {
let rs = getUrlParms(item.url, "url");
return rs;
});
let picList = list.join(",");
for (var i in this.addProducArr) {
this.goodsSkuIDArr.push(this.addProducArr[i].goods_sku_id);
}
this.startDate = this.$refs.spellOrderSet.startDate;
this.endDate = this.$refs.spellOrderSet.endDate;
let params = {
marketing_id:
this.$route.query.marketing_id == undefined
? ""
: this.$route.query.marketing_id,
goods_sku_id: this.goodsSkuIDArr.join(","),
marketing_name: this.$refs.infoEdit.infoEditForm.title,
marketing_type: "4",
op_cur_user: this.$store.state.userInfo.email,
start_time: dayJs(this.startDate).format("YYYY-MM-DD HH:mm:ss"),
end_time: dayJs(this.endDate).format("YYYY-MM-DD HH:mm:ss"),
pindan_pic: picList,
pindan_desc: this.$refs.infoEdit.infoEditForm.desc,
take_place_ids: this.takePlaceIDArr
};
if (this.$route.query.marketing_id == undefined) {
const res = await addMarketing(params);
if (res.code === 0) {
ElMessage.success({
message: "添加成功",
type: "success"
});
this.$router.push({ path: "/op/activity/manage" });
} else {
ElMessage.error(res.reason);
}
} else {
const res = await updateMarketing(params);
if (res.code === 0) {
ElMessage.success({
message: "修改成功",
type: "success"
});
this.$router.push({ path: "/op/activity/manage" });
} else {
ElMessage.error(res.reason);
}
}
},
getTakeTakePlaceListFromChild(val) {
this.takePlaceIDArr = val;
}
},
created() {
this.marketingInfoMet();
}
};
</script>
<style scope>
.releaseProduc {
padding: 30px;
box-sizing: border-box;
}
.headTitle {
width: 75%;
font-size: 18px;
margin: 0 auto 40px auto;
}
.steps {
display: flex;
justify-content: center;
margin-bottom: 50px;
}
.steps /deep/ .el-step__icon {
width: 50px;
height: 50px;
}
.steps /deep/ .el-step.is-horizontal .el-step__line {
top: 25px;
}
.stepsBtn {
margin: 20px auto;
}
.stepsBtn {
width: 64%;
text-align: center;
margin-top: 50px;
}
</style>
.detail { .detail {
height: 100%; // height: 100%;
.state { .state {
display: flex; display: flex;
align-items: center; align-items: center;
......
...@@ -450,7 +450,7 @@ ...@@ -450,7 +450,7 @@
">购买后不允许退款</span> ">购买后不允许退款</span>
<span v-else-if=" <span v-else-if="
$route.params.operation !== 'EDIT' && goodsObj.rule_refund === 3 $route.params.operation !== 'EDIT' && goodsObj.rule_refund === 3
">到期后不退款</span> ">到期后不允许退款</span>
</el-form-item> </el-form-item>
<el-form-item label="使用日期:"> <el-form-item label="使用日期:">
<el-radio-group <el-radio-group
...@@ -737,9 +737,9 @@ export default { ...@@ -737,9 +737,9 @@ export default {
rulesForm: { rulesForm: {
// 退款选项 // 退款选项
rulesOptions: [ rulesOptions: [
{ value: 1, label: "到期自动退款" }, { value: 1, label: "到期自动退款" },
{ value: 2, label: "购买后不允许退款" }, { value: 2, label: "购买后不允许退款" },
{ value: 3, label: "到期后不退款" } { value: 3, label: "到期后不允许退款" }
], ],
useStartTime: "", // 使用开始时间 useStartTime: "", // 使用开始时间
useEndTime: "", // 使用结束时间 useEndTime: "", // 使用结束时间
......
...@@ -2,10 +2,7 @@ ...@@ -2,10 +2,7 @@
<layout> <layout>
<el-card class="goods"> <el-card class="goods">
<!-- 筛选区 --> <!-- 筛选区 -->
<el-form <el-form inline class="search_condition">
inline
class="search_condition"
>
<!-- 商品id --> <!-- 商品id -->
<el-form-item label="商品id"> <el-form-item label="商品id">
<el-input v-model="searchProps.goods_spu_id"></el-input> <el-input v-model="searchProps.goods_spu_id"></el-input>
...@@ -66,21 +63,13 @@ ...@@ -66,21 +63,13 @@
</el-form-item> </el-form-item>
<!-- 按钮操作 --> <!-- 按钮操作 -->
<el-form-item style="justify-self: flex-end;"> <el-form-item style="justify-self: flex-end;">
<el-button <el-button @click="searchList" type="primary">搜索</el-button>
@click="searchList"
type="primary"
>搜索</el-button>
<el-button @click="resetList">重置</el-button> <el-button @click="resetList">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<!-- 列表区 --> <!-- 列表区 -->
<el-table <el-table class="goods_list" :data="goodsList" border stripe>
class="goods_list"
:data="goodsList"
border
stripe
>
<el-table-column <el-table-column
label="商品id" label="商品id"
prop="goods_spu_id" prop="goods_spu_id"
...@@ -116,36 +105,33 @@ ...@@ -116,36 +105,33 @@
prop="publish_user_id" prop="publish_user_id"
align="center" align="center"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column label="状态" align="center">
label="状态"
align="center"
>
<template #default="scope"> <template #default="scope">
<span <span v-if="scope.row.audit_status == 0" style="color:#FF982C;"
v-if="scope.row.audit_status == 0" >待审核</span
style="color:#FF982C;" >
>待审核</span> <span v-if="scope.row.audit_status == 1" style="color:#5CC247;"
<span >审核通过</span
v-if="scope.row.audit_status == 1" >
style="color:#5CC247;" <span v-if="scope.row.audit_status == 2" style="color:#FD6B6F;"
>审核通过</span> >审核驳回</span
<span >
v-if="scope.row.audit_status == 2"
style="color:#FD6B6F;"
>审核驳回</span>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
<span <span
v-if="scope.row.online_status == 0 && scope.row.audit_status != 2" v-if="scope.row.online_status == 0 && scope.row.audit_status != 2"
style="color:#FF982C;" style="color:#FF982C;"
>未上架</span> >未上架</span
>
<span <span
v-if="scope.row.online_status == 1 && scope.row.audit_status != 2" v-if="scope.row.online_status == 1 && scope.row.audit_status != 2"
style="color:#5CC247;" style="color:#5CC247;"
>已上架</span> >已上架</span
>
<span <span
v-if="scope.row.online_status == 2 && scope.row.audit_status != 2" v-if="scope.row.online_status == 2 && scope.row.audit_status != 2"
style="color:#FD6B6F;" style="color:#FD6B6F;"
>已下架</span> >已下架</span
>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
...@@ -159,26 +145,23 @@ ...@@ -159,26 +145,23 @@
align="center" align="center"
></el-table-column> ></el-table-column>
<!-- 操作快捷键 --> <!-- 操作快捷键 -->
<el-table-column <el-table-column label="操作" align="center" fixed="right" width="200">
label="操作"
align="center"
fixed="right"
width="200"
>
<template #default="scope"> <template #default="scope">
<el-button <el-button
type="text" type="text"
@click="goDetail(`EDIT`, scope.row.goods_spu_id)" @click="goDetail(`EDIT`, scope.row.goods_spu_id)"
>编辑</el-button> >编辑</el-button
>
<el-button <el-button
v-if="scope.row.audit_status == 0" v-if="scope.row.audit_status == 0"
type="text" type="text"
@click="goDetail(`AUDIT`, scope.row.goods_spu_id)" @click="goDetail(`AUDIT`, scope.row.goods_spu_id)"
>审核</el-button> >审核</el-button
>
<el-popconfirm <el-popconfirm
v-if="scope.row.online_status == 2 " v-if="scope.row.online_status == 2"
title="您确定要上架该商品吗?" title="您确定要上架该商品吗?"
cancelButtonType="default" cancelButtonType="default"
@confirm="changeGoodsState('GROUNDING', scope.row.goods_spu_id)" @confirm="changeGoodsState('GROUNDING', scope.row.goods_spu_id)"
...@@ -189,7 +172,10 @@ ...@@ -189,7 +172,10 @@
</el-popconfirm> </el-popconfirm>
<el-popconfirm <el-popconfirm
v-if=" scope.row.online_status != 2 && (scope.row.audit_status == 1 || scope.row.online_status == 1) " v-if="
scope.row.online_status != 2 &&
(scope.row.audit_status == 1 || scope.row.online_status == 1)
"
title="您确定要下架该商品吗?" title="您确定要下架该商品吗?"
cancelButtonType="default" cancelButtonType="default"
@confirm=" @confirm="
...@@ -202,9 +188,10 @@ ...@@ -202,9 +188,10 @@
</el-popconfirm> </el-popconfirm>
<el-button <el-button
@click="goDetail(`DETAIL`,scope.row.goods_spu_id)" @click="goDetail(`DETAIL`, scope.row.goods_spu_id)"
type="text" type="text"
>详情</el-button> >详情</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -240,14 +227,14 @@ export default { ...@@ -240,14 +227,14 @@ export default {
Layout Layout
}, },
created () { created() {
// 获取级联选择 // 获取级联选择
this.getOptionList(); this.getOptionList();
// 获取商品列表 // 获取商品列表
this.getCommodityList(); this.getCommodityList();
}, },
data () { data() {
return { return {
// 级联选择器参数 // 级联选择器参数
cascaderProps: { cascaderProps: {
...@@ -300,7 +287,7 @@ export default { ...@@ -300,7 +287,7 @@ export default {
methods: { methods: {
// 获取级联选择 // 获取级联选择
async getOptionList () { async getOptionList() {
try { try {
const res = await getGoodsList(); const res = await getGoodsList();
if (res.code !== 0) return this.$message.error(res.reason); if (res.code !== 0) return this.$message.error(res.reason);
...@@ -310,20 +297,20 @@ export default { ...@@ -310,20 +297,20 @@ export default {
} }
}, },
// 获取数组返回值并转换为字符串 // 获取数组返回值并转换为字符串
getVal (value, index = 0) { getVal(value, index = 0) {
const valueArray = value.map(item => { const valueArray = value.map(item => {
return item[index]; return item[index];
}); });
return valueArray.join(); return valueArray.join();
}, },
getValue (value) { getValue(value) {
const values = value.map(item => { const values = value.map(item => {
return item; return item;
}); });
return values.join(); return values.join();
}, },
// 获取列表 // 获取列表
async getCommodityList () { async getCommodityList() {
try { try {
const res = await getList(this.searchProps); const res = await getList(this.searchProps);
if (res.code !== 0) return this.$message.error(res.reason); if (res.code !== 0) return this.$message.error(res.reason);
...@@ -335,25 +322,25 @@ export default { ...@@ -335,25 +322,25 @@ export default {
} }
}, },
// 所属分类赋值 // 所属分类赋值
handleTypeChange (val) { handleTypeChange(val) {
this.searchProps.category_1_id = this.getVal(val, 0); this.searchProps.category_1_id = this.getVal(val, 0);
this.searchProps.category_2_id = this.getVal(val, 1); this.searchProps.category_2_id = this.getVal(val, 1);
}, },
// 审核状态赋值 // 审核状态赋值
handleStatusChange (val) { handleStatusChange(val) {
this.searchProps.audit_status = this.getValue(val); this.searchProps.audit_status = this.getValue(val);
}, },
// 上架状态赋值 // 上架状态赋值
handleOnlineStatusChange (val) { handleOnlineStatusChange(val) {
this.searchProps.online_status = this.getValue(val); this.searchProps.online_status = this.getValue(val);
}, },
// 按条件搜索 // 按条件搜索
searchList () { searchList() {
console.log(this.searchProps); console.log(this.searchProps);
this.getCommodityList(); this.getCommodityList();
}, },
// 重置表单 // 重置表单
resetList () { resetList() {
this.searchProps = { this.searchProps = {
page: 1, // 页码 page: 1, // 页码
page_size: 20, // 页数大小 page_size: 20, // 页数大小
...@@ -372,7 +359,7 @@ export default { ...@@ -372,7 +359,7 @@ export default {
this.getCommodityList(); this.getCommodityList();
}, },
// 上架/下架操作 // 上架/下架操作
async changeGoodsState (state, spuId) { async changeGoodsState(state, spuId) {
// 上架操作 // 上架操作
if (state === "GROUNDING") { if (state === "GROUNDING") {
const res = await putOnline(spuId); const res = await putOnline(spuId);
...@@ -389,14 +376,14 @@ export default { ...@@ -389,14 +376,14 @@ export default {
}, },
// 页码变化 // 页码变化
handleCurrentChange (e) { handleCurrentChange(e) {
this.searchProps.page = e; this.searchProps.page = e;
// 获取信息 // 获取信息
this.getCommodityList(); this.getCommodityList();
}, },
// 去往详情页 // 去往详情页
goDetail (operation, spuId) { goDetail(operation, spuId) {
console.log(spuId); console.log(spuId);
this.$router.push({ name: "GoodsDetail", params: { operation, spuId } }); this.$router.push({ name: "GoodsDetail", params: { operation, spuId } });
} }
......
...@@ -7,14 +7,13 @@ ...@@ -7,14 +7,13 @@
<div class="main"> <div class="main">
<slot></slot> <slot></slot>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import PageHeader from '../components/PageHeader'; import PageHeader from "../components/PageHeader";
export default { export default {
components: { PageHeader }, components: { PageHeader }
}; };
</script> </script>
......
...@@ -208,7 +208,7 @@ import { ...@@ -208,7 +208,7 @@ import {
getList, getList,
getSaveDeliverer, getSaveDeliverer,
getAddDeliverer, getAddDeliverer,
getMarketingList, newGetMarketingList,
} from "../../../service/Groupmeal/groupmeal"; } from "../../../service/Groupmeal/groupmeal";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
export default { export default {
...@@ -254,7 +254,7 @@ export default { ...@@ -254,7 +254,7 @@ export default {
created() { created() {
this.getList(); this.getList();
this.getDelivererList(); this.getDelivererList();
this.getMarketingList(); this.newGetMarketingList();
}, },
methods: { methods: {
selectGoodsChange(val) { selectGoodsChange(val) {
...@@ -366,8 +366,10 @@ export default { ...@@ -366,8 +366,10 @@ export default {
var ENV; var ENV;
if (process.env.NODE_ENV == "development") { if (process.env.NODE_ENV == "development") {
ENV = "http://bp-dev.ini.yidian-inc.com/"; ENV = "http://bp-dev.ini.yidian-inc.com/";
} else { } else if (process.env.NODE_ENV == "test") {
ENV = "http://bp-test.ini.yidian-inc.com/"; ENV = "http://bp-test.ini.yidian-inc.com/";
} else {
ENV = "http://bp.ini.yidian-inc.com/";
} }
url && window.open(ENV + url); url && window.open(ENV + url);
}, },
...@@ -376,7 +378,6 @@ export default { ...@@ -376,7 +378,6 @@ export default {
const { selectActivity, multipleSelection } = this; const { selectActivity, multipleSelection } = this;
const uids = multipleSelection.map((item) => item.deliverer_id); const uids = multipleSelection.map((item) => item.deliverer_id);
if (!selectActivity) return ElMessage("请选择活动姓名"); if (!selectActivity) return ElMessage("请选择活动姓名");
// if (!uids.length) return this.$message.info("请至少选择一名骑手");
try { try {
const { code, reason } = await getSaveDeliverer({ const { code, reason } = await getSaveDeliverer({
code: selectActivity, code: selectActivity,
...@@ -402,9 +403,9 @@ export default { ...@@ -402,9 +403,9 @@ export default {
this.resetDate(); this.resetDate();
}, },
// 活动名称列表 // 活动名称列表
async getMarketingList() { async newGetMarketingList() {
try { try {
const res = await getMarketingList(); const res = await newGetMarketingList();
this.marketingList = res.result.map((item) => { this.marketingList = res.result.map((item) => {
return { return {
value: item.marketing_id, value: item.marketing_id,
......
const headerConfig = [ const headerConfig = [
{
name: "活动管理",
path: "/op/activity/manage"
},
{ {
name: "订单管理", name: "订单管理",
path: "/op/groupmeal/orderManagement" path: "/op/groupmeal/orderManagement"
}, },
{ {
path: '/op/groupmeal/distrib', name: "新订单管理",
name: '配送员管理' path: "/op/groupmeal/newOrderManagement"
}, },
{
path: "/op/groupmeal/distrib",
name: "配送员管理"
}
]; ];
export default headerConfig; export default headerConfig;
\ No newline at end of file
...@@ -7,14 +7,13 @@ ...@@ -7,14 +7,13 @@
<div class="main"> <div class="main">
<slot></slot> <slot></slot>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import PageHeader from '../components/PageHeader'; import PageHeader from "../components/PageHeader";
export default { export default {
components: { PageHeader }, components: { PageHeader }
}; };
</script> </script>
......
This diff is collapsed.
...@@ -15,9 +15,3 @@ ...@@ -15,9 +15,3 @@
display: block; display: block;
text-align: center; text-align: center;
} }
.refundCon /deep/ .el-row {
margin-bottom: 15px;
display: flex;
align-items: center;
}
\ No newline at end of file
...@@ -513,20 +513,20 @@ export default { ...@@ -513,20 +513,20 @@ export default {
marketing_id: val, marketing_id: val,
}; };
const res = await getGoodsList(params); // 商品名称 const res = await getGoodsList(params); // 商品名称
this.getSubShopListMet(val) //自提点 this.getSubShopListMet(val); //自提点
// const res = await getSubShopList(params); // const res = await getSubShopList(params);
this.tradeNameArr = res.result; this.tradeNameArr = res.result;
// this.selLiftPoinArr = res.result; // this.selLiftPoinArr = res.result;
}, },
// 获取自提点 // 获取自提点
async getSubShopListMet(params) { async getSubShopListMet(params) {
try { try {
let marketing_id = '' let marketing_id = "";
if(params){ if (params) {
marketing_id = params marketing_id = params;
} }
const res = await getSubShopList({'marketing_id':marketing_id}); const res = await getSubShopList({ marketing_id: marketing_id });
this.selLiftPoinArr = res.result; this.selLiftPoinArr = res.result;
} catch (error) { } catch (error) {
this.$message.error("发生未知错误,请稍后再试一下吧~~~"); this.$message.error("发生未知错误,请稍后再试一下吧~~~");
...@@ -758,19 +758,23 @@ export default { ...@@ -758,19 +758,23 @@ export default {
}, },
created() { created() {
this.getMarketingListMet(); // 活动名称 this.getMarketingListMet(); // 活动名称
this.getSubShopListMet(); // 自提点 this.getSubShopListMet(); // 自提点
this.getOrderListMet(); // table列表 this.getOrderListMet(); // table列表
}, },
}; };
</script> </script>
<style lang="less" src="./index.less" scope></style> <style lang="less" src="./index.less" scope></style>
<style lang="less" scoped> <style lang="less" scoped>
.check-wrap{ .check-wrap {
/deep/ .el-checkbox__label { /deep/ .el-checkbox__label {
white-space: normal; white-space: normal;
word-break: break-all; word-break: break-all;
}
} }
.refundCon /deep/ .el-row{
margin-bottom: 15px;
display: flex;
align-items: center;
} }
</style> </style>
...@@ -4,6 +4,11 @@ ...@@ -4,6 +4,11 @@
<!-- <el-card class="goods-h5"> --> <!-- <el-card class="goods-h5"> -->
<div class="goods-h5"> <div class="goods-h5">
<el-table :data="goodsList" border max-height="700"> <el-table :data="goodsList" border max-height="700">
<el-table-column
label="登录地点"
prop="withdraw_address"
align="center"
></el-table-column>
<el-table-column <el-table-column
label="申请用户" label="申请用户"
prop="user_id" prop="user_id"
......
.tab-show { .tab-show {
width: 100%; width: 100%;
height: 100%; // height: 100%;
padding: 0px 55px; padding: 0px 55px;
background-color: white; background-color: white;
.el-tabs__nav-wrap::after { .el-tabs__nav-wrap::after {
...@@ -105,6 +105,6 @@ ...@@ -105,6 +105,6 @@
} }
.el-message-box { .el-message-box {
width: 80vw; width: 20vw;
margin: 0 auto; margin: 0 auto;
} }
\ No newline at end of file
...@@ -62,6 +62,11 @@ ...@@ -62,6 +62,11 @@
prop="city_name" prop="city_name"
align="center" align="center"
></el-table-column> ></el-table-column>
<el-table-column
label="登录地点"
prop="withdraw_address"
align="center"
></el-table-column>
<el-table-column <el-table-column
label="提现金额" label="提现金额"
prop="amount" prop="amount"
...@@ -190,6 +195,10 @@ ...@@ -190,6 +195,10 @@
>白名单</el-button >白名单</el-button
> --> > -->
<ul class="listShow"> <ul class="listShow">
<li>
<span class="list-left">登录地点 :</span>
<span class="list-right">{{ dialogData.showData.withdraw_address }}</span>
</li>
<li> <li>
<span class="list-left">提现金额 :</span> <span class="list-left">提现金额 :</span>
<span class="list-right">{{ dialogData.showData.amount }}</span> <span class="list-right">{{ dialogData.showData.amount }}</span>
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
<div class="goods-h5"> <div class="goods-h5">
<el-form> <el-form>
<ul class="apply-list"> <ul class="apply-list">
<li><span>登录地点:</span><span>{{ dialogData.showData.withdraw_address }}</span></li>
<li> 提现用户:<span>{{ dialogData.showData.user_id }}</span></li> <li> 提现用户:<span>{{ dialogData.showData.user_id }}</span></li>
<li> 提现金额:<span>{{ dialogData.showData.amount }}</span></li> <li> 提现金额:<span>{{ dialogData.showData.amount }}</span></li>
<li> 最近24小时收入:<span>{{ dialogData.showData.lately_amount }}</span></li> <li> 最近24小时收入:<span>{{ dialogData.showData.lately_amount }}</span></li>
......
...@@ -3,6 +3,10 @@ const headerConfig = [ ...@@ -3,6 +3,10 @@ const headerConfig = [
name: "提现审核", name: "提现审核",
path: "/op/withdrawal/examine" path: "/op/withdrawal/examine"
}, },
{
name: "钱包账户",
path: "/op/withdrawal/walletaccount"
},
{ {
path: "/op/withdrawal/roleManageRole", path: "/op/withdrawal/roleManageRole",
name: "角色管理", name: "角色管理",
......
<template>
<div
class="manage-wrapper"
v-loading="tableLoading"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.6)"
>
<el-card class="role_management">
<!-- 检索区域 -->
<div class="creatRole">
<el-form>
<el-form-item label="用户Id">
<span>{{ user_id }}</span>
</el-form-item>
<el-form-item label="交易类型">
<el-select v-model="type" clearable @change="getRecordList">
<el-option label="充值" :value="1"></el-option>
<el-option label="提现" :value="2"></el-option>
<el-option label="转账" :value="3"></el-option>
</el-select>
</el-form-item>
</el-form>
</div>
<!-- 用户搜索列表 -->
<el-table border :data="recordList">
<el-table-column
label="流水号"
width="200px"
prop="wallet_record_id"
align="center"
></el-table-column>
<el-table-column
label="更新时间"
prop="create_time"
align="center"
></el-table-column>
<el-table-column
label="金额"
prop="amount"
align="center"
></el-table-column>
<el-table-column label="可用余额" prop="balance" align="center">
<template #default="scope">
{{ "¥ " + scope.row.balance }}
</template>
</el-table-column>
<el-table-column label="交易类型" prop="trade_type" align="center">
<template #default="scope">
{{ getTradeType(scope.row.trade_type) }}
</template>
</el-table-column>
<el-table-column
label="状态"
width="200px"
prop="status"
align="center"
>
<template #default="scope">
<span
:style="{ color: scope.row.status === '失败' ? 'red' : 'black' }"
>
{{ scope.row.status }}
</span>
</template>
</el-table-column>
<el-table-column label="说明" align="center" prop="third_order_desc">
</el-table-column>
</el-table>
<el-button
type="primary"
@click="handleBack"
style="margin-top: 50px; margin-left: 45%"
>返回</el-button
>
<!-- <page :totalNum="totalNum" @update="update" /> -->
<el-pagination
:class="totalNum/params.page_size>=7? 'page': ''"
@current-change="handleCurrentChange"
v-model:currentPage="params.page"
:page-size="params.page_size"
layout="total, prev, pager, next"
:total="totalNum"
>
</el-pagination>
</el-card>
</div>
</template>
<script>
// import page from "../../../components/Pagination";
import { getRecordList } from "@/service/Withdrawal/withdrawal";
import { ElMessage } from "element-plus";
const tradeType = { 1: "充值", 2: "提现", 3: "转账" };
export default {
name: "flowRecord",
// components: { page },
data() {
return {
user_id: "",
wallet_id: "",
type: "",
recordList: [
{
wallet_record_id: "243435676",
create_time: "2021-3-3",
amount: 4,
balance: 555,
trade_type: "提现",
status: "失败"
}
],
tableLoading: false,
params: {
page: 1,
currentPage: 1,
page_size: 20
},
totalNum: null
};
},
created() {
this.user_id = this.$route.query.user_id;
this.wallet_id = this.$route.query.wallet_id;
this.tableLoading = true;
this.getRecordList();
},
methods: {
// update(obj) {
// Object.assign(this.params, obj);
// this.getRecordList();
// },
// 分页
handleCurrentChange(e) {
this.params.page = e;
this.getRecordList();
this.tableLoading = true;
},
//获取账户流水列表
getRecordList() {
this.recordList = [];
let { page, page_size } = this.params;
let { wallet_id, type } = this;
let params_list = {
wallet_id,
page,
page_size,
type
};
getRecordList(params_list)
.then((res) => {
this.tableLoading = true;
this.recordList = res.result.list;
this.totalNum = res.result.count;
this.tableLoading = false;
})
.catch((err) => {
this.tableLoading = false;
ElMessage.error("加载失败" + err);
});
},
// 获取交易类型
getTradeType(code) {
return tradeType[code];
},
// 返回
handleBack() {
this.$router.back();
},
},
};
</script>
<style lang="less" scoped>
.creatRole {
display: flex;
justify-content: space-between;
}
.role_management {
padding: 20px;
}
.page {
/deep/ .el-pager>li:last-of-type {
display: none;
}
}
</style>
\ No newline at end of file
<template>
<Layout>
<div
class="manage-wrapper"
v-loading="tableLoading"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.6)"
>
<el-card class="role_management">
<!-- 检索区域 -->
<div class="creatRole">
<el-form inline :model="searchProps">
<el-form-item label="用户Id">
<el-input
clearable
v-model="searchProps.user_id"
@input="
searchProps.user_id = $event.replace(
/\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g,
''
)
"
></el-input>
</el-form-item>
<el-form-item label="账户状态">
<el-select v-model="searchProps.type" clearable>
<el-option label="黑名单" :value="2"></el-option>
<el-option label="正常用户" :value="1"></el-option>
</el-select>
</el-form-item>
<el-button
type="primary"
style="margin-left: 30px; margin-bottom: 22px"
@click="findProducts"
>查询</el-button
>
</el-form>
</div>
<!-- 用户搜索列表 -->
<el-table border :data="accountList">
<el-table-column
label="用户id"
prop="user_id"
align="center"
></el-table-column>
<el-table-column
label="账户可用金额"
prop="available_fund"
align="center"
>
<template #default="scope">
{{ "¥ " + scope.row.available_fund }}
</template>
</el-table-column>
<el-table-column
label="账户冻结金额"
prop="freezing_fund"
align="center"
>
<template #default="scope">
{{ "¥ " + scope.row.freezing_fund }}
</template>
</el-table-column>
<el-table-column
label="历史提现金额"
prop="history_fund"
align="center"
>
<template #default="scope">
{{ "¥ " + scope.row.history_fund }}
</template>
</el-table-column>
<el-table-column
label="账户状态"
width="200px"
prop="status"
align="center"
>
</el-table-column>
<el-table-column label="操作" align="center">
<template #default="scope">
<el-button
v-show="scope.row.is_black == 0"
@click.stop="
openBounced(
scope.row.is_black,
scope.row.user_id,
scope.row.wallet_id
)
"
type="text"
size="mini"
>黑名单</el-button
>
<el-button
v-show="scope.row.is_black == 1"
@click.stop="
openBounced(
scope.row.is_black,
scope.row.user_id,
scope.row.wallet_id
)
"
size="mini"
type="text"
>释放</el-button
>
<el-button
@click.stop="handelRecord(scope.row)"
size="mini"
type="text"
>流水记录</el-button
>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<!-- <page :totalNum="totalNum" @update="update" ref="params" /> -->
<el-pagination
:class="totalNum/params.page_size>=7? 'page': ''"
@current-change="handleCurrentChange"
v-model:currentPage="params.page"
:page-size="params.page_size"
layout="total, prev, pager, next"
:total="totalNum"
>
</el-pagination>
</el-card>
</div>
</Layout>
</template>
<script>
// import page from "../../../components/Pagination";
import Layout from "../layout/index.vue";
import {
getAccountList,
getAccountBlackList,
getReblackList,
} from "@/service/Withdrawal/withdrawal";
import { ElMessage } from "element-plus";
export default {
name: "walletAccount",
props: ["flowRecord"],
components: {
// page,
Layout,
},
data() {
return {
searchProps: {
user_id: "",
wallet_id: "",
type: "",
},
params: {
page: 1,
page_size: 20,
currentPage: 1,
},
totalNum: null,
dialogText: "",
accountList: [],
tableLoading: false,
};
},
created() {
this.tableLoading = true;
this.getAccountList();
// this.getPermissionsAll();
},
methods: {
//获取账户列表
getAccountList() {
this.accountList = [];
let { page, page_size } = this.params;
let { user_id, type } = this.searchProps;
let params_list = {
page,
page_size,
type,
user_id: user_id || undefined,
};
getAccountList(params_list)
.then((res) => {
this.tableLoading = true;
this.accountList = res.result.list;
this.totalNum = res.result.count;
this.tableLoading = false;
})
.catch((err) => {
this.tableLoading = false;
ElMessage.error("加载失败" + err);
});
},
//查询
findProducts() {
this.tableLoading = true;
this.params.page = 1;
// this.$refs.params.currentPage = 1;
this.getAccountList();
},
//列表分页
// update(obj) {
// Object.assign(this.params, obj);
// let { page, page_size } = this.params;
// this.getAccountList(page, page_size);
// this.params.page = 1;
// this.tableLoading = true;
// console.log(obj);
// },
// 分页
handleCurrentChange(e) {
this.params.page = e;
this.getAccountList();
this.tableLoading = true;
},
//弹框提示
openBounced(type, user_id, wallet_id) {
this.$confirm(
`${
type === 1 ? "确认后则将用户释放出黑名单" : "确认后则将用户拉入黑名单"
}是否继续?`,
"提示",
{
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
center: true,
}
)
.then(() => {
if (+type === 0) {
this.handleBlackList(user_id, wallet_id);
} else {
this.release(user_id, wallet_id);
}
})
.catch(() => {
this.$message({
type: "info",
message: "已取消",
});
});
},
//释放
async release(user_id, wallet_id) {
this.dialogText = "确认后则将用户释放出黑名单";
this.tableLoading = true;
let params = {
user_id,
wallet_id,
};
try {
await getReblackList(params);
ElMessage("释放成功");
this.getAccountList();
} catch (error) {
ElMessage("释放请求失败");
}
},
//流水记录
handelRecord(row) {
this.$router.push({
path: "/op/withdrawal/flowrecord",
query: { user_id: row.user_id, wallet_id: row.wallet_id },
});
},
//黑名单
async handleBlackList(user_id, wallet_id) {
this.tableLoading = true;
let params = {
user_id,
wallet_id,
};
try {
await getAccountBlackList(params);
ElMessage("添加黑名单成功");
this.getAccountList();
} catch (error) {
ElMessage("添加黑名单失败");
}
},
},
};
</script>
<style lang="less" scoped>
.manage-wrapper {
height: 100vh;
}
.creatRole {
display: flex;
justify-content: space-between;
}
.role_management {
padding: 20px;
}
.role_management .el-button {
margin: 0 2px;
}
.page {
/deep/ .el-pager>li:last-of-type {
display: none;
}
}
</style>
/**
* 活动管理
*/
const activityRouters = [
{
path: "/op/activity",
redirect: "/op/activity/manage"
},
{
path: "/op/activity/manage",
name: "ManageList",
component: () =>
import(/* webpackChunkName: "activity" */ "@/pages/Activity/Manage")
},
// 发布拼单
{
path: "/op/activity/releaseProduc",
name: "releaseProduc",
component: () =>
import(
/* webpackChunkName: "activity" */ "@/pages/Activity/releaseProduc"
)
},
// 标题详情
{
path: "/op/activity/activityDetail",
name: "ActivityDetail",
component: () =>
import(
/* webpackChunkName: "activity" */ "@/pages/Activity/ActivityDetail"
)
},
{
path: "/op/activity/releaseProduc/spellOrderSet",
name: "spellOrderSet",
component: () =>
import(
/* webpackChunkName: "activity" */ "@/pages/Activity/releaseProduc/components/spellOrderSet"
)
}
];
export default activityRouters;
...@@ -8,6 +8,12 @@ ...@@ -8,6 +8,12 @@
// redirect: "/op/groupmeal/orderManagement", // redirect: "/op/groupmeal/orderManagement",
component: () => import(/* webpackChunkName: "goods" */ "@/pages/Groupmeal/orderManagement") component: () => import(/* webpackChunkName: "goods" */ "@/pages/Groupmeal/orderManagement")
}, },
{
path: "/op/groupmeal/newOrderManagement",
name: "newOrderManagement",
// redirect: "/op/groupmeal/orderManagement",
component: () => import(/* webpackChunkName: "goods" */ "@/pages/Groupmeal/newOrderManagement")
},
{ {
path: "/op/groupmeal/distrib", path: "/op/groupmeal/distrib",
name: "Distrib", name: "Distrib",
......
...@@ -10,6 +10,19 @@ const withdrawalRoutes = [ ...@@ -10,6 +10,19 @@ const withdrawalRoutes = [
component: () => component: () =>
import(/* webpackChunkName: "Withdrawal" */ "@/pages/Withdrawal/Examine") import(/* webpackChunkName: "Withdrawal" */ "@/pages/Withdrawal/Examine")
}, },
// 钱包账户
{
path: "/op/withdrawal/walletaccount",
name: "walletAccount",
component: () =>
import(/* webpackChunkName: "Withdrawal" */ "@/pages/Withdrawal/walletAccount")
},
{
path: "/op/withdrawal/flowrecord",
name: "flowRecord",
component: () =>
import(/* webpackChunkName: "Withdrawal" */ "@/pages/Withdrawal/walletAccount/flowRecord")
},
//用户管理 //用户管理
{ {
path: "/op/withdrawal/user", path: "/op/withdrawal/user",
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -25,8 +25,6 @@ export default createStore({ ...@@ -25,8 +25,6 @@ export default createStore({
actions: { actions: {
async updateUserPermission({ commit }, payload) { async updateUserPermission({ commit }, payload) {
const { permissions = [] } = await getPermissions(payload.email); const { permissions = [] } = await getPermissions(payload.email);
console.log("VUEX action updateUserPermission::", permissions);
commit("updateUserPermission", permissions); commit("updateUserPermission", permissions);
}, },
async fetchPermission({ commit }, { email, appId }) { async fetchPermission({ commit }, { email, appId }) {
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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