Commit 80f84ebc authored by lihui's avatar lihui

feat: 8-20提测版本

parent 65c65733
...@@ -41,6 +41,26 @@ exports.getSaveDeliverer = async ctx => { ...@@ -41,6 +41,26 @@ exports.getSaveDeliverer = async ctx => {
}; };
ctx.body = await req(ctx, opts); ctx.body = await req(ctx, opts);
}; };
// 下载配送路线 -lh
exports.getDeliveryRoutes = async ctx => {
const opts = {
url: `${GROUPMEAL_URI}/order/deliverer/build_plan`,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
};
// 查看下载配送路线记录 -lh
exports.getEmailRecords = async ctx => {
const opts = {
url: `${GROUPMEAL_URI}/order/deliverer/plan_down_log`,
method: "POST",
json: true,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
};
// 老订单管理 // 老订单管理
......
...@@ -100,6 +100,8 @@ router.get(`${API_VERSION}/order/oldbackground/order_print`, groupmeal.orderPrin ...@@ -100,6 +100,8 @@ router.get(`${API_VERSION}/order/oldbackground/order_print`, groupmeal.orderPrin
router.get(`${API_VERSION}/order/oldbackground/order_item_list`, groupmeal.orderItemList); router.get(`${API_VERSION}/order/oldbackground/order_item_list`, groupmeal.orderItemList);
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);
router.post(`${API_VERSION}/order/deliverer/build_plan`, groupmeal.getDeliveryRoutes); //下载配送路线 -lh
router.post(`${API_VERSION}/order/deliverer/plan_down_log`, groupmeal.getEmailRecords); // 查看邮件记录 -lh
// 新订单管理 // 新订单管理
router.get(`${API_VERSION}/order/background/order_list`, groupmeal.newGetOrderList); router.get(`${API_VERSION}/order/background/order_list`, groupmeal.newGetOrderList);
......
...@@ -10,18 +10,30 @@ ...@@ -10,18 +10,30 @@
> >
</div> </div>
<!-- Tab --> <!-- Tab -->
<el-table :data="comTableData" border style="width: 100%;margin-bottom:80px;" :header-cell-style="cellClass"> <el-table
:data="comTableData"
border
style="width: 100%;margin-bottom:80px;"
:header-cell-style="cellClass"
>
<el-table-column label="显示顺序" align="center" width="50px"> <el-table-column label="显示顺序" align="center" width="50px">
<el-table-column label="" align="center" width="50px"> <el-table-column label="" align="center" width="50px">
<template #default="scope"> <template #default="scope">
<i class="el-icon-top" @click="upMove(scope.$index, scope.row)" style="margin-right:15px;"></i> <i
</template> class="el-icon-top"
</el-table-column> @click="upMove(scope.$index, scope.row)"
<el-table-column label="" align="center" width="50px"> style="margin-right:15px;"
<template #default="scope"> ></i>
<i class="el-icon-bottom" @click="upDown(scope.$index, scope.row)"></i> </template>
</template> </el-table-column>
</el-table-column> <el-table-column label="" align="center" width="50px">
<template #default="scope">
<i
class="el-icon-bottom"
@click="upDown(scope.$index, scope.row)"
></i>
</template>
</el-table-column>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="goods_sku_id" prop="goods_sku_id"
...@@ -39,7 +51,7 @@ ...@@ -39,7 +51,7 @@
<el-table-column prop="total_amount_sold" label="已售数量"> <el-table-column prop="total_amount_sold" label="已售数量">
</el-table-column> </el-table-column>
<el-table-column prop="inventory_rest" label="剩余库存"></el-table-column> <el-table-column prop="inventory_rest" label="剩余库存"></el-table-column>
<el-table-column label="操作" width="120"> <el-table-column label="操作" width="120" fixed="right">
<template #default="scope"> <template #default="scope">
<el-button <el-button
type="text" type="text"
...@@ -58,6 +70,7 @@ ...@@ -58,6 +70,7 @@
:title="addCommodityTitle" :title="addCommodityTitle"
v-model="addCommodityPopup" v-model="addCommodityPopup"
width="50%" width="50%"
custom-class="add_goods_dialog"
> >
<el-form <el-form
:inline="true" :inline="true"
...@@ -114,8 +127,8 @@ ...@@ -114,8 +127,8 @@
</el-form-item> </el-form-item>
<el-form-item label="划线价:" prop="original_price"> <el-form-item label="划线价:" prop="original_price">
<el-input-number <el-input-number
class="price"
v-model="commodityForm.original_price" v-model="commodityForm.original_price"
class="price"
:min="0" :min="0"
:controls="false" :controls="false"
:precision="2" :precision="2"
...@@ -136,54 +149,51 @@ ...@@ -136,54 +149,51 @@
}}</span> }}</span>
剩余库存:<span>{{ inventoryRest }}</span> 剩余库存:<span>{{ inventoryRest }}</span>
</div> </div>
<div class="purse_limit"> <el-form-item
<el-form-item prop="checkedRadio"
prop="checkedRadio" :rules="[
:rules="[ {
{ required: true,
required: true, message: '请选择购买限制',
message: '请选择购买限制', trigger: 'change'
trigger: 'change' }
} ]"
]" class="limit_radio"
class="limit_radio" label="购买限制"
label="购买限制" >
> <el-radio-group v-model="commodityForm.checkedRadio">
<el-radio-group v-model="commodityForm.checkedRadio"> <el-radio label="不限制"></el-radio>
<el-radio label="不限制"></el-radio> <el-radio label="每人最多买"></el-radio>
<el-radio label="每人最多买"></el-radio> </el-radio-group>
</el-radio-group> </el-form-item>
</el-form-item> <el-form-item
<el-form-item prop="num_limit"
prop="num_limit" :show-message="
:show-message=" commodityForm.checkedRadio === '每人最多买' ? true : false
commodityForm.checkedRadio === '每人最多买' ? ture : false "
:rules="[
{
validator:
commodityForm.checkedRadio === '每人最多买'
? checkPurseLimit
: checkPurseLimitNull,
trigger: 'blur'
}
]"
>
<el-input-number
v-model="commodityForm.num_limit"
:disabled="
commodityForm.checkedRadio === '' ||
commodityForm.checkedRadio === '不限制' ||
commodityForm.checkedRadio === undefined
? true
: false
" "
:rules="[ :min="0"
{ :controls="false"
validator: ></el-input-number>
commodityForm.checkedRadio === '每人最多买' </el-form-item>
? checkPurseLimit
: checkPurseLimitNull,
trigger: 'blur'
}
]"
>
<el-input-number
v-model="commodityForm.num_limit"
:disabled="
commodityForm.checkedRadio === '' ||
commodityForm.checkedRadio === '不限制' ||
commodityForm.checkedRadio === undefined
? true
: false
"
:min="0"
:controls="false"
></el-input-number>
</el-form-item>
</div>
<el-form-item <el-form-item
label="商家:" label="商家:"
prop="business1" prop="business1"
...@@ -296,7 +306,7 @@ import { ...@@ -296,7 +306,7 @@ import {
} from "../../../../service/Activity/index"; } from "../../../../service/Activity/index";
// 当选择(每人最多买时 添加验证(非空)) // 当选择(每人最多买时 添加验证(非空))
let checkPurseLimit = (rule, value, callback) => { let checkPurseLimit = (rule, value, callback) => {
if (value === "" || value === 0) { if (value === "" || value === undefined || value === 0) {
return callback(new Error("请添加限制购买数量")); return callback(new Error("请添加限制购买数量"));
} else { } else {
callback(); callback();
...@@ -335,10 +345,10 @@ var addProduct = { ...@@ -335,10 +345,10 @@ var addProduct = {
addCommodityTitle: "", // 标题 addCommodityTitle: "", // 标题
commodityForm: { commodityForm: {
goods_name: "", goods_name: "",
price: null, price: 0,
original_price: null, original_price: 0,
inventory_total: null, inventory_total: "",
total_amount_order: null, total_amount_order: "",
business1: "", business1: "",
num_limit: 0, // 购买限制数量 num_limit: 0, // 购买限制数量
checkedRadio: "" // 购买限制radio checkedRadio: "" // 购买限制radio
...@@ -363,10 +373,10 @@ var addProduct = { ...@@ -363,10 +373,10 @@ var addProduct = {
}; };
}, },
methods: { methods: {
cellClass({row,column,rowIndex,columnIndex}){ cellClass() {
if(rowIndex === 1){ if (arguments.rowIndex === 1) {
return {display:'none'} return { display: "none" };
} }
}, },
// 上移 // 上移
...@@ -740,13 +750,9 @@ export default addProduct; ...@@ -740,13 +750,9 @@ export default addProduct;
.hide /deep/ .el-upload--picture-card { .hide /deep/ .el-upload--picture-card {
display: none; display: none;
} }
/* 购买限制 */
.purse_limit { // 商品添加修改dialog-form表单
display: flex; /deep/ .add_goods_dialog {
justify-content: flex-start; min-width: 370px;
.limit_radio {
// width: 70% !important;
margin-right: 0;
}
} }
</style> </style>
<template> <template>
<div class="infoEditing"> <div class="infoEditing">
<el-form ref="infoEditForm" :model="infoEditForm" label-width="80px"> <el-form
ref="infoEditForm"
:model="infoEditForm"
label-width="80px"
@submit.prevent
>
<el-form-item label="标题:"> <el-form-item label="标题:">
<el-input v-model="infoEditForm.title" maxlength="30"></el-input> <el-input v-model="infoEditForm.title" maxlength="30"></el-input>
</el-form-item> </el-form-item>
......
...@@ -193,15 +193,15 @@ export default { ...@@ -193,15 +193,15 @@ export default {
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.mapDialog { // .mapDialog {
margin-top: 11vh !important; // margin-top: 11vh !important;
display: flex !important; // display: flex !important;
flex-direction: column !important; // flex-direction: column !important;
background: red !important; // background: red !important;
/deep/ .el-dialog__body { // /deep/ .el-dialog__body {
height: 90%; // height: 90%;
} // }
} // }
.mapContainer { .mapContainer {
height: 100%; height: 100%;
width: 100%; width: 100%;
......
<template> <template>
<div class="spellOrderSet"> <div class="spell_order_set_wrapper">
<!-- 时间选择器 --> <!-- 时间选择器 -->
<div class="datepickerWrapper"> <div class="datepickerWrapper">
<span class="demonstration">拼单起止时间: </span> <p class="demonstration">拼单起止时间:</p>
<el-date-picker <el-date-picker
class="startTimePicker" class="start_time_picker"
v-model="startDate" v-model="startDate"
type="datetime" type="datetime"
popper-class="date_picker" popper-class="date_picker"
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
> >
</el-date-picker> </el-date-picker>
<el-date-picker <el-date-picker
class="endTimePicker" class="end_time_picker"
v-model="endDate" v-model="endDate"
:clearable="false" :clearable="false"
type="datetime" type="datetime"
...@@ -32,120 +32,125 @@ ...@@ -32,120 +32,125 @@
element-loading-spinner="el-icon-loading" element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)" element-loading-background="rgba(0, 0, 0, 0.8)"
> >
<el-card class="card-block"> <!-- 自提点表单 -->
<p>自提点设置</p> <div class="search_form_wrapper">
<el-form ref="form" label-width="80px"> <p class="title">自提点设置</p>
<el-form ref="form" label-width="80px" inline @submit.prevent>
<el-form-item> <el-form-item>
<el-input <el-input
style="width:250px"
class="set" class="set"
v-model="selfLiftingPoint" v-model="selfLiftingPoint"
placeholder="自提点名称/自提点联系人" placeholder="自提点名称/自提点联系人"
></el-input> ></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="getPlaceList">搜索</el-button> <el-button type="primary" @click="getPlaceList">搜索</el-button>
<el-button type="primary" @click="dialogFormVisible = true" <el-button type="primary" @click="dialogFormVisible = true"
>添加自提点</el-button >添加自提点</el-button
> >
</el-form-item> </el-form-item>
<div class="tabla-wrapper"> </el-form>
<p class="checked">{{ `已选 ${checkedNum}` }}</p> </div>
<!-- 自提点列表 --> <!-- 自提点列表 -->
<el-table <div class="tabla-wrapper">
class="tableList" <p class="checked">{{ `已选 ${checkedNum}` }}</p>
max-height="350" <el-table
ref="multipleTable" class="tableList"
:data="takePlacelist" max-height="450"
border ref="multipleTable"
tooltip-effect="dark" :data="takePlacelist"
style="width: 100%" border
@selection-change="handleSelectionChange" tooltip-effect="dark"
> style="width: 100%"
<el-table-column align="center" type="selection" width="80"> @selection-change="handleSelectionChange"
</el-table-column> >
<el-table-column <el-table-column align="center" type="selection" width="80">
prop="name" </el-table-column>
label="自提点名称" <el-table-column
align="center" prop="name"
width="width" label="自提点名称"
> align="center"
</el-table-column> width="width"
<el-table-column >
prop="location" </el-table-column>
align="center" <el-table-column
label="位置" prop="location"
width="width" align="center"
> label="位置"
</el-table-column> width="width"
<el-table-column >
prop="address" </el-table-column>
align="center" <el-table-column
label="详细地址" prop="address"
width="width" align="center"
> label="详细地址"
</el-table-column> width="width"
<el-table-column >
prop="contactor" </el-table-column>
align="center" <el-table-column
label="自提点联系人" prop="contactor"
width="width" align="center"
> label="自提点联系人"
</el-table-column> width="width"
<el-table-column >
prop="name" </el-table-column>
align="center" <el-table-column
label="操作" prop="name"
width="width" align="center"
label="操作"
width="width"
fixed="right"
>
<template #default="scope">
<el-popconfirm
title="确定要删除此自提点吗?"
@confirm="deleteTakePlace"
> >
<template #default="scope"> <template #reference>
<el-popconfirm <el-button
title="确定要删除此自提点吗?" class="delete_button"
@confirm="deleteTakePlace" type="primary"
size="small"
@click="handleDelete(scope.row)"
>删除</el-button
> >
<template #reference>
<el-button
type="primary"
size="small"
@click="handleDelete(scope.row)"
>删除</el-button
>
</template>
</el-popconfirm>
</template> </template>
</el-table-column> </el-popconfirm>
</el-table> </template>
</div> </el-table-column>
<!-- 分页 --> </el-table>
<div class="pagination-wrapper"> </div>
<el-pagination <!-- 分页 -->
background <div class="pagination-wrapper">
layout="prev, pager, next" <el-pagination
:total="pageCount" background
:page-size="500" layout="prev, pager, next"
@current-change="handleCurrentChange" :total="pageCount"
> :page-size="500"
</el-pagination> @current-change="handleCurrentChange"
</div> >
</el-form> </el-pagination>
</el-card> </div>
</div> </div>
<!-- 添加自提点dialog -->
<!-- 添加自提点 -->
<el-dialog <el-dialog
:close-on-click-modal="false" :close-on-click-modal="false"
:center="true"
title="添加自提点" title="添加自提点"
v-model="dialogFormVisible" v-model="dialogFormVisible"
:show-close="false" :show-close="false"
custom-class="add_takePlace_dialog"
> >
<el-form <el-form
style="margin-left: 70px"
:model="form" :model="form"
:rules="rules" :rules="rules"
ref="ruleForm" ref="ruleForm"
:inline="true"
label-position="left"
label-width="120px"
> >
<el-form-item <el-form-item label="自提点名称" prop="name">
label="自提点名称"
prop="name"
:label-width="formLabelWidth"
>
<el-input <el-input
class="dialog-input" class="dialog-input"
v-model="form.name" v-model="form.name"
...@@ -154,34 +159,34 @@ ...@@ -154,34 +159,34 @@
autocomplete="off" autocomplete="off"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<br />
<el-form-item <el-form-item
label="位置" label="位置"
prop="location" prop="location"
:label-width="formLabelWidth" class="location_wrapper"
style="width:100%"
> >
<el-input <div class="location_input_wrapper">
class="dialog-input" <el-input
v-model="form.location" class="dialog-input"
placeholder="" v-model="form.location"
:disabled="true" placeholder=""
></el-input> :disabled="true"
<el-button type="primary" @click="mapDialogVisible = true" ></el-input>
>从高德获取坐标</el-button </div>
> <div class="location_text_wrapper">
<el-button type="primary" @click="mapDialogVisible = true"
>从高德获取坐标</el-button
>
</div>
</el-form-item> </el-form-item>
<br />
<p class="location">{{ form.location }}</p> <p class="location">{{ form.location }}</p>
<el-form-item <el-form-item prop="address" label="详细地址">
prop="address"
label="详细地址"
:label-width="formLabelWidth"
>
<el-input class="dialog-input" v-model="form.address"></el-input> <el-input class="dialog-input" v-model="form.address"></el-input>
</el-form-item> </el-form-item>
<el-form-item <br />
label="自提点联系人" <el-form-item label="自提点联系人" prop="contactor">
prop="contactor"
:label-width="formLabelWidth"
>
<el-input <el-input
class="dialog-input" class="dialog-input"
v-model="form.contactor" v-model="form.contactor"
...@@ -189,14 +194,11 @@ ...@@ -189,14 +194,11 @@
show-word-limit show-word-limit
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item <br />
prop="phone" <el-form-item prop="phone" type="tel" label="联系电话">
type="tel"
label="联系电话"
:label-width="formLabelWidth"
>
<el-input class="dialog-input" v-model="form.phone"></el-input> <el-input class="dialog-input" v-model="form.phone"></el-input>
</el-form-item> </el-form-item>
<br />
</el-form> </el-form>
<template #footer> <template #footer>
<span class="dialog-footer"> <span class="dialog-footer">
...@@ -205,7 +207,6 @@ ...@@ -205,7 +207,6 @@
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
<!-- 地图 dialog --> <!-- 地图 dialog -->
<el-dialog custom-class="mapDialog" v-model="mapDialogVisible" width="100%"> <el-dialog custom-class="mapDialog" v-model="mapDialogVisible" width="100%">
<my-map <my-map
...@@ -242,6 +243,7 @@ export default { ...@@ -242,6 +243,7 @@ export default {
.add(7, "day") .add(7, "day")
.format("YYYY-MM-DD HH:mm:ss"), // 结束时间 .format("YYYY-MM-DD HH:mm:ss"), // 结束时间
pickerOptions: { pickerOptions: {
// 规则
disabledDateStart(time) { disabledDateStart(time) {
let _now = Date.now(); let _now = Date.now();
let threeDays = _now + 3 * 24 * 60 * 60 * 1000; let threeDays = _now + 3 * 24 * 60 * 60 * 1000;
...@@ -276,7 +278,8 @@ export default { ...@@ -276,7 +278,8 @@ export default {
pageCount: 0, // 总条数 pageCount: 0, // 总条数
takePlacelist: [], // 自提点列表 takePlacelist: [], // 自提点列表
signal: false, signal: false,
checkedTakePlacelist: [], // 已选择自提点列表 活动详情中添加的自提点列表 checkedTakePlacelist: [], // 已选择自提点列表 活动详情中添加的自提点列表(api)
currentCheckedTakePlacelist: [], // 已选择自提点列表 用户本地操作勾选的+api
hasCheckedList: false, // 表示是否有选中的自提点列表 是编辑还是添加的区别 hasCheckedList: false, // 表示是否有选中的自提点列表 是编辑还是添加的区别
multipleSelection: [], multipleSelection: [],
dialogFormVisible: false, dialogFormVisible: false,
...@@ -328,11 +331,11 @@ export default { ...@@ -328,11 +331,11 @@ export default {
}, },
watch: { watch: {
spellOrderSetArr: { spellOrderSetArr: {
// 监听props属性 展示自提点列表 // 监听props属性 展示自提点列表(APi默认勾选的)
handler: async function() { handler: async function(newList) {
this.checkedTakePlacelist = this.setTableListData( this.checkedTakePlacelist = this.setTableListData(
// 选中的自提点列表 // 选中的自提点列表
this.spellOrderSetArr newList
); );
if (this.$route.query.marketing_id) { if (this.$route.query.marketing_id) {
await this.getPlaceList(); await this.getPlaceList();
...@@ -341,14 +344,9 @@ export default { ...@@ -341,14 +344,9 @@ export default {
this.endDate = this.endTime; this.endDate = this.endTime;
this.checkedTakePlacelist = this.setTableListData( this.checkedTakePlacelist = this.setTableListData(
this.spellOrderSetArr this.spellOrderSetArr
); // 选中的自提点列表 );
this.currentList = this.checkedTakePlacelist.map(item => { // 选中的自提点列表
return item.id; this.mergeCheckedList(this.checkedTakePlacelist);
});
let list = this.takePlacelist.filter(item => {
return this.currentList.includes(item.id);
});
this.toggleSelection(list);
this.signal = true; this.signal = true;
} }
}, },
...@@ -372,15 +370,8 @@ export default { ...@@ -372,15 +370,8 @@ export default {
this.pageLoading = false; this.pageLoading = false;
this.takePlacelist = this.setTableListData(data.result.list); this.takePlacelist = this.setTableListData(data.result.list);
this.pageCount = data.result.total; this.pageCount = data.result.total;
if (this.signal === true) { if (this.signal === true) {
this.currentList = this.checkedTakePlacelist.map(item => { this.mergeCheckedList(this.currentCheckedTakePlacelist);
return item.id;
});
let list = this.takePlacelist.filter(item => {
return this.currentList.includes(item.id);
});
this.toggleSelection(list);
} }
} catch { } catch {
this.pageLoading = false; this.pageLoading = false;
...@@ -435,6 +426,19 @@ export default { ...@@ -435,6 +426,19 @@ export default {
return result; return result;
}, },
/* 自提点勾选的合并
@current 当前勾选
*/
mergeCheckedList(current) {
let currentIdList = current.map(item => {
return item.id;
});
let list = this.takePlacelist.filter(item => {
return currentIdList.includes(item.id);
});
this.toggleSelection(list);
},
// 删除自提点操作 // 删除自提点操作
handleDelete(val) { handleDelete(val) {
this.id = val.id; this.id = val.id;
...@@ -470,8 +474,10 @@ export default { ...@@ -470,8 +474,10 @@ export default {
this.page = val; this.page = val;
this.getPlaceList(); this.getPlaceList();
}, },
// 复选框
// 复选框(提供给父组件)
handleSelectionChange(val) { handleSelectionChange(val) {
this.currentCheckedTakePlacelist = val; // 当前勾选的列表
this.checkedNum = val.length; this.checkedNum = val.length;
this.multipleSelection = val; this.multipleSelection = val;
let takePlaceIds = ""; let takePlaceIds = "";
...@@ -484,6 +490,7 @@ export default { ...@@ -484,6 +490,7 @@ export default {
}); });
this.$emit("getTakeTakePlaceListFromChild", takePlaceIds); this.$emit("getTakeTakePlaceListFromChild", takePlaceIds);
}, },
// 勾选某些列表的操作 // 勾选某些列表的操作
toggleSelection(rows) { toggleSelection(rows) {
if (rows) { if (rows) {
...@@ -516,12 +523,13 @@ export default { ...@@ -516,12 +523,13 @@ export default {
created() { created() {
if (!this.$route.query.marketing_id) { if (!this.$route.query.marketing_id) {
this.getPlaceList(); this.getPlaceList();
this.signal = true;
} }
} }
}; };
</script> </script>
<style lang="less" scope> <style lang="less" scoped>
.el-picker-panel { .el-picker-panel {
.el-picker-panel__footer { .el-picker-panel__footer {
.el-button--text { .el-button--text {
...@@ -531,52 +539,84 @@ export default { ...@@ -531,52 +539,84 @@ export default {
} }
</style> </style>
<style lang="less"> <style lang="less" scoped>
.card-wrapper { .spell_order_set_wrapper {
width: 100%; //text-align: center;
//height: 500px; // 时间选择
.card-block { .datepickerWrapper {
width: 100%; display: flex;
.tabla-wrapper { justify-content: center;
> p { align-items: center;
margin-left: 10px; flex-wrap: wrap;
text-align: left;
.demonstration {
margin: 20px;
}
/deep/ .start_time_picker {
margin: 20px;
}
/deep/ .end_time_picker {
margin: 20px;
}
}
.add_takePlace_dialog {
.location_wrapper {
/deep/ .el-form-item__content {
width: calc(100% - 120px);
display: inline-flex;
flex-wrap: wrap;
} }
.tableList {
height: 500px; .location_input_wrapper {
width: 60%;
min-width: 178px;
}
.location_text_wrapper {
width: 40%;
} }
} }
} }
.pagination-wrapper {
height: 60px; //添加自提点dialog
display: flex; @media screen and (max-width: 800px) {
justify-content: center; /deep/ .add_takePlace_dialog {
align-items: center; width: 100% !important;
}
} }
} }
.spellOrderSet { .card-wrapper {
text-align: center; width: 100%;
margin: 50px 0; .search_form_wrapper {
.datepickerWrapper { text-align: center;
margin: 1px 0 30px; .title {
height: 50px;
line-height: 30px;
}
} }
.startTimePicker { // table 自提点表格
margin-right: 50px; .tabla-wrapper {
> p {
margin-left: 10px;
text-align: left;
}
.tableList {
height: 600px;
.delete_button {
margin: 0;
}
}
} }
} }
.set { .pagination-wrapper {
width: 50%; height: 60px;
margin-top: 40px; display: flex;
} justify-content: center;
.el-button { align-items: center;
margin-left: 30px;
} }
.tabList { .tabList {
margin-top: 10px; margin-top: 10px;
} }
.dialog-input {
width: 50%;
}
.location { .location {
margin-bottom: 10px; margin-bottom: 10px;
margin-left: 14%; margin-left: 14%;
...@@ -589,11 +629,12 @@ export default { ...@@ -589,11 +629,12 @@ export default {
.mapDialog { .mapDialog {
height: 80%; height: 80%;
margin-top: 10vh !important; margin-top: 10vh !important;
.el-dialog__body {
height: 85% !important;
}
.my-map { .my-map {
height: 100%; height: 100%;
} }
} }
/deep/ .el-dialog__body {
height: 85% !important;
}
</style> </style>
...@@ -60,13 +60,13 @@ import spellOrderSet from "./components/spellOrderSet.vue"; ...@@ -60,13 +60,13 @@ import spellOrderSet from "./components/spellOrderSet.vue";
import { import {
addMarketing, addMarketing,
marketingInfo, marketingInfo,
updateMarketing, updateMarketing
} from "../../../service/Activity/index"; } from "../../../service/Activity/index";
export default { export default {
components: { components: {
infoEditing, infoEditing,
addProduc, addProduc,
spellOrderSet, spellOrderSet
}, },
data() { data() {
return { return {
...@@ -80,7 +80,7 @@ export default { ...@@ -80,7 +80,7 @@ export default {
takePlaceIDArr: [], takePlaceIDArr: [],
startTime: "", startTime: "",
endTime: "", endTime: "",
stepTwoTitle: "", // 传给addProduct的title stepTwoTitle: "" // 传给addProduct的title
}; };
}, },
...@@ -146,7 +146,7 @@ export default { ...@@ -146,7 +146,7 @@ export default {
} }
let params = { let params = {
marketing_id: marketingId, marketing_id: marketingId,
marketing_type: "4", marketing_type: "4"
}; };
const res = await marketingInfo(params); const res = await marketingInfo(params);
this.infoEditArr = res.result.marketing_info; this.infoEditArr = res.result.marketing_info;
...@@ -169,7 +169,7 @@ export default { ...@@ -169,7 +169,7 @@ export default {
if (reg.test(path)) return unescape(RegExp.$2.replace(/\+/g, " ")); if (reg.test(path)) return unescape(RegExp.$2.replace(/\+/g, " "));
return ""; return "";
} }
let list = this.$refs.infoEdit.picSubmitList.map((item) => { let list = this.$refs.infoEdit.picSubmitList.map(item => {
let rs = getUrlParms(item.url, "url"); let rs = getUrlParms(item.url, "url");
return rs; return rs;
}); });
...@@ -192,14 +192,14 @@ export default { ...@@ -192,14 +192,14 @@ export default {
end_time: dayJs(this.endDate).format("YYYY-MM-DD HH:mm:ss"), end_time: dayJs(this.endDate).format("YYYY-MM-DD HH:mm:ss"),
pindan_pic: picList, pindan_pic: picList,
pindan_desc: this.$refs.infoEdit.infoEditForm.desc, pindan_desc: this.$refs.infoEdit.infoEditForm.desc,
take_place_ids: this.takePlaceIDArr, take_place_ids: this.takePlaceIDArr
}; };
if (this.$route.query.marketing_id == undefined) { if (this.$route.query.marketing_id == undefined) {
const res = await addMarketing(params); const res = await addMarketing(params);
if (res.code === 0) { if (res.code === 0) {
ElMessage.success({ ElMessage.success({
message: "添加成功", message: "添加成功",
type: "success", type: "success"
}); });
this.$router.push({ path: "/op/activity/manage" }); this.$router.push({ path: "/op/activity/manage" });
} else { } else {
...@@ -210,7 +210,7 @@ export default { ...@@ -210,7 +210,7 @@ export default {
if (res.code === 0) { if (res.code === 0) {
ElMessage.success({ ElMessage.success({
message: "修改成功", message: "修改成功",
type: "success", type: "success"
}); });
this.$router.push({ path: "/op/activity/manage" }); this.$router.push({ path: "/op/activity/manage" });
} else { } else {
...@@ -220,28 +220,45 @@ export default { ...@@ -220,28 +220,45 @@ export default {
}, },
getTakeTakePlaceListFromChild(val) { getTakeTakePlaceListFromChild(val) {
this.takePlaceIDArr = val; this.takePlaceIDArr = val;
}, }
}, },
created() { created() {
this.marketingInfoMet(); this.marketingInfoMet();
}, }
}; };
</script> </script>
<style scope> <style lang="less" scope>
.releaseProduc { .releaseProduc {
height: 100%;
padding: 30px; padding: 30px;
box-sizing: border-box; box-sizing: border-box;
display: flex;
flex-direction: column;
}
@media screen and (max-width: 800px) {
// form表单
.releaseProduc {
padding: 0;
}
} }
.headTitle { .headTitle {
height: 30px;
width: 75%; width: 75%;
font-size: 18px; font-size: 18px;
margin: 0 auto 40px auto; margin: 0 auto 40px auto;
} }
.steps {
height: 60px;
}
/* 内容cotent */
.content {
flex-grow: 1;
}
.steps { .steps {
display: flex; display: flex;
justify-content: center; justify-content: center;
margin-bottom: 50px; margin-bottom: 35px;
} }
.steps /deep/ .el-step__icon { .steps /deep/ .el-step__icon {
width: 50px; width: 50px;
...@@ -250,15 +267,14 @@ export default { ...@@ -250,15 +267,14 @@ export default {
.steps /deep/ .el-step.is-horizontal .el-step__line { .steps /deep/ .el-step.is-horizontal .el-step__line {
top: 25px; top: 25px;
} }
.stepsBtn { .stepsBtn {
width: 100%; width: 100%;
height: 80px; height: 80px;
line-height: 80px; line-height: 80px;
background: white; background: white;
position: fixed; /* position: fixed;
bottom: 0px; bottom: 0px; */
text-align: center; text-align: center;
z-index:999; z-index: 999;
} }
</style> </style>
<template> <template>
<Layout> <Layout>
<el-card class="goods"> <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
...@@ -32,10 +32,10 @@ ...@@ -32,10 +32,10 @@
<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="handleDownload(scope.row.url)" <el-button type="primary" @click="downloadDeliveryRoute(scope.row)"
>下载配送路线</el-button >下载配送路线</el-button
> >
<el-button type="primary" @click="handleDownload(scope.row.url)" <el-button type="primary" @click="getEmailRecord(scope.row)"
>发送记录</el-button >发送记录</el-button
> >
</template> </template>
...@@ -234,7 +234,7 @@ ...@@ -234,7 +234,7 @@
> >
<div <div
class="emailListContent" class="emailListContent"
v-loading="true" v-loading="emailRecordsLoading"
element-loading-text="拼命加载中" element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading" element-loading-spinner="el-icon-loading"
> >
...@@ -261,7 +261,9 @@ import { ...@@ -261,7 +261,9 @@ import {
getList, getList,
getSaveDeliverer, getSaveDeliverer,
getAddDeliverer, getAddDeliverer,
newGetMarketingList newGetMarketingList,
getEmailRecords,
getDeliveryRoutes
} from "../../../service/Groupmeal/groupmeal"; } from "../../../service/Groupmeal/groupmeal";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
export default { export default {
...@@ -275,32 +277,13 @@ export default { ...@@ -275,32 +277,13 @@ export default {
return { return {
sendEmailDialogVisible: false, // 发送email弹窗 sendEmailDialogVisible: false, // 发送email弹窗
myEmialInput: "", // email地址 myEmialInput: "", // email地址
deliverer_xlsx_id: "", // 下载配送路线API参数
isEmailRequire: false, // 验证emial非空 isEmailRequire: false, // 验证emial非空
emialHasError: false, // 验证email格式 emialHasError: false, // 验证email格式
showEmailTableDialogVisible: false, // 展示email发送情况的dialog showEmailTableDialogVisible: false, // 展示email发送情况的dialog
emailListTableData: [ emailRecordsLoading: false, // table-loading
{ pageLoading: false,
email: "2016-05-02", emailListTableData: [],
sendTime: "王小虎",
status: "上海市普陀区金沙江路 1518 弄"
},
{
email: "2016-05-02",
sendTime: "王小虎",
status: "上海市普陀区金沙江路 1518 弄"
},
{
email: "2016-05-02",
sendTime: "王小虎",
status: "上海市普陀区金沙江路 1518 弄"
},
{
email: "2016-05-02",
sendTime: "王小虎",
status: "上海市普陀区金沙江路 1518 弄"
}
],
rules: { rules: {
name: [{ required: true, message: "请输入姓名", trigger: "blur" }], name: [{ required: true, message: "请输入姓名", trigger: "blur" }],
max_capacity: [ max_capacity: [
...@@ -442,17 +425,19 @@ export default { ...@@ -442,17 +425,19 @@ export default {
} }
}, },
// 下载路线 // 下载路线
handleDownload(url) { downloadDeliveryRoute(rowInfo) {
this.deliverer_xlsx_id = rowInfo.deliverer_xlsx_id;
this.sendEmailDialogVisible = true;
// url && window.open("http://bp-dev.ini.yidian-inc.com" + url); // url && window.open("http://bp-dev.ini.yidian-inc.com" + url);
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 if (process.env.NODE_ENV == "test") { // } else if (process.env.NODE_ENV == "test") {
ENV = "http://bp-test.ini.yidian-inc.com/"; // ENV = "http://bp-test.ini.yidian-inc.com/";
} else { // } else {
ENV = "http://bp.ini.yidian-inc.com/"; // ENV = "http://bp.ini.yidian-inc.com/";
} // }
url && window.open(ENV + url); // url && window.open(ENV + url);
}, },
// 分配保存 // 分配保存
async save() { async save() {
...@@ -508,15 +493,22 @@ export default { ...@@ -508,15 +493,22 @@ export default {
} }
}, },
/* 邮箱弹窗相关操作 */ /* 邮箱弹窗相关操作 */
// 取消 // 下载路线(API)
async downloadDeliveryRoutesAPI() {
await getDeliveryRoutes({
deliverer_xlsx_id: this.deliverer_xlsx_id,
email: this.myEmialInput + "@yidian-inc.com"
});
},
// 取消下载路线操作
sendEmailDialogCancel() { sendEmailDialogCancel() {
this.sendEmailDialogVisible = false;
this.myEmialInput = ""; // 清空输入 this.myEmialInput = ""; // 清空输入
this.isEmailRequire = false; this.isEmailRequire = false;
this.emialHasError = false; this.emialHasError = false;
this.sendEmailDialogVisible = false;
}, },
// 确认 // 确认下载路线操作
sendEmailDialogConfirm() { async sendEmailDialogConfirm() {
if (this.myEmialInput.trim() === "") { if (this.myEmialInput.trim() === "") {
this.isEmailRequire = true; this.isEmailRequire = true;
return; return;
...@@ -525,14 +517,79 @@ export default { ...@@ -525,14 +517,79 @@ export default {
this.emialHasError = true; this.emialHasError = true;
return; return;
} }
this.sendEmailDialogVisible = false; try {
this.myEmialInput = ""; // 清空输入 this.pageLoading = true;
this.isEmailRequire = false; await this.downloadDeliveryRoutesAPI();
this.emialHasError = false; this.pageLoading = false;
this.sendEmailDialogCancel();
ElMessage.success("操作成功");
} catch (err) {
this.pageLoading = false;
if (err) {
ElMessage.error(err);
} else {
ElMessage.error("请求错误");
}
}
// this.myEmialInput = ""; // 清空输入
// this.isEmailRequire = false;
// this.emialHasError = false;
// this.sendEmailDialogVisible = false;
},
// 查看邮箱记录(API)
async getEmailRecordsAPI() {
let data = await getEmailRecords({
deliverer_xlsx_id: this.deliverer_xlsx_id
});
this.emailListTableData = this.formatEmailRecord(data.result);
},
// 查看发送记录
async getEmailRecord(rowInfo) {
this.deliverer_xlsx_id = rowInfo.deliverer_xlsx_id; // 赋值 取参数
this.showEmailTableDialogVisible = true;
try {
this.emailRecordsLoading = true;
await this.getEmailRecordsAPI();
this.emailRecordsLoading = false;
} catch (err) {
this.emailRecordsLoading = false;
if (err) {
ElMessage.error(err);
} else {
ElMessage.error("请求错误");
}
}
}, },
//带emailtable的dialog //带emailtable的dialog
showEmailDialogCancel() { showEmailDialogCancel() {
this.showEmailTableDialogVisible = false; this.showEmailTableDialogVisible = false;
},
// 数据转换(api-table展示)
// create_time: "2021-08-19 17:38:05"
// deliverer_xlsx_id: 49
// deliverer_xlsx_log_id: 4
// email: "asdasdasdf"
// send_status: 1
// send_time: ""
// update_time: "2021-08-19 17:38:13"
formatEmailRecord(initialData) {
let matchRelation = {
"0": "待生成",
"1": "生成中",
"2": "已发送",
"3": "发送失败"
};
let result = initialData.map(item => {
let res = {
email: item.email,
sendTime: item.send_time,
status: matchRelation[item.send_status.toString()]
};
return res;
});
return result;
} }
} }
}; };
......
import axios from "@/utils/request"; import axios from "@/utils/request";
import { handlerSuccessResponse } from "@/utils/handlerResponse";
// 获取主页配送员列表 // 获取主页配送员列表
export async function getList (params) { export async function getList(params) {
const res = await axios.post("/api/v1/order/deliverer/list_day_deliverer_conf",params); const res = await axios.post(
return res; "/api/v1/order/deliverer/list_day_deliverer_conf",
} params
);
return res;
}
// 获取分配配送员列表 // 获取分配配送员列表
export async function getDelivererList(params) { export async function getDelivererList(params) {
const res = await axios.post( const res = await axios.post(
...@@ -26,6 +30,17 @@ export async function getSaveDeliverer(params) { ...@@ -26,6 +30,17 @@ export async function getSaveDeliverer(params) {
); );
return res; return res;
} }
// 下载配送路线 -lh
export async function getDeliveryRoutes(params) {
const res = await axios.post("/api/v1/order/deliverer/build_plan", params);
return handlerSuccessResponse(res);
}
// 查看邮件记录 -lh
export async function getEmailRecords(params) {
const res = await axios.post("/api/v1/order/deliverer/plan_down_log", params);
//return Promise.reject(res);
return handlerSuccessResponse(res);
}
// 老订单管理 // 老订单管理
...@@ -53,7 +68,7 @@ export async function getGoodsList(params) { ...@@ -53,7 +68,7 @@ export async function getGoodsList(params) {
// 获取自提点 // 获取自提点
export async function getSubShopList(params) { export async function getSubShopList(params) {
const res = await axios.get("/api/v1/order/oldbackground/sub_shop_list",{ const res = await axios.get("/api/v1/order/oldbackground/sub_shop_list", {
params params
}); });
return res; return res;
...@@ -98,21 +113,24 @@ export async function refundOrder(orderId, itemsToRefund) { ...@@ -98,21 +113,24 @@ export async function refundOrder(orderId, itemsToRefund) {
// 订单驳回 // 订单驳回
export async function orderRefundReject(params) { export async function orderRefundReject(params) {
const res = await axios.get("/api/v1/order/oldbackground/order_refund_reject", { const res = await axios.get(
params "/api/v1/order/oldbackground/order_refund_reject",
}); {
params
}
);
return res; return res;
} }
// 导出订单 // 导出订单
export function getOrderExportURL(eventId, type) { export function getOrderExportURL(eventId, type) {
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 if(process.env.NODE_ENV == "test"){ } else if (process.env.NODE_ENV == "test") {
ENV = "http://bp-test.ini.yidian-inc.com/" ENV = "http://bp-test.ini.yidian-inc.com/";
}else{ } else {
ENV = "http://bp.ini.yidian-inc.com/" ENV = "http://bp.ini.yidian-inc.com/";
} }
return `${ENV}order/oldbackground/order_export?marketing_id=${eventId}&type=${type}`; return `${ENV}order/oldbackground/order_export?marketing_id=${eventId}&type=${type}`;
} }
...@@ -129,23 +147,31 @@ export async function newGetOrderList(params) { ...@@ -129,23 +147,31 @@ export async function newGetOrderList(params) {
// 获取活动名称 // 获取活动名称
export async function newGetMarketingList() { export async function newGetMarketingList() {
const res = await axios.get("/api/v1/order/background/order_condition_marketing_list"); const res = await axios.get(
"/api/v1/order/background/order_condition_marketing_list"
);
return res; return res;
} }
// 获取商品名称 // 获取商品名称
export async function newGetGoodsList(params) { export async function newGetGoodsList(params) {
const res = await axios.get("/api/v1/order/background/order_condition_goods_list", { const res = await axios.get(
params "/api/v1/order/background/order_condition_goods_list",
}); {
params
}
);
return res; return res;
} }
// 获取自提点 // 获取自提点
export async function newGetSubShopList(params) { export async function newGetSubShopList(params) {
const res = await axios.get("/api/v1/order/background/order_condition_take_place_list",{ const res = await axios.get(
params "/api/v1/order/background/order_condition_take_place_list",
}); {
params
}
);
return res; return res;
} }
...@@ -185,12 +211,12 @@ export async function newOrderRefundReject(params) { ...@@ -185,12 +211,12 @@ export async function newOrderRefundReject(params) {
// 导出订单 // 导出订单
export function newGetOrderExportURL(eventId, type) { export function newGetOrderExportURL(eventId, type) {
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 if(process.env.NODE_ENV == "test"){ } else if (process.env.NODE_ENV == "test") {
ENV = "http://bp-test.ini.yidian-inc.com/" ENV = "http://bp-test.ini.yidian-inc.com/";
}else{ } else {
ENV = "http://bp.ini.yidian-inc.com/" ENV = "http://bp.ini.yidian-inc.com/";
} }
return `${ENV}order/background/order_export?marketing_id=${eventId}&type=${type}`; return `${ENV}order/background/order_export?marketing_id=${eventId}&type=${type}`;
} }
export const handlerSuccessResponse = async response => {
if (!response || response.code !== 0) {
return Promise.reject(response.reason);
}
return Promise.resolve(response);
};
//验证邮箱合法性 (验证头部信息) //验证邮箱合法性 (验证头部信息)
export const checkEmailName = emailName => { export const checkEmailName = emailName => {
let str = /[a-zA-Z0-9_-]+/; let str = /[a-zA-Z0-9_-]+/;
if (str.test(emailName)) { if (!str.test(emailName)) {
return false; return false;
} else { } else {
return true; return true;
......
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