Преглед на файлове

增加指标自评分与内审得分

hsh преди 7 месеца
родител
ревизия
deed4f22fd

+ 9 - 0
src/api/target-management/target-dict.js

@@ -142,3 +142,12 @@ export function selectTargetMonthScoreSummary(data){
         data,
     })
 }
+
+// 更新指标报表内审得分
+export function updateTargetReportScoreByShf(data) {
+    return request({
+        url: '/targetManagement/updateTargetReportScoreByShf',
+        method: 'post',
+        data,
+    })
+}

+ 9 - 0
src/utils/excel-base-function.js

@@ -0,0 +1,9 @@
+// excel 的 power 函数
+export function power(base, exponent) {
+    // 如果指数为负数,则使用1除以幂值
+    if (exponent < 0) {
+        return 1 / Math.pow(base, -exponent);
+    }
+    // 如果指数为正数或零,则直接使用Math.pow计算幂值
+    return Math.pow(base, exponent);
+}

+ 297 - 36
src/views/target-management/target-dict/TargetDictConfig.vue

@@ -21,7 +21,7 @@
           <el-form ref="ruleFormRef" :model="ruleForm" :rules="rulesForm" label-width="120px" class="demo-ruleForm"
             :size="formSize" status-icon :disabled="isShowForm">
             <el-collapse v-model="activeName">
-              <el-collapse-item title="指标信息" name="zbxx">
+              <el-collapse-item title="指标信息" name="zbInfo">
                 <el-row>
                   <el-col :span="12">
                     <el-form-item label="指标名称" prop="name">
@@ -140,7 +140,7 @@
                 </el-form-item>
               </el-collapse-item>
 <!--            <el-divider />-->
-              <el-collapse-item title="指标计算" name="zbjs">
+              <el-collapse-item title="指标计算" name="zbCalc">
                 <el-form ref="upFormRef" label-width="100px" :model="sqlForm" class="demo-ruleForm" :size="formSize">
                   <el-row>
                     <el-col :span="7">
@@ -171,7 +171,7 @@
                       </el-form-item>
                     </el-col>
                     <el-col :span="5">
-                      <el-form-item label="得分填写">
+                      <el-form-item label="内审得分">
                         <el-form-item prop="zbScore">
                           <el-input v-model="zbScore" show-word-limit />
                         </el-form-item>
@@ -259,10 +259,10 @@
                 <el-form ref="upFormRef" label-width="120px" :model="sqlForm" class="demo-ruleForm" :size="formSize" :disabled="false">
                   <el-row>
                     <el-table v-show="isShowQtResult" :data="QtResultData" stripe border highlight-current-row row-key="childKey" height="240"
-                      style="width: 100%">
+                      style="width: 100%" :span-method="objectSpanMethod">
                       <el-table-column prop="reportCycle" label="年度周期" header-align="center" v-if="false"/>
                       <el-table-column prop="year" label="年份" header-align="center"/>
-                      <el-table-column prop="dataType" label="数据方式" header-align="center">
+                      <el-table-column prop="dataType" label="数据方式" header-align="center" width="120">
                         <template v-slot="scope">
                           <el-select v-model="scope.row.dataType" disabled placeholder="请选择数据方式">
                             <el-option v-for="option in dataTypeOptions" :key="option.code" :label="option.name"
@@ -270,13 +270,13 @@
                           </el-select>
                         </template>
                       </el-table-column>
-                      <el-table-column prop="childResult" label="分子结果" header-align="center">
+                      <el-table-column prop="childResult" label="分子" header-align="center">
                         <template v-slot="scope">
                           <el-input v-if="scope.row.isEdit" size="small" v-model="scope.row.childResult" @blur="tableReportResultFormat(scope.row)"></el-input>
                           <span v-else>{{ scope.row.childResult }}</span>
                         </template>
                       </el-table-column>
-                      <el-table-column prop="momResult" label="分母结果" header-align="center">
+                      <el-table-column prop="momResult" label="分母" header-align="center">
                         <template v-slot="scope">
                           <el-input v-if="scope.row.isEdit" size="small" v-model="scope.row.momResult" @blur="tableReportResultFormat(scope.row)"></el-input>
                           <span v-else>{{ scope.row.momResult }}</span>
@@ -288,8 +288,14 @@
                           <span v-else>{{ scope.row.calcResult }}</span>
                         </template>
                       </el-table-column>
+                      <el-table-column prop="opTime" label="统计时间" header-align="center" width="160"/>
                       <el-table-column prop="op" label="统计人员" header-align="center" />
-                      <el-table-column prop="opTime" label="统计时间" header-align="center" width="200"/>
+<!--                      <el-table-column prop="fileUpDown" label="附件上传" header-align="center">-->
+<!--                        <template v-slot="scope">-->
+<!--                          <el-input v-if="scope.row.isEdit" size="small" v-model="scope.row.fileUpDown"></el-input>-->
+<!--                          <span v-else>{{ scope.row.fileUpDown }}</span>-->
+<!--                        </template>-->
+<!--                      </el-table-column>-->
                       <el-table-column prop="cz" label="操作" min-width="180" width="180" header-align="center">
                         <template #default="scope">
                           <el-button type="primary" size="small" v-if="!scope.row.isEdit" @click="editRow(scope.$index, scope.row)">
@@ -308,6 +314,43 @@
                   </el-row>
                 </el-form>
               </el-collapse-item>
+              <el-collapse-item title="指标自评与审核" name="zbScore">
+                <el-form ref="upFormRef" label-width="100px" :model="zpfForm" class="demo-ruleForm" :size="formSize" :disabled="false">
+                  <el-input v-model="zpfForm.authorId" v-if="false" />
+                  <el-input v-model="zpfForm.mainId" v-if="false" />
+                  <el-row>
+                    <el-col :span="8">
+                      <el-form-item label="指标名称" prop="name">
+                        <el-input v-model="ruleForm.name" disabled />
+                      </el-form-item>
+                    </el-col>
+                    <el-col :span="4">
+                      <el-form-item label="年均增长率" prop="authorScore">
+                        <el-input v-model="zpfForm.yearRate" disabled/>
+                      </el-form-item>
+                    </el-col>
+                    <el-col :span="4">
+                      <el-form-item label="自评分" prop="authorScore">
+                        <el-input v-model="zpfForm.authorScore" :disabled="!isPf"/>
+                      </el-form-item>
+                    </el-col>
+                    <el-col :span="4">
+                      <el-form-item label="内审得分" prop="reportScore">
+                        <el-input v-model="zpfForm.reportScore" :disabled="isPf"/>
+                      </el-form-item>
+                    </el-col>
+                    <el-col :span="4">
+                      <el-form-item label="内审人员" prop="mainName">
+                        <el-input v-model="zpfForm.mainName" disabled />
+                      </el-form-item>
+                    </el-col>
+                  </el-row>
+                  <el-form-item>
+                    <el-button type="primary" @click="saveTargetDictZpf" :disabled="!isPf"> 确认</el-button>
+                    <el-button type="primary" @click="saveTargetDictShf" :disabled="isPf"> 审核</el-button>
+                  </el-form-item>
+                </el-form>
+              </el-collapse-item>
             </el-collapse>
           </el-form>
         </div>
@@ -319,42 +362,45 @@
   </el-drawer>
 </template>
 <script setup name="TargetDictConfig" lang="ts">
-import { ref, reactive, onMounted, nextTick } from 'vue'
+import {nextTick, onMounted, reactive, ref} from 'vue'
 import TargetTree from '../target-comm/targetTree.vue'
 import SqlEditPage from '../target-comm/SqlEditPage.vue'
-import { ElMessage, ElMessageBox } from 'element-plus'
-import type { FormInstance, FormRules } from 'element-plus'
-import { clone } from '@/utils/clone'
-import { formatDate } from '@/utils/date'
-import { queryDept } from '@/api/public-api'
+import type {FormInstance, FormRules, TableColumnCtx} from 'element-plus'
+import {ElMessage, ElMessageBox} from 'element-plus'
+import {clone} from '@/utils/clone'
+import {formatDate} from '@/utils/date'
+import {queryDept} from '@/api/public-api'
 import {
-  selectTargetDictById,
-  selectTargetDictTree,
   saveTargetDict,
   selectScoreCycle,
-  updateTargetReportScore,
+  selectScoreCyclePermissions,
+  selectTargetDictById,
+  selectTargetDictTree,
   selectTargetReportScore,
-  selectScoreCyclePermissions
+  updateTargetReportScore,
+  updateTargetReportScoreByShf
 } from '@/api/target-management/target-dict'
-import { selectTargetZbReportId } from '@/api/target-management/report-dict'
-import { employeeList } from "@/api/zhu-yuan-yi-sheng/pat-info-query"
+import {selectTargetZbReportId} from '@/api/target-management/report-dict'
+import {employeeList} from "@/api/zhu-yuan-yi-sheng/pat-info-query"
 import {
-  targetSqlExecuteById,
+  delTargetReportResultByYear,
   saveTargetReportResult,
   saveTargetReportResultSinge,
-  delTargetReportResultByYear,
-  selectTargetReportResult
+  selectTargetReportResult,
+  targetSqlExecuteById
 } from '@/api/target-management/target-sql'
+import {useUserStore} from "@/pinia/user-store";
+import {power} from "@/utils/excel-base-function";
 
 const targetTreeData = ref({
   data: [{}],
   height: 940,
 })
-
+const userInfo = useUserStore().userInfo
 const dataTypeOptions = [{ code: '1', name: 'sql统计' }, { code: '2', name: '手动输入' }]
 const isShowTree = ref(false)
 const isShowTss = ref(true)
-const activeName = ref(['zbxx', 'zbjs'])
+const activeName = ref(['zbInfo', 'zbCalc', 'zbScore'])
 const isShowForm = ref(false)
 // 是否显示指标sql运行结果
 const isShowTargetResult = ref(false)
@@ -407,6 +453,7 @@ onMounted(() => {
     queryScoreCycle()
     queryTargetDictTree()
     queryTargetZbReportId()
+    queryScoreCyclePermissions()
     deptMethod('')
     empMethod('')
   })
@@ -471,6 +518,7 @@ let ruleForm = ref({
 let sqlForm = reactive({
   id: '', // 指标编码
   pid: '', // 父级编码
+  name: '', // 指标名称
   calcChild: '', // 计算分子sql
   calcMom: '', // 计算分母sql
   startTime: '', // 计算开始时间
@@ -697,8 +745,6 @@ const treeNodeClick = (data: any, node: any, obj: any) => {
       id: node.data.id,
       reportCycle: cycle.value
     }
-    // 查询指标得分情况
-    queryTargetReportScore(params)
 
     resultList.value = []
     if (isShowTargetResult.value === false) {
@@ -720,6 +766,8 @@ const treeNodeClick = (data: any, node: any, obj: any) => {
             leafRulesChange(ruleFormRef.value)
 
             upFormRef.value?.resetFields()
+            // 查询指标得分情况
+            queryTargetReportScore(params)
             // 获取指标报表结果
             queryTargetReportResult()
           })
@@ -845,6 +893,7 @@ const sqlExecute = (formEl: FormInstance | undefined) => {
 
   sqlForm.id = ruleForm.value.id
   sqlForm.pid = ruleForm.value.pid
+  sqlForm.name = ruleForm.value.name
   sqlForm.childId = ruleForm.value.childId
   sqlForm.momId = ruleForm.value.momId
   targetSqlExecuteById(sqlForm)
@@ -876,7 +925,7 @@ const saveTargetDictResult = () => {
     return
   }
 
-  if (QtResultData) {
+  if (QtResultData.value) {
     ElMessageBox.confirm('已存在统计结果,请确认是否继续保存统计结果?', {
       cancelButtonText: '取消',
       confirmButtonText: '确定',
@@ -942,8 +991,28 @@ const queryData = ref({
   startTime: '',
   endTime: '',
 })
+interface resultData {
+  reportCycle: string
+  year: string
+  dataType: string
+  childResult: string
+  momResult: string
+  calcResult: string
+  op: string
+  opTime: string
+  yearRate: string
+  cz: object
+}
+
+interface SpanMethodProps {
+  row: resultData
+  column: TableColumnCtx<resultData>
+  rowIndex: number
+  columnIndex: number
+}
+// reportCycle: '',year: '',dataType: '',childResult: '',momResult: '',calcResult:'',op: '',opTime: '',yearRate: '',cz:''
 let QtResultData = ref([])
-const queryTargetReportResult = () => {
+const queryTargetReportResult = async () => {
 
   if (ruleForm.value.id === '') {
     ElMessage({
@@ -969,7 +1038,7 @@ const queryTargetReportResult = () => {
 
   queryData.value.id = ruleForm.value.id
   queryData.value.pid = ruleForm.value.pid
-  selectTargetReportResult(queryData.value)
+  await selectTargetReportResult(queryData.value)
     .then((res: any) => {
       if (isShowQtResult.value === false) {
         isShowQtResult.value = true
@@ -981,6 +1050,13 @@ const queryTargetReportResult = () => {
         row['isAdd'] = false
       })
       QtResultData.value = res
+
+      // 判断自评分的权限
+      callZpfQx()
+      // 计算年均增长率
+      if(QtResultData.value.length > 0){
+        callAverageAnnualGrowthRate(QtResultData.value)
+      }
     });
 }
 
@@ -1018,6 +1094,8 @@ const cycleFormat = () => {
       reportCycle: cycle.value
     }
     queryTargetReportScore(params)
+    // 获取指标报表结果
+    queryTargetReportResult()
   }
 }
 const saveTargetReportScore = () => {
@@ -1059,7 +1137,7 @@ const callSaveTargetReportScore = () => {
     });
     return
   }
-  if (/^(([0-9][0-9]*)|(([0]\.\d{1,2}|[1-9][0-9]*\.\d{1,2})))$/.test(zbScore.value) === false) {
+  if (/^(([0-9]+)|(([0]\.\d{1,2}|[1-9][0-9]*\.\d{1,2})))$/.test(zbScore.value) === false) {
     ElMessage({
       type: "warning",
       message: "填写数据格式不正确,请确认!",
@@ -1099,24 +1177,42 @@ const callSaveTargetReportScore = () => {
     });
 }
 
+// 更新自评分
+const zpfForm = ref({
+  id: '',
+  pid: '',
+  reportCycle: '',
+  reportScore: '',
+  authorId: '',
+  authorName: '',
+  authorScore: '',
+  mainId: '',
+  mainName: '',
+  yearRate: '',
+  flag: ''
+})
 const queryTargetReportScore = (params) => {
   zbScore.value = ''
+  zpfForm.value = {}
   selectTargetReportScore(params)
     .then((res: any) => {
       if(res){
+        zpfForm.value = clone(res)
         zbScore.value = res.reportScore
+        if(qx.value.indexOf(userInfo.code) !== -1){
+          // 存储内审人员信息
+          zpfForm.value.mainId = userInfo.code
+          zpfForm.value.mainName = userInfo.name
+        }
       } else {
+        zpfForm.value = {}
         zbScore.value = ''
       }
     });
 }
 // 显示与隐藏指标树
 const bigOrSmall = () => {
-  if(isShowTss.value) {
-    isShowTss.value = false
-  } else {
-    isShowTss.value = true
-  }
+  isShowTss.value = !isShowTss.value;
 }
 // 手工数据填写计算结果
 const reportResultFormat = (e) => {
@@ -1232,6 +1328,171 @@ const tableReportResultFormat = (row) => {
   }
 }
 // 手工计算数据修改结束
+
+// 合并单元格
+const objectSpanMethod = ({row, column, rowIndex, columnIndex}: SpanMethodProps) => {
+  if('yearRate' === column.property && rowIndex === 0){
+    return {
+      rowspan: 4,
+      colspan: 1,
+    }
+  } else if('yearRate' === column.property){
+    return {
+      rowspan: 0,
+      colspan: 0,
+    }
+  } else {
+    return {
+      rowspan: 1,
+      colspan: 1,
+    }
+  }
+}
+
+const qx = ref('')
+const isPf = ref(true)
+const queryScoreCyclePermissions = () => {
+  selectScoreCyclePermissions()
+    .then((res: any) => {
+      qx.value = res.qx
+    })
+}
+// 自评分权限划分
+const callZpfQx = () => {
+  if(qx.value.indexOf(userInfo.code) === -1) {
+    isPf.value = true
+  } else if(qx.value.indexOf(userInfo.code) !== -1){
+    if(!QtResultData.value){
+      isPf.value = userInfo.codeRs === QtResultData.value[0].opId
+    } else {
+      isPf.value = userInfo.code === ruleForm.value.opId
+    }
+  }
+}
+// 自评分
+const saveTargetDictZpf = () => {
+  if(!ruleForm.value.id){
+    ElMessage({
+      type: "error",
+      message: '请选择一个指标!',
+      duration: 2500,
+      showClose: true,
+    });
+    return
+  }
+
+  if(!zpfForm.value.authorScore){
+    ElMessage({
+      type: "error",
+      message: '请填写自评分!',
+      duration: 2500,
+      showClose: true,
+    });
+    return
+  }
+
+  if (/^(([0-9]+)|(([0]\.\d{1,2}|[1-9][0-9]*\.\d{1,2})))$/.test(zpfForm.value.authorScore) === false) {
+    ElMessage({
+      type: "error",
+      message: "自评分填写数据格式不正确,请确认!",
+      duration: 2500,
+      showClose: true,
+    });
+    return
+  }
+  if (zpfForm.value.authorScore > ruleForm.value.score) {
+    ElMessage({
+      type: "error",
+      message: "自评分不能大于指标总分(" + ruleForm.value.score + "),请确认!",
+      duration: 2500,
+      showClose: true,
+    });
+    return
+  }
+  zpfForm.value.id = ruleForm.value.id
+  zpfForm.value.pid = ruleForm.value.pid
+  zpfForm.value.reportCycle = cycle.value
+  zpfForm.value.criterionScore = ruleForm.value.score
+  zpfForm.value.year
+  updateTargetReportScore(zpfForm.value)
+    .then((res: any) => {
+      ElMessage({
+        type: "success",
+        message: res.cg,
+        duration: 2500,
+        showClose: true,
+      });
+    });
+}
+// 审核得分
+const saveTargetDictShf = () => {
+  if(!ruleForm.value.id){
+    ElMessage({
+      type: "error",
+      message: '请选择一个指标!',
+      duration: 2500,
+      showClose: true,
+    });
+    return
+  }
+
+  if(!zpfForm.value.reportScore){
+    ElMessage({
+      type: "error",
+      message: '请填写内审得分!',
+      duration: 2500,
+      showClose: true,
+    });
+    return
+  }
+
+  if (/^(([0-9]+)|(([0]\.\d{1,2}|[1-9][0-9]*\.\d{1,2})))$/.test(zpfForm.value.reportScore) === false) {
+    ElMessage({
+      type: "error",
+      message: "内审得分填写数据格式不正确,请确认!",
+      duration: 2500,
+      showClose: true,
+    });
+    return
+  }
+  if (zpfForm.value.reportScore > ruleForm.value.score) {
+    ElMessage({
+      type: "error",
+      message: "内审得分不能大于指标总分(" + ruleForm.value.score + "),请确认!",
+      duration: 2500,
+      showClose: true,
+    });
+    return
+  }
+  zpfForm.value.id = ruleForm.value.id
+  zpfForm.value.reportCycle = cycle.value
+  updateTargetReportScoreByShf(zpfForm.value)
+    .then((res: any) => {
+      ElMessage({
+        type: "success",
+        message: res.cg,
+        duration: 2500,
+        showClose: true,
+      });
+    });
+}
+
+// 计算年均增长率
+const callAverageAnnualGrowthRate = (data) => {
+  let d1 = data.filter((item) => {
+    return item.year === sqlForm.startTime
+  })
+  let d2 = data.filter((item) => {
+    return item.year === sqlForm.endTime
+  })
+  if(d1 && d2){
+    let r1 = d1[0].calcResult
+    let r2 = d2[0].calcResult
+    let v = power(r2/r1, 1/3) - 1
+    zpfForm.value.yearRate = v.toFixed(4)
+  }
+}
+
 </script>
 <style lang="scss" scoped>
 :deep(.hd-cl) {

+ 108 - 18
src/views/technology-archives/TechnologyArchivesCore.vue

@@ -8,7 +8,8 @@
         <el-tab-pane key="eighthInfo" label="限制类医疗技术档案" name="eighthInfo">
           <div class="layout_display_flex_y">
             <div class="layout_flex_1-y">
-              <el-table :data="eighthData" border style="width: 100%; height: 100%" stripe highlight-current-row :key="eighthKey">
+              <el-table :data="eighthData.slice(pageSizeEighth * (currentPageEighth - 1), pageSizeEighth * currentPageEighth)" border
+                        style="width: 100%; height: 100%" stripe highlight-current-row class="eighthTable normal-size">
                 <el-table-column type="index" prop="no" label="序号" width="80" />
                 <el-table-column prop="id" label="id号" width="80" v-if="false"/>
                 <el-table-column prop="accountAuthor" label="姓名" width="140">
@@ -94,7 +95,7 @@
                     <el-button type="primary" size="small" v-if="scope.row.isEdit"
                                @click="updateEighthInfo(scope.row)">保存</el-button>
                     <el-button type="primary" size="small" v-if="scope.row.isEdit"
-                               @click="cancelEighthInfo(scope.row, scope.$index)">取消
+                               @click="cancelEighthInfo(scope.row)">取消
                     </el-button>
                     <el-button type="danger" size="small" @click.prevent="deleteEighthInfo(scope.row)">
                       删除</el-button>
@@ -102,12 +103,20 @@
                 </el-table-column>
               </el-table>
             </div>
+            <div>
+              <el-pagination :current-page="currentPageEighth" :page-size="pageSizeEighth"
+                             :page-sizes="[5, 8, 10, 15]" :total="eighthData.length"
+                             layout="total, sizes, prev, pager, next, jumper" style="margin-top: 5px"
+                             @size-change="handleSizeChangeEighth" @current-change="handleCurrentChangeEighth">
+              </el-pagination>
+            </div>
           </div>
         </el-tab-pane>
         <el-tab-pane key="eleventhInfo" label="医疗安全行为记录" name="eleventhInfo">
           <div class="layout_display_flex_y">
             <div class="layout_flex_1-y">
-              <el-table :data="eleventhData" border style="width: 100%; height: 100%" stripe highlight-current-row :key="eleventhKey">
+              <el-table :data="eleventhData.slice(pageSizeEleventh * (currentPageEleventh - 1), pageSizeEleventh * currentPageEleventh)" border
+                        style="width: 100%; height: 100%" stripe highlight-current-row class="eleventhTable normal-size">
                 <el-table-column type="index" prop="no" label="序号" width="80" />
                 <el-table-column prop="id" label="id号" width="80" v-if="false"/>
                 <el-table-column prop="accountAuthor" label="姓名" width="140">
@@ -175,7 +184,7 @@
                     <el-button type="primary" size="small" v-if="scope.row.isEdit"
                                @click="updateEleventhInfo(scope.row)">保存</el-button>
                     <el-button type="primary" size="small" v-if="scope.row.isEdit"
-                               @click="cancelEleventhInfo(scope.row, scope.$index)">取消
+                               @click="cancelEleventhInfo(scope.row)">取消
                     </el-button>
                     <el-button type="danger" size="small" @click.prevent="deleteEleventhInfo(scope.row)">
                       删除</el-button>
@@ -183,12 +192,20 @@
                 </el-table-column>
               </el-table>
             </div>
+            <div>
+              <el-pagination :current-page="currentPageEleventh" :page-size="pageSizeEleventh"
+                             :page-sizes="[5, 8, 10, 15]" :total="eighthData.length"
+                             layout="total, sizes, prev, pager, next, jumper" style="margin-top: 5px"
+                             @size-change="handleSizeChangeEleventh" @current-change="handleCurrentChangeEleventh">
+              </el-pagination>
+            </div>
           </div>
         </el-tab-pane>
         <el-tab-pane key="fifteenthInfo" label="应用医疗技术权限记录" name="fifteenthInfo">
           <div class="layout_display_flex_y">
             <div class="layout_flex_1-y">
-              <el-table :data="fifteenthData" border style="width: 100%; height: 100%" stripe highlight-current-row :key="fifteenthKey">
+              <el-table :data="fifteenthData.slice(pageSizeFifteenth * (currentPageFifteenth - 1), pageSizeFifteenth * currentPageFifteenth)" border
+                        style="width: 100%; height: 100%" stripe highlight-current-row class="fifteenthTable normal-size">
                 <el-table-column type="index" prop="no" label="序号" width="80" />
                 <el-table-column prop="id" label="id号" width="80" v-if="false"/>
                 <el-table-column prop="accountAuthor" label="姓名" width="140">
@@ -281,7 +298,7 @@
                     <el-button type="primary" size="small" v-if="scope.row.isEdit"
                                @click="updateFifteenthInfo(scope.row)">保存</el-button>
                     <el-button type="primary" size="small" v-if="scope.row.isEdit"
-                               @click="cancelFifteenthInfo(scope.row, scope.$index)">取消
+                               @click="cancelFifteenthInfo(scope.row)">取消
                     </el-button>
                     <el-button type="danger" size="small" @click.prevent="deleteFifteenthInfo(scope.row)">
                       删除</el-button>
@@ -289,6 +306,13 @@
                 </el-table-column>
               </el-table>
             </div>
+            <div>
+              <el-pagination :current-page="currentPageFifteenth" :page-size="pageSizeFifteenth"
+                             :page-sizes="[5, 8, 10, 15]" :total="fifteenthData.length"
+                             layout="total, sizes, prev, pager, next, jumper" style="margin-top: 5px"
+                             @size-change="handleSizeChangeFifteenth" @current-change="handleCurrentChangeFifteenth">
+              </el-pagination>
+            </div>
           </div>
         </el-tab-pane>
       </el-tabs>
@@ -378,6 +402,30 @@ const authorCharge = (row) => {
     }
   }
 }
+const pageSizeEighth = ref(10)
+const currentPageEighth = ref(1)
+const handleSizeChangeEighth = (val) => {
+  pageSizeEighth.value = val
+}
+const handleCurrentChangeEighth = (val) => {
+  currentPageEighth.value = val
+}
+const pageSizeEleventh = ref(10)
+const currentPageEleventh = ref(1)
+const handleSizeChangeEleventh = (val) => {
+  pageSizeEleventh.value = val
+}
+const handleCurrentChangeEleventh = (val) => {
+  currentPageEleventh.value = val
+}
+const pageSizeFifteenth = ref(10)
+const currentPageFifteenth = ref(1)
+const handleSizeChangeFifteenth = (val) => {
+  pageSizeFifteenth.value = val
+}
+const handleCurrentChangeFifteenth = (val) => {
+  currentPageFifteenth.value = val
+}
 
 // 切换tab
 const handleClick = (tab) => {
@@ -393,11 +441,8 @@ const handleClick = (tab) => {
 }
 
 const megTip = '核心数据有变更,与原始数据记录存在关联,请谨慎做更改,是否确认!!!'
-let eighthKey = ref(1)
 const eighthData = ref([])
-let eleventhKey = ref(1)
 const eleventhData = ref([])
-let fifteenthKey = ref(1)
 const fifteenthData = ref([])
 const queryTechnologyArchives8 = () => {
   selectTechnologyArchives8()
@@ -447,6 +492,14 @@ const queryTechnologyArchives15 = () => {
 
 const onAddItem = () => {
   if (editableTabsValue.value === 'eighthInfo') {
+    let count
+    if (eighthData.value.length % pageSizeEighth.value === 0) {
+      count = Math.ceil(eighthData.value.length / pageSizeEighth.value) + 1
+    } else {
+      count = Math.ceil(eighthData.value.length / pageSizeEighth.value)
+    }
+    currentPageEighth.value = count
+
     eighthData.value.push({
       accountAuthor: '',
       accountName: '',
@@ -460,7 +513,23 @@ const onAddItem = () => {
       isEdit: true,
       isAdd: true,
     })
+    const el = document.querySelector('.eighthTable .el-scrollbar__wrap')
+    const el2 = document.querySelector('.eighthTable .el-table__body tbody')
+    setTimeout(() => {
+      const height = el2.clientHeight - el.clientHeight
+      if (height > 0) {
+        el.scrollTop = height
+      }
+    }, 100)
   } else if (editableTabsValue.value === 'eleventhInfo') {
+    let count
+    if (eleventhData.value.length % pageSizeEleventh.value === 0) {
+      count = Math.ceil(eleventhData.value.length / pageSizeEleventh.value) + 1
+    } else {
+      count = Math.ceil(eleventhData.value.length / pageSizeEleventh.value)
+    }
+    currentPageEleventh.value = count
+
     eleventhData.value.push({
       accountAuthor: '',
       accountName: '',
@@ -471,7 +540,23 @@ const onAddItem = () => {
       isEdit: true,
       isAdd: true,
     })
+    const el = document.querySelector('.eleventhTable .el-scrollbar__wrap')
+    const el2 = document.querySelector('.eleventhTable .el-table__body tbody')
+    setTimeout(() => {
+      const height = el2.clientHeight - el.clientHeight
+      if (height > 0) {
+        el.scrollTop = height
+      }
+    }, 100)
   } else if (editableTabsValue.value === 'fifteenthInfo') {
+    let count
+    if (fifteenthData.value.length % pageSizeFifteenth.value === 0) {
+      count = Math.ceil(fifteenthData.value.length / pageSizeFifteenth.value) + 1
+    } else {
+      count = Math.ceil(fifteenthData.value.length / pageSizeFifteenth.value)
+    }
+    currentPageFifteenth.value = count
+
     fifteenthData.value.push({
       accountAuthor: '',
       accountName: '',
@@ -486,6 +571,14 @@ const onAddItem = () => {
       isEdit: true,
       isAdd: true,
     })
+    const el = document.querySelector('.fifteenthTable .el-scrollbar__wrap')
+    const el2 = document.querySelector('.fifteenthTable .el-table__body tbody')
+    setTimeout(() => {
+      const height = el2.clientHeight - el.clientHeight
+      if (height > 0) {
+        el.scrollTop = height
+      }
+    }, 100)
   }
 }
 
@@ -497,17 +590,16 @@ const editEighthInfo = (row) => {
   row.isEdit = true
 }
 // 取消
-const cancelEighthInfo = (row, index) => {
+const cancelEighthInfo = (row) => {
   // 如果是新增的数据
   if (row.isAdd) {
-    eighthData.value.splice(index, 1)
+    eighthData.value.splice(eighthData.value.length - 1, 1)
   } else {
     // 不是新增的数据  还原数据
     for (const i in row.oldRow) {
       row[i] = row.oldRow[i]
     }
   }
-  eighthKey.value = Math.random()
 }
 // 保存
 const updateEighthInfo = (row) => {
@@ -585,17 +677,16 @@ const editEleventhInfo = (row) => {
   row.isEdit = true
 }
 // 取消
-const cancelEleventhInfo = (row, index) => {
+const cancelEleventhInfo = (row) => {
   // 如果是新增的数据
   if (row.isAdd) {
-    eleventhData.value.splice(index, 1)
+    eleventhData.value.splice(eleventhData.value.length - 1, 1)
   } else {
     // 不是新增的数据  还原数据
     for (const i in row.oldRow) {
       row[i] = row.oldRow[i]
     }
   }
-  eleventhKey.value = Math.random()
 }
 // 保存
 const updateEleventhInfo = (row) => {
@@ -673,17 +764,16 @@ const editFifteenthInfo = (row) => {
   row.isEdit = true
 }
 // 取消
-const cancelFifteenthInfo = (row, index) => {
+const cancelFifteenthInfo = (row) => {
   // 如果是新增的数据
   if (row.isAdd) {
-    fifteenthData.value.splice(index, 1)
+    fifteenthData.value.splice(fifteenthData.value.length - 1, 1)
   } else {
     // 不是新增的数据  还原数据
     for (const i in row.oldRow) {
       row[i] = row.oldRow[i]
     }
   }
-  fifteenthKey.value = Math.random()
 }
 // 保存
 const updateFifteenthInfo = (row) => {