Sfoglia il codice sorgente

入职信息调整

huangguoce 6 ore fa
parent
commit
48afbb91b3

+ 234 - 2
src/api/human/enrollment/EnrollmentRegistrationService.js

@@ -149,11 +149,11 @@ export default {
 			params: { id: id },
 		});
 	},
-	findIdCardOnly(idCard,id) {
+	findIdCardOnly(idCard, id) {
 		return request({
 			url: prefix + "/enrollmentRegistration/findIdCardOnly",
 			method: "get",
-			params: { idCard: idCard,id:id },
+			params: { idCard: idCard, id: id },
 		});
 	},
 	findMobilePhoneOnly(mobilePhone) {
@@ -215,4 +215,236 @@ export default {
 			responseType: "blob",
 		});
 	},
+	// 教育经历接口
+	saveEduInfo(data) {
+		return request({
+			url: prefix + "/eduInfo/save",
+			method: "post",
+			data: data,
+		});
+	},
+	deleteEduInfoById(id) {
+		return request({
+			url: prefix + "/eduInfo/delete",
+			method: "post",
+			data: { id: id },
+		});
+	},
+	findEduInfo(params) {
+		return request({
+			url: prefix + "/eduInfo/list",
+			method: "get",
+			params: params,
+		});
+	},
+	findEduInfoById(params) {
+		return request({
+			url: prefix + "/eduInfo/findById",
+			method: "get",
+			params: params,
+		});
+	},
+	// 工作经历接口
+	saveWorkInfo(data) {
+		return request({
+			url: prefix + "/workInfo/save",
+			method: "post",
+			data: data,
+		});
+	},
+	deleteWorkInfoById(id) {
+		return request({
+			url: prefix + "/workInfo/delete",
+			method: "post",
+			data: { id: id },
+		});
+	},
+	findWorkInfo(params) {
+		return request({
+			url: prefix + "/workInfo/list",
+			method: "get",
+			params: params,
+		});
+	},
+	findWorkInfoById(params) {
+		return request({
+			url: prefix + "/workInfo/findById",
+			method: "get",
+			params: params,
+		});
+	},
+	// 工作经历接口
+	saveTrainingInfo(data) {
+		return request({
+			url: prefix + "/trainingInfo/save",
+			method: "post",
+			data: data,
+		});
+	},
+	deleteTrainingInfoById(id) {
+		return request({
+			url: prefix + "/trainingInfo/delete",
+			method: "post",
+			data: { id: id },
+		});
+	},
+	findTrainingInfo(params) {
+		return request({
+			url: prefix + "/trainingInfo/list",
+			method: "get",
+			params: params,
+		});
+	},
+	findTrainingInfoById(params) {
+		return request({
+			url: prefix + "/trainingInfo/findById",
+			method: "get",
+			params: params,
+		});
+	},
+	// 资质证书接口
+	saveCertificateInfo(data) {
+		return request({
+			url: prefix + "/certificateInfo/save",
+			method: "post",
+			data: data,
+		});
+	},
+	deleteCertificateInfoById(id) {
+		return request({
+			url: prefix + "/certificateInfo/delete",
+			method: "post",
+			data: { id: id },
+		});
+	},
+	findCertificateInfo(params) {
+		return request({
+			url: prefix + "/certificateInfo/list",
+			method: "get",
+			params: params,
+		});
+	},
+	findCertificateInfoById(params) {
+		return request({
+			url: prefix + "/certificateInfo/findById",
+			method: "get",
+			params: params,
+		});
+	},
+	// 专业技能接口
+	saveSkillInfo(data) {
+		return request({
+			url: prefix + "/skillInfo/save",
+			method: "post",
+			data: data,
+		});
+	},
+	deleteSkillInfoById(id) {
+		return request({
+			url: prefix + "/skillInfo/delete",
+			method: "post",
+			data: { id: id },
+		});
+	},
+	findSkillInfo(params) {
+		return request({
+			url: prefix + "/skillInfo/list",
+			method: "get",
+			params: params,
+		});
+	},
+	findSkillInfoById(params) {
+		return request({
+			url: prefix + "/skillInfo/findById",
+			method: "get",
+			params: params,
+		});
+	},
+	// 语言能力接口
+	saveLanguageInfo(data) {
+		return request({
+			url: prefix + "/languageInfo/save",
+			method: "post",
+			data: data,
+		});
+	},
+	deleteLanguageInfoById(id) {
+		return request({
+			url: prefix + "/languageInfo/delete",
+			method: "post",
+			data: { id: id },
+		});
+	},
+	findLanguageInfo(params) {
+		return request({
+			url: prefix + "/languageInfo/list",
+			method: "get",
+			params: params,
+		});
+	},
+	findLanguageInfoById(params) {
+		return request({
+			url: prefix + "/languageInfo/findById",
+			method: "get",
+			params: params,
+		});
+	},
+	// 家庭成员接口
+	saveFamilyInfo(data) {
+		return request({
+			url: prefix + "/familyInfo/save",
+			method: "post",
+			data: data,
+		});
+	},
+	deleteFamilyInfoById(id) {
+		return request({
+			url: prefix + "/familyInfo/delete",
+			method: "post",
+			data: { id: id },
+		});
+	},
+	findFamilyInfo(params) {
+		return request({
+			url: prefix + "/familyInfo/list",
+			method: "get",
+			params: params,
+		});
+	},
+	findFamilyInfoById(params) {
+		return request({
+			url: prefix + "/familyInfo/findById",
+			method: "get",
+			params: params,
+		});
+	},
+	// 获奖信息接口
+	saveRewardInfo(data) {
+		return request({
+			url: prefix + "/rewardInfo/save",
+			method: "post",
+			data: data,
+		});
+	},
+	deleteRewardInfoById(id) {
+		return request({
+			url: prefix + "/rewardInfo/delete",
+			method: "post",
+			data: { id: id },
+		});
+	},
+	findRewardInfo(params) {
+		return request({
+			url: prefix + "/rewardInfo/list",
+			method: "get",
+			params: params,
+		});
+	},
+	findRewardInfoById(params) {
+		return request({
+			url: prefix + "/rewardInfo/findById",
+			method: "get",
+			params: params,
+		});
+	},
 };

+ 534 - 0
src/views/common/UpLoadComponentCardStyle.vue

@@ -0,0 +1,534 @@
+<!--文件上传组件-->
+<template>
+  <div :key="uploadKey" style="width: 100%;">
+    <!-- <el-divider v-if="showDivider" content-position="left"><i class="el-icon-document"></i> {{ dividerName
+    }}</el-divider> -->
+    <el-upload ref="upload" style="display: inline-block;" :show-header="'status'" action="" :limit="999"
+      :http-request="httpRequest" :multiple="false" :on-exceed="onExceed" :show-file-list="false" :on-change="changes"
+      :on-progress="uploadVideoProcess" :file-list="fileList">
+      <template v-if="auth === 'view' && uploadFlag === false" #tip>
+        <el-button :loading="loading" type="primary" size="default" :disabled="true"> 点击上传 </el-button>
+      </template>
+      <template v-else #trigger>
+        <el-button :loading="loading" type="primary" size="default"> 点击上传 </el-button>
+      </template>
+      <template #tip>
+        <div class="el-upload__tip" style="color: red;">
+          只可上传1个文件
+        </div>
+      </template>
+    </el-upload>
+
+    <div style="height: calc(100% - 80px);margin-top: 10px">
+      <!-- 进度条 -->
+      <el-progress style="" v-if="progressFlag" :percentage="loadProgress"></el-progress>
+      <div class="file-item" v-for="(item, index) in dataListNew">
+        <div class="slt">
+          <template v-if="ifName(item) === 'img'">
+            <el-image :hide-on-click-modal="true" style="width: 30px; height: 30px;padding-top: 4px; margin-right: 8px;"
+              :src="item.lsUrl" :preview-src-list="[item.lsUrl]" :preview-teleported="true"></el-image>
+          </template>
+          <template v-else>
+            <el-icon size="28" style="cursor: pointer;">
+              <Document @click="showFile(item)" />
+            </el-icon>
+            <!-- <el-link type="primary" :underline="false" @click="showFile(item)">{{ item.name }}</el-link> -->
+          </template>
+        </div>
+
+        <el-tooltip effect="dark" :content="item.name" placement="top">
+          <div class="filename">
+            {{ item.name }}
+          </div>
+        </el-tooltip>
+        <div>
+          <el-divider direction="vertical"></el-divider>
+        </div>
+        <div class="file-btn" key="index">
+
+          <el-tooltip effect="dark" content="预览" placement="top">
+            <el-icon size="20" style="margin-right: 10px;cursor: pointer;">
+              <View @click="showFile(item)" />
+            </el-icon>
+          </el-tooltip>
+
+          <el-tooltip effect="dark" content="下载" placement="top">
+            <el-icon size="20" style="margin-right: 10px;cursor: pointer;">
+              <Download @click="toHref(item)" />
+            </el-icon>
+          </el-tooltip>
+          <el-tooltip effect="dark" content="删除" placement="top">
+            <el-icon style="cursor: pointer;">
+              <!-- v-if="auth !== 'view' && delFlag !== false && createBy === item.createBy.name" -->
+              <Delete @click="deleteById(item, index, fileList)" />
+            </el-icon>
+          </el-tooltip>
+        </div>
+      </div>
+      <!-- <el-table ref="uploadTable" v-loading="loading" :key="tableKey" :data="dataListNew">
+        <el-table-column type="seq" width="40"></el-table-column>
+        <el-table-column label="文件名称" prop="name" align="center">
+          <template #default="scope">
+            <div v-if="ifName(scope.row) === true">
+              <el-image style="width: 30px; height: 30px;padding-top: 4px;" :src="scope.row.lsUrl"
+                :preview-src-list="[scope.row.lsUrl]" :preview-teleported="true"></el-image>
+            </div>
+            <div v-else>
+              <el-link type="primary" :underline="false" @click="showFile(scope.row)">{{ scope.row.name }}</el-link>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column label="创建人" prop="createBy.name" align="center"></el-table-column>
+        <el-table-column label="创建时间" prop="createTime" align="center"></el-table-column>
+        <el-table-column label="文件大小" prop="size" align="center">
+          <template #default="scope">
+            {{ getSize(scope.row.size) }}
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" width="200px" fixed="right" align="center">
+          <template #default="scope">
+            <el-button text type="primary" key="01" icon="el-icon-download" size="small"
+              @click="toHref(scope.row)">下载</el-button>
+
+            <el-button text type="primary" key="02" icon="el-icon-delete" size="small"
+              @click="deleteById(scope.row, scope.$index, fileList)"
+              :disabled="auth === 'view' && delFlag === false && createBy !== scope.row.createBy.name">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table> -->
+    </div>
+    <el-image-viewer v-if="showViewer" @close="closeViewer" :url-list="[url]" :zIndex="9999"></el-image-viewer>
+  </div>
+</template>
+
+<script>
+// eslint-disable-next-line no-unused-vars
+import OSSSerivce, {
+  httpRequest,
+  // eslint-disable-next-line no-unused-vars
+  handleRemove,
+  fileName,
+  // eslint-disable-next-line no-unused-vars
+  beforeAvatarUpload,
+  // eslint-disable-next-line no-unused-vars
+  openWindowOnUrl,
+  // eslint-disable-next-line no-unused-vars
+  toHref
+} from '@/api/sys/OSSService'
+// import ElImageViewer from 'element-ui/packages/image/src/image-viewer'
+import moment from 'moment'
+export default {
+  data() {
+    return {
+      uploadKey: '',
+      progressFlag: false,
+      loadProgress: 0,
+      fileList: [],
+      dataList: [],
+      dataListNew: [],
+      url: '',
+      showViewer: false,
+      ossService: null,
+      auth: '',
+      directory: 'public',
+      maxValue: 300,
+      tableKey: '',
+      fileLoading: true,
+      dividerName: '',
+      uploadFlag: false,
+      delFlag: false,
+      createBy: '',
+      showDivider: true,
+      loading: false,
+      dataListLength: ''
+    }
+  },
+  watch: {
+  },
+  created() {
+    this.ossService = new OSSSerivce()
+  },
+  components: {
+    // ElImageViewer
+  },
+  mounted() {
+    window.onPreview = this.onPreview
+  },
+  methods: {
+
+    /**
+     * dividerName: 组件中divider的名称赋值
+     * showDivider: ‘附件‘Divider是否展示
+     *     注:值为空时,默认值为true
+     *    showDivider=false时 ‘附件‘Divider隐藏
+     **/
+    setDividerName(dividerName, showDivider) {
+      if (this.commonJS.isNotEmpty(dividerName)) {
+        this.dividerName = dividerName
+      }
+      if (this.commonJS.isNotEmpty(showDivider)) {
+        if (showDivider === false) {
+          this.showDivider = false
+        } else {
+          this.showDivider = true
+        }
+      } else {
+        this.showDivider = true
+      }
+    },
+    /**
+     * 文件上传组件初始化
+     * @param auth
+     *    auth的值为"view"时,不可上传/编辑文件
+     *    auth为其他值时,可上传/编辑文件
+     * @param fileList  要显示到文件上传列表中的文件。
+     *    注:文件必须要有url属性并且文件的url属性值必须是在oss中的路径值
+     *    例:'/attachment-file/xxx/xxx/2022/9/08/xxx.jpg'
+     * @param directory  要存放到oss的哪个文件夹下。
+     *    注:值为空时,默认存放到"public"文件夹
+     * @param maxValue  上传文件允许的最大值,单位:MB
+     *    注:值为空时,默认值为300MB
+     * @param dividerName  组件中divider的名称
+     *    注:值为空时,默认值为‘附件’
+     * @param uploadFlag  ‘上传文件’按钮是否禁用
+     *    注:值为空时,默认值为false
+     *    auth=view&&uploadFlag=false时 ‘上传文件’按钮禁用
+     * @param delFlag  ‘删除’按钮是否禁用
+     *    注:值为空时,默认值为false
+     *    auth=view&&delFlag=false时 ‘删除’按钮禁用
+     * @param showDivider  ‘附件‘Divider是否展示
+     *    注:值为空时,默认值为true
+     *    showDivider=false时 ‘附件‘Divider隐藏
+     */
+    async newUpload(auth, fileList, directory, maxValue, dividerName, uploadFlag, delFlag, showDivider) {
+      await this.fileLoadingFalse()
+      if (this.commonJS.isEmpty(fileList)) {
+        this.fileLoading = true
+      } else {
+        this.dataListLength = fileList.length
+      }
+      if (this.commonJS.isEmpty(dividerName)) {
+        this.dividerName = '附件'
+      } else {
+        this.dividerName = dividerName
+      }
+      if (directory !== undefined && directory !== null && directory !== '' && directory !== {}) {
+        this.directory = directory
+      } else {
+        this.directory = 'public'
+      }
+      if (maxValue !== undefined && maxValue !== null && maxValue !== '' && maxValue !== 0) {
+        this.maxValue = maxValue
+      } else {
+        this.maxValue = 300
+      }
+      this.auth = auth
+      if (this.commonJS.isEmpty(uploadFlag)) {
+        this.uploadFlag = false
+      } else {
+        if (uploadFlag !== true && uploadFlag !== false) {
+          this.uploadFlag = false
+        } else {
+          this.uploadFlag = uploadFlag
+        }
+      }
+      if (this.commonJS.isEmpty(delFlag)) {
+        this.delFlag = false
+      } else {
+        if (delFlag !== true && delFlag !== false) {
+          this.delFlag = false
+          this.createBy = delFlag
+        } else {
+          this.delFlag = delFlag
+        }
+      }
+
+      for await (let item of fileList) {
+        if (item.url && item.url !== null && item.url !== undefined && item.url !== "") {
+          await this.ossService.getFileSizeByUrl(item.url).then((data) => {
+            item.lsUrl = data.url
+            item.size = data.size
+            this.dataList.push(item)
+            this.dataListNew.push(item)
+            this.fileList.push(item)
+            if (this.dataListNew.length === fileList.length) {
+              this.fileLoading = true
+            }
+          })
+        } else {
+          this.dataList.push(item)
+          this.dataListNew.push(item)
+          this.fileList.push(item)
+          this.fileLoading = true
+        }
+      }
+      // this.dataList = JSON.parse(JSON.stringify(fileList))
+      // this.dataListNew = JSON.parse(JSON.stringify(fileList))
+      if (this.commonJS.isEmpty(showDivider)) {
+        this.showDivider = true
+      } else {
+        if (showDivider === false) {
+          this.showDivider = false
+        } else {
+          this.showDivider = true
+        }
+      }
+    },
+    async httpRequest(file) {
+      await httpRequest(file, fileName(file), this.directory, this.maxValue)
+    },
+    uploadVideoProcess(event, file, fileList) {
+      this.progressFlag = true // 显示进度条
+      this.loadProgress = parseInt(event.percent) // 动态获取文件上传进度
+      if (this.loadProgress >= 100) {
+        this.loadProgress = 100
+        setTimeout(() => {
+          this.progressFlag = false
+        }, 1000) // 一秒后关闭进度条
+      }
+    },
+    getSize(value) {
+      if (this.commonJS.isEmpty(value)) {
+        return '0 B'
+      } else {
+        let val = parseInt(value)
+        if (this.commonJS.isEmpty(val)) {
+          return '0 B'
+        }
+        if (isNaN(val)) {
+          return '0 B'
+        }
+        if (val === 0) {
+          return '0 B'
+        }
+        let k = 1024
+        let sizes = ['B', 'KB', 'MB', 'GB', 'PB', 'TB', 'EB', 'ZB', 'YB']
+        let i = Math.floor(Math.log(val) / Math.log(k))
+        let result = val / Math.pow(k, i);
+        let kb = parseFloat(result.toPrecision(3));
+        return kb + '' + sizes[i]
+      }
+    },
+    async changes(file, fileList) {
+
+      // if (file.status !== 'ready') {
+      //   return
+      // }
+
+
+      if (file.status !== 'ready') {
+        if (this.fileList.length >= 1) {
+          this.$message.warning(`上传失败,当前限制上传 1 个文件`)
+          return
+        }
+        let fileListNamesList = []
+        console.log(JSON.stringify(this.fileList));
+        this.fileList.forEach(fileItem => {
+          fileListNamesList.push(fileItem.name)
+        })
+
+        if (fileListNamesList.indexOf(file.name) != -1) {
+          console.log(fileListNamesList);
+
+          this.$message.error(`${file.name}已存在,无法重复上传`)
+          return
+        } else {
+
+          if (!beforeAvatarUpload(file, fileList, this.maxValue)) {
+            this.$message.error('文件大小不能超过 ' + this.maxValue + ' MB!')
+            return
+          }
+          // this.dataListNew = []
+          // this.dataList.forEach((item) => {
+          //   this.dataListNew.push(item)
+          // })
+          var fileListNames = []
+          for (let fileItem of this.fileList) {
+            fileListNames.push(fileItem.name)
+          }
+          // for (let item of fileList) {
+
+
+          let item1 = JSON.parse(JSON.stringify(file))
+          // if (fileListNames.length === 0 || fileListNames.indexOf(item1.name) === -1) {
+          this.fileList.push(item1)
+          // }
+          item1.createTime = moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
+          item1.createBy = {
+            id: '',
+            name: ''
+          }
+          item1.createBy.id = this.$store.state.user.id
+          item1.createBy.name = this.$store.state.user.name
+          this.dataListNew.push(item1)
+          this.dataList.push(item1)
+          // }
+          for (let item of this.dataListNew) {
+            if (item.raw !== undefined && item.raw !== null && item.raw !== {}) {
+              item.url = item.raw.url
+              if (item.raw.url !== undefined && item.raw.url !== null && item.raw.url !== {}) {
+                this.ossService.getTemporaryUrl(item.raw.url).then((data) => {
+                  item.lsUrl = data
+                })
+              }
+            }
+
+          }
+        }
+      }
+
+    },
+    showFile(row) {
+      console.log('row', row)
+      // openWindowOnUrl(row)
+
+      if (this.ifName(row) == "img") {
+        this.ossService.getTemporaryUrl(row.url).then((data) => {
+          this.onPreview(data)
+        })
+      } else {
+
+        openWindowOnUrl(row)
+      }
+    },
+    onPreview(url) {
+      this.url = url
+      this.showViewer = true
+    },
+    // 关闭查看器
+    closeViewer() {
+      this.url = ''
+      this.showViewer = false
+    },
+    toHref(row) {
+      toHref(row)
+    },
+    async deleteById(row, index, fileList) {
+      // this.$refs.upload.handleRemove(this.dataListNew[index])
+      await this.dataListNew.splice(index, 1)
+      await this.dataList.splice(index, 1)
+      if (this.commonJS.isNotEmpty(row.id)) {
+        this.ossService.deleteMsgById(row.id)
+      }
+      var newFileList = [];
+      for (var i = 0; i < fileList.length; i++) {
+        if (fileList[i].name !== row.name) {
+          newFileList.push(fileList[i])
+        }
+      }
+      this.fileList = newFileList;
+    },
+    /**
+     * 关闭dialog时使用  清除el-upload中上传的文件
+     */
+    clearUpload() {
+      this.$refs.upload.clearFiles()
+      this.dataList = []
+      this.dataListNew = []
+      this.fileList = []
+      this.createBy = ''
+    },
+    /**
+     * 获取当前文件列表中的文件数据
+     */
+    getDataList() {
+
+      return this.dataListNew
+    },
+    /**
+     * 判断进度条是否结束,附件是否加载完成
+     * @returns {boolean}
+     */
+    checkProgress() {
+      if (this.progressFlag === true) {
+        this.$message.warning('请等待附件上传完成再进行操作')
+        return true
+      }
+      if (this.fileLoading === false) {
+        this.$message.warning('请等待附件加载完成再进行操作')
+        if (this.dataListLength === this.dataListNew.length) {
+          this.fileLoading = true
+        }
+        return true
+      }
+
+      const invalidFile = this.dataListNew.find(file => !file.url); // 找到第一个 URL 为空的文件
+      if (invalidFile) {
+        this.$message.warning(`${invalidFile.name}的URL为空,请检查后重新上传`)
+        return true; // 只要有一个 url 为空,直接 return
+      }
+
+      return false
+    },
+    ifName(row) {
+      if (this.commonJS.isEmpty(row.name)) {
+        row.name = '---'
+        return "file"
+      }
+      let suffix = row.name.substring(row.name.lastIndexOf('.') + 1)
+      if (suffix === 'jpg' || suffix === 'png' || suffix === 'gif' || suffix === 'bmp' || suffix === 'jpeg') {
+        return "img"
+      } else {
+        return "file"
+      }
+    },
+    fileLoadingFalse() {
+      this.fileLoading = false
+    },
+    // 开启/关闭页面的加载中状态
+    changeLoading(loading) {
+      if (this.commonJS.isNotEmpty(loading)) {
+        this.loading = loading
+      } else {
+        this.loading = false
+      }
+    },
+    onExceed(files, fileList) {
+      this.$message.warning(`上传失败,当前限制上传 999 个文件`)
+    }
+  }
+}
+</script>
+<style>
+.el-divider__text {
+  font-size: 16px;
+  font-weight: bold;
+}
+
+.file-item {
+  height: 40px;
+  display: flex;
+  width: 250px;
+  align-items: center;
+  border-radius: 10px;
+  background-color: #f7f9fa;
+  padding: 0 10px;
+  margin-bottom: 10px;
+
+  .slt {
+    height: 100%;
+    width: 40px;
+    display: flex;
+    align-items: center;
+  }
+
+  .filename {
+    flex: 1;
+    overflow: hidden;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    cursor: pointer;
+    line-height: 40px;
+  }
+
+  .file-btn {
+    display: flex;
+    align-items: center;
+  }
+
+  .el-icon:hover {
+    color: #2d8cf0;
+
+  }
+}
+</style>

File diff suppressed because it is too large
+ 655 - 729
src/views/human/enrollment/registration/EnrollmentRegistrationAddForm.vue


File diff suppressed because it is too large
+ 1717 - 749
src/views/human/enrollment/registration/EnrollmentRegistrationEditForm.vue


+ 248 - 0
src/views/human/enrollment/registration/components/CertificateInfo.vue

@@ -0,0 +1,248 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-dialog :title="title" :close-on-click-modal="false" draggable width="1200px" height="500px" @close="close"
+			append-to-body v-model="visible">
+			<el-form :model="inputForm" ref="inputForm" v-loading="loading" :rules="rules"
+				:class="method === 'view' ? 'readonly' : ''"
+				:disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'" label-width="100px"
+				@submit.native.prevent>
+				<el-row :gutter="26">
+					<el-col :span="12">
+						<el-form-item label="证书名称" prop="certificateName">
+							<el-select size="default" v-model="inputForm.certificateName" placeholder="请选择证书"
+								style="width: 100%;">
+								<el-option v-for="item in $dictUtils.getDictList('certification_certificate')"
+									:key="item.value" :label="item.label" :value="item.value">
+								</el-option>
+							</el-select>
+						</el-form-item>
+					</el-col>
+
+
+					<el-col :span="12">
+						<el-form-item label="其他证书名称" prop="otherCertificateName">
+							<el-input v-model="inputForm.otherCertificateName" placeholder="请输入其他证书名称"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="证书编号" prop="certificateNumber">
+							<el-input v-model="inputForm.certificateNumber" placeholder="请输入证书编号"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="发证机构" prop="issuingAuthority">
+							<el-input v-model="inputForm.issuingAuthority" placeholder="请输入发证机构"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="获得日期" prop="issueDate">
+							<el-date-picker v-model="inputForm.issueDate" type="date" placeholder="请选择获得日期"
+								style="width: 100%;">
+							</el-date-picker>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="有效期至" prop="validUntil">
+							<el-date-picker v-model="inputForm.validUntil" type="date" placeholder="请选择有效期"
+								style="width: 100%;">
+							</el-date-picker>
+						</el-form-item>
+					</el-col>
+					<el-col :span="24">
+						<el-form-item label="证书附件" prop="certificateAttachment">
+							<UpLoadComponent ref="upLoadComponent"></UpLoadComponent>
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+					<el-button v-if="method === 'edit' || method == 'add'" type="primary" icon="el-icon-circle-check"
+						@click="doSubmit()">确定</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import UpLoadComponent from '@/views/common/UpLoadComponentCardStyle'
+import enrollmentRegistrationService from '@/api/human/enrollment/EnrollmentRegistrationService'
+export default {
+	props: {
+		businessId: {
+			type: String,
+			default: ''
+		},
+		formReadOnly: {
+			type: Boolean,
+			default: false
+		},
+		status: {
+			type: String,
+			default: ''
+		}
+	},
+	data() {
+		return {
+			currentUserId: "",
+			disabled: false,
+			title: '',
+			method: '',
+			visible: false,
+			loading: false,
+			inputForm: {
+				enrollmentRegistrationId: '',
+				certificateName: '',          // 证书名称
+				otherCertificateName: '',     // 其他证书名称
+				certificateNumber: '',        // 证书编号
+				issuingAuthority: '',         // 发证机构
+				issueDate: '',                // 获得日期
+				validUntil: '',               // 有效期至
+				certificateAttachment: []     // 证书附件
+			},
+			keyWatch: '',
+			rules: {
+				certificateName: [
+					{ required: true, message: '请输入证书名称', trigger: 'blur' },
+				],
+				certificateNumber: [
+					{ required: true, message: '请输入证书编号', trigger: 'blur' },
+				],
+				issuingAuthority: [
+					{ required: true, message: '请输入发证机构', trigger: 'blur' },
+				],
+				issueDate: [
+					{ type: 'date', required: true, message: '请选择获得日期', trigger: 'change' }
+				],
+				validUntil: [
+					{ type: 'date', required: true, message: '请选择有效期至', trigger: 'change' }
+				],
+
+			}
+		}
+	},
+	created() {
+
+	},
+	components: {
+		UpLoadComponent
+	},
+	computed: {
+		bus: {
+			get() {
+				return this.businessId
+			},
+			set(val) {
+				this.businessId = val
+			}
+		},
+		name() {
+			return this.$store.state.user.name
+		},
+		userId() {
+			return this.$store.state.user.id
+		}
+	},
+	watch: {
+		'keyWatch': {
+			handler(newVal) {
+				if (this.commonJS.isNotEmpty(this.bus)) {
+					this.init('', this.bus)
+				} else {
+					this.$nextTick(() => {
+						this.$refs.inputForm.resetFields()
+					})
+				}
+			}
+		},
+		'loading': {
+			handler(newVal) {
+				this.$emit('changeLoading', newVal)
+			}
+		}
+	},
+	methods: {
+		getKeyWatch(keyWatch) {
+			this.keyWatch = keyWatch
+		},
+		init(method, id, reId) {
+			this.method = method
+			this.inputForm = {
+				enrollmentRegistrationId: '',
+				certificateName: '',          // 证书名称
+				otherCertificateName: '',     // 其他证书名称
+				certificateNumber: '',        // 证书编号
+				issuingAuthority: '',         // 发证机构
+				issueDate: '',                // 获得日期
+				validUntil: '',               // 有效期至
+				certificateAttachment: []     // 证书附件
+			}
+			if (method === 'add') {
+				this.title = `新增资质证书`
+			} else if (method === 'edit') {
+				this.title = '修改资质证书'
+			} else if (method === 'view') {
+				this.title = '查看资质证书'
+			}
+			this.inputForm.id = id
+			this.inputForm.enrollmentRegistrationId = reId
+			this.visible = true
+			this.loading = true
+			this.$nextTick(() => {
+				if (id) {
+					enrollmentRegistrationService.findCertificateInfoById({
+						id: this.inputForm.id
+					}).then(res => {
+						this.inputForm = this.recover(this.inputForm, res)
+						this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+						if (!this.inputForm.certificateAttachment) {
+							this.inputForm.certificateAttachment = []
+						}
+						this.$refs.upLoadComponent.newUpload(method, this.inputForm.certificateAttachment, 'certificate')
+						this.loading = false
+					})
+				} else {
+					this.inputForm.id = id
+					this.$refs.upLoadComponent.newUpload(method, this.inputForm.certificateAttachment, 'certificate')
+					this.loading = false
+				}
+			})
+		},
+		// 表单提交
+		doSubmit() {
+			this.$refs['inputForm'].validate((valid) => {
+				if (valid) {
+					this.inputForm.issueDate = new Date(this.inputForm.issueDate).getTime(); // 转为时间戳
+					this.inputForm.validUntil = new Date(this.inputForm.validUntil).getTime(); // 转为时间戳
+					this.inputForm.certificateAttachment = this.$refs.upLoadComponent.getDataList()
+					this.inputForm.userId = this.currentUserId
+					enrollmentRegistrationService.saveCertificateInfo(this.inputForm).then(res => {
+						this.close()
+						this.$message.success(res)
+						this.$emit("addCertificateInfo", this.inputForm.enrollmentRegistrationId)
+						this.loading = false
+					})
+				}
+			})
+		},
+		close() {
+			this.$refs.upLoadComponent.clearUpload()
+			this.$refs.inputForm.resetFields()
+			this.visible = false
+		},
+	}
+}
+</script>
+
+
+<style lang="less">
+.fileUpload {
+	.el-form-item__content {
+		width: 100%;
+	}
+}
+</style>

+ 403 - 0
src/views/human/enrollment/registration/components/EducationInfo.vue

@@ -0,0 +1,403 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-dialog :title="title" :close-on-click-modal="false" draggable width="1200px" height="500px" @close="close"
+			append-to-body v-model="visible">
+			<el-form :model="inputForm" ref="inputForm" v-loading="loading" :rules="rules"
+				:class="method === 'view' ? 'readonly' : ''"
+				:disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'" label-width="100px"
+				@submit.native.prevent>
+				<el-row :gutter="26">
+					<el-col :span="12">
+						<el-form-item label="开始时间" prop="startDate">
+
+							<el-date-picker v-model="inputForm.startDate" type="date" placeholder="选择开始时间"
+								style="width: 100%;"></el-date-picker>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="结束时间" prop="endDate">
+							<el-date-picker v-model="inputForm.endDate" type="date" placeholder="选择结束时间"
+								style="width: 100%;"></el-date-picker>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="毕业院校" prop="graduatedFrom">
+							<el-input v-model="inputForm.graduatedFrom" placeholder="请输入毕业院校"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="其他毕业院校" prop="otherGraduatedFrom">
+							<el-input v-model="inputForm.otherGraduatedFrom" placeholder="如无可不填"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="专业" prop="speciality">
+							<el-input v-model="inputForm.speciality" placeholder="请输入专业名称"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="学历" prop="education">
+							<el-select size="default" v-model="inputForm.education" placeholder="请选择学历"
+								style="width: 100%;">
+								<el-option v-for="item in $dictUtils.getDictList('education')" :key="item.value"
+									:label="item.label" :value="item.value">
+								</el-option>
+							</el-select>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="学位" prop="degree">
+							<el-select size="default" v-model="inputForm.degree" placeholder="请选择学位"
+								style="width: 100%;">
+								<el-option v-for="item in $dictUtils.getDictList('degree')" :key="item.value"
+									:label="item.label" :value="item.value">
+								</el-option>
+							</el-select>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="是否最高学历" prop="isHighestEducation">
+
+							<el-radio-group v-model="inputForm.isHighestEducation">
+								<el-radio label="1">是</el-radio>
+								<el-radio label="0">否</el-radio>
+							</el-radio-group>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="是否最高学位" prop="isHighestDegree">
+
+							<el-radio-group v-model="inputForm.isHighestDegree">
+								<el-radio label="1">是</el-radio>
+								<el-radio label="0">否</el-radio>
+							</el-radio-group>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="学习形式" prop="learnForms">
+							<el-select size="default" v-model="inputForm.learnForms" placeholder="请选择学习形式"
+								style="width: 100%;">
+								<el-option v-for="item in $dictUtils.getDictList('learn_form')" :key="item.value"
+									:label="item.label" :value="item.value">
+								</el-option>
+							</el-select>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="毕业类型" prop="graduationType">
+							<el-select size="default" v-model="inputForm.graduationType" placeholder="请选择毕业类型"
+								style="width: 100%;">
+								<el-option v-for="item in $dictUtils.getDictList('graduation_type')" :key="item.value"
+									:label="item.label" :value="item.value">
+								</el-option>
+							</el-select>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<!-- <el-form-item label="培养方式" prop="cultureMethod">
+							<el-select v-model="inputForm.cultureMethod" placeholder="请选择培养方式">
+								<el-option label="统招" value="统招"></el-option>
+								<el-option label="委培" value="委培"></el-option>
+								<el-option label="自费" value="自费"></el-option>
+								<el-option label="统招全日制" value="1"></el-option>
+								<el-option label="国家开放大学" value="2"></el-option>
+								<el-option label="成人高考" value="3"></el-option>
+								<el-option label="网络远程教育" value="4"></el-option>
+								<el-option label="自考" value="5"></el-option>
+							</el-select>
+						</el-form-item> -->
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="学历附件" prop="educationFile" class="fileUpload">
+							<UpLoadComponent ref="educationUploadComponent"></UpLoadComponent>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="学位附件" prop="degreeFile">
+							<UpLoadComponent ref="degreeUploadComponent"></UpLoadComponent>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="24">
+						<el-form-item label="专业描述" prop="specialityDesc">
+							<el-input type="textarea" v-model="inputForm.specialityDesc" placeholder="请输入专业描述"
+								:rows="4"></el-input>
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+					<el-button v-if="method === 'edit' || method == 'add'" type="primary" icon="el-icon-circle-check"
+						@click="doSubmit()">确定</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import UpLoadComponent from '@/views/common/UpLoadComponentCardStyle'
+import enrollmentRegistrationService from '@/api/human/enrollment/EnrollmentRegistrationService'
+import OSSSerivce, {
+	httpRequest,
+	fileName,
+	toHref,
+} from '@/api/sys/OSSService'
+export default {
+	props: {
+		businessId: {
+			type: String,
+			default: ''
+		},
+		formReadOnly: {
+			type: Boolean,
+			default: false
+		},
+		status: {
+			type: String,
+			default: ''
+		}
+	},
+	data() {
+		return {
+			currentUserId: "",
+			disabled: false,
+			title: '',
+			method: '',
+			visible: false,
+			loading: false,
+			inputForm: {
+				graduatedFrom: "",
+				otherGraduatedFrom: "",
+				startDate: "",
+				endDate: "",
+				speciality: "",//专业
+				education: "",//学历
+				degree: "",//学位
+				isHighestEducation: "1",
+				isHighestDegree: "1",
+				learnForms: "",//学习形式
+				graduationType: "",//毕业类型
+				cultureMethod: "",//培养方式
+				educationFile: [],
+				degreeFile: [],
+				specialityDesc: "",
+				enrollmentRegistrationId: ""
+			},
+			keyWatch: '',
+			rules: {
+				graduatedFrom: [
+					{ required: true, message: '毕业院校不能为空', trigger: 'blur' }
+				],
+				startDate: [
+					{ required: true, message: '开始时间不能为空', trigger: 'change' }
+				],
+				endDate: [
+					{ required: true, message: '结束时间不能为空', trigger: 'change' },
+					{
+						validator: (rule, value, callback) => {
+							const start = this.inputForm.startDate;
+							if (!start || !value) return callback();
+							if (new Date(start).getTime() > new Date(value).getTime()) {
+								callback(new Error('结束时间必须晚于开始时间'));
+							} else {
+								callback();
+							}
+						},
+						trigger: 'change'
+					}
+				],
+				speciality: [
+					{ required: true, message: '专业不能为空', trigger: 'blur' }
+				],
+				education: [
+					{ required: true, message: '请选择学历', trigger: 'change' }
+				],
+				degree: [
+					{ required: true, message: '请选择学位', trigger: 'change' }
+				],
+				learnForms: [
+					{ required: true, message: '请选择学习形式', trigger: 'change' }
+				],
+				graduationType: [
+					{ required: true, message: '请选择毕业类型', trigger: 'change' }
+				],
+				cultureMethod: [
+					{ required: true, message: '请选择培养方式', trigger: 'change' }
+				],
+				// educationFile: [
+				// 	{ required: true, message: '请上传学历附件', trigger: 'change' }
+				// ],
+				// degreeFile: [
+				// 	{ required: true, message: '请上传学位附件', trigger: 'change' }
+				// ]
+			}
+		}
+	},
+	created() {
+		this.ossService = new OSSSerivce()
+	},
+	components: {
+		UpLoadComponent
+	},
+	computed: {
+		bus: {
+			get() {
+				return this.businessId
+			},
+			set(val) {
+				this.businessId = val
+			}
+		},
+		name() {
+			return this.$store.state.user.name
+		},
+		userId() {
+			return this.$store.state.user.id
+		}
+	},
+	watch: {
+		'keyWatch': {
+			handler(newVal) {
+				if (this.commonJS.isNotEmpty(this.bus)) {
+					this.init('', this.bus)
+				} else {
+					this.$nextTick(() => {
+						this.$refs.inputForm.resetFields()
+					})
+				}
+			}
+		},
+		'loading': {
+			handler(newVal) {
+				this.$emit('changeLoading', newVal)
+			}
+		}
+	},
+	methods: {
+		validateEndDate(rule, value, callback) {
+			const start = this.inputForm.startDate;
+			const end = value;
+
+			if (!start || !end) {
+				return callback(); // 其中一个为空,先跳过
+			}
+
+			const startTime = new Date(start).getTime();
+			const endTime = new Date(end).getTime();
+
+			if (startTime > endTime) {
+				callback(new Error('结束时间必须晚于开始时间'));
+			} else {
+				callback();
+			}
+		},
+		getKeyWatch(keyWatch) {
+			this.keyWatch = keyWatch
+		},
+		init(method, id, reId) {
+			this.method = method
+			this.inputForm = {
+				graduatedFrom: "",
+				otherGraduatedFrom: "",
+				startDate: "",
+				endDate: "",
+				speciality: "",//专业
+				education: "",//学历
+				degree: "",//学位
+				isHighestEducation: "1",
+				isHighestDegree: "1",
+				learnForms: "",//学习形式
+				graduationType: "",//毕业类型
+				cultureMethod: "",//培养方式
+				educationFile: [],
+				degreeFile: [],
+				specialityDesc: "",
+				enrollmentRegistrationId: ""
+			}
+			if (method === 'add') {
+				this.title = `新增教育经历`
+			} else if (method === 'edit') {
+				this.title = '修改教育经历'
+			} else if (method === 'view') {
+				this.title = '查看教育经历'
+			}
+			this.inputForm.id = id
+			this.inputForm.enrollmentRegistrationId = reId
+			this.visible = true
+			this.loading = true
+			this.$nextTick(() => {
+				if (id) {
+					enrollmentRegistrationService.findEduInfoById({
+						id: this.inputForm.id
+					}).then(res => {
+						this.inputForm = this.recover(this.inputForm, res)
+						this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+						if (!this.inputForm.educationFile) {
+							this.inputForm.educationFile = []
+						}
+						if (!this.inputForm.degreeFile) {
+							this.inputForm.degreeFile = []
+						}
+						this.$refs.educationUploadComponent.newUpload(method, this.inputForm.educationFile, 'education')
+						this.$refs.degreeUploadComponent.newUpload(method, this.inputForm.degreeFile, 'degree')
+						this.loading = false
+					})
+				} else {
+					this.inputForm.id = id
+					this.$refs.educationUploadComponent.newUpload(method, this.inputForm.educationFile, 'education')
+					this.$refs.degreeUploadComponent.newUpload(method, this.inputForm.degreeFile, 'degree')
+					this.loading = false
+				}
+			})
+		},
+		// 表单提交
+		doSubmit() {
+			this.$refs['inputForm'].validate((valid) => {
+				if (valid) {
+					this.inputForm.startDate = new Date(this.inputForm.startDate).getTime(); // 转为时间戳
+					this.inputForm.endDate = new Date(this.inputForm.endDate).getTime(); // 转为时间戳
+					this.inputForm.educationFile = this.$refs.educationUploadComponent.getDataList()
+					this.inputForm.degreeFile = this.$refs.degreeUploadComponent.getDataList()
+					this.inputForm.userId = this.currentUserId
+					enrollmentRegistrationService.saveEduInfo(this.inputForm).then(res => {
+						this.close()
+						this.$message.success(res)
+						this.$emit("addEduInfo", this.inputForm.enrollmentRegistrationId)
+						this.loading = false
+					})
+				}
+			})
+		},
+		close() {
+			this.$refs.educationUploadComponent.clearUpload()
+			this.$refs.degreeUploadComponent.clearUpload()
+			this.$refs.inputForm.resetFields()
+			this.visible = false
+		},
+	}
+}
+</script>
+
+
+<style lang="less">
+.fileUpload {
+	.el-form-item__content {
+		width: 100%;
+	}
+}
+</style>

+ 229 - 0
src/views/human/enrollment/registration/components/FamilyInfo.vue

@@ -0,0 +1,229 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-dialog :title="title" :close-on-click-modal="false" draggable width="1200px" height="500px" @close="close"
+			append-to-body v-model="visible">
+			<el-form :model="inputForm" ref="inputForm" v-loading="loading" :rules="rules"
+				:class="method === 'view' ? 'readonly' : ''"
+				:disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'" label-width="100px"
+				@submit.native.prevent>
+				<el-row :gutter="26">
+					<el-col :span="12">
+						<el-form-item label="成员姓名" prop="name">
+							<el-input v-model="inputForm.name" placeholder="请输入成员姓名"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="出生日期" prop="birthDate">
+							<el-date-picker v-model="inputForm.birthDate" type="date" placeholder="请选择出生日期"
+								style="width: 100%;"></el-date-picker>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="与本人关系" prop="relation">
+							<el-input v-model="inputForm.relation" placeholder="请输入与本人关系"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="性别" prop="gender">
+							<el-radio-group v-model="inputForm.gender">
+								<el-radio v-for="item in $dictUtils.getDictList('sex')" :label="item.value + ''">{{
+									item.label }}</el-radio>
+							</el-radio-group>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="手机号码" prop="mobile">
+							<el-input v-model="inputForm.mobile" placeholder="请输入手机号码"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="工作单位" prop="workUnit">
+							<el-input v-model="inputForm.workUnit" placeholder="请输入工作单位"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="联系电话" prop="contactNumber">
+							<el-input v-model="inputForm.contactNumber" placeholder="请输入联系电话"></el-input>
+						</el-form-item>
+					</el-col>
+
+
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+					<el-button v-if="method === 'edit' || method == 'add'" type="primary" icon="el-icon-circle-check"
+						@click="doSubmit()">确定</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import enrollmentRegistrationService from '@/api/human/enrollment/EnrollmentRegistrationService'
+export default {
+	props: {
+		businessId: {
+			type: String,
+			default: ''
+		},
+		formReadOnly: {
+			type: Boolean,
+			default: false
+		},
+		status: {
+			type: String,
+			default: ''
+		}
+	},
+	data() {
+		return {
+			currentUserId: "",
+			disabled: false,
+			title: '',
+			method: '',
+			visible: false,
+			loading: false,
+			inputForm: {
+				enrollmentRegistrationId: '',
+				name: '',            // 成员姓名
+				birthDate: '',       // 出生日期
+				relation: '',        // 与本人关系名称
+				gender: '1',          // 性别
+				mobile: '',          // 手机号码
+				workUnit: '',        // 工作单位
+				contactNumber: ''    // 联系电话
+			},
+			keyWatch: '',
+			rules: {
+				name: [
+					{ required: true, message: '请输入成员姓名', trigger: 'blur' },
+				],
+				relation: [
+					{ required: true, message: '请输入与本人关系', trigger: 'blur' },
+				],
+				contactNumber: [
+					{ required: true, message: '请输入联系电话', trigger: 'blur' },
+				]
+			}
+		}
+	},
+	created() {
+	},
+	components: {
+	},
+	computed: {
+		bus: {
+			get() {
+				return this.businessId
+			},
+			set(val) {
+				this.businessId = val
+			}
+		},
+		name() {
+			return this.$store.state.user.name
+		},
+		userId() {
+			return this.$store.state.user.id
+		}
+	},
+	watch: {
+		'keyWatch': {
+			handler(newVal) {
+				if (this.commonJS.isNotEmpty(this.bus)) {
+					this.init('', this.bus)
+				} else {
+					this.$nextTick(() => {
+						this.$refs.inputForm.resetFields()
+					})
+				}
+			}
+		},
+		'loading': {
+			handler(newVal) {
+				this.$emit('changeLoading', newVal)
+			}
+		}
+	},
+	methods: {
+		getKeyWatch(keyWatch) {
+			this.keyWatch = keyWatch
+		},
+		init(method, id, reId) {
+			this.method = method
+			this.inputForm = {
+				enrollmentRegistrationId: '',
+				name: '',            // 成员姓名
+				birthDate: '',       // 出生日期(格式:YYYY-MM-DD)
+				relation: '',        // 与本人关系名称
+				gender: '1',          // 性别(如:男、女)
+				mobile: '',          // 手机号码
+				workUnit: '',        // 工作单位
+				contactNumber: ''    // 联系电话
+			}
+			if (method === 'add') {
+				this.title = `新增家庭成员`
+			} else if (method === 'edit') {
+				this.title = '修改家庭成员'
+			} else if (method === 'view') {
+				this.title = '查看家庭成员'
+			}
+			this.inputForm.id = id
+			this.inputForm.enrollmentRegistrationId = reId
+			this.visible = true
+			this.loading = true
+			this.$nextTick(() => {
+				if (id) {
+					enrollmentRegistrationService.findFamilyInfoById({
+						id: this.inputForm.id
+					}).then(res => {
+						this.inputForm = this.recover(this.inputForm, res)
+						this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+						this.loading = false
+					})
+				} else {
+					this.inputForm.id = id
+					this.loading = false
+				}
+			})
+		},
+		// 表单提交
+		doSubmit() {
+			this.$refs['inputForm'].validate((valid) => {
+				if (valid) {
+					this.inputForm.birthDate = new Date(this.inputForm.birthDate).getTime(); // 转为时间戳
+					this.inputForm.userId = this.currentUserId
+					enrollmentRegistrationService.saveFamilyInfo(this.inputForm).then(res => {
+						this.close()
+						this.$message.success(res)
+						this.$emit("addFamilyInfo", this.inputForm.enrollmentRegistrationId)
+						this.loading = false
+					})
+				}
+			})
+		},
+		close() {
+			this.$refs.inputForm.resetFields()
+			this.visible = false
+		},
+	}
+}
+</script>
+
+
+<style lang="less">
+.fileUpload {
+	.el-form-item__content {
+		width: 100%;
+	}
+}
+</style>

+ 227 - 0
src/views/human/enrollment/registration/components/LanguageInfo.vue

@@ -0,0 +1,227 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-dialog :title="title" :close-on-click-modal="false" draggable width="1200px" height="500px" @close="close"
+			append-to-body v-model="visible">
+			<el-form :model="inputForm" ref="inputForm" v-loading="loading" :rules="rules"
+				:class="method === 'view' ? 'readonly' : ''"
+				:disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'" label-width="100px"
+				@submit.native.prevent>
+				<el-row :gutter="26">
+					<el-col :span="12">
+						<el-form-item label="语言" prop="language">
+							<el-input v-model="inputForm.language" placeholder="请输入语言"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="是否母语" prop="isNative">
+							<el-radio-group v-model="inputForm.isNative">
+								<el-radio label="1">是</el-radio>
+								<el-radio label="0">否</el-radio>
+							</el-radio-group>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="掌握程度" prop="proficiency">
+							<el-input v-model="inputForm.proficiency" placeholder="请输入掌握程度"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="书写能力" prop="writingAbility">
+							<el-input v-model="inputForm.writingAbility" placeholder="请输入书写能力"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="阅读能力" prop="readingAbility">
+							<el-input v-model="inputForm.readingAbility" placeholder="请输入阅读能力"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="口语能力" prop="speakingAbility">
+							<el-input v-model="inputForm.speakingAbility" placeholder="请输入口语能力"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="24">
+						<el-form-item label="附件" prop="certificateAttachment">
+							<UpLoadComponent ref="upLoadComponent"></UpLoadComponent>
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+					<el-button v-if="method === 'edit' || method == 'add'" type="primary" icon="el-icon-circle-check"
+						@click="doSubmit()">确定</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import UpLoadComponent from '@/views/common/UpLoadComponentCardStyle'
+import enrollmentRegistrationService from '@/api/human/enrollment/EnrollmentRegistrationService'
+export default {
+	props: {
+		businessId: {
+			type: String,
+			default: ''
+		},
+		formReadOnly: {
+			type: Boolean,
+			default: false
+		},
+		status: {
+			type: String,
+			default: ''
+		}
+	},
+	data() {
+		return {
+			currentUserId: "",
+			disabled: false,
+			title: '',
+			method: '',
+			visible: false,
+			loading: false,
+			inputForm: {
+				language: '',              // 语言
+				isNative: "1",           // 是否母语
+				proficiency: '',           // 掌握程度
+				writingAbility: '',        // 书写能力
+				readingAbility: '',        // 阅读能力
+				speakingAbility: '',        // 口语能力
+				files: []
+			},
+			keyWatch: '',
+			rules: {
+				language: [
+					{ required: true, message: '请输入语言', trigger: 'blur' }
+				],
+			}
+		}
+	},
+	created() {
+
+	},
+	components: {
+		UpLoadComponent
+	},
+	computed: {
+		bus: {
+			get() {
+				return this.businessId
+			},
+			set(val) {
+				this.businessId = val
+			}
+		},
+		name() {
+			return this.$store.state.user.name
+		},
+		userId() {
+			return this.$store.state.user.id
+		}
+	},
+	watch: {
+		'keyWatch': {
+			handler(newVal) {
+				if (this.commonJS.isNotEmpty(this.bus)) {
+					this.init('', this.bus)
+				} else {
+					this.$nextTick(() => {
+						this.$refs.inputForm.resetFields()
+					})
+				}
+			}
+		},
+		'loading': {
+			handler(newVal) {
+				this.$emit('changeLoading', newVal)
+			}
+		}
+	},
+	methods: {
+		getKeyWatch(keyWatch) {
+			this.keyWatch = keyWatch
+		},
+		init(method, id, reId) {
+			this.method = method
+			this.inputForm = {
+				language: '',              // 语言
+				isNative: "1",           // 是否母语
+				proficiency: '',           // 掌握程度
+				writingAbility: '',        // 书写能力
+				readingAbility: '',        // 阅读能力
+				speakingAbility: '',        // 口语能力
+				files: []
+			}
+			if (method === 'add') {
+				this.title = `新增语言能力`
+			} else if (method === 'edit') {
+				this.title = '修改语言能力'
+			} else if (method === 'view') {
+				this.title = '查看语言能力'
+			}
+			this.inputForm.id = id
+			this.inputForm.enrollmentRegistrationId = reId
+			this.visible = true
+			this.loading = true
+			this.$nextTick(() => {
+				if (id) {
+					enrollmentRegistrationService.findLanguageInfoById({
+						id: this.inputForm.id
+					}).then(res => {
+						this.inputForm = this.recover(this.inputForm, res)
+						this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+						if (!this.inputForm.files) {
+							this.inputForm.files = []
+						}
+						this.$refs.upLoadComponent.newUpload(method, this.inputForm.files, 'language')
+						this.loading = false
+					})
+				} else {
+					this.inputForm.id = id
+					this.$refs.upLoadComponent.newUpload(method, this.inputForm.files, 'language')
+					this.loading = false
+				}
+			})
+		},
+		// 表单提交
+		doSubmit() {
+			this.$refs['inputForm'].validate((valid) => {
+				if (valid) {
+					this.inputForm.files = this.$refs.upLoadComponent.getDataList()
+					this.inputForm.userId = this.currentUserId
+					enrollmentRegistrationService.saveLanguageInfo(this.inputForm).then(res => {
+						this.close()
+						this.$message.success(res)
+						this.$emit("addLanguageInfo", this.inputForm.enrollmentRegistrationId)
+						this.loading = false
+					})
+				}
+			})
+		},
+		close() {
+			this.$refs.upLoadComponent.clearUpload()
+			this.$refs.inputForm.resetFields()
+			this.visible = false
+		},
+	}
+}
+</script>
+
+
+<style lang="less">
+.fileUpload {
+	.el-form-item__content {
+		width: 100%;
+	}
+}
+</style>

+ 209 - 0
src/views/human/enrollment/registration/components/RewardInfo.vue

@@ -0,0 +1,209 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-dialog :title="title" :close-on-click-modal="false" draggable width="1200px" height="500px" @close="close"
+			append-to-body v-model="visible">
+			<el-form :model="inputForm" ref="inputForm" v-loading="loading" :rules="rules"
+				:class="method === 'view' ? 'readonly' : ''"
+				:disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'" label-width="100px"
+				@submit.native.prevent>
+				<el-row :gutter="26">
+					<el-col :span="12">
+						<el-form-item label="奖项" prop="name">
+							<el-input v-model="inputForm.name" placeholder="请输入奖项"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="获奖日期" prop="rewardDate">
+							<el-date-picker v-model="inputForm.rewardDate" type="date" placeholder="请选择获奖日期"
+								style="width: 100%;">
+							</el-date-picker>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="24">
+						<el-form-item label="简述" prop="description">
+							<el-input type="textarea" v-model="inputForm.description" placeholder="请输入简述">
+							</el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="24">
+						<el-form-item label="附件" prop="certificateAttachment">
+							<UpLoadComponent ref="upLoadComponent"></UpLoadComponent>
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+					<el-button v-if="method === 'edit' || method == 'add'" type="primary" icon="el-icon-circle-check"
+						@click="doSubmit()">确定</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import UpLoadComponent from '@/views/common/UpLoadComponentCardStyle'
+import enrollmentRegistrationService from '@/api/human/enrollment/EnrollmentRegistrationService'
+export default {
+	props: {
+		businessId: {
+			type: String,
+			default: ''
+		},
+		formReadOnly: {
+			type: Boolean,
+			default: false
+		},
+		status: {
+			type: String,
+			default: ''
+		}
+	},
+	data() {
+		return {
+			currentUserId: "",
+			disabled: false,
+			title: '',
+			method: '',
+			visible: false,
+			loading: false,
+			inputForm: {
+				enrollmentRegistrationId: '',
+				name: "",       // 奖项
+				rewardDate: "",       // 获奖日期
+				description: "", // 简述
+				files: []
+			},
+			keyWatch: '',
+			rules: {
+				name: [
+					{ required: true, message: '请输入语言', trigger: 'blur' }
+				],
+				rewardDate: [
+					{ required: true, message: '请输入获奖日期', trigger: 'blur' }
+				],
+			}
+		}
+	},
+	created() {
+
+	},
+	components: {
+		UpLoadComponent
+	},
+	computed: {
+		bus: {
+			get() {
+				return this.businessId
+			},
+			set(val) {
+				this.businessId = val
+			}
+		},
+		name() {
+			return this.$store.state.user.name
+		},
+		userId() {
+			return this.$store.state.user.id
+		}
+	},
+	watch: {
+		'keyWatch': {
+			handler(newVal) {
+				if (this.commonJS.isNotEmpty(this.bus)) {
+					this.init('', this.bus)
+				} else {
+					this.$nextTick(() => {
+						this.$refs.inputForm.resetFields()
+					})
+				}
+			}
+		},
+		'loading': {
+			handler(newVal) {
+				this.$emit('changeLoading', newVal)
+			}
+		}
+	},
+	methods: {
+		getKeyWatch(keyWatch) {
+			this.keyWatch = keyWatch
+		},
+		init(method, id, reId) {
+			this.method = method
+			this.inputForm = {
+				enrollmentRegistrationId: '',
+				name: "",       // 奖项
+				rewardDate: "",       // 获奖日期
+				description: "", // 简述
+				files: []
+			}
+			if (method === 'add') {
+				this.title = `新增语言能力`
+			} else if (method === 'edit') {
+				this.title = '修改语言能力'
+			} else if (method === 'view') {
+				this.title = '查看语言能力'
+			}
+			this.inputForm.id = id
+			this.inputForm.enrollmentRegistrationId = reId
+			this.visible = true
+			this.loading = true
+			this.$nextTick(() => {
+				if (id) {
+					enrollmentRegistrationService.findRewardInfoById({
+						id: this.inputForm.id
+					}).then(res => {
+						this.inputForm = this.recover(this.inputForm, res)
+						this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+						if (!this.inputForm.files) {
+							this.inputForm.files = []
+						}
+						this.$refs.upLoadComponent.newUpload(method, this.inputForm.files, 'reward')
+						this.loading = false
+					})
+				} else {
+					this.inputForm.id = id
+					this.$refs.upLoadComponent.newUpload(method, this.inputForm.files, 'reward')
+					this.loading = false
+				}
+			})
+		},
+		// 表单提交
+		doSubmit() {
+			this.$refs['inputForm'].validate((valid) => {
+				if (valid) {
+					this.inputForm.rewardDate = new Date(this.inputForm.rewardDate).getTime(); // 转为时间戳
+					this.inputForm.files = this.$refs.upLoadComponent.getDataList()
+					this.inputForm.userId = this.currentUserId
+					enrollmentRegistrationService.saveRewardInfo(this.inputForm).then(res => {
+						this.close()
+						this.$message.success(res)
+						this.$emit("addRewardInfo", this.inputForm.enrollmentRegistrationId)
+						this.loading = false
+					})
+				}
+			})
+		},
+		close() {
+			this.$refs.upLoadComponent.clearUpload()
+			this.$refs.inputForm.resetFields()
+			this.visible = false
+		},
+	}
+}
+</script>
+
+
+<style lang="less">
+.fileUpload {
+	.el-form-item__content {
+		width: 100%;
+	}
+}
+</style>

+ 207 - 0
src/views/human/enrollment/registration/components/SkillInfo.vue

@@ -0,0 +1,207 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-dialog :title="title" :close-on-click-modal="false" draggable width="1200px" height="500px" @close="close"
+			append-to-body v-model="visible">
+			<el-form :model="inputForm" ref="inputForm" v-loading="loading" :rules="rules"
+				:class="method === 'view' ? 'readonly' : ''"
+				:disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'" label-width="100px"
+				@submit.native.prevent>
+				<el-row :gutter="26">
+					<el-col :span="12">
+						<el-form-item label="名称" prop="name">
+							<el-input v-model="inputForm.name" placeholder="请输入名称"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="掌握程度" prop="proficiency">
+							<el-input v-model="inputForm.proficiency" placeholder="请输入掌握程度"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="种类" prop="category">
+							<el-input v-model="inputForm.category" placeholder="请输入种类"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="使用时间(月)" prop="usageTime">
+							<el-input v-model="inputForm.usageTime" placeholder="请输入使用时间(月)"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="24">
+						<el-form-item label="附件" prop="certificateAttachment">
+							<UpLoadComponent ref="upLoadComponent"></UpLoadComponent>
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+					<el-button v-if="method === 'edit' || method == 'add'" type="primary" icon="el-icon-circle-check"
+						@click="doSubmit()">确定</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import UpLoadComponent from '@/views/common/UpLoadComponentCardStyle'
+import enrollmentRegistrationService from '@/api/human/enrollment/EnrollmentRegistrationService'
+export default {
+	props: {
+		businessId: {
+			type: String,
+			default: ''
+		},
+		formReadOnly: {
+			type: Boolean,
+			default: false
+		},
+		status: {
+			type: String,
+			default: ''
+		}
+	},
+	data() {
+		return {
+			currentUserId: "",
+			disabled: false,
+			title: '',
+			method: '',
+			visible: false,
+			loading: false,
+			inputForm: {
+				name: '',              // 名称
+				proficiency: '',       // 掌握程度
+				category: '',          // 种类
+				usageTime: '',          // 使用时间
+				files: []
+			},
+			keyWatch: '',
+			rules: {
+				name: [
+					{ required: true, message: '请输入名称', trigger: 'blur' }
+				],
+			}
+		}
+	},
+	created() {
+
+	},
+	components: {
+		UpLoadComponent
+	},
+	computed: {
+		bus: {
+			get() {
+				return this.businessId
+			},
+			set(val) {
+				this.businessId = val
+			}
+		},
+		name() {
+			return this.$store.state.user.name
+		},
+		userId() {
+			return this.$store.state.user.id
+		}
+	},
+	watch: {
+		'keyWatch': {
+			handler(newVal) {
+				if (this.commonJS.isNotEmpty(this.bus)) {
+					this.init('', this.bus)
+				} else {
+					this.$nextTick(() => {
+						this.$refs.inputForm.resetFields()
+					})
+				}
+			}
+		},
+		'loading': {
+			handler(newVal) {
+				this.$emit('changeLoading', newVal)
+			}
+		}
+	},
+	methods: {
+		getKeyWatch(keyWatch) {
+			this.keyWatch = keyWatch
+		},
+		init(method, id, reId) {
+			this.method = method
+			this.inputForm = {
+				name: '',              // 名称
+				proficiency: '',       // 掌握程度
+				category: '',          // 种类
+				usageTime: '',          // 使用时间
+				files: []
+			}
+			if (method === 'add') {
+				this.title = `新增专业技能`
+			} else if (method === 'edit') {
+				this.title = '修改专业技能'
+			} else if (method === 'view') {
+				this.title = '查看专业技能'
+			}
+			this.inputForm.id = id
+			this.inputForm.enrollmentRegistrationId = reId
+			this.visible = true
+			this.loading = true
+			this.$nextTick(() => {
+				if (id) {
+					enrollmentRegistrationService.findSkillInfoById({
+						id: this.inputForm.id
+					}).then(res => {
+						this.inputForm = this.recover(this.inputForm, res)
+						this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+						if (!this.inputForm.files) {
+							this.inputForm.files = []
+						}
+						this.$refs.upLoadComponent.newUpload(method, this.inputForm.files, 'skill')
+						this.loading = false
+					})
+				} else {
+					this.inputForm.id = id
+					this.$refs.upLoadComponent.newUpload(method, this.inputForm.files, 'skill')
+					this.loading = false
+				}
+			})
+		},
+		// 表单提交
+		doSubmit() {
+			this.$refs['inputForm'].validate((valid) => {
+				if (valid) {
+					this.inputForm.files = this.$refs.upLoadComponent.getDataList()
+					this.inputForm.userId = this.currentUserId
+					enrollmentRegistrationService.saveSkillInfo(this.inputForm).then(res => {
+						this.close()
+						this.$message.success(res)
+						this.$emit("addSkillInfo", this.inputForm.enrollmentRegistrationId)
+						this.loading = false
+					})
+				}
+			})
+		},
+		close() {
+			this.$refs.upLoadComponent.clearUpload()
+			this.$refs.inputForm.resetFields()
+			this.visible = false
+		},
+	}
+}
+</script>
+
+
+<style lang="less">
+.fileUpload {
+	.el-form-item__content {
+		width: 100%;
+	}
+}
+</style>

+ 207 - 0
src/views/human/enrollment/registration/components/TrainingInfo.vue

@@ -0,0 +1,207 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-dialog :title="title" :close-on-click-modal="false" draggable width="1200px" height="500px" @close="close"
+			append-to-body v-model="visible">
+			<el-form :model="inputForm" ref="inputForm" v-loading="loading" :rules="rules"
+				:class="method === 'view' ? 'readonly' : ''"
+				:disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'" label-width="100px"
+				@submit.native.prevent>
+				<el-row :gutter="26">
+					<el-col :span="12">
+						<el-form-item label="名称" prop="name">
+							<el-input v-model="inputForm.name" placeholder="请输入单位名称"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="培训机构" prop="trainingInstitution">
+							<el-input v-model="inputForm.trainingInstitution" placeholder="请输入培训机构"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="培训成绩" prop="trainingResult">
+							<el-input v-model="inputForm.trainingResult" placeholder="请输入培训成绩"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="附件" prop="files">
+							<UpLoadComponent ref="upLoadComponent"></UpLoadComponent>
+						</el-form-item>
+					</el-col>
+
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+					<el-button v-if="method === 'edit' || method == 'add'" type="primary" icon="el-icon-circle-check"
+						@click="doSubmit()">确定</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import UpLoadComponent from '@/views/common/UpLoadComponentCardStyle'
+import enrollmentRegistrationService from '@/api/human/enrollment/EnrollmentRegistrationService'
+export default {
+	props: {
+		businessId: {
+			type: String,
+			default: ''
+		},
+		formReadOnly: {
+			type: Boolean,
+			default: false
+		},
+		status: {
+			type: String,
+			default: ''
+		}
+	},
+	data() {
+		return {
+			currentUserId: "",
+			disabled: false,
+			title: '',
+			method: '',
+			visible: false,
+			loading: false,
+			inputForm: {
+				name: "",
+				trainingInstitution: "",
+				trainingResult: "",
+				files: []
+			},
+			keyWatch: '',
+			rules: {
+				name: [
+					{ required: true, message: '请输入名称', trigger: 'blur' }
+				],
+				trainingInstitution: [
+					{ required: true, message: '请输入培训机构', trigger: 'blur' }
+				],
+				trainingResult: [
+					{ required: true, message: '请输入培训成绩', trigger: 'blur' },
+				],
+			}
+		}
+	},
+	created() {
+
+	},
+	components: {
+		UpLoadComponent
+	},
+	computed: {
+		bus: {
+			get() {
+				return this.businessId
+			},
+			set(val) {
+				this.businessId = val
+			}
+		},
+		name() {
+			return this.$store.state.user.name
+		},
+		userId() {
+			return this.$store.state.user.id
+		}
+	},
+	watch: {
+		'keyWatch': {
+			handler(newVal) {
+				if (this.commonJS.isNotEmpty(this.bus)) {
+					this.init('', this.bus)
+				} else {
+					this.$nextTick(() => {
+						this.$refs.inputForm.resetFields()
+					})
+				}
+			}
+		},
+		'loading': {
+			handler(newVal) {
+				this.$emit('changeLoading', newVal)
+			}
+		}
+	},
+	methods: {
+		getKeyWatch(keyWatch) {
+			this.keyWatch = keyWatch
+		},
+		init(method, id, reId) {
+			this.method = method
+			this.inputForm = {
+				name: "",
+				trainingInstitution: "",
+				trainingResult: "",
+				files: []
+			}
+			if (method === 'add') {
+				this.title = `新增培训经历`
+			} else if (method === 'edit') {
+				this.title = '修改培训经历'
+			} else if (method === 'view') {
+				this.title = '查看培训经历'
+			}
+			this.inputForm.id = id
+			this.inputForm.enrollmentRegistrationId = reId
+			this.visible = true
+			this.loading = true
+			this.$nextTick(() => {
+				if (id) {
+					enrollmentRegistrationService.findTrainingInfoById({
+						id: this.inputForm.id
+					}).then(res => {
+						this.inputForm = this.recover(this.inputForm, res)
+						this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+						if (!this.inputForm.files) {
+							this.inputForm.files = []
+						}
+						this.$refs.upLoadComponent.newUpload(method, this.inputForm.files, 'training')
+						this.loading = false
+					})
+				} else {
+					this.inputForm.id = id
+					this.$refs.upLoadComponent.newUpload(method, this.inputForm.files, 'training')
+					this.loading = false
+				}
+			})
+		},
+		// 表单提交
+		doSubmit() {
+			this.$refs['inputForm'].validate((valid) => {
+				if (valid) {
+					this.inputForm.files = this.$refs.upLoadComponent.getDataList()
+					this.inputForm.userId = this.currentUserId
+					enrollmentRegistrationService.saveTrainingInfo(this.inputForm).then(res => {
+						this.close()
+						this.$message.success(res)
+						this.$emit("addTrainingInfo", this.inputForm.enrollmentRegistrationId)
+						this.loading = false
+					})
+				}
+			})
+		},
+		close() {
+			this.$refs.upLoadComponent.clearUpload()
+			this.$refs.inputForm.resetFields()
+			this.visible = false
+		},
+	}
+}
+</script>
+
+
+<style lang="less">
+.fileUpload {
+	.el-form-item__content {
+		width: 100%;
+	}
+}
+</style>

+ 241 - 0
src/views/human/enrollment/registration/components/WorkInfo.vue

@@ -0,0 +1,241 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-dialog :title="title" :close-on-click-modal="false" draggable width="1200px" height="500px" @close="close"
+			append-to-body v-model="visible">
+			<el-form :model="inputForm" ref="inputForm" v-loading="loading" :rules="rules"
+				:class="method === 'view' ? 'readonly' : ''"
+				:disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'" label-width="100px"
+				@submit.native.prevent>
+				<el-row :gutter="26">
+					<el-col :span="12">
+						<el-form-item label="单位名称" prop="companyName">
+							<el-input v-model="inputForm.companyName" placeholder="请输入单位名称"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="职务" prop="position">
+							<el-input v-model="inputForm.position" placeholder="请输入职务"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="开始时间" prop="startDate">
+
+							<el-date-picker v-model="inputForm.startDate" type="date" placeholder="选择开始时间"
+								style="width: 100%;"></el-date-picker>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="结束时间" prop="endDate">
+							<el-date-picker v-model="inputForm.endDate" type="date" placeholder="选择结束时间"
+								style="width: 100%;"></el-date-picker>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="证明人" prop="certifier">
+							<el-input v-model="inputForm.certifier" placeholder=""></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="是否本单位工作经历" prop="isCurrentCompanyExperience">
+							<el-radio-group v-model="inputForm.isCurrentCompanyExperience">
+								<el-radio label="1">是</el-radio>
+								<el-radio label="0">否</el-radio>
+							</el-radio-group>
+						</el-form-item>
+					</el-col>
+
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+					<el-button v-if="method === 'edit' || method == 'add'" type="primary" icon="el-icon-circle-check"
+						@click="doSubmit()">确定</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import enrollmentRegistrationService from '@/api/human/enrollment/EnrollmentRegistrationService'
+export default {
+	props: {
+		businessId: {
+			type: String,
+			default: ''
+		},
+		formReadOnly: {
+			type: Boolean,
+			default: false
+		},
+		status: {
+			type: String,
+			default: ''
+		}
+	},
+	data() {
+		return {
+			currentUserId: "",
+			disabled: false,
+			title: '',
+			method: '',
+			visible: false,
+			loading: false,
+			inputForm: {
+				enrollmentRegistrationId: '',
+				companyName: '',
+				position: '',
+				startDate: '',
+				endDate: '',
+				certifier: '',
+				isCurrentCompanyExperience: "1"
+			},
+			keyWatch: '',
+			rules: {
+				companyName: [
+					{ required: true, message: '请输入单位名称', trigger: 'blur' }
+				],
+				position: [
+					{ required: true, message: '请输入职务', trigger: 'blur' }
+				],
+				startDate: [
+					{ required: true, message: '请选择开始时间', trigger: 'change' },
+				],
+				endDate: [
+					{ required: true, message: '结束时间不能为空', trigger: 'change' },
+					{
+						validator: (rule, value, callback) => {
+							const start = this.inputForm.startDate;
+							if (!start || !value) return callback();
+							if (new Date(start).getTime() > new Date(value).getTime()) {
+								callback(new Error('结束时间必须晚于开始时间'));
+							} else {
+								callback();
+							}
+						},
+						trigger: 'change'
+					}
+				],
+				isCurrentCompanyExperience: [
+					{ required: true, message: '请选择是否本单位经历', trigger: 'change' },
+				]
+			}
+		}
+	},
+	created() {
+	},
+	components: {
+	},
+	computed: {
+		bus: {
+			get() {
+				return this.businessId
+			},
+			set(val) {
+				this.businessId = val
+			}
+		},
+		name() {
+			return this.$store.state.user.name
+		},
+		userId() {
+			return this.$store.state.user.id
+		}
+	},
+	watch: {
+		'keyWatch': {
+			handler(newVal) {
+				if (this.commonJS.isNotEmpty(this.bus)) {
+					this.init('', this.bus)
+				} else {
+					this.$nextTick(() => {
+						this.$refs.inputForm.resetFields()
+					})
+				}
+			}
+		},
+		'loading': {
+			handler(newVal) {
+				this.$emit('changeLoading', newVal)
+			}
+		}
+	},
+	methods: {
+		getKeyWatch(keyWatch) {
+			this.keyWatch = keyWatch
+		},
+		init(method, id, reId) {
+			this.method = method
+			this.inputForm = {
+				enrollmentRegistrationId: '',
+				companyName: '',
+				position: '',
+				startDate: '',
+				endDate: '',
+				certifier: '',
+				isCurrentCompanyExperience: "1"
+			}
+			if (method === 'add') {
+				this.title = `新增工作经历`
+			} else if (method === 'edit') {
+				this.title = '修改工作经历'
+			} else if (method === 'view') {
+				this.title = '查看工作经历'
+			}
+			this.inputForm.id = id
+			this.inputForm.enrollmentRegistrationId = reId
+			this.visible = true
+			this.loading = true
+			this.$nextTick(() => {
+				if (id) {
+					enrollmentRegistrationService.findWorkInfoById({
+						id: this.inputForm.id
+					}).then(res => {
+						this.inputForm = this.recover(this.inputForm, res)
+						this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+						this.loading = false
+					})
+				} else {
+					this.inputForm.id = id
+					this.loading = false
+				}
+			})
+		},
+		// 表单提交
+		doSubmit() {
+			this.$refs['inputForm'].validate((valid) => {
+				if (valid) {
+					this.inputForm.startDate = new Date(this.inputForm.startDate).getTime(); // 转为时间戳
+					this.inputForm.endDate = new Date(this.inputForm.endDate).getTime(); // 转为时间戳
+					this.inputForm.userId = this.currentUserId
+					enrollmentRegistrationService.saveWorkInfo(this.inputForm).then(res => {
+						this.close()
+						this.$message.success(res)
+						this.$emit("addWorkInfo", this.inputForm.enrollmentRegistrationId)
+						this.loading = false
+					})
+				}
+			})
+		},
+		close() {
+			this.$refs.inputForm.resetFields()
+			this.visible = false
+		},
+	}
+}
+</script>
+
+
+<style lang="less">
+.fileUpload {
+	.el-form-item__content {
+		width: 100%;
+	}
+}
+</style>