Files
school-developer/src/views/purchase/acceptanceItemConfig/form.vue
2026-02-05 15:37:24 +08:00

136 lines
4.2 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 ? '编辑' : '新增'" v-model="visible"
:close-on-click-modal="false" draggable>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="90px" v-loading="loading">
<el-row :gutter="24">
<el-col :span="12" class="mb20">
<el-form-item label="remark" prop="remark">
<el-input v-model="form.remark" placeholder="请输入remark"/>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-form-item label="关联验收类型A:货物 B:工程 C:服务" prop="acceptanceType">
<el-input v-model="form.acceptanceType" placeholder="请输入关联验收类型A:货物 B:工程 C:服务"/>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-form-item label="验收项名称" prop="itemName">
<el-input v-model="form.itemName" placeholder="请输入验收项名称"/>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-form-item label="是否启用 0不启用 1:启用" prop="isEnabled">
<el-input v-model="form.isEnabled" placeholder="请输入是否启用 0不启用 1:启用"/>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-form-item label="排序" prop="sortOrder">
<el-input v-model="form.sortOrder" placeholder="请输入排序"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="visible = false"> </el-button>
<el-button type="primary" @click="onSubmit" :disabled="loading"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts" name="AcceptanceItemConfigDialog">
// ========== 1. 导入语句 ==========
import { useDict } from '/@/hooks/dict';
import { rule } from '/@/utils/validate';
import { useMessage } from "/@/hooks/message";
import { getObj, addObj, putObj, validateExist } from '/@/api/purchase/acceptanceItemConfig';
// ========== 2. 组件定义 ==========
// 定义组件事件
const emit = defineEmits(['refresh']);
// ========== 3. 响应式数据定义 ==========
// 基础响应式变量
const dataFormRef = ref(); // 表单引用
const visible = ref(false); // 弹窗显示状态
const loading = ref(false); // 加载状态
// 表单数据对象
const form = reactive({
id: '', // 主键
remark: '', // ${field.fieldComment}
acceptanceType: '', // 关联验收类型A:货物 B:工程 C:服务
itemName: '', // 验收项名称
isEnabled: '', // 是否启用 0不启用 1:启用
sortOrder: '', // 排序
});
// ========== 4. 字典数据处理 ==========
// ========== 5. 表单校验规则 ==========
const dataRules = ref({
});
// ========== 6. 方法定义 ==========
// 获取详情数据
const getAcceptanceItemConfigData = async (id: string) => {
try {
loading.value = true;
const { data } = await getObj({ id: id });
// 直接将第一条数据赋值给表单
Object.assign(form, data[0]);
} catch (error) {
useMessage().error('获取数据失败');
} finally {
loading.value = false;
}
};
// 打开弹窗方法
const openDialog = (id: string) => {
visible.value = true;
form.id = '';
// 重置表单数据
nextTick(() => {
dataFormRef.value?.resetFields();
});
// 获取AcceptanceItemConfig信息
if (id) {
form.id = id;
getAcceptanceItemConfigData(id);
}
};
// 提交表单方法
const onSubmit = async () => {
loading.value = true; // 防止重复提交
// 表单校验
const valid = await dataFormRef.value.validate().catch(() => {});
if (!valid) {
loading.value = false;
return false;
}
try {
// 根据是否有ID判断是新增还是修改
form.id ? await putObj(form) : await addObj(form);
useMessage().success(form.id ? '修改成功' : '添加成功');
visible.value = false;
emit('refresh'); // 通知父组件刷新列表
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
};
// ========== 7. 对外暴露 ==========
// 暴露方法给父组件
defineExpose({
openDialog
});
</script>