From dc3af0cbb4a6d105bdff497b510cc0a87b3e8d0a Mon Sep 17 00:00:00 2001 From: spring <2396852758@qq.com> Date: 星期五, 28 二月 2025 17:53:44 +0800 Subject: [PATCH] Merge branch 'dev' of http://114.132.189.42:9002/r/lims-ruoyi-before into dev --- src/views/CNAS/personnel/personnelInfo/tabs/personnel-information.vue | 1115 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 1,115 insertions(+), 0 deletions(-) diff --git a/src/views/CNAS/personnel/personnelInfo/tabs/personnel-information.vue b/src/views/CNAS/personnel/personnelInfo/tabs/personnel-information.vue new file mode 100644 index 0000000..2b71f75 --- /dev/null +++ b/src/views/CNAS/personnel/personnelInfo/tabs/personnel-information.vue @@ -0,0 +1,1115 @@ +<template> + <div> + <div style="text-align: right;margin-bottom: 10px"> +<!-- <el-button size="small" @click="$emit('goBackList')">杩斿洖</el-button>--> + <el-button size="small" type="primary" @click="downPerson">涓嬭浇妗f</el-button> + <el-button size="small" type="primary" @click="dialogVisible = true">浜哄憳鍒嗙被</el-button> + <el-button :loading="saveLoading" size="small" type="primary" @click="save">淇濆瓨</el-button> + </div> + <div> + <div style="display: flex;flex-direction: row;"> + <div style="width: 12em"> + <el-image :src="javaApi + '/img/' + form.pictureUrl" fit="fill" + style="width:100%;height: 300px;border: 1px solid #000;border-radius: 10px;margin-left: 6px;margin-top: 10px;"> + <div slot="error" class="image-slot"> + <i class="el-icon-picture-outline" style="font-size: 40px;"></i> + </div> + </el-image> + <el-image :src="javaApi + '/img/' + form.signatureUrl" fit="fill" + style="width:80%;height: 50px;border: 1px solid #000;border-radius: 10px;margin-left: 22px;margin-top: 20px;"> + <div slot="error" class="image-slot"> + <i class="el-icon-picture-outline" style="font-size: 40px;"></i> + </div> + </el-image> + </div> + <div style="height: calc(100vh - 14em);overflow-y: auto"> + <el-form ref="form" :model="form" label-width="110px"> + <el-row> + <el-col :span="8"> + <el-form-item label="濮撳悕"> + <el-input disabled v-model="form.name" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="宸ュ彿"> + <el-input disabled v-model="form.account" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="褰撳墠鐘舵��"> + <el-radio-group v-model="form.currentState"> + <el-radio label="1formal" size="mini">姝e紡</el-radio> + <el-radio label="2intern" size="mini">瀹炰範</el-radio> + <el-radio label="3leaveOffice" size="mini">绂昏亴</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="鎬у埆"> + <el-radio-group v-model="form.sex"> + <el-radio label="1" size="mini">鐢�</el-radio> + <el-radio label="0" size="mini">濂�</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="鍏徃鍚嶇О"> + <el-input v-model="form.corporateName" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="鎵�灞為儴闂�"> + <el-cascader v-model="form.departLimsId" :options="department" :props="{ label: 'name', value: 'id',checkStrictly: true }" filterable style="width: 100%;"></el-cascader> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="宀椾綅鍚嶇О"> + <el-input v-model="form.postName" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="鍏ラ泦鍥㈡椂闂�"> + <el-date-picker v-model="form.groupTime" format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small" + style="width: 99%;" type="date" value-format="yyyy-MM-dd HH:mm:ss"> + </el-date-picker> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="鍔冲姩鍏崇郴"> + <el-radio-group v-model="form.laborRelations"> + <el-radio :label=0 size="mini">鍚堝悓宸�</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="鍏徃閭"> + <el-input v-model="form.email" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="宸ヤ綔鏃堕棿"> + <el-date-picker v-model="form.workingTime" format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small" + style="width: 99%;" type="date" value-format="yyyy-MM-dd HH:mm:ss"> + </el-date-picker> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="鍚堝悓鍒版湡鏃堕棿"> + <el-date-picker v-model="form.contractLifeTime" format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small" + style="width: 99%;" type="date" value-format="yyyy-MM-dd HH:mm:ss"> + </el-date-picker> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="鑱岀О"> + <el-input v-model="form.professionalTitle" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="16" style="text-align: left;"> + <el-form-item label="浜哄憳鍒嗙被"> + <span style="color: #000;">{{ form.personnelClassification }}</span> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="鍑虹敓鏃ユ湡"> + <el-date-picker v-model="form.dateBirth" format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small" + @change="getAge" + style="width: 99%;" type="date" value-format="yyyy-MM-dd HH:mm:ss"> + </el-date-picker> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="绫嶈疮"> + <el-input v-model="form.nativePlace" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="姘戞棌"> + <el-input v-model="form.nation" clearable size="small"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="韬唤璇佸彿"> + <el-input v-model="form.identityCard" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="骞撮緞"> + <el-input-number v-model="form.age" :max="130" :min="1" + controls-position="right" size="small" style="width: 99%;"></el-input-number> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="濠氬Щ鐘跺喌"> + <el-radio-group v-model="form.maritalStatus"> + <el-radio :label=0 size="mini">宸插</el-radio> + <el-radio :label=1 size="mini">鏈</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="璇佷欢鏈夋晥鏈�"> + <el-date-picker v-model="form.validityPeriod" format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" + size="small" style="width: 99%;" type="date" + value-format="yyyy-MM-dd HH:mm:ss"> + </el-date-picker> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="璇佷欢鍦板潃"> + <el-input v-model="form.idAddress" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="璇佷欢璇︾粏鍦板潃"> + <el-input v-model="form.idDetailAddress" clearable size="small"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="鏀挎不闈㈣矊"> + <el-input v-model="form.politicalStatus" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="鍏ュ厷/鍥㈡椂闂�"> + <el-date-picker v-model="form.dumplingTime" format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" + size="small" style="width: 99%;" type="date" + value-format="yyyy-MM-dd HH:mm:ss"> + </el-date-picker> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="鎵嬫満鍙�"> + <el-input v-model="form.telephone" clearable size="small"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="鏈�楂樺鍘�"> + <el-input v-model="form.officialAcademicRedentials" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="鏈�楂樺浣�"> + <el-input v-model="form.highestDegree" clearable size="small"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="姣曚笟闄㈡牎1"> + <el-input v-model="form.graduatedInstitutions1" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="涓撲笟1"> + <el-input v-model="form.major1" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="姣曚笟鏃堕棿1"> + <el-date-picker v-model="form.graduationTime1" format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" + size="small" style="width: 99%;" type="date" + value-format="yyyy-MM-dd HH:mm:ss"> + </el-date-picker> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="姣曚笟闄㈡牎2"> + <el-input v-model="form.graduatedInstitutions2" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="涓撲笟2"> + <el-input v-model="form.major2" clearable size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="姣曚笟鏃堕棿2"> + <el-date-picker v-model="form.graduationTime2" format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" + size="small" style="width: 99%;" type="date" + value-format="yyyy-MM-dd HH:mm:ss"> + </el-date-picker> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="8"> + <el-form-item label="鐧昏鏃堕棿"> + <el-date-picker v-model="form.lastUpdateTime" format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" + size="small" style="width: 99%;" type="date" + value-format="yyyy-MM-dd HH:mm:ss"> + </el-date-picker> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="澶囨敞"> + <el-input type="textarea" v-model="form.remarks" clearable size="small"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="18"> + <el-form-item label="涓汉鐓х墖"> + <el-input v-model="form.pictureUrl" disabled size="small"> + <el-button v-if="form.pictureUrl" slot="append" icon="el-icon-delete-solid" + @click="deleteFile(form.pictureUrl, 'pictureUrl')"></el-button> + </el-input> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-upload ref="upload" :action="action" + :headers="uploadHeader" + :on-success="(response, file, fileList) => onSuccess(response, file, fileList, 'pictureUrl')" + :show-file-list="false" + style="float: left; margin: 0 10px 0 10px;"> + <el-button slot="trigger" class="uploadFile" size="mini" type="primary">涓婁紶</el-button> + </el-upload> + <el-button v-if="form.pictureUrl" class="uploadFile" size="mini" + type="primary" @click="downloadFile(form.pictureUrl)">涓嬭浇</el-button> + </el-col> + </el-row> + <el-row> + <el-col :span="18"> + <el-form-item label="鐢靛瓙绛惧悕"> + <el-input v-model="form.signatureUrl" disabled size="small"> + <el-button v-if="form.signatureUrl" slot="append" icon="el-icon-delete-solid" + @click="deleteFile(form.signatureUrl, 'signatureUrl')"></el-button> + </el-input> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-upload ref="upload" :action="action" + :headers="uploadHeader" + :on-success="(response, file, fileList) => onSuccess(response, file, fileList, 'signatureUrl')" + :show-file-list="false" + style="float: left; margin: 0 10px 0 10px;"> + <el-button slot="trigger" class="uploadFile" size="small" type="primary">涓婁紶</el-button> + </el-upload> + <el-button v-if="form.signatureUrl" class="uploadFile" size="small" + type="primary" @click="downloadFile(form.signatureUrl)">涓嬭浇</el-button> + </el-col> + </el-row> + <el-row> + <el-col :span="20"> + <el-form-item label="璇佷功璧勬枡" > + </el-form-item> + </el-col> + <el-col :span="4"> + <el-button size="mini" style="float: right;margin-right: 25px" type="primary" @click="annexAdd(0)">鏂板</el-button> + </el-col> + </el-row> + <lims-table :tableData="annexList" :column="columnData2" style="width: 96%;margin-left: 34px" + height="200" :tableLoading="tableLoading2"></lims-table> + <el-row style="margin-top: 10px"> + <el-col :span="20"> + <el-form-item label="闄勪欢璧勬枡" > + </el-form-item> + </el-col> + <el-col :span="4"> + <el-upload ref='upload' + :action="fileAction" + :auto-upload="true" :data="{userId: clickNodeVal.userId}" + :before-upload="fileBeforeUpload" + :headers="uploadHeader" :on-error="onError" + :on-success="handleSuccessUp" + :show-file-list="false" + accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' style="width: 80px !important;"> + <el-button size="small" type="primary">闄勪欢涓婁紶</el-button> + </el-upload> + </el-col> + </el-row> + <lims-table :tableData="tableData" :column="columnData" style="width: 96%;float: right;" + height="200" :tableLoading="tableLoading"></lims-table> + <el-row style="margin-top: 10px"> + <el-col :span="20"> + <el-form-item label="宸ヤ綔缁忓巻" > + </el-form-item> + </el-col> + <el-col :span="4"> + <el-button size="mini" style="float: right;margin-right: 25px" type="primary" @click="annexAdd1('add')">鏂板</el-button> + </el-col> + </el-row> + <el-table :data="tableData1" border height="200" style="width: 96%;float: right;" v-loading="tableLoading1"> + <el-table-column label="搴忓彿" type="index" width="55px" align="center"> + </el-table-column> + <el-table-column label="宸ヤ綔缁忓巻" prop="workExperience"> + </el-table-column> + <el-table-column align="center" label="鎿嶄綔"> + <template slot-scope="scope"> + <el-button type="text" size="mini" @click="annexAdd1('edit',scope.row)">缂栬緫</el-button> + <el-button type="text" size="mini" @click="deleteAnnex1(scope.row)" style="color: #f56c6c">鍒犻櫎</el-button> + </template> + </el-table-column> + </el-table> + </el-form> + </div> + </div> + </div> + <!-- 浜哄憳鍒嗙被寮规 --> + <el-dialog :visible.sync="dialogVisible" title="鎻愮ず" width="40%" @open="getComparisonList"> + <div style="height: 30vh;"> + <el-row> + <el-col :span="4"> + 浜哄憳鍒嗙被锛� + </el-col> + <el-col :span="20" style="text-align: left;"> + <el-checkbox-group v-model="checkList"> + <el-checkbox v-for="v in dict.type.personnl_type" :key="v.value" + :label="v.value"></el-checkbox> + </el-checkbox-group> + </el-col> + </el-row> + </div> + <span slot="footer" class="dialog-footer"> + <el-button @click="dialogVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="clickPersonnelClassificationSure">纭� 瀹�</el-button> + </span> + </el-dialog> + + <!-- 鏂板闄勪欢璧勬枡 --> + <el-dialog :before-close="handleClose" :title="title" :visible.sync="dialogVisible1" width="40%" @open="getComparisonList"> + <el-form ref="annex" :model="annex" :rules="rules" label-width="100px"> + <el-row> + <el-col :span="16"> + <el-form-item label="璇佷欢鍙�" prop="idNumber"> + <el-input v-model="annex.idNumber" clearable size="small" style="width: 100%;"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row style="margin-top: 15px"> + <el-col :span="16"> + <el-form-item label="鍙戣瘉鍗曚綅" prop="issueUnit"> + <el-input v-model="annex.issueUnit" clearable size="small"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row style="margin-top: 15px"> + <el-col :span="16"> + <el-form-item label="绾у埆"> + <el-input v-model="annex.level" clearable size="small"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row style="margin-top: 15px"> + <el-col :span="16"> + <el-form-item label="鏈夋晥鏈�" prop="periodValidity"> + <el-input v-model="annex.periodValidity" clearable size="small"></el-input> +<!-- <el-date-picker v-model="annex.periodValidity" format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small"--> +<!-- style="width: 99%;" type="date" value-format="yyyy-MM-dd">--> +<!-- </el-date-picker>--> + </el-form-item> + </el-col> + </el-row> + <el-row style="margin-top: 15px"> + <el-col :span="16"> + <el-form-item label="澶嶅嵃浠�"> + <el-input v-model="annex.copy" clearable size="small"></el-input> + </el-form-item> + </el-col> + </el-row> + + <el-row style="margin-top: 15px"> + <el-col :span="16"> + <el-form-item label="鍘熶欢"> + <el-input v-model="annex.original" clearable size="small"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row style="margin-top: 15px"> + <el-col :span="16"> + <el-form-item label="鏂囦欢"> + <el-upload + :action="action" + :before-upload="beforeAvatarUpload" + :headers="uploadHeader" + :on-success="(response,file,fileList) => onSuccess(response, file, fileList, 'fileName')" + :show-file-list="false"> + <span v-if="annex.fileName">{{annex.fileName}}</span> +<!-- <img v-if="imageUrl" :src="imageUrl" class="avatar">--> + <i v-else class="el-icon-upload avatar-uploader-icon"></i> + </el-upload> + </el-form-item> + </el-col> + </el-row> + </el-form> + <span slot="footer" class="dialog-footer"> + <el-button @click="cancellation">鍙� 娑�</el-button> + <el-button type="primary" @click="submitForm">纭� 瀹�</el-button> + </span> + </el-dialog> + <!-- 鏂板宸ヤ綔缁忓巻 --> + <el-dialog @close="handleClose2" title="娣诲姞宸ヤ綔缁忓巻" :visible.sync="dialogVisible2" width="40%"> + <el-form ref="annex2" :model="annex2" label-width="100px"> + <el-row> + <el-col :span="16"> + <el-form-item label="宸ヤ綔缁忓巻" prop="idNumber"> + <el-input type="textarea" v-model="annex2.workExperience" clearable size="small" style="width: 100%;"></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <span slot="footer" class="dialog-footer"> + <el-button @click="handleClose2">鍙� 娑�</el-button> + <el-button type="primary" @click="submitForm2">纭� 瀹�</el-button> + </span> + </el-dialog> + </div> +</template> + +<script> +import fileDownload from '@/utils/file' +import { + addAnnex, + addBasicInfoWork, + delBasicInfoFileList, + delBasicInfoWorkList, + deleteAnnex, deleteCNASFile, + exportPersonBasicInfoById, + getAnnex, + getAnnexByUserId, + getBasicInfoFileList, + getBasicInfoWorkList, + getCNASPersonnelInfo, + saveCNASPersonnelInfo, + updateAnnex, + updateBasicInfoWorkList +} from "@/api/cnas/personal/personalList"; +import limsTable from "@/components/Table/lims-table.vue"; + +export default { + props: { + clickNodeVal: { + type: Object, + default: () => { return {} } + }, + }, + dicts: ['personnl_type'], + data() { + return { + operationType: '', + basicInfoWorkId: '', + dialogVisible2: false, + annex2: { + workExperience: '' + }, + tableLoading: false, + tableData: [], + columnData: [ + { + label: '鏂囦欢鍚嶇О', + prop: 'fileName', + minWidth: '150px' + }, + { + dataType: 'action', + minWidth: '100', + label: '鎿嶄綔', + fixed: 'right', + operation: [ + { + name: '涓嬭浇', + type: 'text', + clickFun: (row) => { + this.upload(row) + } + }, + { + name: '鍒犻櫎', + type: 'text', + color: '#f56c6c', + clickFun: (row) => { + this.delete(row) + } + } + ] + } + ], + columnData2: [ + { + label: '璇佷欢鍙�', + prop: 'idNumber', + minWidth: '150px' + },{ + label: '鍙戣瘉鍗曚綅', + prop: 'issueUnit', + minWidth: '150px' + },{ + label: '鏂囦欢鍚嶇О', + prop: 'fileName', + minWidth: '200px' + },{ + label: '绾у埆', + prop: 'level', + minWidth: '150px' + },{ + label: '鏈夋晥鏈�', + prop: 'periodValidity', + minWidth: '150px' + },{ + label: '娣诲姞鏃堕棿', + prop: 'createTime', + minWidth: '150px' + }, + { + dataType: 'action', + minWidth: '130', + label: '鎿嶄綔', + fixed: 'right', + operation: [ + { + name: '涓嬭浇', + type: 'text', + clickFun: (row) => { + this.downloadFile(row.fileName) + } + }, + { + name: '缂栬緫', + type: 'text', + clickFun: (row) => { + this.annexAdd(1,row) + } + }, + { + name: '鍒犻櫎', + type: 'text', + color: '#f56c6c', + clickFun: (row) => { + this.deleteAnnex(row) + } + } + ] + } + ], + tableLoading1: false, + tableLoading2: false, + tableData1: [], + addOrupdate: null, + title: '', + annexList: [], + imageUrl: '', + annex: { + userId: '', + idNumber: '', + issueUnit: '', + level: '', + periodValidity: '', + copy: '', + original: '', + fileName: '' + }, + rules: { + idNumber: [ + { required: true, message: '璇疯緭鍏ヨ瘉浠跺彿', trigger: 'blur' } + ], + issueUnit: [ + { required: true, message: '璇疯緭鍏ュ彂璇佸崟浣�', trigger: 'blur' } + ], + periodValidity: [ + { required: false, message: '璇烽�夋嫨鏈夋晥鏈�', trigger: 'blur' } + ] + }, + dialogVisible1: false, + form: { + userId: '', + name: '', + account: '', + currentState: '', + sex: '', + corporateName: '', + department: '', + departLimsId: [], + postName: '', + groupTime: '', + laborRelations: '', + workingTime: '', + contractLifeTime: '', + personnelClassification: '', + dateBirth: '', + nativePlace: '', + nation: '', + identityCard: '', + age: '', + validityPeriod: '', + maritalStatus: '', + idAddress: '', + idDetailAddress: '', + politicalStatus: '', + dumplingTime: '', + telephone: '', + email: '', + officialAcademicRedentials: '', + highestDegree: '', + graduatedInstitutions1: '', + major1: '', + graduationTime1: '', + graduatedInstitutions2: '', + major2: '', + graduationTime2: '', + lastUpdateTime: '', + pictureUrl: '', + signatureUrl: '', + professionalTitle: '', + remarks: '', + }, + department: [], + saveLoading: false, + dialogVisible: false, + checkList: [], + successFileList: [], // 闃叉鍚庣鍑虹幇鑴忔暟鎹� + isSave: false, + } + }, + components: {limsTable, fileDownload}, + created() { + this.init() + this.searchTableList() + this.searchTableList2() + }, + computed: { + action() { + return this.javaApi + '/personBasicInfo/saveCNASFile' + }, + fileAction() { + return this.javaApi + '/personBasicInfo/uploadBasicInfoFile' + }, + }, + methods: { + // 涓嬭浇妗f + downPerson(){ + exportPersonBasicInfoById({id: this.clickNodeVal.userId}).then(res => { + const blob = new Blob([res],{ type: 'application/msword' }); + this.$download.saveAs(blob, '浜哄憳妗f.docx'); + this.$message.success('瀵煎嚭鎴愬姛') + }) + }, + // 涓婁紶楠岃瘉 + fileBeforeUpload(file) { + let flag = true + if (file.size > 1024 * 1024 * 10) { + this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M'); + this.$refs.upload.clearFiles() + flag = false + } + if (!flag) { + return Promise.reject(flag); //姝g‘鐨勭粓姝� + } + }, + onError(err, file, fileList,type) { + this.$message.error('涓婁紶澶辫触') + this.$refs.upload.clearFiles() + }, + handleSuccessUp(response, ) { + this.upLoading = false; + if (response.code == 200) { + this.$message.success('涓婁紶鎴愬姛'); + this.searchTableList() + } else { + this.$message.error(response.message); + } + }, + // 鏌ヨ闄勪欢鍒楄〃 + searchTableList () { + this.tableLoading = true + getBasicInfoFileList({userId: this.clickNodeVal.userId}).then(res => { + this.tableLoading = false + this.tableData = res.data + }).catch(err => { + this.tableLoading = false + console.log('err---', err); + }) + }, + // 涓嬭浇 + upload (row) { + let url = ''; + if(row.type==1){ + url = this.javaApi+'/img/'+row.fileUrl + fileDownload.downloadIamge(url,row.fileName) + }else{ + url = this.javaApi+'/word/'+row.fileUrl + const link = document.createElement('a'); + link.href = url; + link.download = row.fileName; + link.click(); + } + }, + // 鍒犻櫎 + delete (row) { + this.$confirm('姝ゆ搷浣滃皢鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + this.tableLoading = true + delBasicInfoFileList({basicInfoFileId: row.basicInfoFileId}).then(res => { + this.tableLoading = false + this.$message.success('鍒犻櫎鎴愬姛') + this.searchTableList(); + }).catch(err => { + this.tableLoading = false + }) + }).catch(() => { + this.$message({ + type: 'info', + message: '宸插彇娑堝垹闄�' + }); + }) + }, + // 鎵撳紑宸ヤ綔缁忓巻鎺㈠喌 + annexAdd1 (type, row) { + this.operationType = type + if (type === 'edit') { + this.basicInfoWorkId = row.basicInfoWorkId + this.annex2.workExperience = row.workExperience + } else { + this.basicInfoWorkId = '' + this.annex2.workExperience = '' + } + this.dialogVisible2 = true + }, + // 鎻愪氦宸ヤ綔缁忓巻 + submitForm2 () { + const params = { + workExperience: this.annex2.workExperience, + userId: this.clickNodeVal.userId, + basicInfoWorkId: this.basicInfoWorkId + } + this.tableLoading1 = true + if (this.operationType === 'add') { + addBasicInfoWork(params).then(res => { + this.tableLoading1 = false + if (res.code == 200) { + this.dialogVisible2 = false + this.$message.success('鏂板鎴愬姛') + this.searchTableList2(); + } + }).catch(err => { + this.tableLoading1 = false + }) + } else { + updateBasicInfoWorkList(params).then(res => { + this.tableLoading1 = false + this.dialogVisible2 = false + this.$message.success('淇敼鎴愬姛') + this.searchTableList2(); + }).catch(err => { + this.tableLoading1 = false + }) + } + }, + // 鍏抽棴宸ヤ綔缁忓巻寮规 + handleClose2 () { + this.dialogVisible2 = false + this.annex2.workExperience = '' + }, + // 鍒犻櫎宸ヤ綔缁忓巻 + deleteAnnex1 (row) { + this.$confirm('姝ゆ搷浣滃皢鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + this.tableLoading1 = true + delBasicInfoWorkList({basicInfoWorkId: row.basicInfoWorkId}).then(res => { + this.tableLoading1 = false + this.$message.success('鍒犻櫎鎴愬姛') + this.searchTableList2(); + }).catch(err => { + this.tableLoading1 = false + }) + }).catch(() => { + this.$message({ + type: 'info', + message: '宸插彇娑堝垹闄�' + }); + }); + }, + // 鏌ヨ宸ヤ綔缁忓巻鍒楄〃 + searchTableList2 () { + this.tableLoading1 = true + getBasicInfoWorkList({userId: this.clickNodeVal.userId}).then(res => { + this.tableLoading1 = false + this.tableData1 = res.data + }).catch(err => { + this.tableLoading1 = false + console.log('err---', err); + }) + }, + annexAdd(type,row) { + if(type === 1) { + this.title = '缂栬緫闄勪欢璧勬枡' + this.addOrupdate = 1 + getAnnex({id: row.id}).then(res => { + this.annex = res.data + this.imageUrl = this.javaApi + '/img/' + res.data.fileName + }) + }else { + this.title = '鏂板闄勪欢璧勬枡' + this.addOrupdate = 2 + } + this.dialogVisible1 = true + }, + submitForm() { + this.$refs['annex'].validate((valid) => { + if (valid) { + this.addAnnex() + } else { + return false + } + }) + }, + addAnnex() { + if(this.annex.fileName == "" || this.annex.fileName == null || this.annex.fileName == undefined) { + this.$message.error("璇蜂笂浼犳枃浠�") + return + } + this.annex.userId = this.clickNodeVal.userId + if(this.addOrupdate === 1) { + updateAnnex(this.annex).then(res => { + if(res.code == 200) { + getAnnexByUserId({userId: this.clickNodeVal.userId}).then(res => { + this.imageUrl = '' + this.resetForm('annex') + this.annexList = res.data + this.dialogVisible1 = false + this.$message.success('鏇存柊鎴愬姛锛�') + }) + } + }) + }else { + this.annex.id = null + addAnnex(this.annex).then(res => { + if(res.code == 200) { + getAnnexByUserId({userId: this.clickNodeVal.userId}).then(res => { + this.imageUrl = '' + this.resetForm('annex') + this.annexList = res.data + this.dialogVisible1 = false + this.$message.success('淇濆瓨鎴愬姛') + }) + } + }) + } + }, + deleteAnnex(row) { + this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ枃浠�, 鏄惁缁х画?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + deleteAnnex({id: row.id}).then(res => { + this.$message.success('鍒犻櫎鎴愬姛锛�') + this.annexList = this.annexList.filter(item => item.id != row.id) + }) + }) + }, + beforeAvatarUpload(file) { + let flag = true + if (file.size > 1024 * 1024 * 10) { + this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M'); + this.$refs.upload.clearFiles() + flag = false + } + if (!flag) { + return Promise.reject(flag); //姝g‘鐨勭粓姝� + } + }, + downloadFile(fileName) { + let state = /\.(jpg|jpeg|png|gif)$/i.test(fileName) + if (state) { + let url = this.javaApi + '/img/' + fileName; + fileDownload.downloadIamge(url, fileName) + } else { + const url = this.javaApi + '/word/' + fileName + const link = document.createElement('a'); + link.href = url; + link.download = fileName; + link.click(); + this.$message.success('涓嬭浇鎴愬姛') + } + }, + async onSuccess(response, file, fileList, entityVal) { + if(entityVal == 'fileName') { + this.annex.fileName = response.data + } + // 鍦ㄤ繚瀛樿祴鍊兼柊鏂囦欢 + this.successFileList.push(response.data) + this.$set(this.form, entityVal, response.data) + }, + // 鍒濆鍖栬皟鐢� + init() { + if (!this.clickNodeVal.userId) { + let user = JSON.parse(localStorage.getItem('user')) + this.getUserBasisInfo(user.userId) + this.clickNodeVal.userId = user.userId + } else { + this.getUserBasisInfo(this.clickNodeVal.userId) + } + }, + getUserBasisInfo(userId) { + getCNASPersonnelInfo({userId: userId}).then(res => { + this.form = res.data.PersonBasicInfoDto + this.department = res.data.department + this.annexList = res.data.annexList + this.form.departLimsId = res.data.PersonBasicInfoDto.departLimsId.split(',').filter(a => a != "").map(Number) + }) + }, + async save() { + this.saveLoading = true + this.form.userId = this.clickNodeVal.userId + if(Array.isArray(this.form.departLimsId)) { + if(this.form.departLimsId.length > 0) { + this.form.departLimsId = this.form.departLimsId.join(',').trim() + ',' + }else { + this.form.departLimsId = '' + } + } + saveCNASPersonnelInfo(this.form).then(res => { + this.saveLoading = false + this.isSave = true + this.getUserBasisInfo(this.clickNodeVal.userId) + this.$message.success('淇濆瓨鎴愬姛锛�') + }) + }, + // 鍙栦汉鍛樺垎绫荤殑瀛楀吀 + getComparisonList() { + if (this.checkList.length > 0) { + this.form.personnelClassification = this.checkList.split('锛�') + } + }, + clickPersonnelClassificationSure() { + this.dialogVisible = false + this.form.personnelClassification = this.checkList.filter(m=>m).join('锛�') + }, + async deleteFile(fileName, entityVal) { + await deleteCNASFile({fileName: fileName}).then(res => { + this.$message.success('鍒犻櫎鎴愬姛锛�') + this.$set(this.form, entityVal, null) + let index = this.successFileList.indexOf(fileName) + if (index != -1) { + this.successFileList.splice(index, 1) + } + }) + }, + cancellation() { + this.dialogVisible1 = false + this.imageUrl = '' + this.resetForm('annex') + }, + handleClose(done) { + this.imageUrl = '' + this.annex = { + userId: '', + idNumber: '', + issueUnit: '', + level: '', + periodValidity: '', + copy: '', + original: '', + fileName: '' + } + done(); + }, + resetForm(formName) { + this.$refs[formName].resetFields(); + }, + getAge (val) { + this.form.age = this.calculateAge(val) + }, + calculateAge(birthDateString) { + // 瑙f瀽鍑虹敓鏃ユ湡瀛楃涓蹭负鏃ユ湡瀵硅薄 + const birthDate = new Date(birthDateString); + + // 鑾峰彇褰撳墠鏃ユ湡 + const currentDate = new Date(); + + // 璁$畻骞翠唤宸� + let age = currentDate.getFullYear() - birthDate.getFullYear(); + + // 妫�鏌ユ槸鍚﹀凡缁忚繃浜嗕粖骞寸殑鐢熸棩 + const currentMonth = currentDate.getMonth(); + const currentDay = currentDate.getDate(); + const birthMonth = birthDate.getMonth(); + const birthDay = birthDate.getDate(); + + if (currentMonth < birthMonth || (currentMonth === birthMonth && currentDay < birthDay)) { + // 濡傛灉杩樻病鍒颁粖骞寸殑鐢熸棩锛屽勾榫勫噺1 + age--; + } + + return age; + } + }, + watch: { + // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊 + clickNodeVal: { + handler(newVal, oldVal) { + if (newVal.userId) { + this.getUserBasisInfo(newVal.userId) + this.searchTableList() + this.searchTableList2() + } + }, + } + } +} +</script> + +<style scoped> +>>>.el-table__body-wrapper::-webkit-scrollbar { + height: 12px; + /* 璁剧疆婊氬姩鏉″搴� */ +} +>>>.el-form-item { + margin-bottom: 3px; +} + +.el-input { + border-radius: 15px; +} + +.el-icon-picture-outline { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); +} + +.uploadFile { + margin-top: 2px; + float: left; +} + .avatar-uploader-icon { + font-size: 28px; + color: #0f8bf1; + width: 178px; + height: 50px; + text-align: center; + border: 1px solid #d9d9d9; + } + .avatar { + width: 178px; + height: 178px; + display: block; + } +</style> -- Gitblit v1.9.3