diff --git a/public/downloadFile/expertTemplate.xlsx b/public/downloadFile/expertTemplate.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3e445345cace1faadd06f52e77c6d9f44af8b5a4 Binary files /dev/null and b/public/downloadFile/expertTemplate.xlsx differ diff --git a/src/components/layout/LayoutHeader.vue b/src/components/layout/LayoutHeader.vue index d0e529ad4f24a8089eb8e49651f951eb3b3f2656..11b78e9d3671dc12801664c44cc602f7b2bad5dc 100644 --- a/src/components/layout/LayoutHeader.vue +++ b/src/components/layout/LayoutHeader.vue @@ -8,7 +8,7 @@ </div> <div class="header_btn"> <div class="toolbar-items"> - <a-dropdown style="margin-right: 5px;" :trigger="['click','hover']"> + <a-dropdown style="margin-right: 2px;" :trigger="['click','hover']"> <a class="ant-dropdown-link"> <a-avatar class="ava-img" src="https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png" /> <span class="title_f" v-if="userInfo.unitName"> {{userInfo.unitName}}</span> @@ -45,6 +45,16 @@ </a-menu> </a-dropdown> </div> + <div class="toolbar-items"> + <a href="javascript:;" @click="logout"> + <div style="padding: 2px 30px 2px 6px;color: rgb(89 89 89);"> + <span> + <a-icon type="poweroff" style="margin-right: 4px" /> + </span> + <span>退出</span> + </div> + </a> + </div> <div class="toolbar-items" v-if="false"> <a-dropdown style="margin-right: 5px;" :trigger="['click','hover']"> <a class="ant-dropdown-link"> diff --git a/src/views/components/common/unitSelect.vue b/src/views/components/common/unitSelect.vue index acb9d4dde270eac4d5f3b20cfe02ac28ca2e22c3..54acdc1ed605528d5f786e8bbb50a240f6fc05a0 100644 --- a/src/views/components/common/unitSelect.vue +++ b/src/views/components/common/unitSelect.vue @@ -89,6 +89,12 @@ export default { handleChange (value) { this.selected = value; this.$emit("input", value); + var newArr = this.data.filter(x => x.key == value); + if (!!newArr && newArr.length > 0) { + var text = !!value ? newArr[0].title : '' + this.$emit('changeTitle', text) + } + this.$emit("change"); }, loadSelected (value) { diff --git a/src/views/expert/components/expertEdit.vue b/src/views/expert/components/expertEdit.vue index 45e065251ad687f6605dece83d03ebcd229a68b4..6545a0e75d5521732c4a27ede726029240f00855 100644 --- a/src/views/expert/components/expertEdit.vue +++ b/src/views/expert/components/expertEdit.vue @@ -23,18 +23,24 @@ </a-form-model-item> </a-col> </a-row> + <a-row v-if="isShow"> + <a-col :span="4" class="bg-gray"> + <div>选择单位</div> + </a-col> + <a-col :span="20"> + <a-form-model-item ref="treeCode" prop="treeCode"> + <unit-tree-select v-model="formData.treeCode" :disable="false" :unitType="2" :width="200" /> <span style="color: green;margin-left: 6px;">※系统中单位选择此项</span> + </a-form-model-item> + </a-col> + </a-row> <a-row> <a-col :span="4" class="bg-gray"> - <div class="required">性别</div> + <div>工作单位</div> </a-col> <a-col :span="20"> - <a-form-model-item ref="sex" prop="sex"> - <a-select v-model="formData.sex" style="width: 130px" :disabled="!!formData.id"> - <a-select-option value="">--请选择性别--</a-select-option> - <a-select-option value="男">男</a-select-option> - <a-select-option value="女">女</a-select-option> - </a-select> - </a-form-model-item> + <a-form-model-item ref="workUnit" prop="workUnit"> + <a-input v-model="formData.workUnit" @blur="() => {$refs.workUnit.onFieldBlur(); }" style="width: 200px" /> <span style="color: green;margin-left: 6px;">※非系统中单位填写此项</span> + </a-form-model-item> </a-col> </a-row> <a-row> @@ -68,16 +74,6 @@ </a-form-model-item> </a-col> </a-row> - <a-row v-if="isShow"> - <a-col :span="4" class="bg-gray"> - <div class="required">工作单位</div> - </a-col> - <a-col :span="20"> - <a-form-model-item ref="treeCode" prop="treeCode"> - <unit-tree-select v-model="formData.treeCode" :disable="false" :unitType="2" :width="300" /> - </a-form-model-item> - </a-col> - </a-row> <a-row> <a-col :span="4" class="bg-gray" style="padding-left:16px"> <div> 邮箱</div> @@ -161,6 +157,7 @@ export default { { required: false, validator: checkEmail, trigger: 'blur' } ], personName: [{ required: true, message: '请输入姓名', trigger: 'blur' }], + workUnit: [{ required: false, message: '请输入工作单位', trigger: 'blur' }], sex: [{ required: true, message: '请选择性别', trigger: 'change' }], auditSpecList: [{ required: true, message: '请选择评审专业', trigger: 'change' }], title: [{ required: true, message: '请选择职称', trigger: 'change' }], diff --git a/src/views/expert/components/expertImport.vue b/src/views/expert/components/expertImport.vue index 0da2df0d109f441564117d5025859eb8ccbadefa..24230de28ee228272af7c7c2eb96358b93e29b70 100644 --- a/src/views/expert/components/expertImport.vue +++ b/src/views/expert/components/expertImport.vue @@ -1,33 +1,39 @@ <template> <div class="app-content" style="height:75vh;overflow: auto;"> - <div class="submit-btn upload-header"> - <a :href="url.downloadUrl" download="ExpertInfo.xlsx"> - <a-icon type="download"></a-icon> <span style="color:green;text-decoration:underline;">模板下载</span> - </a> - <FileUpload @beforeUpload="beforeUpload" /> - <a-divider style="height: 1px; background-color: #e8e8e8;" /> - </div> - <a-divider style="height: 1px; background-color: #e8e8e8;" /> - <div class="upload-table"> - <a-table :dataSource="tableData" :columns="columns" rowKey="index" :pagination="false" :loading="loading"> - <template slot="stateSwitch" slot-scope="record"> - <a-switch checked-children="正常" un-checked-children="注销" :checked="checkedState(record)" @change="switchChange($event, record)" /> - </template> - <template slot="option" slot-scope="record"> - <a-button type="primary" size="small" @click="recordClick(record, 'view')">查看</a-button> - <a-button type="primary" size="small" @click="recordClick(record, 'edit')">修改</a-button> - <a-button type="primary" size="small" @click="recordClick(record, 'reset')">重置密码</a-button> - </template> - </a-table> - </div> - <div class="upload-bottom" style="text-align:center;padding:6px 0"> - <a-button type="primary" @click="dataImport" :disabled="disabled">导入</a-button> - </div> + <a-spin :spinning="loading" style="width: 100%;height: 100%;"> + <div style="width:100%; height: 40px;"> + <up-load @beforeUpload="beforeUpload" :format="['xls', 'xlsx']" /> + </div> + <div style="width:100%;height: calc(100% - 80px);overflow: auto;"> + <a-table :dataSource="tableData" :columns="columns" rowKey="index" :pagination="false" :loading="loading"> + <template slot="msg" slot-scope="record"> + <span v-if="!!record.msg " style="color: red;"> + {{ record.msg }} + </span> + </template> + <template slot="stateSwitch" slot-scope="record"> + <a-switch checked-children="正常" un-checked-children="注销" :checked="checkedState(record)" @change="switchChange($event, record)" /> + </template> + <template slot="option" slot-scope="record"> + <a-button type="primary" size="small" @click="recordClick(record, 'view')">查看</a-button> + <a-button type="primary" size="small" @click="recordClick(record, 'edit')">修改</a-button> + <a-button type="primary" size="small" @click="recordClick(record, 'reset')">重置密码</a-button> + </template> + </a-table> + </div> + <div style="text-align:center;width:100%; height: 36px;"> + <a :href="url" download="expertTemplate.xlsx" style="margin-right: 30px;"> + <a-icon type="download"></a-icon> <span style="color:green;text-decoration:underline;">模板下载</span> + </a> + <a-button type="primary" @click="dataImport" :disabled="disabled">导入</a-button> + </div> + </a-spin> </div> </template> <script> import { isEmptyParams, readExcelFile, personGender, personBirthday, checkIdentitytionId, checkEmail, checkPhone } from "@/views/utils/common" import moment from "moment" +import { checkCertId } from "@/views/utils/validate" export default { name: "expertImport", @@ -42,13 +48,15 @@ export default { { title: "邮箱", dataIndex: "email", align: 'center' }, { title: "职称", dataIndex: "titleName", align: 'center' }, { title: "专业", dataIndex: "specName", align: 'center' }, - { title: '单位', dataIndex: 'unitName', align: 'center' }, + { title: '工作单位', dataIndex: 'unitName', align: 'center' }, + { title: '验证结果', scopedSlots: { customRender: 'msg' }, align: 'center' }, ], tableData: [], disabled: true, + errorState: false, loading: false, url: { - downloadUrl: '/downloadFile/ExpertInfo.xlsx', + downloadUrl: '/downloadFile/expertTemplate.xlsx', } }; }, @@ -57,6 +65,7 @@ export default { }, methods: { beforeUpload (file) { + this.errorState = false this.tableData = [] let list = readExcelFile(file, 0) let certList = [] @@ -66,9 +75,42 @@ export default { list.then((d) => { //读取文件数据 d.forEach(e => { - let gender = personGender(e.证件号) - let birthday = personBirthday(e.证件号) + ' 00:00:00' - let expert = { personName: e.姓名, certId: e.证件号, sex: gender, birthday: moment(birthday).format('YYYY-MM-DD HH:mm:ss'), mobile: e.手机号, email: e.邮箱, specName: e.专业, titleName: e.职称, unitName: e.单位 } + let msg = '' + let certId = e.证件号 + let gender = null + let birthday = null + + if (!!!e.姓名) { + msg = ';姓名不能为空!' + } + if (!!!e.证件号) { + msg += ';证件号不能为空!' + } + if (!!!e.手机号) { + msg += ';手机号不能为空!' + } + if (!!!e.邮箱) { + msg += ';邮箱不能为空!' + } + if (!!!e.专业) { + msg += ';专业不能为空!' + } + if (!!!e.职称) { + msg += ';职称不能为空!' + } + if (!!!e.工作单位) { + msg += ';工作单位不能为空!' + } + if (!!msg) { + this.errorState = true + } + + if (checkCertId(certId)) { + gender = personGender(certId) + birthday = personBirthday(certId) + ' 00:00:00' + } + + let expert = { personName: e.姓名, certId: certId, sex: gender, birthday: birthday, mobile: e.手机号, email: e.邮箱, specName: e.专业, titleName: e.职称, unitName: e.工作单位, msg: msg } exportList.push(expert) certList.push(e.证件号) mobileList.push(e.手机号) @@ -85,13 +127,12 @@ export default { this.$message.error('证件号出现重复!') return false } - + if (exportList.length > 0) { this.tableData = exportList - this.disabled = false + this.disabled = this.errorState ? true : false } }) - return false }, dataImport () { @@ -112,16 +153,9 @@ export default { }; </script> <style scoped lang="less"> -.upload-header { - height: 30px; -} -.upload-table { - min-height: 150px; - max-height: calc(100% - 75px); - overflow-y: auto; -} -.upload-bottom { - height: 42px; +::v-deep .ant-spin-container { + width: 100%; + height: 100%; } </style> diff --git a/src/views/report/expert/components/expertEdit.vue b/src/views/report/expert/components/expertEdit.vue index 45e065251ad687f6605dece83d03ebcd229a68b4..c3a2b53b47a7b6e97f7684168fdbd61e5bc5dbde 100644 --- a/src/views/report/expert/components/expertEdit.vue +++ b/src/views/report/expert/components/expertEdit.vue @@ -23,20 +23,6 @@ </a-form-model-item> </a-col> </a-row> - <a-row> - <a-col :span="4" class="bg-gray"> - <div class="required">性别</div> - </a-col> - <a-col :span="20"> - <a-form-model-item ref="sex" prop="sex"> - <a-select v-model="formData.sex" style="width: 130px" :disabled="!!formData.id"> - <a-select-option value="">--请选择性别--</a-select-option> - <a-select-option value="男">男</a-select-option> - <a-select-option value="女">女</a-select-option> - </a-select> - </a-form-model-item> - </a-col> - </a-row> <a-row> <a-col :span="4" class="bg-gray"> <div class="required">手机号</div> @@ -68,16 +54,6 @@ </a-form-model-item> </a-col> </a-row> - <a-row v-if="isShow"> - <a-col :span="4" class="bg-gray"> - <div class="required">工作单位</div> - </a-col> - <a-col :span="20"> - <a-form-model-item ref="treeCode" prop="treeCode"> - <unit-tree-select v-model="formData.treeCode" :disable="false" :unitType="2" :width="300" /> - </a-form-model-item> - </a-col> - </a-row> <a-row> <a-col :span="4" class="bg-gray" style="padding-left:16px"> <div> 邮箱</div> @@ -161,10 +137,10 @@ export default { { required: false, validator: checkEmail, trigger: 'blur' } ], personName: [{ required: true, message: '请输入姓名', trigger: 'blur' }], - sex: [{ required: true, message: '请选择性别', trigger: 'change' }], + // sex: [{ required: true, message: '请选择性别', trigger: 'change' }], auditSpecList: [{ required: true, message: '请选择评审专业', trigger: 'change' }], title: [{ required: true, message: '请选择职称', trigger: 'change' }], - treeCode: [{ required: false, message: '请选择单位', trigger: 'change' }], + // treeCode: [{ required: false, message: '请选择单位', trigger: 'change' }], remark: [{ required: false, message: '请输入备注', trigger: 'blur' }], }, } diff --git a/src/views/report/project/components/memberImport.vue b/src/views/report/project/components/memberImport.vue index c78cae460976c31435f3f2cf9fe94b9083e8dffd..b41d2cb0ff8910ba61a75c46b424df2732527ef6 100644 --- a/src/views/report/project/components/memberImport.vue +++ b/src/views/report/project/components/memberImport.vue @@ -109,10 +109,7 @@ export default { if (!!!e.每年工作) { msg += ';每年工作不能为空!' } - // if (checkCertId(certId)) { - // gender = personGender(certId) - // birthday = personBirthday(certId) + ' 00:00:00' - // } + if (!!msg) { this.errorState = true }