307 lines
9.7 KiB
Vue
307 lines
9.7 KiB
Vue
<template>
|
||
<el-dialog :title="form.id ? '编辑' : '新增'" width="50%" v-model="visible" :close-on-click-modal="false" draggable>
|
||
<el-form ref="dataFormRef" :model="form" :rules="dataRules" label-width="140px" v-loading="loading">
|
||
<el-row :gutter="24">
|
||
<el-col :span="24" class="mb20">
|
||
<el-form-item label="商户名:" prop="name">
|
||
<el-input v-model.trim="form.name" placeholder="请输入商户名" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="24" class="mb20">
|
||
<el-form-item label="部门:" prop="deptId">
|
||
<select-dept v-model="form.deptId" placeholder="请选择部门" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="24" class="mb20">
|
||
<el-form-item label="商户类型:" prop="types">
|
||
<el-radio-group v-model="form.types">
|
||
<el-radio
|
||
:label="item.value"
|
||
:disabled="merchantTypeRadioDisabled"
|
||
v-for="(item, index) in merchant_type"
|
||
border
|
||
:key="index"
|
||
@click="handleClickRadio(item.value)"
|
||
>
|
||
{{ item.label }}
|
||
</el-radio>
|
||
</el-radio-group>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col v-if="form.types == '2'" :span="24" class="mb20">
|
||
<el-form-item label="合作商家类型:" prop="supType">
|
||
<el-radio-group v-model="form.supType" @change="(value:string) => form.supType = value">
|
||
<el-radio border :label="item.value" v-for="(item, index) in wallet_mch_sup_type" :key="index">{{ item.label }}</el-radio>
|
||
</el-radio-group>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col v-if="form.types == '2' && form.supType == '20'" :span="24" class="mb20">
|
||
<el-form-item label="合作状态:" prop="cooperationStatus">
|
||
<el-radio-group v-model="form.cooperationStatus">
|
||
<el-radio border :label="item.value" v-for="(item, index) in yes_no_type" :key="index">{{ item.label }}</el-radio>
|
||
</el-radio-group>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col v-if="form.types == '2' && form.supType == '20'" :span="24" class="mb20">
|
||
<el-form-item label="品牌:" prop="parentId">
|
||
<select-mch v-model="form.parentId" :apiParams="{ types: '2', supType: '10' }" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col v-if="form.types == '2'" :span="24" class="mb20">
|
||
<el-form-item label="分类:" prop="catgoryId">
|
||
<select-mch-catory v-model="form.catgoryId" :apiParams="{ bizType: form.types }" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="24" class="mb20">
|
||
<el-form-item label="商户logo:" prop="logoPic">
|
||
<upload-img v-model:imageUrl="form.logoPic" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="24" class="mb20">
|
||
<el-form-item label="轮播图:" prop="swiperPic">
|
||
<upload-imgs v-model="form.swiperPic" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12" class="mb20">
|
||
<el-form-item prop="sort">
|
||
<template #label>
|
||
<span>排序:</span>
|
||
<tip content="越大越在前" />
|
||
</template>
|
||
<el-input-number v-model="form.sort" placeholder="" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col v-if="form.types == '1'" :span="24" class="mb20">
|
||
<el-form-item prop="sort">
|
||
<template #label>
|
||
<span>是否对外开放:</span>
|
||
<tip content="食堂是否对外开放(对外开放非食堂人员可以在手机端看到食堂信息)" />
|
||
</template>
|
||
<el-radio-group v-model="form.canteenIsOpen">
|
||
<el-radio v-for="v in yes_no_type" :key="v.value" :label="v.value" border>
|
||
{{ v.label }}
|
||
</el-radio>
|
||
</el-radio-group>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col v-if="form.types == '2' && form.supType == '20'" :span="24" class="mb20">
|
||
<el-form-item label="优惠价格:" prop="discountsPrice">
|
||
<el-input v-model="form.discountsPrice" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="24" class="mb20">
|
||
<el-form-item label="联系电话:" prop="phone">
|
||
<el-input v-model.trim="form.phone" placeholder="请输入联系电话" />
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col v-if="form.types == '1'" :span="24" class="mb20">
|
||
<el-form-item label="营业时间:" class="my-0" />
|
||
<el-form-item class="ml-2" label="早上" prop="jobTime">
|
||
<el-time-picker
|
||
v-model="jobTime.morning"
|
||
placeholder="请选择营业时间"
|
||
is-range
|
||
range-separator="至"
|
||
start-placeholder="开始日期"
|
||
end-placeholder="结束日期"
|
||
value-format="HH:mm"
|
||
format="HH:mm"
|
||
/>
|
||
</el-form-item>
|
||
<el-form-item class="ml-2" label="中午" prop="jobTime">
|
||
<el-time-picker
|
||
v-model="jobTime.noon"
|
||
placeholder="请选择营业时间"
|
||
is-range
|
||
range-separator="至"
|
||
start-placeholder="开始日期"
|
||
end-placeholder="结束日期"
|
||
value-format="HH:mm"
|
||
format="HH:mm"
|
||
/>
|
||
</el-form-item>
|
||
<el-form-item class="ml-2" label="晚上" prop="jobTime">
|
||
<el-time-picker
|
||
v-model="jobTime.evening"
|
||
placeholder="请选择营业时间"
|
||
is-range
|
||
range-separator="至"
|
||
start-placeholder="开始日期"
|
||
end-placeholder="结束日期"
|
||
value-format="HH:mm"
|
||
format="HH:mm"
|
||
/>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="24" class="mb20">
|
||
<el-form-item label="店铺地址:" prop="addressDes">
|
||
<el-input type="textarea" v-model.trim="form.addressDes" placeholder="请输入店铺地址" />
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
</el-form>
|
||
<template #footer>
|
||
<el-button @click="visible = false">取消</el-button>
|
||
<el-button type="primary" @click="onSubmit" :disabled="loading">确认</el-button>
|
||
</template>
|
||
</el-dialog>
|
||
</template>
|
||
|
||
<script setup lang="ts" name="MerchantInfoDialog">
|
||
import { useDict } from "/@/hooks/dict"
|
||
import { useMessage } from "/@/hooks/message"
|
||
import { getObj, addObj, putObj } from "/@/api/wallet/mch-manage"
|
||
const emit = defineEmits(["refresh"])
|
||
|
||
// 定义变量内容
|
||
const dataFormRef = ref()
|
||
const visible = ref(false)
|
||
const loading = ref(false)
|
||
|
||
// 定义字典
|
||
const { merchant_type, wallet_mch_sup_type, yes_no_type } = useDict("merchant_type", "wallet_mch_sup_type", "yes_no_type")
|
||
|
||
// 提交表单数据
|
||
const form = reactive({
|
||
id: "",
|
||
deptId: "",
|
||
name: "",
|
||
types: "",
|
||
canteenIsOpen: "0",
|
||
logoPic: "",
|
||
collectMoneyCode: "",
|
||
swiperPic: "",
|
||
isSyncZy: "0",
|
||
visibleMobile: "0",
|
||
phone: "",
|
||
businessTime: "",
|
||
addressDes: "",
|
||
sort: 0,
|
||
supType: "",
|
||
cooperationStatus: "1",
|
||
parentId: "",
|
||
catgoryId: "",
|
||
discountsPrice: "",
|
||
})
|
||
const jobTime = reactive<{
|
||
[key: string]: string[]
|
||
}>({
|
||
morning: [],
|
||
noon: [],
|
||
evening: [],
|
||
})
|
||
const merchantTypeRadioDisabled = ref(false)
|
||
|
||
// 定义校验规则
|
||
const dataRules = {
|
||
name: [{ required: true, message: "商户名不能为空", trigger: "change" }],
|
||
types: [{ required: true, message: "请选择商户类型", trigger: "change" }],
|
||
logoPic: [{ required: true, message: "请上传商户logo", trigger: "change" }],
|
||
swiperPic: [{ required: true, message: "请上传商户轮播图", trigger: "change" }],
|
||
deptId: [{ required: true, message: "请选择部门", trigger: "change" }],
|
||
sort: [{ required: true, message: "请输入排序", trigger: "change" }],
|
||
catgoryId: [{ required: true, message: "请选择分类", trigger: "change" }],
|
||
supType: [{ required: true, message: "请选择合作商家类型", trigger: "change" }],
|
||
cooperationStatus: [{ required: true, message: "请选择合作状态", trigger: "change" }],
|
||
}
|
||
|
||
// 打开弹窗
|
||
const openDialog = async (id: string) => {
|
||
visible.value = true
|
||
form.id = ""
|
||
// 重置表单数据
|
||
dataFormRef.value?.resetFields()
|
||
for (const key in jobTime) {
|
||
jobTime[key] = []
|
||
}
|
||
// 获取merchantInfo信息
|
||
if (id) {
|
||
form.id = id
|
||
await getmerchantInfoData(id)
|
||
}
|
||
}
|
||
|
||
watch(
|
||
() => form.types,
|
||
(newVal) => {
|
||
if (newVal != "2") {
|
||
form.supType = ""
|
||
form.cooperationStatus = "1"
|
||
form.parentId = ""
|
||
form.discountsPrice = ""
|
||
}
|
||
},
|
||
)
|
||
|
||
// 提交
|
||
const onSubmit = async () => {
|
||
const valid = await dataFormRef.value.validate().catch(() => {})
|
||
if (!valid) return false
|
||
|
||
const _pa = {
|
||
...form,
|
||
isSyncZy: form.isSyncZy ? "1" : "0",
|
||
jobTime: (jobTime.morning?.join("-") || "") + "," + (jobTime.noon?.join("-") || "") + "," + (jobTime.evening?.join("-") || ""),
|
||
cooperationStatus: form.types == "2" && form.supType == "10" ? null : form.cooperationStatus,
|
||
parentId: form.types == "2" && form.supType == "10" ? -1 : form.parentId,
|
||
}
|
||
|
||
if (_pa.parentId == "") {
|
||
_pa.parentId = -1
|
||
}
|
||
|
||
try {
|
||
loading.value = true
|
||
form.id ? await putObj(_pa) : await addObj(_pa)
|
||
useMessage().success(form.id ? "修改成功" : "添加成功")
|
||
visible.value = false
|
||
emit("refresh")
|
||
} catch (err: any) {
|
||
useMessage().error(err.msg)
|
||
} finally {
|
||
loading.value = false
|
||
}
|
||
}
|
||
|
||
// 初始化表单数据
|
||
const getmerchantInfoData = async (id: string) => {
|
||
loading.value = true
|
||
try {
|
||
const res = await getObj(id)
|
||
if (res.code === 0) {
|
||
const regex = /^.*?,.*?,.*?$/
|
||
const resJobTime = res.data.jobTime && regex.test(res.data.jobTime) ? res.data.jobTime.split(",") : []
|
||
Object.assign(form, res.data, {
|
||
isSyncZy: res.data.isSyncZy == "1" ? true : false,
|
||
})
|
||
if (form.canteenIsOpen == undefined) {
|
||
form.canteenIsOpen = "0"
|
||
}
|
||
jobTime.morning = resJobTime[0]?.split("-") ?? []
|
||
jobTime.noon = resJobTime[1]?.split("-") ?? []
|
||
jobTime.evening = resJobTime[2]?.split("-") ?? []
|
||
}
|
||
} catch (error: any) {
|
||
useMessage().error(error.msg)
|
||
} finally {
|
||
loading.value = false
|
||
}
|
||
}
|
||
|
||
// 点击商户类型单选按钮
|
||
const handleClickRadio = (radioItemValue: string) => {
|
||
if (radioItemValue == form.types) {
|
||
form.types = ""
|
||
merchantTypeRadioDisabled.value = true
|
||
setTimeout(() => {
|
||
merchantTypeRadioDisabled.value = false
|
||
}, 0)
|
||
}
|
||
}
|
||
|
||
// 暴露变量
|
||
defineExpose({
|
||
openDialog,
|
||
})
|
||
</script>
|