Files
td_official/src/views/safety/violationLevel/component/add.vue
2025-09-04 11:06:45 +08:00

193 lines
5.3 KiB
Vue

<template>
<div class="system-busViolationLevel-add">
<el-dialog v-model="isShowDialog" width="550px" :close-on-click-modal="false" :destroy-on-close="true">
<template #header>
<div v-drag="['.system-busViolationLevel-add .el-dialog', '.system-busViolationLevel-add .el-dialog__header']">添加违章等级</div>
</template>
<el-form ref="formRef" size="large" :model="formData" :rules="rules" label-width="90px">
<el-row>
<el-col :span="12">
<el-form-item label="违章等级" prop="grade">
<el-input v-model="formData.grade" placeholder="请输入违章等级" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="颜色" prop="color">
<el-color-picker v-model="formData.color" show-alpha />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="风险等级" prop="risx">
<el-select v-model="formData.risx" placeholder="请选择风险等级">
<el-option v-for="dict in risxList" :key="dict.key" :label="dict.value" :value="dict.key" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="岗位" prop="posts">
<el-select v-model="formData.posts" placeholder="请选择岗位" multiple>
<el-option v-for="dict in postListAll" :key="dict.postId" :label="dict.postName" :value="dict.postId" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="违章类型" prop="tourType">
<el-select v-model="formData.tourType" placeholder="请选择违章类型" multiple>
<el-option v-for="dict in tourTypeOptions" :key="dict.key" :label="dict.value" :value="dict.key" />
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="onSubmit"> </el-button>
<el-button @click="onCancel"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup lang="ts">
import { ref, reactive, getCurrentInstance } from 'vue';
import { ElMessage } from 'element-plus';
import { addViolationLevel } from '@/api/safety/violationLevel';
import { useUserStoreHook } from '@/store/modules/user';
// 获取用户 store
const userStore = useUserStoreHook();
// 从 store 中获取项目列表和当前选中的项目
const currentProject = computed(() => userStore.selectedProject);
// Props
const props = defineProps<{
tourTypeOptions: any[];
risxList: any[];
postListAll: any[];
}>();
const emit = defineEmits(['busViolationLevelList']);
const { proxy } = getCurrentInstance()!;
const formRef = ref<any>(null);
const menuRef = ref();
const isShowDialog = ref(false);
const loading = ref(false);
const formData = reactive({
id: undefined,
violationLevel: undefined,
dept: undefined,
color: undefined,
violationType: undefined as any,
wxOrPc: undefined,
createBy: undefined,
updateBy: undefined,
createdAt: undefined,
updatedAt: undefined,
deletedAt: undefined,
projectId: currentProject.value?.id,
riskType: '',
postWorkList: [] as any[],
postIdList: [] as any[]
});
const rules = {
id: [{ required: true, message: '主键ID不能为空', trigger: 'blur' }],
violationLevel: [
{
required: true,
validator: (_rule: any, value: string) => /^[A-Z]*$/g.test(value),
message: '请输入A-Z的字母',
trigger: 'change'
}
],
postIdList: [{ required: true, message: '岗位不能为空', trigger: 'blur' }]
};
// 打开弹窗
const openDialog = () => {
resetForm();
isShowDialog.value = true;
};
// 关闭弹窗
const closeDialog = () => {
isShowDialog.value = false;
};
// 取消操作
const onCancel = () => {
closeDialog();
};
// 表单重置
const resetForm = () => {
Object.assign(formData, {
id: undefined,
violationLevel: undefined,
color: undefined,
violationType: undefined,
dept: undefined,
wxOrPc: undefined,
createBy: undefined,
updateBy: undefined,
createdAt: undefined,
updatedAt: undefined,
deletedAt: undefined,
projectId: currentProject.value?.id,
riskType: '',
postWorkList: [] as any[],
postIdList: []
});
};
// 提交操作
const onSubmit = () => {
if (!formRef.value) return;
formRef.value.validate((valid: boolean) => {
if (valid) {
loading.value = true;
const param = JSON.parse(JSON.stringify(formData));
if (param.tourType?.length) {
param.tourType = param.tourType.join(',');
}
addViolationLevel(param)
.then(() => {
ElMessage.success('添加成功');
closeDialog();
emit('busViolationLevelList');
})
.finally(() => {
loading.value = false;
});
}
});
};
defineExpose({
openDialog,
closeDialog
});
</script>
<style lang="scss">
.system-busViolationLevel-add {
.el-col {
margin-top: 20px;
}
.el-select .el-input__wrapper {
width: 400px;
}
.el-select__tags {
white-space: nowrap;
text-overflow: ellipsis;
flex-wrap: nowrap;
overflow: hidden;
margin-left: 1px;
}
}
</style>