zhouwx
2025-12-03 654c6b9c6fdcf98621fbe4d638e7bfdb3b60820f
src/views/work/selfProblems/internalAudit/innerReviewSheet/components/editDialog.vue
@@ -3,7 +3,7 @@
    <el-dialog
        v-model="dialogVisible"
        :title="state.title"
        width="950px"
        width="1480px"
        :before-close="handleClose"
        :close-on-press-escape="false"
        :close-on-click-modal="false"
@@ -53,98 +53,116 @@
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="内审时间:" prop="checkTime">
            <el-form-item label="内审时间:" prop="startTime">
              <el-date-picker
                  v-model="state.form.checkTime"
                  type="datetime"
                  :disabled="state.title =='查看'"
                  v-model="checkTime"
                  type="datetimerange"
                  range-separator="至"
                  start-placeholder="开始日期"
                  end-placeholder="结束日期"
                  format="YYYY-MM-DD HH:mm:ss"
                  value-format="YYYY-MM-DD HH:mm:ss"
                  placeholder="请选择内审时间"
                  style="width: 100%"
                  style="width: 100%;"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="24">
        </el-row>
        <el-row :gutter="24">
          <el-col :span="24">
            <div style="display: flex;align-items: center">
              <span style="font-size: 15px;font-weight: 700;margin-right: 10px" >内审检查表:</span>
              <el-button type="primary" :disabled="state.title === '查看'"  @click="addTableData">新增</el-button>
<!--              <el-button type="primary" :disabled="state.title === '查看'"  @click="addTableData">新增</el-button>-->
            </div>
            <el-table style="margin-top: 15px;margin-bottom: 20px" :data="state.form.checkCatalogues" :border="true">
              <el-table-column label="适用条款" align="center">
                <el-table-column label="体系标准款项" prop="number" align="center"></el-table-column>
                <el-table-column label="标题" prop="mess" align="center"></el-table-column>
                <el-table-column label="体系标准款项" prop="number" align="center" width="110"></el-table-column>
                <el-table-column label="标题" prop="mess" align="center" width="150"></el-table-column>
              </el-table-column>
              <el-table-column label="审核要点" prop="pointKey" align="center" width="180">
              <el-table-column label="审核要点" prop="pointKey" align="left" header-align="center" width="430">
                <template #default="{row,$index}">
                  <div v-for="(i,index) in row.checkContents" :key="index">
                    <el-form-item :prop="'checkCatalogues.' + '[' + $index + '].' +'checkContents.' + '[' + index + ']' + '.pointKey'" :rules="state.formRules.pointKey">
                      <el-input style="margin-top: 10px" :disabled="state.title === '查看'" type="textarea" :rows="4" v-model="i.pointKey" placeholder="请输入"></el-input>
                    </el-form-item>
                  </div>
                  <el-form-item :prop="'checkCatalogues.' + '[' + $index + ']' + '.pointKey'" :rules="state.formRules.pointKey">
                    <div v-if="showEditor" >
                      <t-editor style="width: 100%;" :height="300" ref="myEditor" :toolbar="toolbar"
                                :value="row.pointKey" @input="inputPonit($event,$index)"></t-editor>
                    </div>
                    <div v-else >
                      <div class="reviewTable" v-html="row.pointKey" ></div>
                    </div>
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column label="审核发现" prop="find" align="center" width="180">
              <el-table-column label="审核发现" prop="find" align="left" header-align="center">
                <template #default="{row,$index}">
                  <div v-for="(i,index) in row.checkContents" :key="index">
                    <el-form-item :prop="'checkCatalogues.' + '[' + $index + '].' +'checkContents.' + '[' + index + ']' + '.find'" :rules="state.formRules.find">
                      <el-input style="margin-top: 10px" :disabled="state.title === '查看'" type="textarea" :rows="4" v-model="i.find" placeholder="请输入"></el-input>
                    </el-form-item>
                  </div>
                  <el-form-item :prop="'checkCatalogues.' + '[' + $index + ']' + '.find'" :rules="state.formRules.find">
                    <div v-if="showEditor" >
                      <t-editor style="width: 100%;" :height="300" ref="myEditor" :toolbar="toolbar"
                                :value="row.find" @input="inputFind($event,$index)"></t-editor>
                    </div>
                    <div v-else >
                      <div class="reviewTable" v-html="row.find" ></div>
                    </div>
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column label="审核结果" align="center" >
                <el-table-column label="符合" prop="conform" align="center" width="90">
<!--                <el-table-column label="符合" prop="conform" align="center" width="70">-->
<!--                  <template #default="{row,$index}">-->
<!--                    <div v-for="(i,index) in row.checkContents" :key="index">-->
<!--                      <el-form-item :prop="'checkCatalogues.' + '[' + $index + '].' +'checkContents.' + '[' + index + ']' + '.result'" :rules="state.formRules.result">-->
<!--                        <el-radio-->
<!--                            style="height: 100px"-->
<!--                            v-model="i.result"-->
<!--                            :label="1"-->
<!--                           :disabled="state.title === '查看'"-->
<!--                        > </el-radio>-->
<!--                      </el-form-item>-->
<!--                    </div>-->
<!--                  </template>-->
<!--                </el-table-column>-->
                <el-table-column label="不符合" prop="minor" align="center" width="90">
                  <template #default="{row,$index}">
                    <div v-for="(i,index) in row.checkContents" :key="index">
                      <el-form-item :prop="'checkCatalogues.' + '[' + $index + '].' +'checkContents.' + '[' + index + ']' + '.result'" :rules="state.formRules.result">
                        <el-radio
<!--                    <div v-for="(i,index) in row.checkContents" :key="index">-->
                      <el-form-item :prop="'checkCatalogues.' + '[' + $index + ']' + '.result'" :rules="state.formRules.result">
                        <el-checkbox
                            style="height: 100px"
                            v-model="i.result"
                            :label="1"
                           :disabled="state.title === '查看'"
                        > </el-radio>
                      </el-form-item>
                    </div>
                  </template>
                </el-table-column>
                <el-table-column label="轻微不符合" prop="minor" align="center" width="90">
                  <template #default="{row,$index}">
                    <div v-for="(i,index) in row.checkContents" :key="index">
                      <el-form-item :prop="'checkCatalogues.' + '[' + $index + '].' +'checkContents.' + '[' + index + ']' + '.result'" :rules="state.formRules.result">
                        <el-radio
                            style="height: 100px"
                            v-model="i.result"
                            :label="2"
                            v-model="row.result"
                            :disabled="state.title === '查看'"
                        ></el-radio>
                        />
<!--                        <el-radio-->
<!--                            style="height: 100px"-->
<!--                            v-model="row.result"-->
<!--                            :label="2"-->
<!--                            :disabled="state.title === '查看'"-->
<!--                        ></el-radio>-->
                      </el-form-item>
                    </div>
<!--                    </div>-->
                  </template>
                </el-table-column>
                <el-table-column label="严重不符合" prop="serious" align="center" width="90">
                  <template #default="{row,$index}">
                    <div v-for="(i,index) in row.checkContents" :key="index">
                      <el-form-item :prop="'checkCatalogues.' + '[' + $index + '].' +'checkContents.' + '[' + index + ']' + '.result'" :rules="state.formRules.result">
                        <el-radio
                            style="height: 100px"
                            v-model="i.result"
                            :label="3"
                            :disabled="state.title === '查看'"
                        ></el-radio>
                      </el-form-item>
                    </div>
                  </template>
                </el-table-column>
<!--                <el-table-column label="严重不符合" prop="serious" align="center" width="90">-->
<!--                  <template #default="{row,$index}">-->
<!--                    <div v-for="(i,index) in row.checkContents" :key="index">-->
<!--                      <el-form-item :prop="'checkCatalogues.' + '[' + $index + '].' +'checkContents.' + '[' + index + ']' + '.result'" :rules="state.formRules.result">-->
<!--                        <el-radio-->
<!--                            style="height: 100px"-->
<!--                            v-model="i.result"-->
<!--                            :label="3"-->
<!--                            :disabled="state.title === '查看'"-->
<!--                        ></el-radio>-->
<!--                      </el-form-item>-->
<!--                    </div>-->
<!--                  </template>-->
<!--                </el-table-column>-->
              </el-table-column>
              <el-table-column label="操作" align="center" width="120" v-if="state.title !== '查看'" >
                <template #default="scope">
                  <el-button link type="primary"  @click="addObject(scope.row,scope.$index)" >添加</el-button>
                  <el-button link type="danger"  @click="delObject(scope.row,scope.$index)" >删除</el-button>
                </template>
              </el-table-column>
<!--              <el-table-column label="操作" align="center" width="120" v-if="state.title !== '查看'" >-->
<!--                <template #default="scope">-->
<!--                  <el-button link type="primary"  @click="addObject(scope.row,scope.$index)" >添加</el-button>-->
<!--                  <el-button link type="danger"  @click="delObject(scope.row,scope.$index)" >删除</el-button>-->
<!--                </template>-->
<!--              </el-table-column>-->
            </el-table>
          </el-col>
@@ -165,16 +183,24 @@
    >
      <el-form :model="state.termForm" size="default" ref="termRef" :rules="state.rules"  >
        <el-form-item  label="体系标准款项:" prop="id">
          <el-tree-select
              v-model="state.termForm.id"
              :data="state.menuOptions"
              :props="{ value: 'id', label: 'name', children: 'children' }"
              value-key="id"
              placeholder="体系标准款项"
              check-strictly
              style="width: 100%"
              @node-click="handleTreeSelect"
          />
<!--          <el-tree-select-->
<!--              v-model="state.termForm.id"-->
<!--              :data="state.menuOptions"-->
<!--              :props="{ value: 'id', label: 'name', children: 'children' }"-->
<!--              value-key="id"-->
<!--              placeholder="体系标准款项"-->
<!--              check-strictly-->
<!--              style="width: 100%"-->
<!--              @node-click="handleTreeSelect"-->
<!--          />-->
          <el-select clearable v-model="state.termForm.id"  filterable placeholder="体系标准款项" @change="handleTreeSelect" style="width: 100%">
            <el-option
                v-for="item in state.menuOptions"
                :key="item.id"
                :label="item.name"
                :value="item.id"
            />
          </el-select>
        </el-form-item>
      </el-form>
      <template #footer>
@@ -196,24 +222,38 @@
  addInternalAuditCheck, getInternalAuditCheckInfo,
  updateInternalAuditCheck
} from "@/api/innerReview/meetingReview";
import {getDepart} from "@/api/orgStructure/depart";
import {getDepart, getSysClause} from "@/api/orgStructure/depart";
import {listUser} from "@/api/system/user";
import {getPersonPage} from "@/api/selfProblems/nameList";
import {getCatalogue} from "@/api/qualityManage/catalog";
import Cookies from "js-cookie";
import {getUser} from "@/api/onlineEducation/user";
import TEditor from "@/components/Tinymce/Tinymce.vue";
const emit = defineEmits(["getList"]);
const dialogVisible = ref(false)
const superRef = ref()
const termRef = ref()
const myEditor = ref();
const isReview = ref(false);
const showEditor = ref(true);
const toolbar = ref('fontsizeselect | undo redo')
const checkTime = ref([])
const validateFieldsReview = (rule, value, callback) =>{
  if (checkTime.value && checkTime.value.length >0 ) {
    callback();
  } else {
    callback(new Error('请选择时间'));
  }
}
const state = reactive({
  title: '',
  form: {
    id: null,
    deptId: null,
    personId: null,
    checkTime: '',
    startTime: '',
    endTime:'',
    companyId: null,
    checkCatalogues: []
  },
@@ -228,10 +268,11 @@
    deptId: [{ required: true, message: '请选择受审核部门', trigger: 'blur' }],
    internalAuditCheckPeople: [{ required: true, message: '请选择受审核人', trigger: 'blur' }],
    personId: [{ required: true, message: '请选择内审员', trigger: 'blur' }],
    checkTime: [{ required: true, message: '请选择内审时间',  trigger: 'blur' }],
    // checkTime: [{ required: true, message: '请选择内审时间',  trigger: 'blur' }],
    startTime: [{ required: true,validator: validateFieldsReview, trigger: 'blur' }],//审核时间
    checkRecord: [{ required: true, message: '请填写检查记录',  trigger: 'blur' }],
    pointKey: [{ required: true, message: '',  trigger: 'blur' }],
    find: [{ required: true, message: '',  trigger: 'blur' }],
    pointKey: [{ required: true, message: '请输入审核要点',  trigger: 'blur' }],
    find: [{ required: true, message: '请输入审核发现',  trigger: 'blur' }],
    result: [{ required: true, message: '',  trigger: 'blur' }],
@@ -264,6 +305,7 @@
    state.form.companyId = value.companyId
    state.companyList = companyList
  }
  showEditor.value = false
  state.title = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看'
  if(state.title == '编辑'||state.title == '查看'){
    Object.keys(state.form).forEach(key => {
@@ -271,6 +313,21 @@
        state.form[key] = value[key]
      }
    })
    checkTime.value = [state.form.startTime,state.form.endTime]
    state.form.checkCatalogues = state.form.checkCatalogues.map(item => {
      return {
        ...item,
        result: item.result == 2 ? true:false
      }
    })
    console.log('1',state.form)
  }
  if (state.title == '查看') {
    showEditor.value = false
  }
  if (type === 'edit' || type === 'add') {
    showEditor.value = true;
  }
  await getUserList()
  await getDepartList(state.form.companyId)
@@ -280,16 +337,29 @@
const getCatalogList = async() => {
  state.menuOptions = [];
  const param = {
    type: 1,
    number: 4
  }
  const res = await getCatalogue(param)
  const res = await getSysClause()
  if(res.code == 200){
    state.menuOptions =await handleTree(res.data.data);
    state.menuOptions = res.data.map(i=>{
      return {
        id:i.id,
        clauseNum: i.clauseNum,
        content: i.name,
        name: i.clauseNum + ' '+i.name
      }
    })
  }else{
    ElMessage.warning(res.message)
  }
  // const param = {
  //   type: 1,
  //   number: 4
  // }
  // const res = await getCatalogue(param)
  // if(res.code == 200){
  //   state.menuOptions =await handleTree(res.data.data);
  // }else{
  //   ElMessage.warning(res.message)
  // }
}
const handleTree = (val) => {
  const traverse = (nodes, currentPath = '') => {
@@ -306,6 +376,15 @@
}
const onSubmit = async () => {
  console.log('f',state.form)
  state.form.checkCatalogues = state.form.checkCatalogues.map(item => {
    return {
      ...item,
      result: item.result ? 2:1
    }
  })
  state.form.startTime = checkTime.value[0]
  state.form.endTime = checkTime.value[1]
  const valid = await superRef.value.validate();
  if(valid){
    console.log('f',state.form)
@@ -408,11 +487,11 @@
    id: null,
    deptId: null,
    personId: null,
    checkTime: '',
    startTime: '',
    endTime:'',
    companyId: null,
    checkCatalogues: []
  }
  superRef.value.clearValidate();
  superRef.value.resetFields()
  dialogVisible.value = false;
@@ -426,24 +505,24 @@
  state.showDialog = true
  // state.form.checkCatalogues.push({checkContents: [{}]})
}
const addObject = (val,itemIndex) => {
  state.form.checkCatalogues.forEach((item,index) => {
    if(index == itemIndex){
      item.checkContents.push({})
    }
  })
}
const delObject = (val,itemIndex) => {
  state.form.checkCatalogues.forEach((item,index) => {
    if(index == itemIndex){
      if(item.checkContents.length == 1){
        state.form.checkCatalogues.splice(index,1)
      }else {
        item.checkContents.pop()
      }
    }
  })
}
// const addObject = (val,itemIndex) => {
//   state.form.checkCatalogues.forEach((item,index) => {
//     if(index == itemIndex){
//       item.checkContents.push({})
//     }
//   })
// }
// const delObject = (val,itemIndex) => {
//   state.form.checkCatalogues.forEach((item,index) => {
//     if(index == itemIndex){
//       if(item.checkContents.length == 1){
//         state.form.checkCatalogues.splice(index,1)
//       }else {
//         item.checkContents.pop()
//       }
//     }
//   })
// }
const handleCloseDialog = () => {
  state.termForm = {
    id: null,
@@ -456,7 +535,6 @@
  const valid = await termRef.value.validate();
  if(valid){
    state.form.checkCatalogues.push({
      checkContents: [{}],
      catalogueId:state.termForm.id,
      number: state.termForm.number,
      mess: state.termForm.mess})
@@ -465,11 +543,24 @@
}
const handleTreeSelect = (node) => {
  state.termForm.id = node.id
  state.termForm.number = node.number
  state.termForm.mess = node.mess
  state.menuOptions.forEach(item => {
    if(item.id == node){
      state.termForm.id = node
      state.termForm.number = item.clauseNum
      state.termForm.mess = item.name
    }
  })
};
const inputFind = (val,index)=> {
  state.form.checkCatalogues[index].find = val
}
const inputPonit = (val,index)=> {
  state.form.checkCatalogues[index].pointKey = val
}
defineExpose({
  openDialog
});