深海科学与工程研究所安全巡检系统
祖安之光
2025-10-15 28b0fd047c39f400802d9d85779d01b18b9d745c
src/views/saftyCheckMng/dailyCheck/index.vue
@@ -11,24 +11,44 @@
          >新增</el-button>
        </el-form-item>
        <el-form-item label="被检查部门/研究组:" >
          <el-select v-model="queryParams.researchGroup" placeholder="请选择" clearable>
<!--          <el-select v-model="queryParams.researchGroup" placeholder="请选择" clearable>-->
<!--            <el-option-->
<!--                v-for="item in deptList"-->
<!--                :key="item.deptId"-->
<!--                :label="item.deptName"-->
<!--                :value="item.deptId">-->
<!--            </el-option>-->
<!--          </el-select>-->
          <el-cascader v-model="queryParams.researchGroup" placeholder="请选择" :options="deptList" :show-all-levels="false" :props="{value: 'deptId',label: 'deptName',children: 'children',emitPath: false,checkStrictly: true}"/>
        </el-form-item>
        <el-form-item label="参加检查人员" >
          <el-input v-model.trim="queryParams.checkUser" placeholder="参加检查人员"></el-input>
        </el-form-item>
        <el-form-item label="检查类型" >
          <el-select v-model="queryParams.checkType" placeholder="请选择" clearable>
            <el-option
                v-for="item in deptList"
                :key="item.deptId"
                :label="item.deptName"
                :value="item.deptId">
                v-for="item in checkTypeList"
                :key="item.value"
                :label="item.label"
                :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="参加检查人员:" >
          <el-select v-model="queryParams.searchCheckUserId" placeholder="请选择" clearable>
            <el-option
                v-for="item in userList"
                :key="item.userId"
                :label="item.userName"
                :value="item.userId">
            </el-option>
        <el-form-item label="隐患" >
          <el-select v-model="queryParams.haveMainHazard" placeholder="请选择" clearable>
            <el-option :key="1" label="有" :value="1"></el-option>
            <el-option :key="0" label="无" :value="0"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="检查日期" >
          <el-date-picker
              v-model="checkDate"
              type="daterange"
              value-format="YYYY-MM-DD"
              range-separator="至"
              start-placeholder="开始日期"
              end-placeholder="结束日期"
          />
        </el-form-item>
        <el-form-item >
          <el-button type="primary" @click="getList">查询</el-button>
@@ -43,12 +63,12 @@
      <el-table-column prop="checkDate" align="center" label="检查时间"/>
      <el-table-column prop="checkPlace" align="center" label="检查地点"/>
      <el-table-column prop="checkRoom" align="center" label="检查房间号"/>
      <el-table-column prop="enactmentDate" align="center" label="参加检查人员">
      <el-table-column prop="checkUser" align="center" label="参加检查人员"/>
      <el-table-column prop="researchGroupName" align="center" label="被检查部门/研究组">
        <template #default="scope">
          {{scope.row.dailySafetyInspectionUsers.map(i=>i.checkUser).join('、')}}
          {{ scope.row.dailySafetyInspectionDepts.filter(item=>item.deptName && item.deptName !== '').map(i=>i.deptName).join('、') }}
        </template>
      </el-table-column>
      <el-table-column prop="researchGroupName" align="center" label="被检查部门/研究组"/>
      <el-table-column prop="checkContent" align="center" label="检查内容"/>
      <el-table-column label="操作" align="center">
        <template #default="scope">
@@ -89,11 +109,34 @@
    pageNum: 1,
    pageSize: 10,
    researchGroup: null,
    searchCheckUserId: null
    checkUser: '',
    checkType: null,
    haveMainHazard: null,
    checkBeginDate: '',
    checkEndDate: ''
  },
  originDeptList: [],
  dataList: [],
  deptList: [],
  userList: [],
  checkTypeList: [
    {
      value: 1,
      label: '综合检查'
    },
    {
      value: 2,
      label: '部门检查'
    },
    {
      value: 3,
      label: '实验室自查'
    },
    {
      value: 4,
      label: '专项检查'
    }
  ],
  total: 0,
  formConfig: {
    formItems: [
@@ -107,17 +150,9 @@
      },
      {
        label: '参加检查人员',
        prop: 'dailySafetyInspectionUsers',
        type: 'select',
        multiple: true,
        filterable: true,
        rules: [{ required: true, message: '请选择人员', trigger: 'change' }],
        options: () => {
          return state.userList.map(user => ({
            value: user.userId,
            label: user.userName
          }))
        }
        prop: 'checkUser',
        type: 'text',
        rules: [{ required: true, message: '请输入人员', trigger: 'blur' }],
      },
      {
        label: '检查地点',
@@ -133,15 +168,27 @@
      },
      {
        label: '被检查部门/研究组',
        prop: 'researchGroup',
        type: 'select',
        prop: 'dailySafetyInspectionDepts',
        type: 'cascader',
        showAllLevels: false,
        props: {
          value: 'deptId',
          label: 'deptName',
          children: 'children',
          emitPath: false,
          checkStrictly: true,
          multiple: true
        },
        rules: [{ required: true, message: '请选择部门', trigger: 'blur' }],
        options: () => {
          return state.deptList.map(dept => ({
            value: dept.deptId,
            label: dept.deptName
          }))
        }
        options: () => state.deptList
      },
      {
        label: '检查类型',
        prop: 'checkType',
        type: 'select',
        filterable: true,
        rules: [{ required: true, message: '请选择检查类型', trigger: 'change' }],
        options: () => state.checkTypeList
      },
      {
        label: '检查内容',
@@ -154,6 +201,7 @@
        label: '存在的主要隐患/问题',
        prop: 'mainHazard',
        type: 'textarea',
        placeholder: '没有则填“无”',
        autosize: { minRows: 3 },
        rules: [{ required: true, message: '请输入存在的主要隐患/问题', trigger: 'blur' }]
      },
@@ -161,6 +209,7 @@
        label: '整改措施',
        prop: 'rectificationMeasures',
        type: 'textarea',
        placeholder: '没有则填“无”',
        autosize: { minRows: 3 },
        rules: [{ required: true, message: '请输入整改措施', trigger: 'blur' }]
      },
@@ -168,25 +217,22 @@
        label: '复查结果',
        prop: 'examinationResults',
        type: 'textarea',
        autosize: { minRows: 3 }
        autosize: { minRows: 3 },
        rules: [{ required: true, message: '请输入复查结果', trigger: 'blur' }]
      },
      {
        label: '复查人员',
        prop: 'reCheckUserId',
        type: 'select',
        options: () => {
          return state.userList.map(user => ({
            value: user.userId,
            label: user.userName
          }))
        }
        prop: 'reCheckUser',
        type: 'text',
        rules: [{ required: true, message: '请输入复查人员', trigger: 'blur' }]
      },
      {
        label: '复查时间',
        prop: 'reCheckDate',
        type: 'date',
        dateType: 'date',
        valueFormat: 'YYYY-MM-DD'
        valueFormat: 'YYYY-MM-DD',
        rules: [{ required: true, message: '请选择复查时间', trigger: 'blur' }]
      },
      {
        label: '备注',
@@ -197,10 +243,11 @@
    ]
  },
  dataLoader: {},
  api: {}
  api: {},
  checkDate: []
});
const { queryParams, total, dataList,deptList, userList, formConfig, dataLoader, api } = toRefs(state);
const { queryParams, total, dataList,deptList, userList, formConfig, dataLoader, api, checkTypeList, checkDate } = toRefs(state);
onMounted(async ()=>{
  await getList()
  await getDeptList()
@@ -212,20 +259,22 @@
})
function getDeptList() {
  listDept({}).then(response => {
    state.deptList = response.data
  });
  listDept().then(response => {
    state.originDeptList = response.data
    state.deptList = proxy.handleTree(response.data, "deptId")
  })
}
function getUserList() {
  listUser().then(res => {
  listUser({pageNum: 1,pageSize: 999}).then(res => {
    state.userList = res.rows;
    state.total = res.total;
  })
};
const getList = async () => {
  loading.value = true
  state.queryParams.checkBeginDate = state.checkDate[0] || ''
  state.queryParams.checkEndDate = state.checkDate[1] || ''
  const res = await getDailySafetyInspectList(state.queryParams)
  if(res.code == 200){
    state.dataList = res.rows || []
@@ -238,7 +287,6 @@
const downloadFile = async (val)=>{
    let tableData = val
    tableData.checkNames = val.dailySafetyInspectionUsers.map(item=>item.checkUser).join('、')
    try {
      generateWordDocument('/dailyCheckSheet.docx', tableData, '日常安全检查记录表.docx');
    } catch (error){
@@ -250,10 +298,7 @@
}
const openDialog = (type, value) => {
  let initalData = JSON.parse(JSON.stringify(value))
  if(type == 'edit' || type == 'view'){
    initalData.dailySafetyInspectionUsers = value.dailySafetyInspectionUsers.map(i=>i.checkUserId)
  }
  const initalData = JSON.parse(JSON.stringify(value))
  dialogRef.value.openDialog(type, initalData)
}
@@ -263,8 +308,13 @@
    pageNum: 1,
    pageSize: 10,
    researchGroup: null,
    searchCheckUserId: null
    checkUser: '',
    checkType: null,
    haveMainHazard: null,
    checkBeginDate: '',
    checkEndDate: ''
  }
  state.checkDate = []
  await getList()
}
const handleDelete = (val) => {
@@ -289,14 +339,13 @@
const handleSubmit = async (data, type) => {
  const params = JSON.parse(JSON.stringify(data))
  params.dailySafetyInspectionUsers = params.dailySafetyInspectionUsers.map(item=>{
  params.dailySafetyInspectionDepts = params.dailySafetyInspectionDepts.map(i=>{
    return {
      checkUserId: item,
      checkUser: state.userList.find(i=>i.userId == item)?.userName,
      dailySafetyInspectionId: params.id
      deptId: i,
      deptName: state.originDeptList.find(item=>item.deptId == i)?.deptName
    }
  })
  params.reCheckUser = state.userList.find(i=>i.userId == params.reCheckUserId)?.userName
  // params.reCheckUser = state.userList.find(i=>i.userId == params.reCheckUserId)?.nickName
  // 调用API保存数据
  if (type === '新增') {
    delete params.id