You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
928 lines
29 KiB
928 lines
29 KiB
<template>
|
|
<div class="user-edit">
|
|
<!-- Drawer抽屉 -->
|
|
<Drawer :title="title" v-model="visible" width="720" draggable :mask-closable="type == '0'">
|
|
<div :style="{ maxHeight: maxHeight }" class="drawer-content">
|
|
|
|
|
|
<Form ref="form" :model="form" :rules="formValidate" label-position="top">
|
|
<Row :gutter="32">
|
|
<Col span="12">
|
|
<FormItem label="店铺名称" prop="shopName">
|
|
<Input v-model="form.shopName" autocomplete="off" :maxlength="16" />
|
|
</FormItem>
|
|
</Col>
|
|
<Col span="12">
|
|
<FormItem label="店铺图标" class="form-noheight">
|
|
<upload-pic-input v-model="form.shopIcon"></upload-pic-input>
|
|
</FormItem>
|
|
</Col>
|
|
</Row>
|
|
<Row :gutter="32">
|
|
<Col span="12">
|
|
<FormItem label="所属区域" prop="shopArea" class="form-noheight">
|
|
<shopArea-tree-choose @on-change="handleSelectShopAreaTree" :root-id="shopAreaRootId"
|
|
ref="shopAreaTree"></shopArea-tree-choose>
|
|
</FormItem>
|
|
</Col>
|
|
<Col span="12">
|
|
<FormItem label="店铺分类" class="form-noheight">
|
|
<dict dict="shopType" v-model="form.shopType" transfer />
|
|
</FormItem>
|
|
</Col>
|
|
</Row>
|
|
<Row :gutter="32">
|
|
<Col span="12">
|
|
<FormItem label="商家类型" prop="merchantType">
|
|
<Select v-model="form.merchantType" transfer>
|
|
<Option :value="1">外卖商家</Option>
|
|
<Option :value="2">团购商家</Option>
|
|
</Select>
|
|
</FormItem>
|
|
</Col>
|
|
<Col span="12" v-if="form.merchantType == 1">
|
|
<FormItem label="起送价格" prop="startingPrice">
|
|
<InputNumber v-model="form.startingPrice" :min="0" :step="0.1" style="width: 100%" />
|
|
</FormItem>
|
|
</Col>
|
|
<Col span="12" v-else>
|
|
<FormItem label="学生商家" prop="isStudent">
|
|
<RadioGroup v-model="form.isStudent">
|
|
<Radio :label="1">是</Radio>
|
|
<Radio :label="0">否</Radio>
|
|
</RadioGroup>
|
|
</FormItem>
|
|
</Col>
|
|
</Row>
|
|
<Row :gutter="32" v-if="form.merchantType == 1">
|
|
<Col span="12">
|
|
<FormItem label="学生商家" prop="isStudent">
|
|
<RadioGroup v-model="form.isStudent">
|
|
<Radio :label="1">是</Radio>
|
|
<Radio :label="0">否</Radio>
|
|
</RadioGroup>
|
|
</FormItem>
|
|
</Col>
|
|
</Row>
|
|
<Row :gutter="32">
|
|
<Col span="12">
|
|
<FormItem label="明厨亮灶视频地址" prop="openKitchenVideoUrl">
|
|
<Input v-model="form.openKitchenVideoUrl" autocomplete="off" :maxlength="500" />
|
|
</FormItem>
|
|
</Col>
|
|
<Col span="12">
|
|
<FormItem label="堂食商家" prop="supportDineIn">
|
|
<RadioGroup v-model="form.supportDineIn">
|
|
<Radio :label="1">可堂食</Radio>
|
|
<Radio :label="0">无堂食</Radio>
|
|
</RadioGroup>
|
|
</FormItem>
|
|
</Col>
|
|
</Row>
|
|
<Row :gutter="32">
|
|
<Col span="24">
|
|
<FormItem label="店铺详细地址" prop="shopAddress">
|
|
<Input v-model="form.shopAddress" />
|
|
</FormItem>
|
|
</Col>
|
|
</Row>
|
|
<Row :gutter="32">
|
|
<Col span="12">
|
|
<FormItem label="联系人" prop="shopLename">
|
|
<Input v-model="form.shopLename" autocomplete="off" :maxlength="16" />
|
|
</FormItem>
|
|
</Col>
|
|
<Col span="12">
|
|
<FormItem label="联系电话" prop="contactPhone">
|
|
<Input v-model="form.contactPhone" autocomplete="off" :maxlength="16" />
|
|
</FormItem>
|
|
</Col>
|
|
</Row>
|
|
<Row :gutter="32">
|
|
<Col span="12">
|
|
<FormItem label="副标题">
|
|
<Input v-model="form.subtitle" autocomplete="off" :maxlength="16" />
|
|
</FormItem>
|
|
</Col>
|
|
</Row>
|
|
<Row :gutter="32">
|
|
<Col span="12">
|
|
<FormItem label="支付宝账号" prop="aliAccount">
|
|
<Input v-model="form.aliAccount" autocomplete="off" :maxlength="16" />
|
|
</FormItem>
|
|
</Col>
|
|
<Col span="12">
|
|
<FormItem label="支付宝户名" prop="aliName">
|
|
<Input v-model="form.aliName" autocomplete="off" :maxlength="16" />
|
|
</FormItem>
|
|
</Col>
|
|
</Row>
|
|
<Row :gutter="32">
|
|
<Col span="12">
|
|
<FormItem label="排名" prop="shoprank">
|
|
<Input v-model="form.shoprank" autocomplete="off" :maxlength="16" />
|
|
</FormItem>
|
|
</Col>
|
|
</Row>
|
|
<Divider v-if="type == '1'">云打印机</Divider>
|
|
<Alert v-if="type == '1' && form.printerSn" type="success" show-icon>
|
|
已绑定:{{ form.printerName || form.shopName || "云打印机" }}({{ form.printerSn }})
|
|
</Alert>
|
|
<Row :gutter="32" v-if="type == '1'">
|
|
<Col span="12">
|
|
<FormItem label="打印机SN">
|
|
<Input v-model="printerForm.sn" autocomplete="off" :maxlength="50" placeholder="请输入打印机编号" />
|
|
</FormItem>
|
|
</Col>
|
|
<Col span="12">
|
|
<FormItem label="设备绑定码">
|
|
<Input type="password" v-model="printerForm.key" autocomplete="off" :maxlength="255" placeholder="请输入设备绑定码" />
|
|
</FormItem>
|
|
</Col>
|
|
</Row>
|
|
<Row :gutter="32" v-if="type == '1'">
|
|
<Col span="12">
|
|
<FormItem label="设备名称">
|
|
<Input v-model="printerForm.name" autocomplete="off" :maxlength="50" placeholder="默认使用店铺名称" />
|
|
</FormItem>
|
|
</Col>
|
|
<Col span="12">
|
|
<FormItem label="操作">
|
|
<Button type="primary" :loading="printerBindLoading" @click="bindPrinter">绑定打印机</Button>
|
|
</FormItem>
|
|
</Col>
|
|
</Row>
|
|
<Divider>商家资质</Divider>
|
|
<Row :gutter="32">
|
|
<Col span="12">
|
|
<FormItem label="法人身份证正面" class="form-noheight">
|
|
<upload-pic-input v-model="form.zhengzhao"></upload-pic-input>
|
|
</FormItem>
|
|
</Col>
|
|
<Col span="12">
|
|
<FormItem label="法人身份证反面" class="form-noheight">
|
|
<upload-pic-input v-model="form.fanzhao"></upload-pic-input>
|
|
</FormItem>
|
|
</Col>
|
|
</Row>
|
|
<Row :gutter="32">
|
|
<Col span="12">
|
|
<FormItem label="法人姓名" prop="shopLename">
|
|
<Input v-model="form.shopLename" autocomplete="off" :maxlength="16" />
|
|
</FormItem>
|
|
</Col>
|
|
<Col span="12">
|
|
<FormItem label="法人身份证" prop="shopLecard">
|
|
<Input v-model="form.shopLecard" autocomplete="off" :maxlength="32" />
|
|
</FormItem>
|
|
</Col>
|
|
</Row>
|
|
<Row :gutter="32">
|
|
<Col span="12">
|
|
<FormItem label="营业执照" class="form-noheight">
|
|
<upload-pic-input v-model="form.yingyezhizhao"></upload-pic-input>
|
|
</FormItem>
|
|
</Col>
|
|
</Row>
|
|
<Row :gutter="32">
|
|
<Col span="24">
|
|
<FormItem label="其他补充证照" class="form-noheight">
|
|
<div v-for="(item, index) in form.qita" :key="index" style="display: flex; margin-bottom: 8px;">
|
|
<upload-pic-input :value="item" @input="setOtherImage(index, $event)"></upload-pic-input>
|
|
<Button style="margin-left: 8px;" @click="removeOtherImage(index)">删除</Button>
|
|
</div>
|
|
<Button icon="md-add" @click="addOtherImage">添加证照</Button>
|
|
</FormItem>
|
|
</Col>
|
|
</Row>
|
|
<Divider v-if="form.merchantType == 1">商家自配送</Divider>
|
|
<Row :gutter="32" v-if="form.merchantType == 1">
|
|
<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.merchantType == 1 && 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.merchantType == 1 && 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 v-if="form.merchantType == 1">中转配送</Divider>
|
|
<Row :gutter="32" v-if="form.merchantType == 1">
|
|
<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.merchantType == 1 && form.supportTransferDelivery == 1">
|
|
<Col span="24">
|
|
<FormItem label="中转地点" prop="transferAddressId" class="form-noheight">
|
|
<shopArea-tree-choose @on-change="handleSelectTransferAddress"
|
|
@on-clear="handleClearTransferAddress" ref="transferAddressTree"
|
|
:root-id="shopAreaRootId"
|
|
text="选择中转地点" placeholder="点击选择中转地点"
|
|
placement="top" tree-max-height="260px"></shopArea-tree-choose>
|
|
</FormItem>
|
|
</Col>
|
|
</Row>
|
|
<Divider />
|
|
<Row :gutter="32">
|
|
|
|
<Col span="24">
|
|
<FormItem label="备注">
|
|
<Input type="textarea" v-model="form.remark" :rows="4" />
|
|
</FormItem>
|
|
</Col>
|
|
</Row>
|
|
<Divider />
|
|
|
|
|
|
|
|
</Form>
|
|
</div>
|
|
<div class="drawer-footer br" v-show="type != '0'">
|
|
<Button type="primary" :loading="submitLoading" @click="submit">提交</Button>
|
|
<Button @click="visible = false">取消</Button>
|
|
</div>
|
|
</Drawer>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import {
|
|
getUsersByRoleName,
|
|
getDictDataByType
|
|
} from "@/api/index";
|
|
import {
|
|
validateUsername,
|
|
validateMobile,
|
|
validatePassword,
|
|
} from "@/libs/validate";
|
|
import shopAreaTreeChoose from "@/views/my-components/hiver/shopArea-tree-choose";
|
|
import uploadPicInput from "@/views/my-components/hiver/upload-pic-input";
|
|
import SetPassword from "@/views/my-components/hiver/set-password";
|
|
import dict from "@/views/my-components/hiver/dict";
|
|
import {
|
|
addShop,
|
|
editShop,
|
|
bindShopPrinter,
|
|
getShopPrintConfig,
|
|
findShopWorkerByMobile,
|
|
initShopArea,
|
|
loadShopArea,
|
|
} from "@/api/app";
|
|
export default {
|
|
name: "addEdit",
|
|
components: {
|
|
shopAreaTreeChoose,
|
|
uploadPicInput,
|
|
SetPassword,
|
|
dict,
|
|
},
|
|
props: {
|
|
value: {
|
|
type: Boolean,
|
|
default: false,
|
|
},
|
|
data: {
|
|
type: Object,
|
|
},
|
|
type: {
|
|
type: String,
|
|
default: "0",
|
|
},
|
|
},
|
|
data() {
|
|
const userInfo = JSON.parse(this.getStore("userInfo") || "{}");
|
|
return {
|
|
roleList: [],
|
|
roleList2: [],
|
|
shopAreaList: [],
|
|
businessDistrictLevelList: [],
|
|
userDepartmentId: userInfo.departmentId || "",
|
|
visible: this.value,
|
|
title: "",
|
|
passColor: "",
|
|
submitLoading: false,
|
|
workerLoading: false,
|
|
printerBindLoading: false,
|
|
workerMobile: "",
|
|
printerForm: {
|
|
sn: "",
|
|
key: "",
|
|
name: "",
|
|
},
|
|
maxHeight: 510,
|
|
form: {
|
|
address: [],
|
|
merchantType: 1,
|
|
isStudent: 0,
|
|
startingPrice: 0,
|
|
openKitchenVideoUrl: "",
|
|
supportDineIn: 0,
|
|
qita: [],
|
|
supportShopDelivery: 0,
|
|
orderBkge: 0,
|
|
supportTransferDelivery: 0,
|
|
},
|
|
formValidate: {
|
|
// 表单验证规则
|
|
username: [{
|
|
required: true,
|
|
message: "请输入登录账号",
|
|
trigger: "blur"
|
|
},
|
|
{
|
|
validator: validateUsername,
|
|
trigger: "blur"
|
|
},
|
|
],
|
|
shopLename: [{
|
|
required: true,
|
|
message: "请输入用户名",
|
|
trigger: "blur"
|
|
}, ],
|
|
mobile: [{
|
|
required: true,
|
|
message: "请输入手机号",
|
|
trigger: "blur"
|
|
},
|
|
{
|
|
validator: validateMobile,
|
|
trigger: "blur"
|
|
},
|
|
],
|
|
password: [{
|
|
required: true,
|
|
message: "请输入密码",
|
|
trigger: "blur"
|
|
},
|
|
{
|
|
validator: validatePassword,
|
|
trigger: "blur"
|
|
},
|
|
],
|
|
email: [{
|
|
required: true,
|
|
message: "请输入邮箱地址"
|
|
},
|
|
{
|
|
type: "email",
|
|
message: "邮箱格式不正确"
|
|
},
|
|
],
|
|
workerId: [{
|
|
validator: (rule, value, callback) => {
|
|
if (this.form.supportShopDelivery == 1 && !this.form.workerId) {
|
|
callback(new Error("请查询并绑定配送员"));
|
|
} else {
|
|
callback();
|
|
}
|
|
},
|
|
trigger: "change"
|
|
}],
|
|
shopArea: [{
|
|
required: true,
|
|
message: "请选择所属区域",
|
|
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: {
|
|
shopAreaRootId() {
|
|
return this.form.regionId || this.userDepartmentId || "";
|
|
},
|
|
boundWorkerText() {
|
|
if (!this.form.workerId) return "";
|
|
return `${this.form.workerName || ""} ${this.form.workerPhone || ""}`;
|
|
},
|
|
},
|
|
methods: {
|
|
init(v) {
|
|
this.getRoleList(v);
|
|
},
|
|
getRoleList(v) {
|
|
getUsersByRoleName("ROLE_OWNER").then((res) => {
|
|
if (res.success) {
|
|
this.roleList = res.result;
|
|
}
|
|
});
|
|
getUsersByRoleName("ROLE_MANAGER").then((res) => {
|
|
if (res.success) {
|
|
this.roleList2 = res.result;
|
|
}
|
|
});
|
|
getDictDataByType("mallMuseumType").then((res) => {
|
|
if (res.success) {
|
|
this.businessDistrictLevelList = res.result;
|
|
}
|
|
});
|
|
initShopArea().then((res) => {
|
|
|
|
if (res.success) {
|
|
res.result.forEach(function(e) {
|
|
if (e.isParent) {
|
|
e.loading = false;
|
|
e.children = [];
|
|
e._loading = false;
|
|
}
|
|
});
|
|
this.data = res.result;
|
|
}
|
|
});
|
|
getDictDataByType("shopType").then((res) => {
|
|
if (res.success) {
|
|
this.shopType = res.result;
|
|
}
|
|
});
|
|
},
|
|
bindPrinter() {
|
|
if (!this.form.id) {
|
|
this.$Message.warning("请先保存店铺后再绑定打印机");
|
|
return;
|
|
}
|
|
const sn = (this.printerForm.sn || "").trim();
|
|
const key = (this.printerForm.key || "").trim();
|
|
const name = (this.printerForm.name || this.form.shopName || "").trim();
|
|
if (!sn) {
|
|
this.$Message.warning("请输入打印机SN");
|
|
return;
|
|
}
|
|
if (!key) {
|
|
this.$Message.warning("请输入设备绑定码");
|
|
return;
|
|
}
|
|
this.printerBindLoading = true;
|
|
bindShopPrinter({
|
|
shopId: this.form.id,
|
|
sn,
|
|
key,
|
|
name,
|
|
shopName: this.form.shopName || "",
|
|
}).then((res) => {
|
|
this.printerBindLoading = false;
|
|
if (res.success) {
|
|
if (res.result) {
|
|
this.$set(this.form, "printerSn", res.result.printerSn || sn);
|
|
this.$set(this.form, "printerName", res.result.printerName || name);
|
|
this.$set(this.printerForm, "name", res.result.printerName || name);
|
|
}
|
|
this.$Message.success(res.message || "打印机绑定成功");
|
|
} else {
|
|
this.$Message.error(res.message || "打印机绑定失败");
|
|
}
|
|
}).catch(() => {
|
|
this.printerBindLoading = false;
|
|
});
|
|
},
|
|
loadPrintConfig() {
|
|
if (!this.form.id) return;
|
|
getShopPrintConfig({
|
|
shopId: this.form.id
|
|
}).then((res) => {
|
|
if (res.success && res.result) {
|
|
const printerSn = res.result.printerSn || "";
|
|
const printerName = res.result.printerName || this.form.shopName || "";
|
|
this.$set(this.form, "printerSn", printerSn);
|
|
this.$set(this.form, "printerName", printerName);
|
|
this.$set(this.form, "printingMethod", res.result.printingMethod || "bluetooth");
|
|
this.printerForm = {
|
|
sn: printerSn,
|
|
key: "",
|
|
name: printerName,
|
|
};
|
|
}
|
|
}).catch(() => {});
|
|
},
|
|
handleSelectShopAreaTree(v) {
|
|
this.form.shopArea = Array.isArray(v) ? (v[0] || "") : v;
|
|
if (!this.form.shopArea) {
|
|
this.form.shopAreaTitle = "";
|
|
return;
|
|
}
|
|
this.$nextTick(() => {
|
|
if (this.$refs.shopAreaTree) {
|
|
this.form.shopAreaTitle = this.$refs.shopAreaTree.shopAreaTitle || "";
|
|
}
|
|
});
|
|
},
|
|
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)));
|
|
},
|
|
addOtherImage() {
|
|
const images = Array.isArray(this.form.qita) ? this.form.qita : [];
|
|
images.push("");
|
|
this.$set(this.form, "qita", images);
|
|
},
|
|
setOtherImage(index, value) {
|
|
const images = Array.isArray(this.form.qita) ? this.form.qita.slice() : [];
|
|
images.splice(index, 1, value);
|
|
this.$set(this.form, "qita", images);
|
|
},
|
|
removeOtherImage(index) {
|
|
const images = Array.isArray(this.form.qita) ? this.form.qita.slice() : [];
|
|
images.splice(index, 1);
|
|
this.$set(this.form, "qita", images);
|
|
},
|
|
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;
|
|
});
|
|
},
|
|
parseOtherImages(value) {
|
|
if (Array.isArray(value)) return value;
|
|
if (!value) return [];
|
|
if (typeof value != "string") return [];
|
|
try {
|
|
const data = JSON.parse(value);
|
|
return Array.isArray(data) ? data : [];
|
|
} catch (e) {
|
|
return value.split(",").filter(item => item);
|
|
}
|
|
},
|
|
applyShopImages(data) {
|
|
const form = Object.assign({}, data);
|
|
if (form.shopImages) {
|
|
const images = form.shopImages.split("@@");
|
|
form.zhengzhao = form.zhengzhao || images[0] || "";
|
|
form.fanzhao = form.fanzhao || images[1] || "";
|
|
form.yingyezhizhao = form.yingyezhizhao || images[2] || "";
|
|
form.qita = form.qita || images[3] || [];
|
|
}
|
|
form.qita = this.parseOtherImages(form.qita);
|
|
return form;
|
|
},
|
|
normalizeRegisterFields() {
|
|
if (this.form.merchantType == null || this.form.merchantType === "") {
|
|
this.$set(this.form, "merchantType", 1);
|
|
}
|
|
if (this.form.isStudent == null || this.form.isStudent === "") {
|
|
this.$set(this.form, "isStudent", 0);
|
|
}
|
|
if (this.form.supportDineIn == null || this.form.supportDineIn === "") {
|
|
this.$set(this.form, "supportDineIn", 0);
|
|
}
|
|
this.form.merchantType = Number(this.form.merchantType);
|
|
this.form.isStudent = Number(this.form.isStudent);
|
|
this.form.supportDineIn = Number(this.form.supportDineIn);
|
|
this.form.startingPrice = this.form.merchantType == 1 ? Number(this.form.startingPrice || 0) : 0;
|
|
this.form.openKitchenVideoUrl = this.form.openKitchenVideoUrl || "";
|
|
if (!this.form.contactPhone && this.form.mobile) {
|
|
this.form.contactPhone = this.form.mobile;
|
|
}
|
|
if (!this.form.mobile && this.form.contactPhone) {
|
|
this.form.mobile = this.form.contactPhone;
|
|
}
|
|
this.form.qita = Array.isArray(this.form.qita) ? this.form.qita.filter(item => item) : [];
|
|
this.form.shopImages = [
|
|
this.form.zhengzhao || "",
|
|
this.form.fanzhao || "",
|
|
this.form.yingyezhizhao || "",
|
|
JSON.stringify(this.form.qita)
|
|
].join("@@");
|
|
},
|
|
normalizeSelfDeliveryForm() {
|
|
if (this.form.merchantType != 1) {
|
|
this.form.supportShopDelivery = 0;
|
|
}
|
|
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.merchantType != 1) {
|
|
this.form.supportTransferDelivery = 0;
|
|
}
|
|
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.normalizeRegisterFields();
|
|
this.normalizeSelfDeliveryForm();
|
|
this.normalizeTransferDeliveryForm();
|
|
this.$refs.form.validate((valid) => {
|
|
if (valid) {
|
|
if (typeof this.form.chargeTime == "object") {
|
|
this.form.chargeTime = this.format(this.form.chargeTime, "yyyy-MM-dd");
|
|
}
|
|
if (typeof this.form.startTime == "object") {
|
|
this.form.startTime = this.format(this.form.startTime, "yyyy-MM-dd");
|
|
}
|
|
if (typeof this.form.endTime == "object") {
|
|
this.form.endTime = this.format(this.form.endTime, "yyyy-MM-dd");
|
|
}
|
|
// 处理商品分类的名称
|
|
if (this.form.shopType != '' && this.form.shopType != null) {
|
|
this.shopType.forEach(item => {
|
|
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.saleCount
|
|
delete this.form.storeFlag
|
|
delete this.form.printingMethod
|
|
delete this.form.printingMethod
|
|
editShop(this.form).then((res) => {
|
|
this.submitLoading = false;
|
|
if (res.success) {
|
|
this.$Message.success("操作成功");
|
|
this.$emit("on-submit", true);
|
|
this.visible = false;
|
|
}
|
|
});
|
|
} else {
|
|
// 添加
|
|
this.submitLoading = true;
|
|
addShop(this.form).then((res) => {
|
|
this.submitLoading = false;
|
|
if (res.success) {
|
|
this.$Message.success("操作成功");
|
|
this.$emit("on-submit", true);
|
|
this.visible = false;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
},
|
|
setCurrentValue(value) {
|
|
if (value === this.visible) {
|
|
return;
|
|
}
|
|
if (this.type == "1") {
|
|
this.title = "编辑店铺";
|
|
this.maxHeight =
|
|
Number(document.documentElement.clientHeight - 121) + "px";
|
|
} else if (this.type == "2") {
|
|
this.title = "添加店铺";
|
|
this.maxHeight =
|
|
Number(document.documentElement.clientHeight - 121) + "px";
|
|
} else {
|
|
this.title = "店铺详情";
|
|
this.maxHeight = "100%";
|
|
}
|
|
// 清空数据
|
|
this.$refs.form.resetFields();
|
|
if (this.type == "0" || this.type == "1") {
|
|
// 回显数据
|
|
let data = this.data;
|
|
// 地址
|
|
if (data.address) {
|
|
data.address = data.address.split(",");
|
|
} else {
|
|
data.address = [];
|
|
}
|
|
// 回显
|
|
const registerData = this.applyShopImages(data);
|
|
this.form = Object.assign({}, registerData, {
|
|
merchantType: registerData.merchantType == null ? 1 : Number(registerData.merchantType),
|
|
isStudent: registerData.isStudent == null ? 0 : Number(registerData.isStudent),
|
|
startingPrice: registerData.startingPrice == null ? 0 : Number(registerData.startingPrice),
|
|
openKitchenVideoUrl: registerData.openKitchenVideoUrl || "",
|
|
supportDineIn: registerData.supportDineIn == null ? 0 : Number(registerData.supportDineIn),
|
|
contactPhone: registerData.contactPhone || registerData.mobile || "",
|
|
mobile: registerData.mobile || registerData.contactPhone || "",
|
|
zhengzhao: registerData.zhengzhao || "",
|
|
fanzhao: registerData.fanzhao || "",
|
|
yingyezhizhao: registerData.yingyezhizhao || "",
|
|
shopLename: registerData.shopLename || "",
|
|
shopLecard: registerData.shopLecard || "",
|
|
qita: registerData.qita || [],
|
|
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.printerForm = {
|
|
sn: this.form.printerSn || "",
|
|
key: "",
|
|
name: this.form.printerName || this.form.shopName || "",
|
|
};
|
|
this.loadPrintConfig();
|
|
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.form = {
|
|
/*type: 0,
|
|
sex: "",
|
|
address: [],*/
|
|
merchantType: 1,
|
|
isStudent: 0,
|
|
startingPrice: 0,
|
|
openKitchenVideoUrl: "",
|
|
supportDineIn: 0,
|
|
qita: [],
|
|
supportShopDelivery: 0,
|
|
orderBkge: 0,
|
|
supportTransferDelivery: 0,
|
|
};
|
|
this.printerForm = {
|
|
sn: "",
|
|
key: "",
|
|
name: "",
|
|
};
|
|
this.workerMobile = "";
|
|
this.$nextTick(() => {
|
|
this.$refs.shopAreaTree.setData("", "");
|
|
if (this.$refs.transferAddressTree) {
|
|
this.$refs.transferAddressTree.setData("", "");
|
|
}
|
|
});
|
|
}
|
|
this.visible = value;
|
|
},
|
|
},
|
|
watch: {
|
|
value(val) {
|
|
this.setCurrentValue(val);
|
|
},
|
|
visible(value) {
|
|
this.$emit("input", value);
|
|
},
|
|
},
|
|
mounted() {
|
|
this.init();
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style lang="less">
|
|
@import "@/styles/drawer-common.less";
|
|
</style>
|