zhouwx
2025-12-02 be8d7e4f0aea2b49ac7a9963df6482864abe3502
修改
已修改6个文件
233 ■■■■■ 文件已修改
public/innerReviewExport.docx 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/clauseManage/components/editDialog.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/clauseManage/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/work/selfProblems/internalAudit/innerReviewSheet/components/editDialog.vue 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/work/selfProblems/internalAudit/innerReviewSheet/index.vue 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/work/selfProblems/plan/components/planDialog.vue 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/innerReviewExport.docx
Binary files differ
src/views/system/clauseManage/components/editDialog.vue
@@ -15,6 +15,9 @@
        <el-form-item label="条款内容:" prop="name">
          <el-input v-model.trim="state.form.name" :disabled="state.title =='查看'" placeholder="条款内容"></el-input>
        </el-form-item>
        <el-form-item label="审核要点:" prop="points">
          <el-input v-model.trim="state.form.points" :disabled="state.title =='查看'" placeholder="审核要点"></el-input>
        </el-form-item>
      </el-form>
      <template #footer v-if="state.title !='查看'">
        <span class="dialog-footer">
@@ -42,11 +45,13 @@
    id: null,
    clauseNum: '',
    name: '',
    companyId: null
    companyId: null,
    points:''
  },
  formRules:{
    clauseNum: [{ required: true, message: '请输入条款编码', trigger: 'blur' }],
    name: [{ required: true, message: '请输入条款内容', trigger: 'blur' }]
    name: [{ required: true, message: '请输入条款内容', trigger: 'blur' }],
    points: [{ required: true, message: '请输入审核要点', trigger: 'blur' }],
  }
})
onMounted(() => {
@@ -98,7 +103,8 @@
    id: null,
    clauseNum: '',
    name: '',
    companyId: null
    companyId: null,
    points:''
  }
  superRef.value.clearValidate();
  superRef.value.resetFields()
src/views/system/clauseManage/index.vue
@@ -32,6 +32,7 @@
      <el-table-column label="序号" type="index" align="center" width="80"/>
      <el-table-column label="条款编号" prop="clauseNum" align="center"/>
      <el-table-column label="条款内容" prop="name" align="center"/>
      <el-table-column label="审核要点" prop="points" align="center"/>
      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" >
        <template #default="scope">
          <el-button link type="primary" @click="openDialog('view',scope.row)">查看</el-button>
src/views/work/selfProblems/internalAudit/innerReviewSheet/components/editDialog.vue
@@ -20,7 +20,7 @@
          </el-select>
        </el-form-item>
        <el-row :gutter="24">
          <el-col :span="8">
          <el-col :span="12">
            <el-form-item label="受审核部门:" prop="deptId">
              <el-select
                  clearable
@@ -40,7 +40,7 @@
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="8">
          <el-col :span="12">
            <el-form-item label="审核员:" prop="personId">
              <el-select clearable v-model="state.form.personId" :disabled="state.title =='查看'" filterable placeholder="内审员" style="width: 100%">
                <el-option
@@ -52,24 +52,36 @@
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="内审时间:" prop="checkTime">
        </el-row>
        <el-row :gutter="24">
          <el-col :span="12">
            <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-date-picker-->
              <!--                  v-model="state.form.checkTime"-->
              <!--                  type="datetime"-->
              <!--                  value-format="YYYY-MM-DD HH:mm:ss"-->
              <!--                  placeholder="请选择内审时间"-->
              <!--                  style="width: 100%"-->
              <!--              />-->
            </el-form-item>
          </el-col>
        </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">
@@ -85,7 +97,7 @@
                  </div>
                </template>
              </el-table-column>
              <el-table-column label="审核发现" prop="find" align="center" width="180">
              <el-table-column label="审核发现" prop="find" align="center" width="300">
                <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">
@@ -95,7 +107,7 @@
                </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">
@@ -109,7 +121,7 @@
                    </div>
                  </template>
                </el-table-column>
                <el-table-column label="轻微不符合" prop="minor" align="center" width="90">
                <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">
@@ -123,21 +135,20 @@
                    </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">
@@ -165,16 +176,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 +215,33 @@
  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";
const emit = defineEmits(["getList"]);
const dialogVisible = ref(false)
const superRef = ref()
const termRef = ref()
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,7 +256,8 @@
    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' }],
@@ -271,6 +300,13 @@
        state.form[key] = value[key]
      }
    })
    checkTime.value = [state.form.startTime,state.form.endTime]
    console.log('1',state.form)
    state.form.checkCatalogues.forEach(item => {
      if(item.checkContents && item.checkContents.length == 0){
        item.checkContents.push({})
      }
    })
  }
  await getUserList()
  await getDepartList(state.form.companyId)
@@ -280,16 +316,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 +355,8 @@
}
const onSubmit = async () => {
  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,7 +459,8 @@
    id: null,
    deptId: null,
    personId: null,
    checkTime: '',
    startTime: '',
    endTime:'',
    companyId: null,
    checkCatalogues: []
  }
@@ -455,6 +507,7 @@
const onSubmitTerm = async () =>{
  const valid = await termRef.value.validate();
  if(valid){
    state.form.checkCatalogues.push({
      checkContents: [{}],
      catalogueId:state.termForm.id,
@@ -465,9 +518,14 @@
}
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
    }
  })
};
defineExpose({
src/views/work/selfProblems/internalAudit/innerReviewSheet/index.vue
@@ -2,15 +2,15 @@
  <div class="app-container">
    <div style="display: flex;justify-content: space-between">
      <el-form :inline="true" style="display: flex;align-items: center;flex-wrap: wrap;" >
        <el-form-item>
          <el-button
              type="primary"
              plain
              icon="Plus"
              @click="openDialog('add',{})"
              v-hasPermi="['innerReviewSheet:list:add']"
          >新增</el-button>
        </el-form-item>
<!--        <el-form-item>-->
<!--          <el-button-->
<!--              type="primary"-->
<!--              plain-->
<!--              icon="Plus"-->
<!--              @click="openDialog('add',{})"-->
<!--              v-hasPermi="['innerReviewSheet:list:add']"-->
<!--          >新增</el-button>-->
<!--        </el-form-item>-->
        <el-form-item v-if="isAdmin" label="单位:" >
          <el-select v-model="data.queryParams.companyId" placeholder="请选择" clearable>
            <el-option
@@ -39,7 +39,7 @@
      <el-table-column type="index" align="center" label="序号" width="80"></el-table-column>
      <el-table-column label="检查表" align="center">
        <template #default="scope">
          {{scope.row.deptName }}内审检查表
          {{scope.row.year}}年{{scope.row.deptName }}内审检查表
        </template>
      </el-table-column>
      <el-table-column label="受审核部门" prop="deptName" align="center"></el-table-column>
@@ -206,8 +206,9 @@
        })
      }
    })
    item.checkTime = item.startTime +'-'+item.endTime.slice(11)
    try {
      generateWordDocument(templatePath.value, item, item.deptName+'_内审检查表.docx');
      generateWordDocument(templatePath.value, item, item.year+'年'+item.deptName+'_内审检查表.docx');
    } catch (error){
      ElMessage({
        type: 'warning',
src/views/work/selfProblems/plan/components/planDialog.vue
@@ -3,7 +3,7 @@
    <el-dialog
        v-model="dialogVisible"
        :title="title"
        width="50%"
        width="950px"
        :before-close="handleClose"
        :close-on-press-escape="false"
        :close-on-click-modal="false"
@@ -175,10 +175,10 @@
                      <el-form-item :prop="'deptList.' + '[' + $index + ']' + '.checkId'" :rules="state.rules.checkId">
                        <el-select clearable v-model="row.checkId" :disabled="title =='查看'" filterable  style="width: 240px">
                          <el-option
                              v-for="item in state.peopleList"
                              :key="item.id"
                              :label="item.name"
                              :value="item.id"
                              v-for="item in state.interUserList"
                              :key="item.personId"
                              :label="item.personName"
                              :value="item.personId"
                          />
                        </el-select>
                      </el-form-item>
@@ -272,6 +272,7 @@
import {getUser} from "@/api/onlineEducation/user";
import {getDept} from "@/api/qualityObjectives/object";
import {addPlan, editPlan} from "@/api/selfProblems/plan";
import {getPersonPage} from "@/api/selfProblems/nameList";
const dialogVisible = ref(false);
const title = ref("");
@@ -316,6 +317,7 @@
    ratifyId: null, //批准人id
    deptList: []
  },
  interUserList: [],
  formRules:{
    companyId: [{ required: true, message: '请选择企业', trigger: 'blur' }],
    year:  [{ required: true, message: '请输入年份', trigger: 'blur' }],
@@ -397,6 +399,7 @@
      })
    })
  }
  await getUserList()
  await  getPeopleList()
  dialogVisible.value = true;
@@ -420,7 +423,7 @@
const onSubmit = async () => {
  state.form.reviewStart = checkTime.value[0]
  state.form.reviewEnd = checkTime.value[0]
  state.form.reviewEnd = checkTime.value[1]
  state.form.firstStarttime = checkStartTime.value[0]
  state.form.firstEndtime = checkStartTime.value[1]
  state.form.lastStarttime = checkEndTime.value[0]
@@ -542,6 +545,7 @@
  state.form.checkId = null
  state.form.ratifyId = null
  getPeopleList()
  getUserList()
  getDeptList()
}
const reset = () => {
@@ -572,6 +576,25 @@
  checkStartTime.value = []
  checkEndTime.value = []
}
const getUserList = async ()=> {
  if(state.isAdmin && (state.form.companyId == 0 || state.form.companyId == null)){
    return
  }
  const res = await getPersonPage({companyId: state.form.companyId,pageNum: 1,pageSize: 999})
  if(res.code == 200){
    state.userList = res.data.list?res.data.list.map(item=>{
      const user = item.id
      const {id, ...data} = item
      return {
        ...data,
        userId: user
      }
    }):[]
    state.interUserList = state.userList
  }else{
    ElMessage.warning(res.message)
  }
}
defineExpose({
  openDialog
});