Browse Source

Merge branch 'master' of http://8.140.253.224:3000/root/school-manage

# Conflicts:
#	vue.config.js
master
tianyi 1 month ago
parent
commit
040ce58fa9
  1. 5
      src/api/app.js
  2. 270
      src/views/app/shop/addEdit.vue
  3. 16
      src/views/my-components/hiver/shopArea-tree-choose.vue

5
src/api/app.js

@ -412,6 +412,11 @@ export const editShopTakeway = (params) => {
export const editShop = (params) => { export const editShop = (params) => {
return putRequest('/app/shop/edit', params) return putRequest('/app/shop/edit', params)
} }
export const findShopWorkerByMobile = (params) => {
return getRequest('/app/shop/findWorkerByMobile', params)
}
//删除评论 //删除评论
export const deleteComment = (params) => { export const deleteComment = (params) => {
return postRequest('/app/comment/deleteByOrderId', params) return postRequest('/app/comment/deleteByOrderId', params)

270
src/views/app/shop/addEdit.vue

@ -69,6 +69,78 @@
</FormItem> </FormItem>
</Col> </Col>
</Row> </Row>
<Divider>商家自配送</Divider>
<Row :gutter="32">
<Col span="12">
<FormItem label="是否支持商家自配送" prop="supportShopDelivery">
<RadioGroup v-model="form.supportShopDelivery">
<Radio :label="1"></Radio>
<Radio :label="0"></Radio>
</RadioGroup>
</FormItem>
</Col>
<Col span="12" v-if="form.supportShopDelivery == 1">
<FormItem label="自配送配送费" prop="orderBkge">
<InputNumber v-model="form.orderBkge" :min="0" :step="0.1" style="width: 100%" @on-change="handleOrderBkgeChange" />
</FormItem>
</Col>
</Row>
<Row :gutter="32" v-if="form.supportShopDelivery == 1">
<Col span="12">
<FormItem label="送达位置" prop="shopDeliveryLocation">
<Select v-model="form.shopDeliveryLocation" transfer>
<Option :value="1">送到宿舍</Option>
<Option :value="2">送到楼下</Option>
</Select>
</FormItem>
</Col>
<Col span="12">
<FormItem label="配送时长(分钟)" prop="shopDeliveryDuration">
<InputNumber v-model="form.shopDeliveryDuration" :min="1" :precision="0" style="width: 100%" />
</FormItem>
</Col>
</Row>
<Row :gutter="32" v-if="form.supportShopDelivery == 1">
<Col span="12">
<FormItem label="配送员手机号">
<Input v-model="workerMobile" autocomplete="off" :maxlength="16" placeholder="输入配送员手机号">
<Button slot="append" :loading="workerLoading" @click="findWorker">查询</Button>
</Input>
</FormItem>
</Col>
<Col span="12">
<FormItem label="已绑定配送员" prop="workerId">
<Input :value="boundWorkerText" readonly placeholder="暂未绑定配送员" />
</FormItem>
</Col>
</Row>
<Divider>中转配送</Divider>
<Row :gutter="32">
<Col span="12">
<FormItem label="是否支持中转配送" prop="supportTransferDelivery">
<RadioGroup v-model="form.supportTransferDelivery">
<Radio :label="1"></Radio>
<Radio :label="0"></Radio>
</RadioGroup>
</FormItem>
</Col>
<Col span="12" v-if="form.supportTransferDelivery == 1">
<FormItem label="中转配送时长(分钟)" prop="transferDeliveryDuration">
<InputNumber v-model="form.transferDeliveryDuration" :min="1" :precision="0" style="width: 100%" />
</FormItem>
</Col>
</Row>
<Row :gutter="32" v-if="form.supportTransferDelivery == 1">
<Col span="24">
<FormItem label="中转地点" prop="transferAddressId" class="form-noheight">
<shopArea-tree-choose @on-change="handleSelectTransferAddress"
@on-clear="handleClearTransferAddress" ref="transferAddressTree"
text="选择中转地点" placeholder="点击选择中转地点"
placement="top" tree-max-height="260px"></shopArea-tree-choose>
</FormItem>
</Col>
</Row>
<Divider />
<Row :gutter="32"> <Row :gutter="32">
<Col span="24"> <Col span="24">
@ -108,6 +180,7 @@
import { import {
addShop, addShop,
editShop, editShop,
findShopWorkerByMobile,
initShopArea, initShopArea,
loadShopArea, loadShopArea,
} from "@/api/app"; } from "@/api/app";
@ -142,9 +215,14 @@
title: "", title: "",
passColor: "", passColor: "",
submitLoading: false, submitLoading: false,
workerLoading: false,
workerMobile: "",
maxHeight: 510, maxHeight: 510,
form: { form: {
address: [], address: [],
supportShopDelivery: 0,
orderBkge: 0,
supportTransferDelivery: 0,
}, },
formValidate: { formValidate: {
// //
@ -192,9 +270,75 @@
message: "邮箱格式不正确" message: "邮箱格式不正确"
}, },
], ],
workerId: [{
validator: (rule, value, callback) => {
if (this.form.supportShopDelivery == 1 && !this.form.workerId) {
callback(new Error("请查询并绑定配送员"));
} else {
callback();
}
},
trigger: "change"
}],
shopDeliveryLocation: [{
validator: (rule, value, callback) => {
if (this.form.supportShopDelivery == 1 && !value) {
callback(new Error("请选择送达位置"));
} else {
callback();
}
},
trigger: "change"
}],
shopDeliveryDuration: [{
validator: (rule, value, callback) => {
if (this.form.supportShopDelivery == 1 && (!value || value <= 0)) {
callback(new Error("请输入配送时长"));
} else {
callback();
}
},
trigger: "change"
}],
transferDeliveryDuration: [{
validator: (rule, value, callback) => {
if (this.form.supportTransferDelivery == 1 && (!value || value <= 0)) {
callback(new Error("请输入中转配送时长"));
} else {
callback();
}
},
trigger: "change"
}],
transferAddressId: [{
validator: (rule, value, callback) => {
if (this.form.supportTransferDelivery == 1 && !value) {
callback(new Error("请输入中转地点ID"));
} else {
callback();
}
},
trigger: "change"
}],
transferAddressName: [{
validator: (rule, value, callback) => {
if (this.form.supportTransferDelivery == 1 && !value) {
callback(new Error("请输入中转地点名称"));
} else {
callback();
}
},
trigger: "change"
}],
}, },
}; };
}, },
computed: {
boundWorkerText() {
if (!this.form.workerId) return "";
return `${this.form.workerName || ""} ${this.form.workerPhone || ""}`;
},
},
methods: { methods: {
init(v) { init(v) {
this.getRoleList(v); this.getRoleList(v);
@ -235,12 +379,95 @@
}); });
}, },
handleSelectShopAreaTree(v) { handleSelectShopAreaTree(v) {
this.form.shopArea = v; this.form.shopArea = Array.isArray(v) ? (v[0] || "") : v;
},
handleSelectTransferAddress(v) {
const value = Array.isArray(v) ? v[0] : v;
this.form.transferAddressId = value || "";
if (!value) {
this.form.transferAddressName = "";
return;
}
this.$nextTick(() => {
if (this.$refs.transferAddressTree) {
this.form.transferAddressName = this.$refs.transferAddressTree.shopAreaTitle || this.form.transferAddressName || "";
}
});
},
handleClearTransferAddress() {
this.form.transferAddressId = "";
this.form.transferAddressName = "";
},
handleOrderBkgeChange(value) {
const numberValue = Number(value || 0);
this.$set(this.form, "orderBkge", Number(numberValue.toFixed(1)));
},
findWorker() {
if (!this.workerMobile) {
this.$Message.warning("请输入配送员手机号");
return;
}
this.workerLoading = true;
findShopWorkerByMobile({
mobile: this.workerMobile
}).then((res) => {
this.workerLoading = false;
if (res.success) {
this.$set(this.form, "workerId", res.result.workerId);
this.$set(this.form, "workerName", res.result.workerName);
this.$set(this.form, "workerPhone", res.result.workerPhone || res.result.mobile);
this.$Message.success("配送员绑定成功");
} else {
this.$Message.error(res.message || "未查询到配送员");
}
}).catch(() => {
this.workerLoading = false;
});
},
normalizeSelfDeliveryForm() {
if (this.form.supportShopDelivery == null) {
this.$set(this.form, "supportShopDelivery", 0);
}
this.form.supportShopDelivery = Number(this.form.supportShopDelivery);
this.form.orderBkge = Number(Number(this.form.orderBkge || 0).toFixed(1));
if (this.form.supportShopDelivery != 1) {
this.form.orderBkge = 0;
this.form.shopDeliveryLocation = "";
this.form.shopDeliveryDuration = "";
this.form.workerId = "";
this.form.workerName = "";
this.form.workerPhone = "";
}
},
normalizeTransferDeliveryForm() {
if (this.form.supportTransferDelivery == null) {
this.$set(this.form, "supportTransferDelivery", 0);
}
this.form.supportTransferDelivery = Number(this.form.supportTransferDelivery);
if (this.form.supportTransferDelivery != 1) {
this.form.transferDeliveryDuration = "";
this.form.transferAddressId = "";
this.form.transferAddressName = "";
} else {
this.form.transferDeliveryDuration = Number(this.form.transferDeliveryDuration || 0);
}
},
cleanDisplayFields() {
delete this.form.users
delete this.form.products
delete this.form.shopTakeaway
delete this.form.clerks
delete this.form.keyWord
delete this.form.isAdmin
delete this.form.saleCounts
delete this.form.groupDeliveryTime
}, },
changePass(v, grade, strength) { changePass(v, grade, strength) {
this.form.passStrength = strength; this.form.passStrength = strength;
}, },
submit() { submit() {
this.normalizeSelfDeliveryForm();
this.normalizeTransferDeliveryForm();
this.$refs.form.validate((valid) => { this.$refs.form.validate((valid) => {
if (valid) { if (valid) {
if (typeof this.form.chargeTime == "object") { if (typeof this.form.chargeTime == "object") {
@ -252,30 +479,23 @@
if (typeof this.form.endTime == "object") { if (typeof this.form.endTime == "object") {
this.form.endTime = this.format(this.form.endTime, "yyyy-MM-dd"); this.form.endTime = this.format(this.form.endTime, "yyyy-MM-dd");
} }
debugger;
if (this.form.users == '' || this.form.users == null) {
delete this.form.users;
}
// //
if (this.form.shopType != '' && this.form.shopType != null) { if (this.form.shopType != '' && this.form.shopType != null) {
this.shopType.forEach(item => { this.shopType.forEach(item => {
debugger;
if (this.form.shopType == item.value) { if (this.form.shopType == item.value) {
this.form.shopTypeTitle = item.title; this.form.shopTypeTitle = item.title;
} }
}); });
} }
this.form.shopMangerId = this.form.shopOwnerId this.form.shopMangerId = this.form.shopOwnerId
this.cleanDisplayFields()
if (this.type == "1") { if (this.type == "1") {
// //
this.submitLoading = true; this.submitLoading = true;
delete this.form.products
delete this.form.saleCount delete this.form.saleCount
delete this.form.shopTakeaway
delete this.form.storeFlag delete this.form.storeFlag
delete this.form.printingMethod delete this.form.printingMethod
delete this.form.printingMethod delete this.form.printingMethod
editShop(this.form).then((res) => { editShop(this.form).then((res) => {
this.submitLoading = false; this.submitLoading = false;
if (res.success) { if (res.success) {
@ -326,18 +546,42 @@
} else { } else {
data.address = []; data.address = [];
} }
//
this.$refs.shopAreaTree.setData(data.shopArea, data.shopAreaTitle);
// //
this.form = data; this.form = Object.assign({}, data, {
supportShopDelivery: data.supportShopDelivery == null ? 0 : Number(data.supportShopDelivery),
orderBkge: data.orderBkge == null ? 0 : Number(data.orderBkge),
shopDeliveryLocation: data.shopDeliveryLocation == null ? null : Number(data.shopDeliveryLocation),
shopDeliveryDuration: data.shopDeliveryDuration == null ? null : Number(data.shopDeliveryDuration),
supportTransferDelivery: data.supportTransferDelivery == null ? 0 : Number(data.supportTransferDelivery),
transferDeliveryDuration: data.transferDeliveryDuration == null ? null : Number(data.transferDeliveryDuration),
transferAddressId: data.transferAddressId || "",
transferAddressName: data.transferAddressName || "",
});
this.workerMobile = this.form.workerPhone || "";
this.$nextTick(() => {
//
this.$refs.shopAreaTree.setData(this.form.shopArea, this.form.shopAreaTitle);
if (this.$refs.transferAddressTree) {
this.$refs.transferAddressTree.setData(this.form.transferAddressId, this.form.transferAddressName);
}
});
} else { } else {
// //
//this.$refs.shopAreaTree.setData("", "");
this.form = { this.form = {
/*type: 0, /*type: 0,
sex: "", sex: "",
address: [],*/ address: [],*/
supportShopDelivery: 0,
orderBkge: 0,
supportTransferDelivery: 0,
}; };
this.workerMobile = "";
this.$nextTick(() => {
this.$refs.shopAreaTree.setData("", "");
if (this.$refs.transferAddressTree) {
this.$refs.transferAddressTree.setData("", "");
}
});
} }
this.visible = value; this.visible = value;
}, },

16
src/views/my-components/hiver/shopArea-tree-choose.vue

@ -3,13 +3,13 @@
<div style="display: flex;"> <div style="display: flex;">
<Input v-model="shopAreaTitle" readonly :size="size" :disabled="disabled" :prefix="prefix" :suffix="suffix" <Input v-model="shopAreaTitle" readonly :size="size" :disabled="disabled" :prefix="prefix" :suffix="suffix"
style="margin-right: 10px" :placeholder="placeholder" :clearable="clearable" @on-clear="clearSelect" /> style="margin-right: 10px" :placeholder="placeholder" :clearable="clearable" @on-clear="clearSelect" />
<Poptip transfer trigger="click" placement="right" title="选择区域" width="250"> <Poptip transfer trigger="click" :placement="placement" title="选择区域" :width="width">
<Button :size="size" :disabled="disabled" :icon="icon" :type="type" :shape="shape" <Button :size="size" :disabled="disabled" :icon="icon" :type="type" :shape="shape"
:ghost="ghost">{{ text }}</Button> :ghost="ghost">{{ text }}</Button>
<div slot="content"> <div slot="content">
<Input v-model="searchKey" suffix="ios-search" @on-change="searchDep" placeholder="输入区域名搜索" <Input v-model="searchKey" suffix="ios-search" @on-change="searchDep" placeholder="输入区域名搜索"
clearable /> clearable />
<div class="dep-tree-bar"> <div class="dep-tree-bar" :style="{ maxHeight: treeMaxHeight }">
<Tree :data="dataDep" :load-data="loadData" @on-select-change="selectTree" :multiple="multiple"> <Tree :data="dataDep" :load-data="loadData" @on-select-change="selectTree" :multiple="multiple">
</Tree> </Tree>
<Spin size="large" fix v-if="depLoading"></Spin> <Spin size="large" fix v-if="depLoading"></Spin>
@ -62,6 +62,18 @@
type: String, type: String,
default: "点击选择区域", default: "点击选择区域",
}, },
placement: {
type: String,
default: "right",
},
width: {
type: [Number, String],
default: 250,
},
treeMaxHeight: {
type: String,
default: "500px",
},
}, },
data() { data() {
return { return {

Loading…
Cancel
Save