Files
guofu-admin/modules/views/bak/site/components/siteEdit.vue
2024-08-23 22:28:24 +08:00

276 lines
7.1 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>
<ele-modal
:width="800"
:visible="visible"
:maskClosable="false"
:maxable="maxable"
:title="isUpdate ? '编辑' : '添加'"
:body-style="{ paddingBottom: '28px' }"
@update:visible="updateVisible"
@ok="save"
>
<a-form
ref="formRef"
:model="form"
:rules="rules"
:label-col="styleResponsive ? { md: 4, sm: 5, xs: 24 } : { flex: '90px' }"
:wrapper-col="
styleResponsive ? { md: 19, sm: 19, xs: 24 } : { flex: '1' }
"
>
<a-form-item label="场地名称" name="name">
<a-input
allow-clear
placeholder="请输入场地名称"
v-model:value="form.name"
/>
</a-form-item>
<a-form-item label="封面图" name="thumb">
<a-input
allow-clear
placeholder="请输入封面图"
v-model:value="form.thumb"
/>
</a-form-item>
<a-form-item label="每小时价格" name="price">
<a-input
allow-clear
placeholder="请输入每小时价格"
v-model:value="form.price"
/>
</a-form-item>
<a-form-item label="营业时间" name="businessTime">
<a-input
allow-clear
placeholder="请输入营业时间"
v-model:value="form.businessTime"
/>
</a-form-item>
<a-form-item label="场馆地址" name="address">
<a-input
allow-clear
placeholder="请输入场馆地址"
v-model:value="form.address"
/>
</a-form-item>
<a-form-item label="场馆介绍" name="info">
<a-input
allow-clear
placeholder="请输入场馆介绍"
v-model:value="form.info"
/>
</a-form-item>
<a-form-item label="场馆电话" name="tel">
<a-input
allow-clear
placeholder="请输入场馆电话"
v-model:value="form.tel"
/>
</a-form-item>
<a-form-item label="排序" name="sortNumber">
<a-input-number
:min="0"
:max="9999"
class="ele-fluid"
placeholder="请输入排序号"
v-model:value="form.sortNumber"
/>
</a-form-item>
<a-form-item label="类型1天2小时" name="type">
<a-input
allow-clear
placeholder="请输入类型1天2小时"
v-model:value="form.type"
/>
</a-form-item>
<a-form-item label="天数或小时" name="num">
<a-input
allow-clear
placeholder="请输入天数或小时"
v-model:value="form.num"
/>
</a-form-item>
<a-form-item label="退款比率" name="proportion">
<a-input
allow-clear
placeholder="请输入退款比率"
v-model:value="form.proportion"
/>
</a-form-item>
<a-form-item label="退款规则组" name="moneyJson">
<a-input
allow-clear
placeholder="请输入退款规则组"
v-model:value="form.moneyJson"
/>
</a-form-item>
<a-form-item label="更新时间" name="updateTime">
<a-input
allow-clear
placeholder="请输入更新时间"
v-model:value="form.updateTime"
/>
</a-form-item>
<a-form-item label="周末活动订场开关1开0关" name="weekendOpen">
<a-input
allow-clear
placeholder="请输入周末活动订场开关1开0关"
v-model:value="form.weekendOpen"
/>
</a-form-item>
</a-form>
</ele-modal>
</template>
<script lang="ts" setup>
import { ref, reactive, watch } from 'vue';
import { Form, message } from 'ant-design-vue';
import { assignObject, uuid } from 'ele-admin-pro';
import { addSite, updateSite } from '@/api/booking/site';
import { Site } from '@/api/booking/site/model';
import { useThemeStore } from '@/store/modules/theme';
import { storeToRefs } from 'pinia';
import { ItemType } from 'ele-admin-pro/es/ele-image-upload/types';
import { FormInstance } from 'ant-design-vue/es/form';
import { FileRecord } from '@/api/system/file/model';
// 是否是修改
const isUpdate = ref(false);
const useForm = Form.useForm;
// 是否开启响应式布局
const themeStore = useThemeStore();
const { styleResponsive } = storeToRefs(themeStore);
const props = defineProps<{
// 弹窗是否打开
visible: boolean;
// 修改回显的数据
data?: Site | null;
}>();
const emit = defineEmits<{
(e: 'done'): void;
(e: 'update:visible', visible: boolean): void;
}>();
// 提交状态
const loading = ref(false);
// 是否显示最大化切换按钮
const maxable = ref(true);
// 表格选中数据
const formRef = ref<FormInstance | null>(null);
const images = ref<ItemType[]>([]);
// 用户信息
const form = reactive<Site>({
id: undefined,
name: undefined,
thumb: undefined,
price: undefined,
businessTime: undefined,
address: undefined,
info: undefined,
tel: undefined,
sortNumber: undefined,
type: undefined,
num: undefined,
proportion: undefined,
moneyJson: undefined,
createTime: undefined,
updateTime: undefined,
weekendOpen: undefined,
siteId: undefined,
siteName: '',
status: 0,
comments: '',
sortNumber: 100
});
/* 更新visible */
const updateVisible = (value: boolean) => {
emit('update:visible', value);
};
// 表单验证规则
const rules = reactive({
siteName: [
{
required: true,
type: 'string',
message: '请填写名称',
trigger: 'blur'
}
]
});
const chooseImage = (data: FileRecord) => {
images.value.push({
uid: data.id,
url: data.path,
status: 'done'
});
form.image = data.path;
};
const onDeleteItem = (index: number) => {
images.value.splice(index, 1);
form.image = '';
};
const { resetFields } = useForm(form, rules);
/* 保存编辑 */
const save = () => {
if (!formRef.value) {
return;
}
formRef.value
.validate()
.then(() => {
loading.value = true;
const formData = {
...form
};
const saveOrUpdate = isUpdate.value ? updateSite : addSite;
saveOrUpdate(formData)
.then((msg) => {
loading.value = false;
message.success(msg);
updateVisible(false);
emit('done');
})
.catch((e) => {
loading.value = false;
message.error(e.message);
});
})
.catch(() => {});
};
watch(
() => props.visible,
(visible) => {
if (visible) {
images.value = [];
if (props.data) {
assignObject(form, props.data);
if(props.data.image){
images.value.push({
uid: uuid(),
url: props.data.image,
status: 'done'
})
}
isUpdate.value = true;
} else {
isUpdate.value = false;
}
} else {
resetFields();
}
},
{ immediate: true }
);
</script>