zhouwx
2025-10-13 5b5c6374749159db03a14ee645760327930bbb28
src/views/work/qualityManage/continuousImprovement/index.vue
@@ -52,16 +52,17 @@
      </el-form>
    </div>
    <!-- 表格数据 -->
    <el-table v-loading="loading" :data="dataList" :border="true"  @selection-change="handleSelectionChange">
      <el-table-column type="selection" width="55" />
      <el-table-column type="index" label="序号" width="80" align="center"></el-table-column>
    <el-table v-loading="loading" :data="dataList" :border="true"  @selection-change="handleSelectionChange" :span-method="mergeCells">
      <el-table-column type="selection" width="55" prop="selection" />
<!--      <el-table-column type="index" label="序号" width="80" align="center"></el-table-column>-->
      <el-table-column label="企业名称" prop="companyName" align="center" v-if="data.isAdmin" />
      <el-table-column label="名称"  align="center">
        <template #default="scope">
          <span>{{scope.row.year}}年度质量体系改进计划</span>
        </template>
      </el-table-column>
      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160">
      <el-table-column label="年份" prop="year" align="center"  />
      <el-table-column label="改进项" prop="items" align="center"  />
      <el-table-column label="具体措施" prop="measure" align="center"  />
      <el-table-column label="责任部门" prop="dutyName" align="center"  />
      <el-table-column label="完成时间" prop="finishTime" align="center"  />
      <el-table-column label="跟踪验证" prop="verify" align="center"  />
      <el-table-column label="操作" align="center" prop="operate" class-name="small-padding fixed-width" width="160">
        <template #default="scope">
          <el-button link type="primary"  @click="openDialog('review',scope.row)" >查看</el-button>
          <el-button link type="primary"  @click="openDialog('edit',scope.row)" >编辑</el-button>
@@ -70,17 +71,17 @@
      </el-table-column>
    </el-table>
    <div class="pag-container">
      <el-pagination
          v-model:current-page="data.queryParams.pageNum"
          v-model:page-size="data.queryParams.pageSize"
          :page-sizes="[10,15,20,25]"
          layout="total, sizes, prev, pager, next, jumper"
          :total="total"
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
      />
    </div>
<!--    <div class="pag-container">-->
<!--      <el-pagination-->
<!--          v-model:current-page="data.queryParams.pageNum"-->
<!--          v-model:page-size="data.queryParams.pageSize"-->
<!--          :page-sizes="[10,15,20,25]"-->
<!--          layout="total, sizes, prev, pager, next, jumper"-->
<!--          :total="total"-->
<!--          @size-change="handleSizeChange"-->
<!--          @current-change="handleCurrentChange"-->
<!--      />-->
<!--    </div>-->
    <editDialog ref="noticeRef" @getList = "getList"></editDialog>
  </div>
</template>
@@ -95,7 +96,8 @@
import {delTable, getTable} from "@/api/qualityObjectives/table";
import {delNeedDiscren, getNeedDiscren} from "@/api/need/need";
import {delCustomerNeed, getCustomerNeed} from "@/api/customerNeed";
import {delInside, getInside} from "@/api/continuousImprovement";
import {delInside, getInside, getInsideById} from "@/api/continuousImprovement";
import {getQualityTemplateById} from "@/api/standardSys/standardSys";
const { proxy } = getCurrentInstance();
const loading = ref(false);
const noticeRef = ref();
@@ -157,8 +159,26 @@
  loading.value = true;
  const res = await getInside(data.queryParams);
  if(res.code === 200){
    dataList.value = res.data.list
    total.value = res.data.total
    const resultArray = [];
    for (const obj of  res.data.list) {
      const listItemArray = obj.plans;
      for (const listItem of listItemArray) {
        resultArray.push({
          id:obj.id,
          companyName: obj.companyName,
          year: obj.year,
          items: listItem.items,
          measure: listItem.measure,
          dutyName: listItem.dutyName,
          finishTime: listItem.finishTime,
          verify: listItem.verify,
        });
      }
    }
    dataList.value = resultArray
    calculateSpan()
    // dataList.value = res.data.list
    // total.value = res.data.total
  }else{
    ElMessage.warning(res.message)
  }
@@ -238,7 +258,7 @@
    })
    console.log('xxx',item.tableData)
    try {
      generateWordDocument(templatePath.value, item, item.companyName + `_${item.year}年度体系改进计划.docx`);
      generateWordDocument(templatePath.value, item,  `${item.year}年度体系改进计划.docx`);
    } catch (error){
      ElMessage({
        type: 'warning',
@@ -247,8 +267,17 @@
    }
  })
}
const handleSelectionChange = (val) => {
  choosedData.value = val
const handleSelectionChange = async (val) => {
  let arr = []
  for (const item of val) {
    const res = await getInsideById({improveId: item.id})
    if(res.code == 200){
      arr.push(res.data)
    }else{
      ElMessage.warning(res.message)
    }
  }
  choosedData.value = arr
}
const handleDelete = (val) => {
  ElMessageBox.confirm(
@@ -281,6 +310,37 @@
    data.yearList.push({ value, label: value }); // 添加新选项(这里简单地将值和标签设为相同)
  }
}
const mergeCells = ({ row, column, rowIndex, columnIndex }) => {
  if ( column.property == 'operate' ||  column.property == 'selection' || column.property == 'year' ) {
    const _row = spanArr.value[rowIndex];
    const _col = _row > 0 ? 1 : 0;
    return [_row, _col];
  }
};
const spanArr = ref([]); // 存储每一行的合并信息
const position = ref(0); // 记录当前位置
// 计算合并的行数
const calculateSpan = () => {
  spanArr.value = [];
  position.value = 0;
  dataList.value.forEach((item, index) => {
    if (index === 0) {
      spanArr.value.push(1);
      position.value = 0;
    } else {
      // 判断当前行的id与上一行是否相同
      if (dataList.value[index].id === dataList.value[index - 1].id) {
        spanArr.value[position.value] += 1;
        spanArr.value.push(0);
      } else {
        spanArr.value.push(1);
        position.value = index;
      }
    }
  });
};
</script>
<style lang="scss">
.pag-container{