Commit 80f84ebc authored by lihui's avatar lihui

feat: 8-20提测版本

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