wms-elevue/src/views/content/layout/edit.vue
2024-07-15 15:50:28 +08:00

106 lines
2.7 KiB
Vue

<template>
<el-dialog
v-model="props.visible"
:title="props.layoutId?'编辑':'新增'"
width="500"
:close-on-click-modal="false"
:before-close="dialogClose"
>
<el-form
class="ls-form"
ref="formRef"
:model="formData"
label-width="80px"
>
<el-form-item label="位置编号" prop="location" :rules="{ required: true, message: '请输入位置编号', trigger: 'blur' }">
<number-input v-model="formData.location" type="textarea" placeholder="请输入位置编号"/>
</el-form-item>
<el-form-item
label="位置描述"
prop="description"
:rules="{ required: true, message: '请输入页面位置描述', trigger: 'blur' }"
>
<el-input
class="ls-input"
v-model="formData.description"
placeholder="请输入页面位置描述"
clearable
type="textarea"
/>
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input-number v-model="formData.sort"/>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogClose">取消</el-button>
<el-button :loading="subLoading" type="primary" @click="submit">
确定
</el-button>
</span>
</template>
</el-dialog>
</template>
<script lang="ts" setup>
import type {FormInstance} from "element-plus";
import {getLayoutDetail,layoutAdd,layoutUpdate} from "@/api/content/layout";
import {onMounted, reactive, shallowRef} from "vue";
import {message} from "@/utils/auth";
import {useLockFn} from "@/utils/useLockFn";
const emit = defineEmits(["success", "update:visible"]);
const formRef = shallowRef<FormInstance>();
const formData = reactive({
id: "",
description: "",
location: "",
sort: 0
});
const props = defineProps({
visible: {
type: Boolean,
required: true,
default: false
},
layoutId: {
type: Number,
required: true,
default: 0
}
});
const handleSubmit = async () => {
await formRef.value?.validate();
props.layoutId ? await layoutUpdate(formData) : await layoutAdd(formData);
message("操作成功");
emit("update:visible", false);
emit("success");
};
const dialogClose = () => {
emit("update:visible", false);
};
const { isLock:subLoading,lockFn: submit } = useLockFn(handleSubmit);
const setFormData = async () => {
const data = await getLayoutDetail(props.layoutId);
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key];
}
}
};
onMounted(() => {
if (props.layoutId) {
setFormData();
}
});
</script>