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,16 +10,28 @@
>
</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>
<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>
<i
class="el-icon-bottom"
@click="upDown(scope.$index, scope.row)"
></i>
</template>
</el-table-column>
</el-table-column>
......@@ -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,7 +149,6 @@
}}</span>
剩余库存:<span>{{ inventoryRest }}</span>
</div>
<div class="purse_limit">
<el-form-item
prop="checkedRadio"
:rules="[
......@@ -157,7 +169,7 @@
<el-form-item
prop="num_limit"
:show-message="
commodityForm.checkedRadio === '每人最多买' ? ture : false
commodityForm.checkedRadio === '每人最多买' ? true : false
"
:rules="[
{
......@@ -182,8 +194,6 @@
:controls="false"
></el-input-number>
</el-form-item>
</div>
<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,9 +373,9 @@ 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%;
......
......@@ -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);
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", {
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", {
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",{
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