Commit ec4be6d4 authored by jisiyu's avatar jisiyu

add:商家管理

parent ca2eeb0e
...@@ -193,3 +193,54 @@ exports.updateMarketingList = async (ctx) => { ...@@ -193,3 +193,54 @@ exports.updateMarketingList = async (ctx) => {
const res = await req(ctx, opts); const res = await req(ctx, opts);
ctx.body = res; ctx.body = res;
}; };
// 商家列表
exports.otaList = async (ctx) => {
const url = `${GOODS_URI}/goods/background/ota_list`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
const res = await req(ctx, opts);
ctx.body = res;
};
// 商家列表-add
exports.addOta = async (ctx) => {
const url = `${GOODS_URI}/goods/background/add_ota`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
const res = await req(ctx, opts);
ctx.body = res;
};
// 商家列表-禁用
exports.deleteOta = async (ctx) => {
const url = `${GOODS_URI}/goods/background/delete_ota`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
const res = await req(ctx, opts);
ctx.body = res;
};
// 商家列表-修改
exports.updateOta = async (ctx) => {
const url = `${GOODS_URI}/goods/background/uodate_ota`;
const opts = {
url,
method: "POST",
json: true,
body: ctx.request.body,
};
const res = await req(ctx, opts);
ctx.body = res;
};
...@@ -64,6 +64,12 @@ router.post(`${API_VERSION}/get_addmarketing_list`, goods.getAddMarketingList); ...@@ -64,6 +64,12 @@ 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);
router.post(`${API_VERSION}/get_marketing_info`, goods.getMarketingInfo); router.post(`${API_VERSION}/get_marketing_info`, goods.getMarketingInfo);
router.post(`${API_VERSION}/update_marketing_list`, goods.updateMarketingList); router.post(`${API_VERSION}/update_marketing_list`, goods.updateMarketingList);
router.post(`${API_VERSION}/otaList`, goods.otaList);
//商家管理
router.post(`${API_VERSION}/addOta`, goods.addOta);
router.post(`${API_VERSION}/deleteOta`, goods.deleteOta);
router.post(`${API_VERSION}/updateOta`, goods.updateOta);
//生活号 //生活号
router.post(`${API_VERSION}/merchant/lifeinner/life_info`, life.get_life_info); 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);
......
...@@ -2,16 +2,11 @@ ...@@ -2,16 +2,11 @@
<Layout> <Layout>
<el-card class="goods" v-loading="pageLoading"> <el-card class="goods" v-loading="pageLoading">
<div class="header"> <div class="header">
<el-button type="primary" @click="assignDeliverer" <el-button type="primary" @click="assignDeliverer">分配配送员</el-button>
>分配配送员</el-button <el-button type="primary" @click="dialogFormAdd = true">添加配送员</el-button>
>
<el-button type="primary" @click="dialogFormAdd = true"
>添加配送员</el-button
>
</div> </div>
<el-table :data="distribList" border stripe fit style="width: 100%"> <el-table :data="distribList" border stripe fit style="width: 100%">
<el-table-column align="center" prop="activeName" label="活动名称"> <el-table-column align="center" prop="activeName" label="活动名称"></el-table-column>
</el-table-column>
<el-table-column align="center" label="配送员数量"> <el-table-column align="center" label="配送员数量">
<template #default="scope"> <template #default="scope">
{{ scope.row.list.length }} {{ scope.row.list.length }}
...@@ -19,42 +14,21 @@ ...@@ -19,42 +14,21 @@
</el-table-column> </el-table-column>
<el-table-column align="center" prop="deliverer_name" label="配送人员"> <el-table-column align="center" prop="deliverer_name" label="配送人员">
<template #default="scope"> <template #default="scope">
{{ scope.row.list.map(item => item.deliverer_name).join("、") }} {{ scope.row.list.map((item) => item.deliverer_name).join("、") }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="prop" label="操作" align="center" min-width="100">
prop="prop"
label="操作"
align="center"
min-width="100"
>
<template #default="scope"> <template #default="scope">
<el-button type="primary" @click="handleModify(scope.row)" <el-button type="primary" @click="handleModify(scope.row)">修改</el-button>
>修改</el-button <el-button type="primary" @click="downloadDeliveryRoute(scope.row)">下载配送路线</el-button>
> <el-button type="primary" @click="getEmailRecord(scope.row)">发送记录</el-button>
<el-button type="primary" @click="downloadDeliveryRoute(scope.row)"
>下载配送路线</el-button
>
<el-button type="primary" @click="getEmailRecord(scope.row)"
>发送记录</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 页码区 --> <!-- 页码区 -->
<Pagination <Pagination @current-change="handleCurrentChange" :current-page="page" :page-size="pageSize" :total="total"></Pagination>
@current-change="handleCurrentChange"
:current-page="page"
:page-size="pageSize"
:total="total"
></Pagination>
<!-- 添加配送员弹框 --> <!-- 添加配送员弹框 -->
<el-dialog <el-dialog title="添加配送员" v-model="dialogFormAdd" width="70%" :show-close="false">
title="添加配送员"
v-model="dialogFormAdd"
width="70%"
:show-close="false"
>
<el-form class="dioFor" :model="addDeliverer" :rules="rules"> <el-form class="dioFor" :model="addDeliverer" :rules="rules">
<el-form-item label="姓名" label-width="100px" prop="name"> <el-form-item label="姓名" label-width="100px" prop="name">
<el-input <el-input
...@@ -64,35 +38,19 @@ ...@@ -64,35 +38,19 @@
show-word-limit show-word-limit
clearable clearable
autocomplete="off" autocomplete="off"
@input=" @input="addDeliverer.name = $event.replace(/[^a-z0-9A-Z\u4e00-\u9fa5()()\\-]+/g, '').replace(/\s/g, '')"
addDeliverer.name = $event
.replace(/[^a-z0-9A-Z\u4e00-\u9fa5()()\\-]+/g, '')
.replace(/\s/g, '')
"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item <el-form-item label="配送上限" label-width="100px" prop="max_capacity">
label="配送上限"
label-width="100px"
prop="max_capacity"
>
<el-input <el-input
v-model.number="addDeliverer.max_capacity" v-model.number="addDeliverer.max_capacity"
onkeyup="value=value.replace(/[^\d]/g,'')" onkeyup="value=value.replace(/[^\d]/g,'')"
clearable clearable
autocomplete="off" autocomplete="off"
@input=" @input="addDeliverer.max_capacity = $event.replace(/[^a-z0-9A-Z\u4e00-\u9fa5()()\\-]+/g, '').replace(/\s/g, '')"
addDeliverer.max_capacity = $event
.replace(/[^a-z0-9A-Z\u4e00-\u9fa5()()\\-]+/g, '')
.replace(/\s/g, '')
"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item <el-form-item label="最小配送量" label-width="100px" prop="min_capacity">
label="最小配送量"
label-width="100px"
prop="min_capacity"
>
<el-input <el-input
v-model.number="addDeliverer.min_capacity" v-model.number="addDeliverer.min_capacity"
onkeyup="value=value.replace(/[^\d]/g,'')" onkeyup="value=value.replace(/[^\d]/g,'')"
...@@ -101,11 +59,7 @@ ...@@ -101,11 +59,7 @@
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="配送工具" label-width="100px" prop="tool_type"> <el-form-item label="配送工具" label-width="100px" prop="tool_type">
<el-select <el-select v-model="addDeliverer.tool_type" clearable placeholder="请选择配送工具">
v-model="addDeliverer.tool_type"
clearable
placeholder="请选择配送工具"
>
<el-option label="电动车" value="1"></el-option> <el-option label="电动车" value="1"></el-option>
<el-option label="摩托车" value="2"></el-option> <el-option label="摩托车" value="2"></el-option>
</el-select> </el-select>
...@@ -119,27 +73,11 @@ ...@@ -119,27 +73,11 @@
</template> </template>
</el-dialog> </el-dialog>
<!-- 分配配送员弹框 --> <!-- 分配配送员弹框 -->
<el-dialog <el-dialog title="分配配送员" v-model="dialogFormAssign" width="70%" :show-close="false">
title="分配配送员"
v-model="dialogFormAssign"
width="70%"
:show-close="false"
>
<el-form class="dioFor"> <el-form class="dioFor">
<el-form-item label="活动名称" label-width="100px"> <el-form-item label="活动名称" label-width="100px">
<el-select <el-select v-model="selectActivity" :disabled="isEdit" clearable filterable @change="getSelectActivityInfo">
v-model="selectActivity" <el-option :label="item.label" :value="item.value" v-for="item in marketingList" :key="item.value"></el-option>
:disabled="isEdit"
clearable
filterable
@change="getSelectActivityInfo"
>
<el-option
:label="item.label"
:value="item.value"
v-for="item in marketingList"
:key="item.value"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<span class="dioFor">已选:{{ multipleSelection.length }}人</span> <span class="dioFor">已选:{{ multipleSelection.length }}人</span>
...@@ -154,32 +92,11 @@ ...@@ -154,32 +92,11 @@
style="width: 100%" style="width: 100%"
@selection-change="selectGoodsChange" @selection-change="selectGoodsChange"
> >
<el-table-column width="60" align="center" type="selection"> <el-table-column width="60" align="center" type="selection"></el-table-column>
</el-table-column> <el-table-column align="center" prop="deliverer_name" label="配送员姓名"></el-table-column>
<el-table-column <el-table-column align="center" prop="deliverer_max_capacity" label="配送上限" width="130"></el-table-column>
align="center" <el-table-column align="center" prop="deliverer_min_capacity" label="最小配送量"></el-table-column>
prop="deliverer_name" <el-table-column align="center" prop="deliverer_tool_type" label="配送工具">
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"> <template #default="scope">
{{ scope.row.deliverer_tool_type == 0 ? "电动车" : "摩托车" }} {{ scope.row.deliverer_tool_type == 0 ? "电动车" : "摩托车" }}
</template> </template>
...@@ -206,9 +123,7 @@ ...@@ -206,9 +123,7 @@
@sendEmailDialogConfirm="sendEmailDialogConfirm" @sendEmailDialogConfirm="sendEmailDialogConfirm"
> >
<div class="emailContent"> <div class="emailContent">
<p> <p>生成配送路线大概需要两分钟,生成完毕后会发送到您的邮箱,请填写接受邮箱(一点邮箱)</p>
生成配送路线大概需要两分钟,生成完毕后会发送到您的邮箱,请填写接受邮箱(一点邮箱)
</p>
<div class="emialInputWrapper"> <div class="emialInputWrapper">
<el-input <el-input
class="myInput" class="myInput"
...@@ -216,7 +131,7 @@ ...@@ -216,7 +131,7 @@
placeholder="请输入邮箱地址" placeholder="请输入邮箱地址"
:class="{ :class="{
myInputRequire: isEmailRequire, myInputRequire: isEmailRequire,
myInputError: emialHasError myInputError: emialHasError,
}" }"
></el-input> ></el-input>
<span>@yidian-inc.com</span> <span>@yidian-inc.com</span>
...@@ -233,46 +148,39 @@ ...@@ -233,46 +148,39 @@
cancelDialogMethodName="showEmailDialogCancel" cancelDialogMethodName="showEmailDialogCancel"
@showEmailDialogCancel="showEmailDialogCancel" @showEmailDialogCancel="showEmailDialogCancel"
> >
<div <div class="emailListContent" v-loading="emailRecordsLoading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading">
class="emailListContent"
v-loading="emailRecordsLoading"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
>
<el-table :data="emailListTableData" style="width: 100%"> <el-table :data="emailListTableData" style="width: 100%">
<el-table-column prop="email" label="接收邮箱" width="180"> <el-table-column prop="email" label="接收邮箱" width="180"></el-table-column>
</el-table-column> <el-table-column prop="sendTime" label="发送时间" width="180"></el-table-column>
<el-table-column prop="sendTime" label="发送时间" width="180"> <el-table-column prop="status" label="状态"></el-table-column>
</el-table-column>
<el-table-column prop="status" label="状态"> </el-table-column>
</el-table> </el-table>
</div> </div>
</YDDialog> </YDDialog>
</Layout> </Layout>
</template> </template>
<script> <script>
import { checkEmailName } from "../../../utils/tools.js"; import { checkEmailName } from "../../../utils/tools.js";
import YDDialog from "@/components/Dialog/YDDialoag.vue"; import YDDialog from "@/components/Dialog/YDDialoag.vue";
import Layout from "../layout/index.vue"; import Layout from "../layout/index.vue";
import Pagination from "../components/Pagination/index.vue"; import Pagination from "../components/Pagination/index.vue";
//import Pagination from "../components/Pagination/index.vue"; //import Pagination from "../components/Pagination/index.vue";
import { import {
getDelivererList, getDelivererList,
getList, getList,
getSaveDeliverer, getSaveDeliverer,
getAddDeliverer, getAddDeliverer,
newGetMarketingList, newGetMarketingList,
getEmailRecords, getEmailRecords,
getDeliveryRoutes getDeliveryRoutes,
} from "../../../service/Groupmeal/groupmeal"; } from "../../../service/Groupmeal/groupmeal";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
export default { export default {
name: "Distrib", name: "Distrib",
components: { components: {
Layout, Layout,
Pagination, Pagination,
YDDialog YDDialog,
}, },
data() { data() {
return { return {
...@@ -288,12 +196,10 @@ export default { ...@@ -288,12 +196,10 @@ export default {
rules: { rules: {
name: [{ required: true, message: "请输入姓名", trigger: "blur" }], name: [{ required: true, message: "请输入姓名", trigger: "blur" }],
max_capacity: [ max_capacity: [
{ required: true, message: "请填写配送上限", trigger: "blur" } { required: true, message: "请填写配送上限", trigger: "blur" },
// { type: "number", message: "请填写数值哦", trigger: "change" }, // { type: "number", message: "请填写数值哦", trigger: "change" },
], ],
min_capacity: [ min_capacity: [{ type: "number", message: "请填写数值哦", trigger: "change" }],
{ type: "number", message: "请填写数值哦", trigger: "change" }
]
}, },
dialogFormAdd: false, dialogFormAdd: false,
// 列表 // 列表
...@@ -303,7 +209,7 @@ export default { ...@@ -303,7 +209,7 @@ export default {
name: "", name: "",
max_capacity: "", //配送上限 max_capacity: "", //配送上限
min_capacity: "", //最小配送量 min_capacity: "", //最小配送量
tool_type: [] //配送工具 tool_type: [], //配送工具
}, },
//分配配送员弹框 //分配配送员弹框
dialogFormAssign: false, dialogFormAssign: false,
...@@ -315,7 +221,7 @@ export default { ...@@ -315,7 +221,7 @@ export default {
page: 1, page: 1,
pageSize: 20, pageSize: 20,
isEdit: false, isEdit: false,
marketingList: [] marketingList: [],
}; };
}, },
created() { created() {
...@@ -339,7 +245,7 @@ export default { ...@@ -339,7 +245,7 @@ export default {
name: "", name: "",
max_capacity: "", //配送上限 max_capacity: "", //配送上限
min_capacity: "", //最小配送量 min_capacity: "", //最小配送量
tool_type: [] //配送工具 tool_type: [], //配送工具
}), }),
(this.deliverer = []), (this.deliverer = []),
(this.multipleSelection = []); (this.multipleSelection = []);
...@@ -350,7 +256,7 @@ export default { ...@@ -350,7 +256,7 @@ export default {
const { page, pageSize } = this; const { page, pageSize } = this;
const params = { const params = {
page, page,
pageSize pageSize,
}; };
try { try {
const res = await getList(params); const res = await getList(params);
...@@ -365,15 +271,14 @@ export default { ...@@ -365,15 +271,14 @@ export default {
const { name, max_capacity, min_capacity, tool_type } = this.addDeliverer; const { name, max_capacity, min_capacity, tool_type } = this.addDeliverer;
if (!name) return ElMessage("请填写配送员姓名"); if (!name) return ElMessage("请填写配送员姓名");
if (!max_capacity) return ElMessage("请填写配送上限"); if (!max_capacity) return ElMessage("请填写配送上限");
if (min_capacity !== "" && min_capacity <= 0) if (min_capacity !== "" && min_capacity <= 0) return ElMessage("最小配送量不能为0或小于0");
return ElMessage("最小配送量不能为0或小于0");
if (!min_capacity) return ElMessage("请填写最小配送量"); if (!min_capacity) return ElMessage("请填写最小配送量");
if (!tool_type) return ElMessage("请选择配送工具"); if (!tool_type) return ElMessage("请选择配送工具");
const params = { const params = {
name, name,
max_capacity: +max_capacity, max_capacity: +max_capacity,
min_capacity: +min_capacity, min_capacity: +min_capacity,
tool_type: +tool_type tool_type: +tool_type,
}; };
try { try {
const { code, reason } = await getAddDeliverer(params); const { code, reason } = await getAddDeliverer(params);
...@@ -385,7 +290,7 @@ export default { ...@@ -385,7 +290,7 @@ export default {
name: "", name: "",
max_capacity: "", //配送上限 max_capacity: "", //配送上限
min_capacity: "", //最小配送量 min_capacity: "", //最小配送量
tool_type: [] //配送工具 tool_type: [], //配送工具
}; };
} catch (error) { } catch (error) {
ElMessage("请求添加配送员失败"); ElMessage("请求添加配送员失败");
...@@ -421,7 +326,7 @@ export default { ...@@ -421,7 +326,7 @@ export default {
this.getList(); this.getList();
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.multipleTable.clearSelection(); this.$refs.multipleTable.clearSelection();
this.deliverer.forEach(row => { this.deliverer.forEach((row) => {
if (row.checked) { if (row.checked) {
this.$refs.multipleTable.toggleRowSelection(row, true); this.$refs.multipleTable.toggleRowSelection(row, true);
} }
...@@ -449,18 +354,15 @@ export default { ...@@ -449,18 +354,15 @@ export default {
// 分配保存 // 分配保存
async save() { async save() {
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("请选择活动姓名");
const codeForModify = this.codeForModify; const codeForModify = this.codeForModify;
try { try {
const { code, reason } = await getSaveDeliverer({ const { code, reason } = await getSaveDeliverer({
code: codeForModify, code: codeForModify,
uids: uids.join(",") uids: uids.join(","),
}); });
if (code !== 0) if (code !== 0) return this.$message.error(reason || (this.isEdit ? "修改配送员失败" : "分配配送员失败"));
return this.$message.error(
reason || (this.isEdit ? "修改配送员失败" : "分配配送员失败")
);
ElMessage(this.isEdit ? "修改配送员成功" : "分配配送员成功"); ElMessage(this.isEdit ? "修改配送员成功" : "分配配送员成功");
this.dialogFormAssign = false; this.dialogFormAssign = false;
this.isEdit = false; this.isEdit = false;
...@@ -480,10 +382,10 @@ export default { ...@@ -480,10 +382,10 @@ export default {
async newGetMarketingList() { async newGetMarketingList() {
try { try {
const res = await newGetMarketingList(); 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,
label: item.marketing_name label: item.marketing_name,
}; };
}); });
} catch (error) { } catch (error) {
...@@ -505,7 +407,7 @@ export default { ...@@ -505,7 +407,7 @@ export default {
async downloadDeliveryRoutesAPI() { async downloadDeliveryRoutesAPI() {
await getDeliveryRoutes({ await getDeliveryRoutes({
deliverer_xlsx_id: this.deliverer_xlsx_id, deliverer_xlsx_id: this.deliverer_xlsx_id,
email: this.myEmialInput + "@yidian-inc.com" email: this.myEmialInput + "@yidian-inc.com",
}); });
}, },
// 取消下载路线操作 // 取消下载路线操作
...@@ -548,7 +450,7 @@ export default { ...@@ -548,7 +450,7 @@ export default {
// 查看邮箱记录(API) // 查看邮箱记录(API)
async getEmailRecordsAPI() { async getEmailRecordsAPI() {
let data = await getEmailRecords({ let data = await getEmailRecords({
deliverer_xlsx_id: this.deliverer_xlsx_id deliverer_xlsx_id: this.deliverer_xlsx_id,
}); });
this.emailListTableData = this.formatEmailRecord(data.result); this.emailListTableData = this.formatEmailRecord(data.result);
}, },
...@@ -584,28 +486,28 @@ export default { ...@@ -584,28 +486,28 @@ export default {
// update_time: "2021-08-19 17:38:13" // update_time: "2021-08-19 17:38:13"
formatEmailRecord(initialData) { formatEmailRecord(initialData) {
let matchRelation = { let matchRelation = {
"0": "待生成", 0: "待生成",
"1": "生成中", 1: "生成中",
"2": "已发送", 2: "已发送",
"3": "发送失败" 3: "发送失败",
}; };
let result = initialData.map(item => { let result = initialData.map((item) => {
let res = { let res = {
email: item.email, email: item.email,
sendTime: item.send_time, sendTime: item.send_time,
status: matchRelation[item.send_status.toString()] status: matchRelation[item.send_status.toString()],
}; };
return res; return res;
}); });
return result; return result;
} },
} },
}; };
</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>
// 邮箱dialog // 邮箱dialog
.emailContent { .emailContent {
.emialInputWrapper { .emialInputWrapper {
display: flex; display: flex;
align-items: center; align-items: center;
...@@ -629,5 +531,5 @@ export default { ...@@ -629,5 +531,5 @@ export default {
color: red; color: red;
} }
} }
} }
</style> </style>
const headerConfig = [ const headerConfig = [
{ {
name: "活动管理", name: "活动管理",
path: "/op/activity/manage" path: "/op/activity/manage",
}, },
{ {
name: "订单管理", name: "订单管理",
path: "/op/groupmeal/orderManagement" path: "/op/groupmeal/orderManagement",
}, },
{ {
name: "新订单管理", name: "新订单管理",
path: "/op/groupmeal/newOrderManagement" path: "/op/groupmeal/newOrderManagement",
}, },
{ {
path: "/op/groupmeal/distrib", path: "/op/groupmeal/distrib",
name: "配送员管理" name: "配送员管理",
} },
{
path: "/op/groupmeal/merchantManagement",
name: "商家管理",
},
]; ];
export default headerConfig; export default headerConfig;
.goods {
width: 100%;
height: 100%;
padding: 0 30px;
.header {
display: flex;
justify-content: flex-end;
margin-bottom: 30px;
}
.dioFor {
margin-left: 5%;
width: 70%;
}
.locationstyle {
display: flex;
}
.location {
margin-bottom: 10px;
// margin-left: 10%;
}
.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;
}
/deep/ .mapDialog {
margin-top: 10vh !important;
height: 80%;
display: flex !important;
flex-direction: column !important;
/deep/ .el-dialog__body {
height: 90%;
}
}
}
<template>
<Layout>
<el-card class="goods" v-loading="pageLoading">
<div class="header">
<el-button type="primary" @click="modifyMerchant">添加商家</el-button>
</div>
<el-table :data="merchantList" border stripe fit style="width: 100%">
<el-table-column align="center" prop="ota_name" label="商家"></el-table-column>
<el-table-column align="center" prop="printer_sn" label="打印机SN"></el-table-column>
<el-table-column align="center" prop="printer_key" label="打印机KEY"></el-table-column>
<el-table-column align="center" prop="label_printer_sn" label="标签机SN"></el-table-column>
<el-table-column align="center" prop="label_printer_key" label="标签机KEY"></el-table-column>
<el-table-column align="center" prop="state" label="状态">
<template #default="scope">{{ ["正常", "已禁用"][scope.row.status] }}</template>
</el-table-column>
<el-table-column align="center" prop="operation" label="操作">
<template #default="scope">
<el-button type="text" :disabled="scope.row.status == 1" @click="modifyMerchant(scope.row.ota_id, scope.$index)">
修改
</el-button>
<el-button type="text" :disabled="scope.row.status == 1" @click="handleDisable(scope.row)">禁用</el-button>
</template>
</el-table-column>
</el-table>
<!-- 添加商家 -->
<el-dialog title="商家编辑" v-model="merchantAdd" width="70%" :show-close="false">
<el-form class="dioFor" :model="addMerchant" :rules="rules">
<el-form-item label="商家名称" label-width="100px" prop="ota_name">
<el-input maxlength="30" show-word-limit clearable autocomplete="off" v-model="addMerchant.ota_name"></el-input>
</el-form-item>
<el-form-item label="打印机SN" label-width="100px" prop="printer_sn">
<el-input type="text" show-word-limit clearable autocomplete="off" v-model="addMerchant.printer_sn"></el-input>
</el-form-item>
<el-form-item label="打印机KEY" label-width="100px" prop="printer_key">
<el-input type="text" show-word-limit clearable autocomplete="off" v-model="addMerchant.printer_key"></el-input>
</el-form-item>
<el-form-item label="标签机SN" label-width="100px" prop="label_printer_sn">
<el-input type="text" show-word-limit clearable autocomplete="off" v-model="addMerchant.label_printer_sn"></el-input>
</el-form-item>
<el-form-item label="标签机KEY" label-width="100px" prop="label_printer_key">
<el-input type="text" show-word-limit clearable autocomplete="off" v-model="addMerchant.label_printer_key"></el-input>
</el-form-item>
<el-form-item label="位置" label-width="100px" prop="location">
<div class="locationstyle">
<el-input
type="text"
show-word-limit
clearable
autocomplete="off"
v-model="addMerchant.location"
:disabled="true"
></el-input>
<el-button type="text" @click="mapDialogVisible = true">从高德获取坐标</el-button>
</div>
<p class="location">{{ addMerchant.location }}</p>
</el-form-item>
<el-form-item label="详细地址" label-width="100px" prop="address">
<el-input type="text" show-word-limit clearable autocomplete="off" v-model="addMerchant.address"></el-input>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="addCancel">取 消</el-button>
<el-button type="primary" @click="saveMerchant">保 存</el-button>
</span>
</template>
</el-dialog>
<!-- 地图 dialog -->
<el-dialog custom-class="mapDialog" v-model="mapDialogVisible" width="100%">
<my-map class="my-map" @getMapInfo="getMapInfo" @hideMapDialog="mapDialogVisible = false" />
</el-dialog>
</el-card>
</Layout>
</template>
<script>
import Layout from "../layout/index.vue";
import myMap from "@/pages/Activity/releaseProduc/components/myMap";
import { otaList, addOta, deleteOta, updateOta } from "@/service/Goods/goods";
export default {
name: "merchantManagement",
components: {
Layout,
myMap,
},
created() {
this.getOtaList();
},
data() {
return {
mapDialogVisible: false,
disabledIndex: null,
rules: {
name: [{ required: true, message: "请输入商家名称", trigger: "blur" }],
},
//修改信息
merchantAdd: false,
addMerchant: {
ota_name: "",
printer_sn: "",
printer_key: "",
label_printer_sn: "",
label_printer_key: "",
location: "",
address: "",
},
// 列表
merchantList: [],
deep: true,
};
},
methods: {
modifyMerchant(id, index) {
if (typeof id == "number") {
this.addMerchant = this.merchantList[index];
}
this.merchantAdd = true;
},
async getOtaList() {
const { result, code, reason } = await otaList();
this.merchantList = result.list;
if (code !== 0) return this.$message.error(reason);
},
//保存
async saveMerchant() {
let { result, code, reason } = this.addMerchant.ota_id ? await updateOta(this.addMerchant) : await addOta(this.addMerchant);
if (code !== 0) return this.$message.error(reason);
await this.getOtaList();
this.merchantAdd = false;
},
// 取消
addCancel() {
this.merchantAdd = false;
this.resetDate();
},
resetDate() {
this.addMerchant = {};
},
//禁用
async handleDisable(item) {
let res = await deleteOta({ ota_id: item.ota_id });
if (res.code !== 0) return this.$message.error(res.reason);
this.getOtaList();
},
// 获取地图信息
getMapInfo(mapInfo) {
console.log(mapInfo);
this.addMerchant.location = mapInfo.address;
this.addMerchant.longitude = mapInfo.lng; // longitude latitude contactor
this.addMerchant.latitude = mapInfo.lat;
},
},
};
</script>
<style lang="less" src="./index.less" scope></style>
/** /**
* 团餐运营管理 * 团餐运营管理
*/ */
const groupmealRouters = [ const groupmealRouters = [
{ {
path: "/op/groupmeal/orderManagement", path: "/op/groupmeal/orderManagement",
name: "orderManagement", name: "orderManagement",
// 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", path: "/op/groupmeal/newOrderManagement",
name: "newOrderManagement", name: "newOrderManagement",
// redirect: "/op/groupmeal/orderManagement", // redirect: "/op/groupmeal/orderManagement",
component: () => import(/* webpackChunkName: "goods" */ "@/pages/Groupmeal/newOrderManagement") component: () => import(/* webpackChunkName: "goods" */ "@/pages/Groupmeal/newOrderManagement"),
}, },
{ {
path: "/op/groupmeal/distrib", path: "/op/groupmeal/distrib",
name: "Distrib", name: "Distrib",
component: () => import(/* webpackChunkName: "goods" */ "@/pages/Groupmeal/Distrib") component: () => import(/* webpackChunkName: "goods" */ "@/pages/Groupmeal/Distrib"),
}, },
]; {
path: "/op/groupmeal/merchantManagement",
export default groupmealRouters; name: "merchantManagement",
component: () => import(/* webpackChunkName: "goods" */ "@/pages/Groupmeal/merchantManagement"),
},
];
export default groupmealRouters;
...@@ -96,3 +96,26 @@ export async function updateMarketingList(params) { ...@@ -96,3 +96,26 @@ export async function updateMarketingList(params) {
const res = await axios.post("/api/v1/update_marketing_list", params); const res = await axios.post("/api/v1/update_marketing_list", params);
return res; return res;
} }
// 商家列表
export async function otaList(params) {
const res = await axios.post("/api/v1/otaList", params);
return res;
}
// 商家列表-add
export async function addOta(params) {
const res = await axios.post("/api/v1/addOta", params);
return res;
}
// 商家列表-禁用
export async function deleteOta(params) {
const res = await axios.post("/api/v1/deleteOta", params);
return res;
}
// 商家列表-修改
export async function updateOta(params) {
const res = await axios.post("/api/v1/updateOta", params);
return res;
}
...@@ -29,7 +29,7 @@ const CDN = { ...@@ -29,7 +29,7 @@ const CDN = {
module.exports = { module.exports = {
outputDir: isDev ? "./dist" : path.resolve("./public/dist/"), outputDir: isDev ? "./dist" : path.resolve("./public/dist/"),
publicPath: isDev ? "/" : "/dist", publicPath: isDev ? "/" : "/dist",
lintOnSave: isDev, lintOnSave: false,
productionSourceMap: false, // 去掉生成环境的 sourceMap productionSourceMap: false, // 去掉生成环境的 sourceMap
devServer: { devServer: {
proxy: "http://127.0.0.1:8055", //http://localhost:8055 proxy: "http://127.0.0.1:8055", //http://localhost:8055
......
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