addUserDialog.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. <template>
  2. <el-dialog :visible.sync="isAddUserDialogShow" :close-on-click-modal="false" :modal-append-to-body='false' class="add-user-dialog-wrap"
  3. @close="$emit('close')" center width="986px" v-dialogDrag>
  4. <div slot="title" style="display:flex;alignItems:center;">
  5. <img :src="userForm.title==$t('SystemManage.DepartManage.user_add_btn')?$icons.add:$icons.edit"
  6. style="color:#fff;width:16px;height:16px;marginRight:5px;">
  7. <span style="fontSize:16px;">{{userForm.title}}</span>
  8. </div>
  9. <el-form @submit.native.prevent :model="userForm" :rules="userRule" ref="userForm" label-width="160px"
  10. class="demo-ruleForm" style="marginTop:15px;">
  11. <el-form-item :label="$t('SystemManage.DepartManage.user_login_accout')" prop="account">
  12. <el-input v-model="userForm.account" :placeholder="$t('SystemManage.DepartManage.user_add_placeholder01')"
  13. :disabled="userForm.disabledForm || userForm.isAdminEdit" clearable>
  14. </el-input>
  15. </el-form-item>
  16. <el-form-item :label="$t('SystemManage.DepartManage.user_login_pwd')" prop="pwd" v-if="userForm.title == $t('SystemManage.DepartManage.user_add_btn')">
  17. <el-input v-model.trim="userForm.pwd" :placeholder="$t('SystemManage.DepartManage.user_add_placeholder02')"
  18. :type="userForm.title == $t('SystemManage.DepartManage.user_add_btn') ? 'text' : 'password' " clearable></el-input>
  19. </el-form-item>
  20. <el-form-item :label="$t('SystemManage.DepartManage.user_table_name')" prop="name">
  21. <el-input v-model="userForm.name" :placeholder="$t('SystemManage.DepartManage.user_add_placeholder03')" clearable
  22. :disabled="userForm.isAdminEdit">
  23. </el-input>
  24. </el-form-item>
  25. <el-form-item :label="$t('SystemManage.DepartManage.user_table_mobile')" prop="mobile" class="mobile-input-item">
  26. <el-input v-model.trim="userForm.mobile" :placeholder="$t('SystemManage.DepartManage.user_add_placeholder04')" clearable class="mobile-input">
  27. </el-input>
  28. <el-select v-model="userForm.areacode" class="mobile-select" placeholder="请选择">
  29. <el-option v-for="item in areaCode" :key="item.Value"
  30. :label="item.Name" :value="item.Value" />
  31. </el-select>
  32. </el-form-item>
  33. <el-form-item label="用户类型" prop="IsLdap" v-permission="permissionBtn.sysDepartPermission.sysDepart_userType">
  34. <el-select v-model="userForm.IsLdap" placeholder="请选择用户类型">
  35. <el-option label="系统用户" :value="0"></el-option>
  36. <el-option label="域用户" :value="1"></el-option>
  37. </el-select>
  38. </el-form-item>
  39. <el-form-item :label="$t('SystemManage.DepartManage.user_depart')" prop="depart" v-if="userForm.title == $t('SystemManage.DepartManage.user_add_btn')">
  40. <el-cascader :options="departArr" v-model="userForm.depart" :props="form_departProp"
  41. :placeholder="$t('SystemManage.DepartManage.user_add_placeholder05')" :disabled="userForm.disabledForm" clearable>
  42. </el-cascader>
  43. </el-form-item>
  44. <el-form-item :label="$t('SystemManage.DepartManage.user_email')" prop="email">
  45. <el-input v-model="userForm.email" :placeholder="$t('SystemManage.DepartManage.user_add_placeholder06')"></el-input>
  46. </el-form-item>
  47. <el-form-item :label="$t('SystemManage.DepartManage.user_table_employee_id')" prop="employeeNumber">
  48. <el-input :disabled="hasEmployeeNo" v-model="userForm.employeeNumber" :placeholder="$t('SystemManage.DepartManage.user_add_placeholder07')"></el-input>
  49. </el-form-item>
  50. <el-form-item :label="$t('SystemManage.DepartManage.user_role')" prop="role">
  51. <el-select v-model="userForm.role" :placeholder="$t('SystemManage.DepartManage.user_role')" :disabled="userForm.disabledForm || userForm.isAdminEdit" @change="roleChange">
  52. <el-option v-for="item in roleArr" :key="item.RoleId" :label="item.RoleName" :value="item.RoleId">
  53. </el-option>
  54. </el-select>
  55. </el-form-item>
  56. <el-form-item :label="$t('SystemManage.DepartManage.user_table_direct')" prop="direct" v-permission="permissionBtn.sysDepartPermission.sysDepart_saveUser_researchGroup">
  57. <el-cascader collapse-tags :show-all-levels="false" :options="researchGroup" v-model="userForm.direct"
  58. :props="form_directProp" :placeholder="$t('SystemManage.DepartManage.user_add_placeholder08')" clearable></el-cascader>
  59. </el-form-item>
  60. <el-form-item :label="$t('SystemManage.DepartManage.user_table_position')" prop="post">
  61. <el-input v-model="userForm.post" :placeholder="$t('SystemManage.DepartManage.user_add_placeholder09')" clearable>
  62. </el-input>
  63. </el-form-item>
  64. <el-form-item :label="$t('SystemManage.DepartManage.user_table_address')" prop="city"
  65. :rules="[2,6,18].includes(userForm.role)?{ required: true, message: '工作地点不能为空', trigger: 'change' }:{}">
  66. <search-dist-picker
  67. :provinceInfo="userForm.province"
  68. :cityInfo="userForm.city"
  69. @selected="selectRegion"/>
  70. </el-form-item>
  71. <el-form-item :label="$t('SystemManage.DepartManage.user_table_status')" prop="status" v-if="!userForm.isAdminEdit">
  72. <el-radio-group v-model="userForm.status" :disabled="userForm.disabledStatus">
  73. <el-radio :label="1">{{$t('SystemManage.DepartManage.user_table_status_open')}}</el-radio>
  74. <el-radio :label="0">{{$t('SystemManage.DepartManage.user_table_status_ban')}}</el-radio>
  75. </el-radio-group>
  76. </el-form-item>
  77. </el-form>
  78. <div style="display:flex;justify-content:center;margin:0 0 26px;">
  79. <el-button type="primary" style="width:80px;marginRight:24px;" @click="$emit('save')">{{$t('Dialog.confirm_save_btn')}}</el-button>
  80. <el-button style="width:80px;" @click="$emit('close')">{{$t('Dialog.cancel_btn')}}</el-button>
  81. </div>
  82. </el-dialog>
  83. </template>
  84. <script>
  85. import searchDistPicker from '@/components/searchDistPicker.vue';
  86. import {patternEmail,isMobileNo,checkPassWord} from '@/utils/commonOptions';
  87. export default {
  88. props: {
  89. isAddUserDialogShow: {
  90. type: Boolean,
  91. default: false,
  92. },
  93. userForm: {
  94. type: Object,
  95. default: () => {
  96. return {}
  97. }
  98. },
  99. roleArr:{
  100. type:Array,
  101. default:()=>{return []}
  102. },
  103. departArr:{
  104. type:Array,
  105. default:()=>{return []}
  106. },
  107. hasEmployeeNo:{
  108. type:Boolean,
  109. default:false
  110. },
  111. researchGroup:{
  112. type:Array,
  113. default:()=>{return []}
  114. },
  115. areaCode:{
  116. type:Array,
  117. default:()=>{return []}
  118. }
  119. },
  120. components:{searchDistPicker},
  121. computed:{
  122. userRule() {
  123. return {
  124. account:[{required: true, message: this.$t('SystemManage.DepartManage.use_add_valid_msg01'), trigger: 'blur'}],
  125. pwd:[
  126. {
  127. validator:(rule,value,callback)=>{
  128. if(this.userForm.IsLdap==1){
  129. callback()
  130. return
  131. }else{
  132. if(value===''){
  133. callback(new Error(this.$t('SystemManage.DepartManage.use_add_valid_msg02')))
  134. }
  135. if(!checkPassWord(value)){
  136. callback(new Error('密码要求8位及以上,包含数字、大写字母、小写字母、特殊字符中的三个类型'))
  137. }else{
  138. callback()
  139. }
  140. }
  141. }
  142. }
  143. ],
  144. name:[{ required: true, message: this.$t('SystemManage.DepartManage.use_add_valid_msg04'), trigger: 'blur' }],
  145. mobile:[{ validator: (rule, value, callback) => {
  146. if (value === ''&&!this.userForm.email) {
  147. callback(new Error(this.$t('SystemManage.DepartManage.use_add_valid_msg05')));
  148. }else if(value&&this.userForm.areacode==='86'&&!isMobileNo(value)) {
  149. callback(new Error(this.$t('SystemManage.DepartManage.use_add_valid_msg06')));
  150. } else if(this.userForm.areacode!=='86'&&isNaN(value.trim())){
  151. callback(new Error(this.$t('SystemManage.DepartManage.use_add_valid_msg06')));
  152. }else {
  153. callback();
  154. }
  155. }, trigger: 'blur'}],
  156. email:[{ validator: (rule, value, callback) => {
  157. if (value === ''&&!this.userForm.mobile) {
  158. callback(new Error(this.$t('SystemManage.DepartManage.use_add_valid_msg05')));
  159. }else if(value&&!patternEmail.test(value)) {
  160. callback(new Error(this.$t('SystemManage.DepartManage.use_add_valid_msg07')));
  161. } else {
  162. callback();
  163. }
  164. }, trigger: 'blur'}],
  165. depart:[{ required: true, message: this.$t('SystemManage.DepartManage.use_add_valid_msg08'), trigger: 'change' }],
  166. // employeeNumber:[{validator:(rule,value,callback)=>{
  167. // if(!value){
  168. // callback()
  169. // return
  170. // }
  171. // // 取消空格
  172. // let tempValue = parseInt(value.replaceAll(' ',''))
  173. // if(!tempValue || value.replaceAll(' ','').length!=4){
  174. // callback(new Error(this.$t('SystemManage.DepartManage.use_add_valid_msg09')))
  175. // }else{
  176. // callback()
  177. // }
  178. // },trigger:'blur'}],
  179. role:[{ required: true, message: this.$t('SystemManage.DepartManage.use_add_valid_msg10'), trigger: 'change' }],
  180. }
  181. },
  182. },
  183. data() {
  184. return {
  185. // userRule: {
  186. // account:[{required: true, message: '登录账号不能为空', trigger: 'blur'}],
  187. // pwd:[{validator:(rule,value,callback)=>{
  188. // if(value===''){
  189. // callback(new Error('请输入新密码'))
  190. // }
  191. // if(!checkPassWord(value)){
  192. // callback(new Error('密码要求8位及以上,包含数字、大写字母、小写字母、特殊字符中的三个类型'))
  193. // }else{
  194. // callback()
  195. // }
  196. // }}],
  197. // name:[{ required: true, message: '姓名不能为空', trigger: 'blur' }],
  198. // mobile:[{ validator: (rule, value, callback) => {
  199. // if (value === ''&&!this.userForm.email) {
  200. // callback(new Error('手机号码和邮箱至少填一个'));
  201. // }else if(value&&this.userForm.areacode==='86'&&!isMobileNo(value)) {
  202. // callback(new Error('请输入正确的手机号格式'));
  203. // } else if(this.userForm.areacode!=='86'&&isNaN(value.trim())){
  204. // callback(new Error('请输入正确的手机号格式'));
  205. // }else {
  206. // callback();
  207. // }
  208. // }, trigger: 'blur'}],
  209. // email:[{ validator: (rule, value, callback) => {
  210. // if (value === ''&&!this.userForm.mobile) {
  211. // callback(new Error('手机号码和邮箱至少填一个'));
  212. // }else if(value&&!patternEmail.test(value)) {
  213. // callback(new Error('请输入正确的邮箱格式'));
  214. // } else {
  215. // callback();
  216. // }
  217. // }, trigger: 'blur'}],
  218. // depart:[{ required: true, message: '部门分组不能为空', trigger: 'change' }],
  219. // employeeNumber:[{validator:(rule,value,callback)=>{
  220. // if(!value){
  221. // callback()
  222. // return
  223. // }
  224. // // 取消空格
  225. // let tempValue = parseInt(value.replaceAll(' ',''))
  226. // if(!tempValue || value.replaceAll(' ','').length!=4){
  227. // callback(new Error('请输入四位数字'))
  228. // }else{
  229. // callback()
  230. // }
  231. // },trigger:'blur'}],
  232. // role:[{ required: true, message: '角色不能为空', trigger: 'change' }],
  233. // },
  234. form_departProp:{
  235. value:'DepartmentId',
  236. label:'DepartmentName',
  237. children:'Child',
  238. checkStrictly:true
  239. },//部门分组选择配置
  240. form_directProp: {
  241. value:'tag_id',
  242. label:'tag_name',
  243. children:'tags',
  244. multiple: true
  245. }, //研究方向选择配置
  246. };
  247. },
  248. methods: {
  249. selectRegion(data){
  250. this.$emit('selectRegion',data)
  251. },
  252. roleChange(value){
  253. if([2,6,18].includes(value)) return
  254. this.$refs.userForm && this.$refs.userForm.clearValidate(['city'])
  255. },
  256. },
  257. };
  258. </script>
  259. <style lang="scss">
  260. .add-user-dialog-wrap{
  261. .select-dist-picker{
  262. .el-select{
  263. width:145px;
  264. }
  265. }
  266. .mobile-input-item{
  267. position:relative;
  268. .mobile-select{
  269. position:absolute;
  270. top:0;
  271. left:0;
  272. width:115px !important;
  273. }
  274. .mobile-input{
  275. .el-input__inner{
  276. padding-left: 125px !important;
  277. }
  278. }
  279. }
  280. }
  281. </style>
  282. <style scoped lang="scss">
  283. .add-user-dialog-wrap{
  284. .demo-ruleForm{
  285. display: flex;
  286. flex-wrap: wrap;
  287. gap:0 10px;
  288. .el-form-item{
  289. .el-input,.el-cascader,.el-select{
  290. width:300px;
  291. }
  292. }
  293. }
  294. }
  295. </style>