Files
pj_admin_cloud/src/views/mch/mch-manage/form.vue
T

307 lines
9.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<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>