ソースを参照

人资要求的技术档案I的多图预览

XU 4 ヶ月 前
コミット
b8d904163b

+ 48 - 15
src/api/technology-archives/technology-archives.js

@@ -38,15 +38,15 @@ export function selectTechnologyArchives1() {
     })
 }
 // 查询技术文档1
-export function selectTa1(socialNo) {
-    return request({
-        url: '/technologyArchives/selectTa1',
-        method: 'get',
-        params: { socialNo },
-    })
-}
+// export function selectTa1(socialNo) {
+//     return request({
+//         url: '/technologyArchives/selectTa1',
+//         method: 'get',
+//         params: { socialNo },
+//     })
+// }
 
-export function setImage1(socialNo, getTime,url) {
+export function setImage1(socialNo, getTime, url) {
     return request({
         url: '/technologyArchives/setImage1',
         method: 'get',
@@ -64,13 +64,13 @@ export function selectImage1(socialNo, getTime) {
 }
 
 // 删除技术文档的图片
-export function deleteImage1(socialNo, getTime) {
-    return request({
-        url: '/technologyArchives/deleteImage1',
-        method: 'get',
-        params: { socialNo, getTime },
-    })
-}
+// export function deleteImage1(socialNo, getTime) {
+//     return request({
+//         url: '/technologyArchives/deleteImage1',
+//         method: 'get',
+//         params: { socialNo, getTime },
+//     })
+// }
 
 // 保存技术文档1
 export function saveTechnologyArchives1(data) {
@@ -187,6 +187,22 @@ export function delTechnologyArchives4ByCode(socialNo, id) {
         params: { socialNo, id },
     })
 }
+export function setTrainingImage(socialNo, beginTime, url) {
+    return request({
+        url: '/technologyArchives/setTrainingImage',
+        method: 'get',
+        params: { socialNo, beginTime, url },
+    })
+}
+
+// 查询培训证明图片
+export function selectTrainingImage(socialNo, id) {
+    return request({
+        url: '/technologyArchives/selectTrainingImage',
+        method: 'get',
+        params: { socialNo, id },
+    })
+}
 
 // 查询技术文档5
 export function selectTechnologyArchives5() {
@@ -278,6 +294,23 @@ export function selectTechnologyArchives9() {
     })
 }
 
+export function setExamineImage(socialNo, time, url) {
+    return request({
+        url: '/technologyArchives/setExamineImage',
+        method: 'get',
+        params: { socialNo, time, url },
+    })
+}
+
+// 查询考核图片
+export function selectExamineImage(socialNo, id) {
+    return request({
+        url: '/technologyArchives/selectExamineImage',
+        method: 'get',
+        params: { socialNo, id },
+    })
+}
+
 // 保存技术文档9
 export function saveTechnologyArchives9(data) {
     return request({

+ 416 - 86
src/views/technology-archives/TechnologyArchivesMain.vue

@@ -269,14 +269,15 @@
                           ref="upload"
                           v-model:file-list="fileList"
                           list-type="picture-card"
-                          :action="apiUrl + `/technologyArchives/putCertificateImage?socialNo=` + scope.row.socialNo + `&getTime=` + scope.row.getTime"
+                          :action="apiUrl + '/technologyArchives/putCertificateImage'"
                           :headers="header"
+                          :data="{ socialNo: scope.row.socialNo, title: scope.row.title }"
                           :on-success="uploadSuccess"
                           :on-preview="handlePreview"
                           :on-remove="handleRemove"
                           :before-upload="beforeUpload"
                           :auto-upload="false"
-                          :multiple
+                          :multiple="true"
                           :show-file-list="true"
                       >
                         <el-icon> <Plus /></el-icon>
@@ -284,7 +285,7 @@
                           <div class="el-upload__tip">只能上传 jpg/png 文件,且不超过 2MB</div>
                         </template>
                       </el-upload>
-                      <el-button style="margin-top: 10px" type="success" icon="Upload" @click="submitUpload(scope.row)">上传到服务器</el-button>
+                      <el-button style="margin-top: 10px" type="success" icon="Upload" @click="submitUploadta1(scope.row)">上传到服务器</el-button>
                       <el-dialog v-model="dialogVisible" append-to-body >
                         <img w-full :src="dialogImageUrl" alt="Preview Image" />
                       </el-dialog>
@@ -293,11 +294,11 @@
                     <div v-else class="demo-image__preview">
                       <el-image
                         style="width: 100px; height: 100px"
-                        :src="url"
+                        :src="srcurl1"
                         :zoom-rate="1.2"
                         :max-scale="7"
                         :min-scale="0.2"
-                        :preview-src-list="srcList"
+                        :preview-src-list="srcList1"
                         :preview-teleported="true"
                         fit="cover"
                       />
@@ -372,14 +373,15 @@
                           ref="upload"
                           v-model:file-list="fileList2"
                           list-type="picture-card"
-                          :action="apiUrl + `/technologyArchives/putProImage?socialNo=` + scope.row.socialNo + `&no=` + scope.row.no"
+                          :action="apiUrl + '/technologyArchives/putProImage'"
                           :headers="header"
+                          :data="{ socialNo: scope.row.socialNo, name: scope.row.name }"
                           :on-success="uploadSuccess2"
                           :on-preview="handlePreview2"
                           :on-remove="handleRemove"
                           :before-upload="beforeUpload"
                           :auto-upload="false"
-                          :multiple
+                          :multiple="true"
                           :show-file-list="true"
                       >
                         <el-icon> <Plus /></el-icon>
@@ -387,7 +389,7 @@
                           <div class="el-upload__tip">只能上传 jpg/png 文件,且不超过 2MB</div>
                         </template>
                       </el-upload>
-                      <el-button style="margin-top: 10px" type="success" icon="Upload" @click="submitUpload(scope.row)">上传到服务器</el-button>
+                      <el-button style="margin-top: 10px" type="success" icon="Upload" @click="submitUploadta2(scope.row)">上传到服务器</el-button>
                       <el-dialog  v-model="dialogVisible" append-to-body >
                         <img w-full :src="dialogImageUrl" alt="Preview Image" />
                       </el-dialog>
@@ -395,11 +397,11 @@
                     <div v-else class="demo-image__preview">
                       <el-image
                         style="width: 100px; height: 100px"
-                        :src="url"
+                        :src="srcurl2"
                         :zoom-rate="1.2"
                         :max-scale="7"
                         :min-scale="0.2"
-                        :preview-src-list="srcList"
+                        :preview-src-list="srcList2"
                         :preview-teleported="true"
                         fit="cover" 
                       />
@@ -511,14 +513,14 @@
                     <span v-else>{{ scope.row.socialNo }}</span>
                   </template>
                 </el-table-column>
-                <el-table-column prop="beginTime" label="开始时间" width="200">
+                <el-table-column prop="beginTime" label="开始时间" width="180">
                   <template v-slot="scope">
                     <el-date-picker v-if="scope.row.isEdit" v-model="scope.row.beginTime" type="date" style="width: 100%"
                                     format="YYYY-MM-DD" value-format="YYYY-MM-DD"/>
                     <span v-else>{{ scope.row.beginTime }}</span>
                   </template>
                 </el-table-column>
-                <el-table-column prop="endTime" label="结束时间" width="200">
+                <el-table-column prop="endTime" label="结束时间" width="180">
                   <template v-slot="scope">
                     <el-date-picker v-if="scope.row.isEdit" v-model="scope.row.endTime" type="date" style="width: 100%"
                                     format="YYYY-MM-DD" value-format="YYYY-MM-DD"/>
@@ -541,7 +543,7 @@
                     </div>
                   </template>
                 </el-table-column>
-                <el-table-column prop="learningContent" label="学习内容" show-overflow-tooltip>
+                <el-table-column prop="learningContent" label="学习内容" show-overflow-tooltip  min-width="200">
                   <template v-slot="scope">
                     <el-input v-if="scope.row.isEdit" size="small" v-model="scope.row.learningContent"></el-input>
                     <span v-else>{{ scope.row.learningContent }}</span>
@@ -553,6 +555,55 @@
                     <span v-else>{{ scope.row.learningUnit }}</span>
                   </template>
                 </el-table-column>
+                <el-table-column prop="image" label="培训证明材料" min-width="160" >
+                  <template #header>
+                    <span>培训证明材料</span>
+                    <el-tooltip class="box-item" effect="dark" placement="top">
+                      <template #content>注:<br />培训获得的证书图片或能够证明参加过培训的截图。</template>
+                      <el-icon color="red" size="14"><QuestionFilled /></el-icon>
+                    </el-tooltip>
+                  </template>
+                  <template v-slot="scope">
+                    <div v-if="scope.row.isEdit">
+                      <el-upload
+                          ref="upload"
+                          v-model:file-list="trainingfileList"
+                          list-type="picture-card"
+                          :action="apiUrl + '/technologyArchives/putTrainingCertificateImage'"
+                          :headers="header"
+                          :data="{ socialNo: scope.row.socialNo, learningContent: scope.row.learningContent }"
+                          :on-success="traininguploadSuccess"
+                          :on-preview="traininghandlePreview"
+                          :on-remove="handleRemove"
+                          :before-upload="beforeUpload"
+                          :auto-upload="false"
+                          :multiple="true"
+                          :show-file-list="true"
+                      >
+                        <el-icon> <Plus /></el-icon>
+                        <template #tip>
+                          <div class="el-upload__tip">只能上传 jpg/png 文件,且不超过 2MB</div>
+                        </template>
+                      </el-upload>
+                      <el-button style="margin-top: 10px" type="success" icon="Upload" @click="trainingsubmitUpload(scope.row)">上传到服务器</el-button>
+                      <el-dialog v-model="dialogVisible" append-to-body >
+                        <img w-full :src="dialogImageUrl"  />
+                      </el-dialog>
+                    </div>
+                    <div v-else class="demo-image__preview">
+                      <el-image
+                        style="width: 100px; height: 100px"
+                        :src="trainingurl"
+                        :zoom-rate="1.2"
+                        :max-scale="7"
+                        :min-scale="0.2"
+                        :preview-src-list="trainingsrcList"
+                        :preview-teleported="true"
+                        fit="cover"
+                      />
+                  </div>
+                  </template>
+                </el-table-column>
                 <el-table-column fixed="right" label="操作" min-width="180" width="180" center>
                   <template #default="scope">
                     <el-button type="primary" size="small" v-if="!scope.row.isEdit"
@@ -838,6 +889,48 @@
                     </div>
                   </template>
                 </el-table-column>
+                <el-table-column prop="image" label="考核截图" min-width="160" >
+                  <template v-slot="scope">
+                    <div v-if="scope.row.isEdit">
+                      <el-upload
+                          ref="upload"
+                          v-model:file-list="examinefileList"
+                          list-type="picture-card"
+                          :action="apiUrl + '/technologyArchives/putExamineCertificateImage'"
+                          :headers="header"
+                          :data="{ socialNo: scope.row.socialNo, content: scope.row.content }"
+                          :on-success="examineuploadSuccess"
+                          :on-preview="examinehandlePreview"
+                          :on-remove="handleRemove"
+                          :before-upload="beforeUpload"
+                          :auto-upload="false"
+                          :multiple="true"
+                          :show-file-list="true"
+                      >
+                        <el-icon> <Plus /></el-icon>
+                        <template #tip>
+                          <div class="el-upload__tip">只能上传 jpg/png 文件,且不超过 2MB</div>
+                        </template>
+                      </el-upload>
+                      <el-button style="margin-top: 10px" type="success" icon="Upload" @click="examinesubmitUpload(scope.row)">上传到服务器</el-button>
+                      <el-dialog v-model="dialogVisible" append-to-body >
+                        <img w-full :src="dialogImageUrl"  />
+                      </el-dialog>
+                    </div>
+                    <div v-else class="demo-image__preview">
+                      <el-image
+                        style="width: 100px; height: 100px"
+                        :src="examineurl"
+                        :zoom-rate="1.2"
+                        :max-scale="7"
+                        :min-scale="0.2"
+                        :preview-src-list="examinesrcList"
+                        :preview-teleported="true"
+                        fit="cover"
+                      />
+                  </div>
+                  </template>
+                </el-table-column>
                 <el-table-column prop="comment" label="备注" width="300" show-overflow-tooltip>
                   <template v-slot="scope">
                     <el-input v-if="scope.row.isEdit" size="small" v-model="scope.row.comment"></el-input>
@@ -1119,8 +1212,12 @@ import {
   saveTechnologyArchives1,
   selectImage1,
   selectImage2,
+  selectTrainingImage,
+  selectExamineImage,
   setImage1,
   setImage2,
+  setTrainingImage,
+  setExamineImage,
   saveTechnologyArchives10,
   saveTechnologyArchives12,
   saveTechnologyArchives13,
@@ -1366,6 +1463,7 @@ let thirteenthKey = ref(1)
 const thirteenthData = ref([])
 let fourteenthKey = ref(1)
 const fourteenthData = ref([])
+const imageList1 = ref([])
 const queryTechnologyArchives1 = () => {
   selectTechnologyArchives1()
     .then((res) => {
@@ -1376,10 +1474,13 @@ const queryTechnologyArchives1 = () => {
         row['isAdd'] = false
         selectImage1(row.socialNo, row.getTime)
           .then((res1)=>{
-            url.value = row.image
-            srcList.value = [res1.data.image]
-            console.log(row)
-            console.log(srcList.value)
+            imageList1.value = res1.data.image.split(',')
+            for(let i=0; i<imageList1.value.length; i++){
+              srcList1.value[i] = uploadurl + imageList1.value[i]
+            }
+            srcurl1.value = srcList1.value[0]
+            console.log(res1.data.image.length)
+            console.log(srcList1.value[0])
         })
       }) 
       firstData.value = res
@@ -1388,6 +1489,7 @@ const queryTechnologyArchives1 = () => {
       firstData.value = []
     })
 }
+const imageList2 = ref([])
 const queryTechnologyArchives2 = () => {
   selectTechnologyArchives2()
     .then((res) => {
@@ -1398,10 +1500,13 @@ const queryTechnologyArchives2 = () => {
         row['isAdd'] = false
         selectImage2(row.socialNo, row.no)
           .then((res1)=>{
-            url.value = row.image
-            srcList.value = [res1.data.image]
-            console.log(row)
-            console.log(srcList.value)
+            imageList2.value = res1.data.image.split(',')
+            for(let i=0; i<imageList2.value.length; i++){
+              srcList2.value[i] = uploadurl + imageList2.value[i]
+            }
+            srcurl2.value = srcList2.value[0]
+            console.log(res1.data.image.length)
+            console.log(srcList2.value[0])
         })
       })
       secondData.value = res
@@ -1425,6 +1530,7 @@ const queryTechnologyArchives3 = () => {
       thirdData.value = []
     })
 }
+const imageList4 = ref([])
 const queryTechnologyArchives4 = () => {
   selectTechnologyArchives4()
     .then((res) => {
@@ -1433,6 +1539,16 @@ const queryTechnologyArchives4 = () => {
         row['isEdit'] = false
         // 是否新增
         row['isAdd'] = false
+        selectTrainingImage(row.socialNo, row.id)
+            .then((res1)=>{
+              imageList4.value = res1.data.image.split(',')
+            for(let i=0; i<imageList4.value.length; i++){
+              trainingsrcList.value[i] = uploadurl + imageList4.value[i]
+            }
+            trainingurl.value = trainingsrcList.value[0]
+            console.log(res1.data.image.length)
+            console.log(trainingsrcList.value[0])
+          })
       })
       fourthData.value = res
     })
@@ -1485,6 +1601,7 @@ const queryTechnologyArchives7 = () => {
       seventhData.value = []
     })
 }
+const imageList9 = ref([])
 const queryTechnologyArchives9 = () => {
   selectTechnologyArchives9()
     .then((res) => {
@@ -1493,6 +1610,16 @@ const queryTechnologyArchives9 = () => {
         row['isEdit'] = false
         // 是否新增
         row['isAdd'] = false
+        selectExamineImage(row.socialNo, row.id)
+          .then((res1)=>{
+            imageList9.value = res1.data.image.split(',')
+          for(let i=0; i<imageList9.value.length; i++){
+            examinesrcList.value[i] = uploadurl + imageList9.value[i]
+          }
+          examineurl.value = examinesrcList.value[0]
+          console.log(res1.data.image.length)
+          console.log(examinesrcList.value[0])
+        })
       })
       ninthData.value = res
     })
@@ -1575,6 +1702,7 @@ const onAddItem = () => {
       isOversize: false,
       isJPG: true
     })
+    fileList.value = []
   } else if(editableTabsValue.value === 'secondInfo'){
     secondData.value.push({
       no: secondData.value.length + 1,
@@ -1590,6 +1718,7 @@ const onAddItem = () => {
       isOversize: false,
       isJPG: true
     })
+    fileList2.value = []
   } else if(editableTabsValue.value === 'thirdInfo'){
     thirdData.value.push({
       socialNo: baseInfoForm.value.socialNo,
@@ -1613,9 +1742,14 @@ const onAddItem = () => {
       learningUnit: '',
       learningName: '',
       id: '',
+      image: '',
       isEdit: true,
       isAdd: true,
+      isUpload: false,
+      isOversize: false,
+      isJPG: true
     })
+    trainingfileList.value = []
   } else if(editableTabsValue.value === 'fifthInfo'){
     fifthData.value.push({
       socialNo: baseInfoForm.value.socialNo,
@@ -1660,9 +1794,14 @@ const onAddItem = () => {
       mode: '',
       result: '',
       comment: '',
+      image: '',
       isEdit: true,
       isAdd: true,
+      isUpload: false,
+      isOversize: false,
+      isJPG: true
     })
+    examinefileList.value = []
   } else if(editableTabsValue.value === 'tenthInfo'){
     tenthData.value.push({
       socialNo: baseInfoForm.value.socialNo,
@@ -1733,7 +1872,7 @@ const cancelFirstInfo = (row, index) => {
     // 不是新增的数据  还原数据
     for (const i in row.oldRow) {
       row[i] = row.oldRow[i]
-    }
+    } 
   }
   if(!row.isUpload){
     fileList.value = []
@@ -1786,32 +1925,37 @@ const header = {
   token: localStorage.token, 
 }
 
-const multiple = computed(() => {
-  // return stringIsBlank(props.getTime)
-  if(fileList.value.length > 1){
-    return true
-  }
-  return false
-})
- 
+//查看图片
+const srcList1 = ref([])
+const srcurl1 = ref("") 
+
 //上传
-const submitUpload = (row) => {
+const submitUploadta1 = (row) => {
   if(row.isOversize && !row.isJPG){
     row.isUpload = false
   }else{
+    upload.value!.action = `${apiUrl}/technologyArchives/putCertificateImage?socialNo=${row.socialNo}&title=${row.title}`
     upload.value!.submit();
     row.isUpload = true 
   }
 }
 
+const url1s = ref([])
 const url1 = ref("")
 function uploadSuccess(response: any, uploadFile: UploadFile) {
-  url1.value = response.data.data.path
+  console.log(response.data.urls.length)
+  // url1.value = response.data.urls
+  url1s.value.push(response.data.urls)  
+  console.log(url1s.value)
+  url1.value = url1s.value.join(",") 
+  console.log(url1.value)
   const index = XEUtils.findLastIndexOf(fileList.value, (item: UploadUserFile) => {
     return item.uid === uploadFile.uid;
   })
   if (response.code === 200) {
-    fileList.value[index].url = uploadurl + url1.value
+    for(let i=0; i<url1s.value.length; i++){
+      fileList.value[index].url = uploadurl + url1s.value[i]
+    }
     ElMessage.success("上传成功");
   } else {
     fileList.value[index].status = 'fail'
@@ -1819,15 +1963,24 @@ function uploadSuccess(response: any, uploadFile: UploadFile) {
   }
 }
 
+const srcList2 = ref([])
+const srcurl2 = ref("")
+
+const url2s = ref([])
 const url2 = ref("")
 function uploadSuccess2(response: any, uploadFile: UploadFile) {
-  url2.value = response.data.data.path
+  console.log(response.data.urls.length)
+  url2s.value.push(response.data.urls)  
+  console.log(url2s.value)
+  url2.value = url2s.value.join(",") 
   console.log(url2.value)
   const index = XEUtils.findLastIndexOf(fileList2.value, (item: UploadUserFile) => {
     return item.uid === uploadFile.uid;
   })
   if (response.code === 200) {
-    fileList2.value[index].url = uploadurl + url2.value
+    for(let i=0; i<url2s.value.length; i++){
+      fileList2.value[index].url = uploadurl + url2s.value[i]
+    }
     ElMessage.success("上传成功");
   } else {
     fileList2.value[index].status = 'fail'
@@ -1835,10 +1988,16 @@ function uploadSuccess2(response: any, uploadFile: UploadFile) {
   }
 }
 
-//查看图片
-const srcList = ref([])
-const url = ref("")
-
+const submitUploadta2 = (row) => {
+  if(row.isOversize && !row.isJPG){
+    row.isUpload = false
+    console.log(upload.value)
+  }else{
+    upload.value!.action = `${apiUrl}/technologyArchives/putProImage?socialNo=${row.socialNo}&name=${row.name}` 
+    upload.value!.submit();
+    row.isUpload = true 
+  }
+}
 
 // 保存
 const updateFirstInfo = (row) => {
@@ -1925,6 +2084,7 @@ const callSaveFirstInfo = (row, oldGetTime) => {
         console.log(url1.value)
         setImage1(row.socialNo,row.getTime,url1.value)  
         fileList.value = []
+        url1s.value = []
       })
     }).catch((action) => {
       if (action === 'cancel') {
@@ -2089,6 +2249,7 @@ const callSaveSecondInfo = (row, oldNo) => {
         console.log(url2.value)
         setImage2(row.socialNo,row.no,url2.value)
         fileList2.value = []  
+        url2s.value = []
       })
     }).catch((action) => {
       if (action === 'cancel') {
@@ -2219,6 +2380,9 @@ const editFourthInfo = (row) => {
   // 备份原始数据
   row['oldRow'] = JSON.parse(JSON.stringify(row))
   row.isEdit = true
+  if(row.image != null){
+    row.isUpload = true
+  }
 }
 // 取消
 const cancelFourthInfo = (row, index) => {
@@ -2231,8 +2395,57 @@ const cancelFourthInfo = (row, index) => {
       row[i] = row.oldRow[i]
     }
   }
+  if(!row.isUpload){
+    trainingfileList.value = []
+  } 
+  if(row.beginTime == null || row.learningContent == null || row.learningUnit == null){
+    trainingfileList.value = []
+  }
   fourthKey.value = Math.random()
 }
+
+//上传培训图片
+const trainingfileList = ref([])
+const trainingsubmitUpload = (row) => {
+  if(row.isOversize && !row.isJPG){
+    row.isUpload = false
+  }else{
+    upload.value!.action = `${apiUrl}/technologyArchives/putTrainingCertificateImage?socialNo=${row.socialNo}&learningContent=${row.learningContent}`
+    upload.value!.submit();
+    row.isUpload = true 
+  }
+}
+
+const turls = ref([])
+const turl = ref("")
+function traininguploadSuccess(response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) {
+  console.log(response.data.urls.length)
+  turls.value.push(response.data.urls)  
+  console.log(turls.value)
+  turl.value = turls.value.join(",") 
+  const index = XEUtils.findLastIndexOf(trainingfileList.value, (item: UploadUserFile) => {
+    return item.uid === uploadFile.uid;
+  })
+  if (response.code === 200) {
+    for(let i=0; i<turls.value.length; i++){
+      trainingfileList.value[index].url = uploadurl + turls.value[i]
+    }
+    ElMessage.success("上传成功");
+  } else {
+    trainingfileList.value[index].status = 'fail'
+    ElMessage.error("上传失败");
+  }
+}
+
+const traininghandlePreview= (uploadFile) => {
+  dialogImageUrl.value = uploadFile.url
+  dialogVisible.value = true
+  console.log(trainingfileList.value[0].name)
+}
+//查看图片
+const trainingsrcList = ref([])
+const trainingurl = ref("")
+
 // 保存
 const updateFourthInfo = (row) => {
   if (!row.socialNo) {
@@ -2247,36 +2460,68 @@ const updateFourthInfo = (row) => {
   if (!row.isAdd && row.socialNo !== row.oldRow.socialNo) {
     row.oldSocialNo = row.oldRow.socialNo
   }
-  callSaveFourthInfo(row)
-}
-
-const callSaveFourthInfo = (row) => {
-  let title = '请确认是否保存<span style="color:#d12020;">' + row.learningContent.length > 10 ? row.learningContent.substring(0,10) + '...' : row.learningContent + '</span>?'
-  ElMessageBox.confirm(title, {
-    cancelButtonText: '取消',
-    confirmButtonText: '确定',
-    type: 'warning',
-    distinguishCancelAndClose: true,
-    dangerouslyUseHTMLString: true
-  }).then(() => {
-    let learnData = learnOptions.filter((item) => {
-      return item.code === row.learningStyle
-    })
-    row.learningName = learnData[0].name
-    saveTechnologyArchives4(row).then((res) => {
+  if (row.isAdd) {
+    let fe = 0
+    for (let num in fourthData.value) {
+      if (fourthData.value[num].beginTime === row.beginTime) {
+        fe++
+      }
+    }
+    if (fe === 2) {
       ElMessage({
-        type: "success",
-        message: res.cg,
+        type: "warning",
+        message: "存在重复的培训经历,请核对!",
         duration: 2500,
         showClose: true,
       });
-      queryTechnologyArchives4()
+    } else{
+      callSaveFourthInfo(row)
+    }   
+  }else{
+    callSaveFourthInfo(row)
+  } 
+}
+
+const callSaveFourthInfo = (row) => {
+  if(!row.isUpload){
+    ElMessage({
+      type: "warning",
+      message: "图片还未上传!",
+      duration: 2500,
+      showClose: true,
+    });
+  }else{
+    let title = '请确认是否保存<span style="color:#d12020;">' + row.learningContent.length > 10 ? row.learningContent.substring(0,10) + '...' : row.learningContent + '</span>?'
+    ElMessageBox.confirm(title, {
+      cancelButtonText: '取消',
+      confirmButtonText: '确定',
+      type: 'warning',
+      distinguishCancelAndClose: true,
+      dangerouslyUseHTMLString: true
+    }).then(() => {
+      let learnData = learnOptions.filter((item) => {
+        return item.code === row.learningStyle
+      })
+      row.learningName = learnData[0].name
+      saveTechnologyArchives4(row).then((res) => {
+        ElMessage({
+          type: "success",
+          message: res.cg,
+          duration: 2500,
+          showClose: true,
+        });
+        queryTechnologyArchives4()
+        setTrainingImage(row.socialNo,row.beginTime,turl.value)
+        trainingfileList.value = []
+        turls.value = []
+      })
+    }).catch((action) => {
+      if (action === 'cancel') {
+        queryTechnologyArchives4()
+        trainingfileList.value = []
+      }
     })
-  }).catch((action) => {
-    if (action === 'cancel') {
-      queryTechnologyArchives4()
-    }
-  })
+  }
 }
 
 const deleteFourthInfo = (row) => {
@@ -2302,6 +2547,7 @@ const deleteFourthInfo = (row) => {
       queryTechnologyArchives4()
     }
   })
+  trainingfileList.value = [];
 }
 // (院内、院外)学习培训情况删改存开始增删改存结束
 
@@ -2384,7 +2630,7 @@ const callSaveFifthInfo = (row, oldTime) => {
     confirmButtonText: '确定',
     type: 'warning',
     distinguishCancelAndClose: true,
-    dangerouslyUseHTMLString: true
+    dangerouslyUseHTMLString: true 
   }).then(() => {
     saveTechnologyArchives5(row).then((res) => {
       ElMessage({
@@ -2619,6 +2865,9 @@ const editNinthInfo = (row) => {
   // 备份原始数据
   row['oldRow'] = JSON.parse(JSON.stringify(row))
   row.isEdit = true
+  if(row.image != null){
+    row.isUpload = true
+  }
 }
 // 取消
 const cancelNinthInfo = (row, index) => {
@@ -2631,8 +2880,57 @@ const cancelNinthInfo = (row, index) => {
       row[i] = row.oldRow[i]
     }
   }
+  if(!row.isUpload){
+    examinefileList.value = []
+  } 
+  if(row.time == null || row.content == null || row.mode == null){
+    examinefileList.value = []
+  }
   ninthKey.value = Math.random()
 }
+
+//上传培训图片
+const examinefileList = ref([])
+const examinesubmitUpload = (row) => {
+  if(row.isOversize && !row.isJPG){
+    row.isUpload = false
+  }else{
+    upload.value!.action = `${apiUrl}/technologyArchives/putExamineCertificateImage?socialNo=${row.socialNo}&content=${row.content}`
+    upload.value!.submit();
+    row.isUpload = true 
+  }
+}
+
+const urls9 = ref([])
+const url9 = ref("")
+function examineuploadSuccess(response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) {
+  console.log(response.data.urls.length)
+  urls9.value.push(response.data.urls)  
+  console.log(urls9.value)
+  url9.value = urls9.value.join(",") 
+  const index = XEUtils.findLastIndexOf(examinefileList.value, (item: UploadUserFile) => {
+    return item.uid === uploadFile.uid;
+  })
+  if (response.code === 200) {
+    for(let i=0; i<urls9.value.length; i++){
+      examinefileList.value[index].url = uploadurl + urls9.value[i]
+    }
+    ElMessage.success("上传成功");
+  } else {
+    examinefileList.value[index].status = 'fail'
+    ElMessage.error("上传失败");
+  }
+}
+
+const examinehandlePreview= (uploadFile) => {
+  dialogImageUrl.value = uploadFile.url
+  dialogVisible.value = true
+  console.log(examinefileList.value[0].name)
+}
+//查看图片
+const examinesrcList = ref([])
+const examineurl = ref("")
+
 // 保存
 const updateNinthInfo = (row) => {
   if (!row.socialNo) {
@@ -2647,32 +2945,64 @@ const updateNinthInfo = (row) => {
   if (!row.isAdd && row.socialNo !== row.oldRow.socialNo) {
     row.oldSocialNo = row.oldRow.socialNo
   }
-  callSaveNinthInfo(row)
-}
-
-const callSaveNinthInfo = (row) => {
-  let title = '请确认是否保存<span style="color:#d12020;">' + row.content.length > 10 ? row.content.substring(0,10) + '...' : row.content + '</span>?'
-  ElMessageBox.confirm(title, {
-    cancelButtonText: '取消',
-    confirmButtonText: '确定',
-    type: 'warning',
-    distinguishCancelAndClose: true,
-    dangerouslyUseHTMLString: true
-  }).then(() => {
-    saveTechnologyArchives9(row).then((res) => {
+  if (row.isAdd) {
+    let fe = 0
+    for (let num in ninthData.value) {
+      if (ninthData.value[num].time === row.time) {
+        fe++
+      }
+    }
+    if (fe === 2) {
       ElMessage({
-        type: "success",
-        message: res.cg,
+        type: "warning",
+        message: "存在重复的考核,请核对!",
         duration: 2500,
         showClose: true,
       });
-      queryTechnologyArchives9()
+    } else{
+      callSaveNinthInfo(row)
+    }   
+  }else{
+    callSaveNinthInfo(row)
+  } 
+}
+
+const callSaveNinthInfo = (row) => {
+  if(!row.isUpload){
+    ElMessage({
+      type: "warning",
+      message: "图片还未上传!",
+      duration: 2500,
+      showClose: true,
+    });
+  }else{
+    let title = '请确认是否保存<span style="color:#d12020;">' + row.content.length > 10 ? row.content.substring(0,10) + '...' : row.content + '</span>?'
+    ElMessageBox.confirm(title, {
+      cancelButtonText: '取消',
+      confirmButtonText: '确定',
+      type: 'warning',
+      distinguishCancelAndClose: true,
+      dangerouslyUseHTMLString: true
+    }).then(() => {
+      saveTechnologyArchives9(row).then((res) => {
+        ElMessage({
+          type: "success",
+          message: res.cg,
+          duration: 2500,
+          showClose: true,
+        });
+        queryTechnologyArchives9()
+        setExamineImage(row.socialNo,row.time,url9.value)
+        examinefileList.value = []
+        urls9.value = []
+      })
+    }).catch((action) => {
+      if (action === 'cancel') {
+        queryTechnologyArchives9()
+      }
     })
-  }).catch((action) => {
-    if (action === 'cancel') {
-      queryTechnologyArchives9()
-    }
-  })
+    examinefileList.value = []
+  }
 }
 
 // 删除