马宇豪
2025-03-04 1b9fea7d4af68d8f933b2dc42bf6084b9646f64c
src/views/doublePrevent/riskLevel/riskCheckUnit/components/checkUnitDialog.vue
对比新文件
@@ -0,0 +1,260 @@
<template>
    <div class="system-add-menu-container">
        <el-dialog :title="title" v-model="isShowCheckUnitDialog" append-to-body :close-on-click-modal="false" width="50%">
            <el-divider></el-divider>
            <div class="checkUnit-form">
                <el-form :model="checkUnitForm" :rules="checkUnitFormRules" ref="checkUnitFormRef" size="default" label-width="120px">
                    <el-row :gutter="35">
                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="12" class="mb20">
                            <el-form-item label="任务单元名称" prop="taskUnitName">
                                <el-input class="input-add" :disabled="!disabled" v-model.trim="checkUnitForm.taskUnitName" placeholder="请输入任务单元名称" clearable></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="12" class="mb20">
                            <el-form-item label="任务单元说明" prop="note">
                                <el-input class="input-add" :disabled="!disabled" v-model.trim="checkUnitForm.note" placeholder="请输入任务单元说明" clearable></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="12" class="mb20" v-show="personTime">
                            <el-form-item label="创建人" prop="location">
                                <el-input class="input-add" :disabled="!disabled" v-model.trim="checkUnitForm.createByUserName" placeholder="请输入区域位置"></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="12" class="mb20" v-show="personTime">
                            <el-form-item label="创建时间" prop="location">
                                <el-input class="input-add" :disabled="!disabled" v-model.trim="checkUnitForm.gmtCreate" placeholder="请输入区域位置"></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="12" class="mb20" v-show="personTime">
                            <el-form-item label="最后修改人" prop="location">
                                <el-input class="input-add" :disabled="!disabled" v-model.trim="checkUnitForm.lastEditUserName" placeholder="请输入区域位置"></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="12" class="mb20" v-show="personTime">
                            <el-form-item label="最后修改时间" prop="location">
                                <el-input class="input-add" :disabled="!disabled" v-model.trim="checkUnitForm.gmtModitify" placeholder="请输入区域位置"></el-input>
                            </el-form-item>
                        </el-col>
                    </el-row>
                </el-form>
            </div>
            <div class="checkUnit-point">
                <el-tabs class="active" v-model="activeName">
                    <el-tab-pane label="检查项信息" name="checkUnit">
                        <div class="filter-container">
                            <el-button size="default" :disabled="!disabled" type="success" @click="onOpenDialogRef('新增', '')">
                                <el-icon>
                                    <ele-FolderAdd />
                                </el-icon>
                                选择风险管控措施
                            </el-button>
                        </div>
                        <el-table :data="measureData" border fit highlight-current-row style="width: 100%">
                            <el-table-column type="index" label="序号" width="60" />
                            <el-table-column prop="checkContent" label="管控内容" show-overflow-tooltip align="center"></el-table-column>
                            <el-table-column label="操作" width="150" align="center">
                                <template #default="scope">
                                    <el-button size="small" text :disabled="!disabled" type="danger" @click="onDelCheckUnit(scope.$index, scope.row)">删除</el-button>
                                </template>
                            </el-table-column>
                        </el-table>
                    </el-tab-pane>
                </el-tabs>
            </div>
            <template #footer>
                <span class="dialog-footer" v-show="disabled">
                    <el-button @click="isShowCheckUnitDialog = !isShowCheckUnitDialog" size="default">取 消</el-button>
                    <el-button type="primary" @click="submitCheckUnit" v-throttle size="default">确 定</el-button>
                </span>
            </template>
        </el-dialog>
        <el-dialog title="选择风险管控措施" v-model="isShowSelectMeasureControlDialog" append-to-body :close-on-click-modal="false" width="70%">
            <select-measure-control-dialog ref="SelectMeasureControlDialogRef" @receiveRiskControlId="receiveRiskControlId"></select-measure-control-dialog>
        </el-dialog>
    </div>
</template>
<script lang="ts">
import SelectMeasureControlDialog from './selectMeasureControlDialog.vue';
import { reactive, toRefs, ref } from 'vue';
import { checkUnitApi } from '/@/api/doublePreventSystem/checkUnit';
import { ElMessage } from 'element-plus';
interface stateType {
    isShowCheckUnitDialog: Boolean;
    disabled: Boolean;
    personTime: Boolean;
    isShowSelectMeasureControlDialog: Boolean;
    checkUnitForm: {
        taskUnitName: string | null;
        note: string | null;
        measureList: [];
    };
    title: string;
    activeName: string;
    measureData: [];
    checkUnitData: [];
    checkUnitFormRules: {};
}
export default {
    name: 'checkUnitDialog',
    components: { SelectMeasureControlDialog },
    setup(props: any, context: any) {
        const checkUnitFormRef = ref();
        const riskControlMeasureDialogRef = ref();
        const state = reactive<stateType>({
            title: '',
            disabled: false,
            personTime: false,
            activeName: 'checkUnit',
            measureData: [],
            checkUnitData: [],
            isShowCheckUnitDialog: false,
            isShowSelectMeasureControlDialog: false,
            checkUnitForm: {
                taskUnitName: null,
                note: null,
                measureList: []
            },
            checkUnitFormRules: {
                taskUnitName: [{ required: true, message: '请填写任务单元名称', trigger: 'blur' }],
                note: [{ required: true, message: '请填写任务单元说明', trigger: 'change' }]
            }
        });
        //打开模态框
        const openCheckUnitDialog = (type: string, value: object) => {
            state.isShowCheckUnitDialog = true;
            setTimeout(() => {
                checkUnitFormRef.value.clearValidate();
            });
            if (type === '新增') {
                state.disabled = true;
                state.personTime = false;
                state.title = '新增隐患排查单元';
                state.measureData = [];
                state.checkUnitForm = {
                    taskUnitName: null,
                    note: null,
                    measureList: []
                };
            } else if (type === '查看') {
                state.disabled = false;
                state.personTime = true;
                state.title = '查看隐患排查单元';
                state.checkUnitForm = JSON.parse(JSON.stringify(value));
                state.measureData = state.checkUnitForm.measureList;
            } else {
                state.disabled = true;
                state.personTime = false;
                state.title = '修改隐患排查单元';
                state.checkUnitForm = JSON.parse(JSON.stringify(value));
                state.measureData = state.checkUnitForm.measureList;
            }
        };
        const onOpenDialogRef = () => {
            state.isShowSelectMeasureControlDialog = true;
        };
        const onDelCheckUnit = (value: number, scope: object) => {
            state.measureData.splice(value, 1);
        };
        const receiveRiskControlId = (value: []) => {
            state.isShowSelectMeasureControlDialog = false;
            state.measureData = value;
            state.checkUnitForm.measureList = JSON.parse(
                JSON.stringify(
                    value.map((item: { id: number }) => {
                        return item.id;
                    })
                )
            );
        };
        //新增修改提交
        const submitCheckUnit = async () => {
            checkUnitFormRef.value.validate(async (valid: Boolean) => {
                if (valid) {
                    if (state.title === '新增隐患排查单元') {
                        let res = await checkUnitApi().addCheckUnit(state.checkUnitForm);
                        if (res.data.code === '200') {
                            ElMessage({
                                type: 'success',
                                message: '隐患排查单元新增成功',
                                duration: 2000
                            });
                            state.isShowCheckUnitDialog = false;
                            context.emit('refreshCheckUnit');
                        } else {
                            ElMessage({
                                type: 'warning',
                                message: res.data.msg
                            });
                        }
                    } else {
                        let res = await checkUnitApi().modCheckUnit(state.checkUnitForm);
                        if (res.data.code === '200') {
                            ElMessage({
                                type: 'success',
                                message: '隐患排查单元修改成功',
                                duration: 2000
                            });
                            state.isShowCheckUnitDialog = false;
                            context.emit('refreshCheckUnit');
                        } else {
                            ElMessage({
                                type: 'warning',
                                message: res.data.msg
                            });
                        }
                    }
                } else {
                    ElMessage({
                        type: 'warning',
                        message: '请完善基本信息'
                    });
                }
            });
        };
        return {
            ...toRefs(state),
            checkUnitFormRef,
            submitCheckUnit,
            onDelCheckUnit,
            onOpenDialogRef,
            openCheckUnitDialog,
            receiveRiskControlId,
            riskControlMeasureDialogRef
        };
    }
};
</script>
<style scoped>
::v-deep.el-divider--horizontal {
    margin-top: 0px !important;
}
::v-deep.el-dialog__body {
    padding-top: 10px !important;
}
.filter-container {
    padding: 10px 0px;
}
:deep(.el-textarea.is-disabled .el-textarea__inner) {
    background-color: var(--el-card-bg-color);
    color: var(--el-input-text-color, var(--el-text-color-regular));
}
:deep(.el-input.is-disabled .el-input__inner) {
    color: var(--el-input-text-color, var(--el-text-color-regular));
}
:deep(.el-input.is-disabled .el-input__wrapper) {
    background-color: var(--el-card-bg-color);
}
</style>