|
|
|
@ -69,6 +69,78 @@ |
|
|
|
</FormItem> |
|
|
|
</Col> |
|
|
|
</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"> |
|
|
|
|
|
|
|
<Col span="24"> |
|
|
|
@ -108,6 +180,7 @@ |
|
|
|
import { |
|
|
|
addShop, |
|
|
|
editShop, |
|
|
|
findShopWorkerByMobile, |
|
|
|
initShopArea, |
|
|
|
loadShopArea, |
|
|
|
} from "@/api/app"; |
|
|
|
@ -142,9 +215,14 @@ |
|
|
|
title: "", |
|
|
|
passColor: "", |
|
|
|
submitLoading: false, |
|
|
|
workerLoading: false, |
|
|
|
workerMobile: "", |
|
|
|
maxHeight: 510, |
|
|
|
form: { |
|
|
|
address: [], |
|
|
|
supportShopDelivery: 0, |
|
|
|
orderBkge: 0, |
|
|
|
supportTransferDelivery: 0, |
|
|
|
}, |
|
|
|
formValidate: { |
|
|
|
// 表单验证规则 |
|
|
|
@ -192,9 +270,75 @@ |
|
|
|
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: { |
|
|
|
init(v) { |
|
|
|
this.getRoleList(v); |
|
|
|
@ -235,12 +379,95 @@ |
|
|
|
}); |
|
|
|
}, |
|
|
|
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) { |
|
|
|
this.form.passStrength = strength; |
|
|
|
}, |
|
|
|
submit() { |
|
|
|
this.normalizeSelfDeliveryForm(); |
|
|
|
this.normalizeTransferDeliveryForm(); |
|
|
|
this.$refs.form.validate((valid) => { |
|
|
|
if (valid) { |
|
|
|
if (typeof this.form.chargeTime == "object") { |
|
|
|
@ -252,30 +479,23 @@ |
|
|
|
if (typeof this.form.endTime == "object") { |
|
|
|
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) { |
|
|
|
this.shopType.forEach(item => { |
|
|
|
debugger; |
|
|
|
if (this.form.shopType == item.value) { |
|
|
|
this.form.shopTypeTitle = item.title; |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
this.form.shopMangerId = this.form.shopOwnerId |
|
|
|
this.cleanDisplayFields() |
|
|
|
if (this.type == "1") { |
|
|
|
// 编辑 |
|
|
|
this.submitLoading = true; |
|
|
|
delete this.form.products |
|
|
|
delete this.form.saleCount |
|
|
|
delete this.form.shopTakeaway |
|
|
|
delete this.form.storeFlag |
|
|
|
delete this.form.printingMethod |
|
|
|
delete this.form.printingMethod |
|
|
|
|
|
|
|
editShop(this.form).then((res) => { |
|
|
|
this.submitLoading = false; |
|
|
|
if (res.success) { |
|
|
|
@ -326,18 +546,42 @@ |
|
|
|
} else { |
|
|
|
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 { |
|
|
|
// 添加 |
|
|
|
//this.$refs.shopAreaTree.setData("", ""); |
|
|
|
this.form = { |
|
|
|
/*type: 0, |
|
|
|
sex: "", |
|
|
|
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; |
|
|
|
}, |
|
|
|
|