12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079 |
- <template>
- <a-modal
- :title="title"
- width="85%"
- :closable="true"
- @cancel="close"
- @ok="handleSubmit"
- :visible="visible"
- >
- <template slot="title">
- <div style="width: 100%;">
- <span>{{ title }}</span>
- <span style="display:inline-block;width:calc(100% - 51px);padding-right:10px;text-align: right">
- <a-button @click="toggleScreen" icon="appstore" style="height:20px;width:20px;border:0px"></a-button>
- </span>
- </div>
- </template>
- <a-spin :spinning="confirmLoading">
- <a-form :form="form">
-
- <a-form-item label="工号" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入工号" v-decorator="['workNo', validatorRules.workNo]" />
- </a-form-item>
- <a-form-item label="用户姓名" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入用户姓名" v-decorator="['realname', validatorRules.realname]" />
- </a-form-item>
- <a-form-item label="英文名" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入英文名" v-decorator="['nenName',validatorRules.nenName]" />
- </a-form-item>
- <a-form-item label="性别" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-select v-decorator="['sex', validatorRules.sex]" placeholder="请选择性别">
- <a-select-option :value="1">男</a-select-option>
- <a-select-option :value="2">女</a-select-option>
- </a-select>
- </a-form-item>
- <a-form-item label="生日" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-date-picker
- style="width: 100%"
- placeholder="请选择生日"
- v-decorator="['birthday',{ initialValue: !model.birthday ? null : moment(model.birthday, dateFormat),rules: [{ required: true, message: '请选择生日日期' }] }]"
- />
- </a-form-item>
- <a-form-item label="婚否" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-select v-decorator="['nmarriage', validatorRules.nmarriage]" placeholder="请选择性别">
- <a-select-option value="1">是</a-select-option>
- <a-select-option value="0">否</a-select-option>
- </a-select>
- </a-form-item>
- <a-form-item label="户口" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <j-dict-select-tag
- v-decorator="['nregistered',validatorRules.nregistered]"
- placeholder="请选择户口"
- :triggerChange="true"
- dictCode="registered-residence"
- />
- </a-form-item>
- <a-form-item label="户口所在地" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入" v-decorator="['nregisteredAddr', validatorRules.nregisteredAddr]" />
- <!-- <a-input placeholder="请输入户口所在地" v-decorator="['nregisteredAddr', validatorRules.nregisteredAddr]" /> -->
- </a-form-item>
- <a-form-item label="政治面貌" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <j-dict-select-tag
- v-decorator="['noutlook', validatorRules.noutlook]"
- placeholder="请选择政治面貌"
- :triggerChange="true"
- dictCode="political-outlook"
- />
- </a-form-item>
- <a-form-item label="所学专业" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入所学专业" v-decorator="['nmajor', validatorRules.nmajor]" />
- </a-form-item>
- <a-form-item label="学历" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <j-dict-select-tag
- v-decorator="['neducation',validatorRules.neducation]"
- placeholder="请选择学历"
- :triggerChange="true"
- dictCode="education"
- />
- </a-form-item>
- <a-form-item label="毕业时间" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-date-picker
- style="width: 100%"
- placeholder="请选择毕业时间"
- v-decorator="['nGraduationTime', { initialValue: !model.nGraduationTime ? null : moment(model.nGraduationTime, dateFormat),rules: [{ required: true, message: '请选择毕业时间' }] }]"
- />
- </a-form-item>
- <a-form-item label="职务" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <j-select-position placeholder="请选择职务" :multiple="false" v-decorator="['post', validatorRules.post]" />
- </a-form-item>
-
- <a-form-item label="入司日期" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-date-picker
- style="width: 100%"
- placeholder="请选择入司日期"
- v-decorator="['nInductionTime', { initialValue: !model.nInductionTime ? null : moment(model.nInductionTime, dateFormat) ,rules: [{ required: true, message: '请选择入司日期' }] }]"
- />
- </a-form-item>
- <a-form-item label="离职日期" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-date-picker
- style="width: 100%"
- placeholder="请选择离职日期"
- v-decorator="['syResignationTime', { initialValue: !model.syResignationTime ? null : moment(model.syResignationTime, dateFormat)}]"
- />
- </a-form-item>
- <a-form-item label="家庭电话" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入家庭电话" v-decorator="['telephone', validatorRules.telephone]" />
- </a-form-item>
- <a-form-item label="公司座机" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入公司座机" v-decorator="['ncompanyPhone', {}]" />
- </a-form-item>
- <a-form-item label="公司内线" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入公司内线" v-decorator="['ncompanyLine', {}]" />
- </a-form-item>
- <a-form-item label="邮箱" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入邮箱" v-decorator="['email', validatorRules.email]" />
- </a-form-item>
- <a-form-item label="工资卡号" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入工资卡号" v-decorator="['ncardNo', validatorRules.ncardNo]" />
- </a-form-item>
- <a-form-item label="虚拟网号" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入虚拟网号" v-decorator="['nvirtualNo', {}]" />
- </a-form-item>
-
- <a-form-item label="转正日期" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-date-picker
- style="width: 100%"
- placeholder="请选择转正日期"
- disabled='true'
- v-decorator="['nBecomeTime', { initialValue: !model.nBecomeTime ? null : moment(model.nBecomeTime, dateFormat)}]"
- />
- </a-form-item>
- <a-form-item label="社保申报日期" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-date-picker
- style="width: 100%"
- placeholder="请选择社保申报日期"
- v-decorator="['nsocialTime', { initialValue: !model.nsocialTime ? null : moment(model.nsocialTime, dateFormat) }]"
- />
- </a-form-item>
- <a-form-item label="社保断缴日期" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-date-picker
- style="width: 100%"
- placeholder="社保断缴日期"
- v-decorator="['sySecurityOutTime', { initialValue: !model.sySecurityOutTime ? null : moment(model.sySecurityOutTime, dateFormat) }]"
- />
- </a-form-item>
- <a-form-item label="公积金申报日期" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-date-picker
- style="width: 100%"
- placeholder="请选择公积金申报日期"
- v-decorator="['nfundTime', { initialValue: !model.nfundTime ? null : moment(model.nfundTime, dateFormat) }]"
- />
- </a-form-item>
- <a-form-item label="公积金断缴日期" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-date-picker
- style="width: 100%"
- placeholder="公积金断缴日期"
- v-decorator="['syFundOutTime', { initialValue: !model.syFundOutTime ? null : moment(model.syFundOutTime, dateFormat) }]"
- />
- </a-form-item>
- <a-form-item label="公积金基数" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入公积金基数" v-decorator="['nfundBase', {}]" />
- </a-form-item>
- <a-form-item label="社保基数" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入社保基数" v-decorator="['nsocialBase',{}]" />
- </a-form-item>
- <a-form-item label="年假" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入年假" v-decorator="['nannualNum', {}]" />
- </a-form-item>
- <a-form-item label="已请年假" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入输入已请年假" v-decorator="['nannualOldNum', {}]" />
- </a-form-item>
- <a-form-item label="剩余年假" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入剩余年假" v-decorator="['nannualNowNum', {}]" />
- </a-form-item>
-
- <a-form-item label="民族" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <j-dict-select-tag
- v-decorator="['nnation', validatorRules.nnation]"
- placeholder="请选择民族"
- :triggerChange="true"
- dictCode="nation"
- />
- </a-form-item>
- <a-form-item label="籍贯" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入籍贯" v-decorator="['nnativePlace', validatorRules.nnativePlace]" />
- </a-form-item>
- <a-form-item label="身份证号码" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入身份证号码" v-decorator="['nidNo', validatorRules.nidNo]" />
- </a-form-item>
- <a-form-item label="家庭住址" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入家庭住址" v-decorator="['nhomeAddress', {}]" />
- </a-form-item>
- <a-form-item label="手机号码" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input
- placeholder="请输入手机号码"
- :disabled="isDisabledAuth('user:form:phone')"
- v-decorator="['phone', validatorRules.phone]"
- />
- </a-form-item>
-
- <!-- <a-form-item label="对本企业要求" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入" v-decorator="['nrequirement', {}]" />
- </a-form-item> -->
-
- <!-- <a-form-item label="希望待遇" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入希望待遇" v-decorator="['nhopeFor',{}]" />
- </a-form-item>
-
- <a-form-item label="与原单位关系" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入" v-decorator="['nrelationshipFor', {}]" />
- </a-form-item> -->
- <a-form-item label="人员类型" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <j-dict-select-tag
- v-decorator="['npersonnelType',validatorRules.npersonnelType]"
- placeholder="请选择人员类型"
- :triggerChange="true"
- dictCode="personnel-status"
- />
- </a-form-item>
- <a-form-item label="雇佣状态" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <j-dict-select-tag
- v-decorator="['syHireType',validatorRules.syHireType]"
- placeholder="请选择雇佣状态"
- :triggerChange="true"
- dictCode="employment-status"
- />
- </a-form-item>
- <a-form-item label="所属公司" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <j-dict-select-tag
- v-decorator="['belongingCompany', validatorRules.belongingCompany]"
- placeholder="请选择所属公司"
- :triggerChange="true"
- dictCode="affiliated-company"
- />
- </a-form-item>
- <a-form-item label="车牌号" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input placeholder="请输入" v-decorator="['licenseCar', {}]" />
- </a-form-item>
- <!-- update--begin--autor:wangshuai-----date:20200108------for:新增身份和负责部门------ -->
- <a-form-item label="身份" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-radio-group v-model="identity" @change="identityChange">
- <a-radio value="1">普通用户</a-radio>
- <a-radio value="2">上级</a-radio>
- </a-radio-group>
- </a-form-item>
- <a-form-item label="负责部门" :labelCol="labelCol" :wrapperCol="wrapperCol" v-if="departIdShow == true">
- <a-select
- mode="multiple"
- style="width: 100%"
- placeholder="请选择负责部门"
- v-model="departIds"
- optionFilterProp="children"
- :getPopupContainer="target => target.parentNode"
- :dropdownStyle="{ maxHeight: '200px', overflow: 'auto' }"
- >
- <a-select-option v-for="item in resultDepartOptions" :key="item.key" :value="item.key">{{
- item.title
- }}</a-select-option>
- </a-select>
- </a-form-item>
- <a-form-item label="是否OA用户" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-radio-group v-model="ifOa" @change="changeOa">
- <a-radio value="1">是</a-radio>
- <a-radio value="0">否</a-radio>
- </a-radio-group>
- </a-form-item>
- <!-- update--end--autor:wangshuai-----date:20200108------for:新增身份和负责部门------ -->
-
- <a-form-item label="工作流引擎" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <j-dict-select-tag
- v-decorator="['activitiSync', {}]"
- placeholder="请选择是否同步工作流引擎"
- :type="'radio'"
- :triggerChange="true"
- dictCode="activiti_sync"
- />
- </a-form-item>
- <a-form-item label="头像" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <j-image-upload class="avatar-uploader" text="上传" v-model="fileList"></j-image-upload>
- </a-form-item>
- <a-form-item label="工作简历" :labelCol="labelCol" :wrapperCol="wrapperCol" class="nresume">
- <a-input type="textarea" placeholder="请输入" v-decorator="['nresume', {}]" />
- </a-form-item>
- <a-form-item label="家庭成员" :labelCol="labelCol" :wrapperCol="wrapperCol" class="nresume">
- <a-input type="textarea" placeholder="请输入" v-decorator="['nmemberOfFamily', {}]" />
- </a-form-item>
- <a-form-item label="备注信息" :labelCol="labelCol" :wrapperCol="wrapperCol" class="nresume">
- <a-input type="textarea" placeholder="请输入" v-decorator="['nremarks', {}]" />
- </a-form-item>
- <a-divider>IT维护</a-divider>
- <a-form-item label="用户账号" :labelCol="labelCol" :wrapperCol="wrapperCol" :validateOnRuleChange="true">
- <a-input
- placeholder="请输入用户账号"
- v-decorator="['username', validatorRules.username]"
- :readOnly="!!model.username"
- autocomplete="off"
- />
- </a-form-item>
- <template v-if="!model.id">
- <a-form-item label="登陆密码" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input type="password" placeholder="请输入登陆密码" v-decorator="['password', validatorRules.password]" autocomplete="new-password" @blur="changePssword"/>
- </a-form-item>
- <a-form-item label="确认密码" :labelCol="labelCol" :wrapperCol="wrapperCol">
- <a-input
- type="password"
- @blur="handleConfirmBlur"
- placeholder="请重新输入登陆密码"
- v-decorator="['confirmpassword', validatorRules.confirmpassword]"
- />
- </a-form-item>
- </template>
- <!--部门分配-->
- <a-form-item label="公司部门分配" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!departDisabled">
- <a-input-search
- placeholder="点击右侧按钮选择公司和部门"
- v-model="checkedDepartNameString"
- disabled
- @search="onSearch"
- >
- <a-button slot="enterButton" icon="search">选择</a-button>
- </a-input-search>
- </a-form-item>
- <a-form-item label="角色分配" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!roleDisabled">
- <a-select
- mode="multiple"
- style="width: 100%"
- placeholder="请选择用户角色"
- optionFilterProp="children"
- v-model="selectedRole"
- >
- <a-select-option v-for="(role, roleindex) in roleList" :key="roleindex.toString()" :value="role.id">
- {{ role.roleName }}
- </a-select-option>
- </a-select>
- </a-form-item>
- </a-form>
- </a-spin>
- <depart-window ref="departWindow" @ok="modalFormOk"></depart-window>
- <!-- <div class="drawer-bootom-button" v-show="!disableSubmit">
- <a-button style="margin-right: .8rem" @click="handleCancel">取消</a-button>
- <a-button @click="handleSubmit" type="primary" :loading="confirmLoading">提交</a-button>
- </div> -->
- </a-modal>
- </template>
- <script>
- import pick from 'lodash.pick'
- import moment from 'moment'
- import Vue from 'vue'
- // 引入搜索部门弹出框的组件
- import departWindow from './DepartWindow'
- import JSelectPosition from '@/components/jeecgbiz/JSelectPosition'
- import { ACCESS_TOKEN } from '@/store/mutation-types'
- import { getAction } from '@/api/manage'
- import { addUser, editUser, queryUserRole, queryall, duplicateCheck } from '@/api/api'
- import { disabledAuthFilter } from '@/utils/authFilter'
- import JImageUpload from '../../../components/jeecg/JImageUpload'
- export default {
- name: 'UserModal',
- components: {
- JImageUpload,
- departWindow,
- JSelectPosition
- },
- data () {
- return {
- departDisabled: false, // 是否是我的部门调用该页面
- roleDisabled: false, // 是否是角色维护调用该页面
- modalWidth: 800,
- drawerWidth: 700,
- modaltoggleFlag: true,
- confirmDirty: false,
- selectedDepartKeys: [], // 保存用户选择部门id
- checkedDepartKeys: [],
- checkedDepartNames: [], // 保存部门的名称 =>title
- checkedDepartNameString: '', // 保存部门的名称 =>title
- resultDepartOptions: [],
- userId: '', // 保存用户id
- disableSubmit: false,
- userDepartModel: { userId: '', departIdList: [] }, // 保存SysUserDepart的用户部门中间表数据需要的对象
- dateFormat: 'YYYY-MM-DD',
- validatorRules: {
- username: {
- rules: [
- {
- required: false,
- message: '请输入用户账号!'
- },
- {
- validator: this.validateUsername
- }
- ]
- },
- password: {
- rules: [
- {
- required: false,
- message: '请输入密码!'
- // pattern: /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,}$/,
- // message: '密码由8位数字、大小写字母和特殊符号组成!'
- },
- {
- validator: this.validateToNextPassword
- }
- ],
- initialValue:'123456'
- },
- confirmpassword: {
- rules: [
- {
- required: false,
- message: '请重新输入登陆密码!'
- },
- {
- validator: this.compareToFirstPassword
- }
- ]
- },
- realname: { rules: [{ required: true, message: '请输入用户名称!' }] },
- belongingCompany: { rules: [{ required: true, message: '请选择所属公司!' }] },
- phone: { rules: [{ validator: this.validatePhone },{ required: true, message: '请输入手机号码!' }] },
- email: {
- rules: [
- {
- // validator: this.validateEmail
- }
- ]
- },
- roles: {},
- // sex:{initialValue:((!this.model.sex)?"": (this.model.sex+""))}
- workNo: {
- rules: [{ required: true, message: '请输入工号' }, { validator: this.validateWorkNo }]
- },
- telephone: {
- // rules: [{ required: true, message: '请输入座机' },{ pattern: /^0\d{2,3}-[1-9]\d{6,7}$/, message: '请输入正确的座机号码' }]
- rules: [{ required: true, message: '请输入家庭电话' }]
- },
- nenName:{
- rules: [{ required: true, message: '请输入英文名' }]
- },
- sex:{
- rules: [{ required: true, message: '请选择性别' }]
- },
- nidNo:{
- rules: [{ required: true, message: '输入身份证号码' }]
- },
- nmarriage:{
- rules: [{ required: true, message: '请选择婚否' }]
- },
- nregisteredAddr:{
- rules: [{ required: true, message: '请输入户口所在地' }]
- },
- nmajor:{
- rules: [{ required: true, message: '请输入所学专业' }]
- },
- noutlook:{
- rules: [{ required: true, message: '请选择政治面貌' }]
- },
- neducation:{
- rules: [{ required: true, message: '请选择政学历' }]
- },
- nregistered:{
- rules: [{ required: true, message: '请选择户口' }]
- },
- post:{
- rules: [{ required: true, message: '请选择职位' }]
- },
- ncardNo:{
- rules: [{ required: true, message: '请输入工资卡号' }]
- },
- nnation:{
- rules: [{ required: true, message: '请选择民族' }]
- },
- nnativePlace:{
- rules: [{ required: true, message: '请输入籍贯' }]
- },
- npersonnelType:{
- rules: [{ required: true, message: '请选择人员类型' }]
- },
- checkedDepartNameString:{
- rules: [{ required: true, message: '请选择部门!' }]
- }
- },
- departIdShow: false,
- departIds: [], // 负责部门id
- title: '操作',
- visible: false,
- model: {},
- roleList: [],
- selectedRole: [],
- labelCol: {
- xs: { span: 24 },
- sm: { span: 5 }
- },
- wrapperCol: {
- xs: { span: 24 },
- sm: { span: 16 }
- },
- uploadLoading: false,
- confirmLoading: false,
- headers: {},
- form: this.$form.createForm(this),
- picUrl: '',
- url: {
- fileUpload: window._CONFIG['domianURL'] + '/sys/common/upload',
- imgerver: window._CONFIG['staticDomainURL'],
- userWithDepart: '/sys/user/userDepartList', // 引入为指定用户查看部门信息需要的url
- userId: '/sys/user/generateUserId', // 引入生成添加用户情况下的url
- syncUserByUserName: '/process/extActProcess/doSyncUserByUserName' // 同步用户到工作流
- },
- identity: '1',
- ifOa:'0',
- fileList: [],
- orgObject: {
- pkOrg: '', // 选中的公司id
- pkOrgName: '' // 选中的公司名称
- },
- userObject: {} // 用户信息
- }
- },
- created () {
- const token = Vue.ls.get(ACCESS_TOKEN)
- this.headers = { 'X-Access-Token': token }
- },
- computed: {
- uploadAction: function () {
- return this.url.fileUpload
- }
- },
- methods: {
- isDisabledAuth (code) {
- return disabledAuthFilter(code)
- },
- // 窗口最大化切换
- toggleScreen () {
- if (this.modaltoggleFlag) {
- this.modalWidth = window.innerWidth
- } else {
- this.modalWidth = 800
- }
- this.modaltoggleFlag = !this.modaltoggleFlag
- },
- initialRoleList () {
- queryall().then(res => {
- if (res.success) {
- this.roleList = res.result
- } else {
- console.log(res.message)
- }
- })
- },
- loadUserRoles (userid) {
- queryUserRole({ userid: userid }).then(res => {
- if (res.success) {
- this.selectedRole = res.result
- } else {
- console.log(res.message)
- }
- })
- },
- refresh () {
- this.selectedDepartKeys = []
- this.checkedDepartKeys = []
- this.checkedDepartNames = []
- this.checkedDepartNameString = ''
- this.userId = ''
- this.resultDepartOptions = []
- this.departId = []
- this.departIdShow = false
- },
- add () {
- this.picUrl = ''
- this.refresh()
- this.edit({ activitiSync: '1' })
- },
- edit (record) {
- this.resetScreenSize() // 调用此方法,根据屏幕宽度自适应调整抽屉的宽度
- let that = this
- that.initialRoleList()
- that.checkedDepartNameString = ''
- that.form.resetFields()
- if (record.hasOwnProperty('id')) {
- that.loadUserRoles(record.id)
- setTimeout(() => {
- this.fileList = record.avatar
- }, 5)
- }
- that.userId = record.id
- // 修改赋值公司id
- this.orgObject.pkOrg = record.pkOrg
- this.orgObject.pkOrgName = record.pkOrgName
- this.userObject = record
- that.visible = true
- that.model = Object.assign({}, record)
- that.$nextTick(() => {
- that.form.setFieldsValue(
- pick(
- this.model,
- 'username',
- 'sex',
- 'realname',
- 'email',
- 'phone',
- 'activitiSync',
- 'workNo',
- 'telephone',
- 'post',
- 'nenName',
- 'nmarriage',
- 'nregistered',
- 'noutlook',
- 'nmajor',
- 'neducation',
- 'ngraduationTime',
- 'ninductionTime',
- 'ncompanyPhone',
- 'ncompanyLine',
- 'ncardNo',
- 'nvirtualNo',
- 'nBecomeTime',
- 'nsocialTime',
- 'nfundTime',
- 'nfundBase',
- 'nsocialBase',
- 'nannualNum',
- 'nannualOldNum',
- 'nannualNowNum',
- 'nnation',
- 'nnativePlace',
- 'nidNo',
- 'nhomeAddress',
- 'nrequirement',
- 'nhopeFor',
- 'nregisteredAddr',
- 'nrelationshipFor',
- 'npersonnelType',
- 'nregisteredAddr',
- 'ifOa','belongingCompany',
- 'syHireType',
- 'syResignationTime',
- 'syFundOutTime',
- 'sySecurityOutTime'
- )
- )
- })
- // 身份为上级显示负责部门,否则不显示
- if (this.model.identity == '2') {
- this.identity = '2'
- this.departIdShow = true
- } else {
- this.identity = '1'
- this.departIdShow = false
- }
- // 调用查询用户对应的部门信息的方法
- that.checkedDepartKeys = []
- that.loadCheckedDeparts()
- },
- //
- loadCheckedDeparts () {
- let that = this
- if (!that.userId) {
- return
- }
- getAction(that.url.userWithDepart, { userId: that.userId }).then(res => {
- that.checkedDepartNames = []
- if (res.success) {
- var depart = []
- var departId = []
- for (let i = 0; i < res.result.length; i++) {
- that.checkedDepartNames.push(res.result[i].title)
- this.checkedDepartNameString = this.checkedDepartNames.join(',')
- that.checkedDepartKeys.push(res.result[i].key)
- // 新增负责部门选择下拉框
- depart.push({
- key: res.result[i].key,
- title: res.result[i].title
- })
- departId.push(res.result[i].key)
- }
- that.resultDepartOptions = depart
- // 判断部门id是否存在,不存在择直接默认当前所在部门
- if (this.model.departIds) {
- this.departIds = this.model.departIds.split(',')
- } else {
- this.departIds = departId
- }
- that.userDepartModel.departIdList = that.checkedDepartKeys
- } else {
- console.log(res.message)
- }
- })
- },
- close () {
- console.log('?????')
- this.$emit('close')
- this.visible = false
- this.ifOa ='0'
- this.disableSubmit = false
- this.selectedRole = []
- this.userDepartModel = { userId: '', departIdList: [] }
- this.checkedDepartNames = []
- this.checkedDepartNameString = ''
- this.checkedDepartKeys = []
- this.selectedDepartKeys = []
- this.resultDepartOptions = []
- this.departIds = []
- this.departIdShow = false
- this.identity = '1'
- this.fileList = []
- this.orgObject = []
- this.userObject = {}
- this.validatorRules.username.rules[0].required = false
- this.validatorRules.confirmpassword.rules[0].required = false
- },
- moment,
- handleSubmit () {
- if(!this.orgObject.pkOrg){
- this.$message.warning("请选择公司");
- return
- }
- const that = this
- // 触发表单验证
- this.form.validateFields((err, values) => {
- if (!err) {
- that.confirmLoading = true
- if (!values.birthday) {
- values.birthday = ''
- } else {
- values.birthday = values.birthday.format(this.dateFormat)
- }
- let formData = Object.assign(this.model, values)
- // 获取公司信息
- formData.pkOrg = this.orgObject.pkOrg
- formData.pkOrgName = this.orgObject.pkOrgName
- formData.avatar = that.fileList
- formData.selectedroles = this.selectedRole.length > 0 ? this.selectedRole.join(',') : ''
- formData.selecteddeparts =
- this.userDepartModel.departIdList.length > 0 ? this.userDepartModel.departIdList.join(',') : ''
- formData.identity = this.identity
- // 如果是上级择传入departIds,否则为空
- if (this.identity === '2') {
- formData.departIds = this.departIds.join(',')
- } else {
- formData.departIds = ''
- }
- // that.addDepartsToUser(that,formData); // 调用根据当前用户添加部门信息的方法
- let obj
- if (!this.model.id) {
- formData.id = this.userId
- obj = addUser(formData)
- } else {
- obj = editUser(formData)
- }
- obj
- .then(res => {
- if (res.success) {
- that.$message.success(res.message)
- that.$emit('ok')
- } else {
- that.$message.warning(res.message)
- }
- })
- .finally(() => {
- that.confirmLoading = false
- that.checkedDepartNames = []
- that.userDepartModel.departIdList = { userId: '', departIdList: [] }
- that.close()
- })
- }
- })
- },
- handleCancel () {
- this.close()
- },
- validateToNextPassword (rule, value, callback) {
- const form = this.form
- const confirmpassword = form.getFieldValue('confirmpassword')
- if (value && confirmpassword && value !== confirmpassword) {
- callback('两次输入的密码不一样!')
- }
- if (value && this.confirmDirty) {
- form.validateFields(['confirm'], { force: true })
- }
- callback()
- },
- compareToFirstPassword (rule, value, callback) {
- const form = this.form
- if (value && value !== form.getFieldValue('password')) {
- callback('两次输入的密码不一样!')
- } else {
- callback()
- }
- },
- validatePhone (rule, value, callback) {
- if (!value) {
- callback()
- } else {
- // update-begin--Author:kangxiaolin Date:20190826 for:[05] 手机号不支持199号码段--------------------
- if (new RegExp(/^1[3|4|5|7|8|9][0-9]\d{8}$/).test(value)) {
- // update-end--Author:kangxiaolin Date:20190826 for:[05] 手机号不支持199号码段--------------------
- var params = {
- tableName: 'sys_user',
- fieldName: 'phone',
- fieldVal: value,
- dataId: this.userId
- }
- duplicateCheck(params).then(res => {
- if (res.success) {
- callback()
- } else {
- callback('手机号已存在!')
- }
- })
- } else {
- callback('请输入正确格式的手机号码!')
- }
- }
- },
- validateEmail (rule, value, callback) {
- if (!value) {
- callback()
- } else {
- if (
- new RegExp(
- /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
- ).test(value)
- ) {
- var params = {
- tableName: 'sys_user',
- fieldName: 'email',
- fieldVal: value,
- dataId: this.userId
- }
- duplicateCheck(params).then(res => {
- console.log(res)
- if (res.success) {
- callback()
- } else {
- callback('邮箱已存在!')
- }
- })
- } else {
- callback('请输入正确格式的邮箱!')
- }
- }
- },
- validateUsername (rule, value, callback) {
- var params = {
- tableName: 'sys_user',
- fieldName: 'username',
- fieldVal: value,
- dataId: this.userId
- }
- duplicateCheck(params).then(res => {
- if (res.success) {
- callback()
- } else {
- callback('用户名已存在!')
- }
- })
- },
- validateWorkNo (rule, value, callback) {
- var params = {
- tableName: 'sys_user',
- fieldName: 'work_no',
- fieldVal: value,
- dataId: this.userId
- }
- duplicateCheck(params).then(res => {
- if (res.success) {
- callback()
- } else {
- callback('工号已存在!')
- }
- })
- },
- handleConfirmBlur (e) {
- const value = e.target.value
- this.confirmDirty = this.confirmDirty || !!value
- },
- normFile (e) {
- console.log('Upload event:', e)
- if (Array.isArray(e)) {
- return e
- }
- return e && e.fileList
- },
- beforeUpload: function (file) {
- var fileType = file.type
- if (fileType.indexOf('image') < 0) {
- this.$message.warning('请上传图片')
- return false
- }
- // TODO 验证文件大小
- },
- handleChange (info) {
- this.picUrl = ''
- if (info.file.status === 'uploading') {
- this.uploadLoading = true
- return
- }
- if (info.file.status === 'done') {
- var response = info.file.response
- this.uploadLoading = false
- console.log(response)
- if (response.success) {
- this.model.avatar = response.message
- this.picUrl = 'Has no pic url yet'
- } else {
- this.$message.warning(response.message)
- }
- }
- },
- // 搜索用户对应的部门API
- onSearch () {
- this.$refs.departWindow.add(this.checkedDepartKeys, this.userId, this.userObject)
- },
- // 获取用户对应部门弹出框提交给返回的数据
- modalFormOk (formData) {
- this.orgObject = formData.orgObject // 公司信息
- // 没有选择则直接退出
- if (!formData.departIdList || formData.departIdList.length == 0) {
- return
- }
- this.checkedDepartNames = []
- this.selectedDepartKeys = []
- this.checkedDepartNameString = ''
- this.userId = formData.userId
- this.userDepartModel.userId = formData.userId
- this.departIds = []
- this.resultDepartOptions = []
- var depart = []
- for (let i = 0; i < formData.departIdList.length; i++) {
- this.selectedDepartKeys.push(formData.departIdList[i].key)
- this.checkedDepartNames.push(formData.departIdList[i].title)
- this.checkedDepartNameString = this.checkedDepartNames.join(',')
- // 新增部门选择,如果上面部门选择后不为空直接付给负责部门
- depart.push({
- key: formData.departIdList[i].key,
- title: formData.departIdList[i].title
- })
- this.departIds.push(formData.departIdList[i].key)
- }
- this.resultDepartOptions = depart
- this.userDepartModel.departIdList = this.selectedDepartKeys
- this.checkedDepartKeys = this.selectedDepartKeys // 更新当前的选择keys
- },
- // 根据屏幕变化,设置抽屉尺寸
- resetScreenSize () {
- let screenWidth = document.body.clientWidth
- if (screenWidth < 500) {
- this.drawerWidth = screenWidth
- } else {
- this.drawerWidth = 700
- }
- },
- identityChange (e) {
- if (e.target.value === '1') {
- this.departIdShow = false
- } else {
- this.departIdShow = true
- }
- },
- changeOa(e){
- if(e.target.value === '1'){
- this.validatorRules.username.rules[0].required = true
- }else{
- this.validatorRules.username.rules[0].required = false
- }
- },
- changePssword(){
- this.validatorRules.confirmpassword.rules[0].required = true
- }
- }
- }
- </script>
- <style scoped lang="less">
- .avatar-uploader > .ant-upload {
- width: 104px;
- height: 104px;
- }
- .ant-upload-select-picture-card i {
- font-size: 49px;
- color: #999;
- }
- .ant-upload-select-picture-card .ant-upload-text {
- margin-top: 8px;
- color: #666;
- }
- .ant-table-tbody .ant-table-row td {
- padding-top: 10px;
- padding-bottom: 10px;
- }
- .drawer-bootom-button {
- position: absolute;
- bottom: 0;
- width: 100%;
- border-top: 1px solid #e8e8e8;
- padding: 10px 16px;
- text-align: right;
- left: 0;
- background: #fff;
- border-radius: 0 0 2px 2px;
- }
- /deep/.ant-form-item{
- width: 31%;
- }
- /deep/.ant-form{
- display: flex;
- width: 100%;
- flex-wrap: wrap;
- }
- .nresume{
- width: 100% !important;
- }
- /deep/ .nresume .ant-form-item-label{
- width: 8% !important;
- }
- /deep/ .nresume .ant-form-item-control-wrapper{
- width: 84% !important;
- }
- /deep/ .nresume .ant-input{
- height: 100px !important;
- }
- /deep/ .ant-col-sm-5{
- width: 27%;
- }
- </style>
|