add.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. <template>
  2. <div>
  3. <el-button type="primary" size="small" icon="el-icon-plus" @click="onShow">新建员工</el-button>
  4. <el-drawer title="新建员工" direction="rtl" append-to-body :visible.sync="dialogFormVisible" size="800px" @close="$refs.form.clearValidate()" :show-close="false">
  5. <div class="drawer__panel">
  6. <el-row :gutter="20">
  7. <el-form :model="form" size="small" :rules="rules" ref="form" label-position="right" label-width="100px">
  8. <el-col class="mb-30" :span="12">
  9. <el-form-item label="编号:" prop="hrcode">
  10. <el-input v-model="form.hrcode" placeholder="输入人员编号" autocomplete="off"></el-input>
  11. </el-form-item>
  12. </el-col>
  13. <el-col class="mb-30" :span="12">
  14. <el-form-item label="性别">
  15. <el-select v-model="form.sex" style="width:100%" placeholder="请选择">
  16. <el-option
  17. v-for="item in sys_options"
  18. :key="item.index"
  19. :label="item.value"
  20. :value="item.value">
  21. </el-option>
  22. </el-select>
  23. </el-form-item>
  24. </el-col>
  25. <el-col class="mb-30" :span="12">
  26. <el-form-item label="姓名:" prop="name">
  27. <el-input v-model="form.name" placeholder="输入姓名" autocomplete="off"></el-input>
  28. </el-form-item>
  29. </el-col>
  30. <el-col class="mb-30" :span="12">
  31. <el-form-item label="电子邮箱:" prop="email">
  32. <el-input v-model="form.email" placeholder="输入电子邮箱" autocomplete="off"></el-input>
  33. </el-form-item>
  34. </el-col>
  35. <!-- <el-col class="mb-30" :span="12">
  36. <el-form-item label="手机号码:" prop="phonenumber">
  37. <el-input v-model="form.phonenumber" placeholder="输入手机号码" autocomplete="off"></el-input>
  38. </el-form-item>
  39. </el-col>-->
  40. <el-col class="mb-30" :span="12">
  41. <el-form-item label="身份证号:">
  42. <el-input v-model="form.idcard" placeholder="输入身份证号" autocomplete="off"></el-input>
  43. </el-form-item>
  44. </el-col>
  45. <el-col class="mb-30" :span="12">
  46. <el-form-item label="部门:" prop="depname">
  47. <el-popover
  48. placement="bottom"
  49. width="400"
  50. trigger="click"
  51. v-model="visible">
  52. <el-tree
  53. :data="deplist"
  54. node-key="id"
  55. default-expand-all
  56. highlight-current
  57. :expand-on-click-node="false">
  58. <span class="custom-tree-node" slot-scope="{ node, data }">
  59. <span>{{ node.label }}</span>
  60. <span>
  61. <el-button size="small" type="text" @click="selectDep(data,visible=false)">选 择</el-button>
  62. </span>
  63. </span>
  64. </el-tree>
  65. <el-input slot="reference" v-model="form.depname" readonly placeholder="请选择" autocomplete="off"></el-input>
  66. </el-popover>
  67. </el-form-item>
  68. </el-col>
  69. <el-col class="mb-30" :span="12">
  70. <el-form-item label="办公电话:">
  71. <el-input v-model="form.officetelephone" placeholder="输入办公电话" autocomplete="off"></el-input>
  72. </el-form-item>
  73. </el-col>
  74. <el-col class="mb-30" :span="12">
  75. <el-form-item label="职位:">
  76. <el-input v-model="form.position" placeholder="输入职位" autocomplete="off"></el-input>
  77. </el-form-item>
  78. </el-col>
  79. <el-col class="mb-30" :span="12">
  80. <el-form-item label="汇报对象:">
  81. <selectMenber @selectMenber="selectMenber"></selectMenber>
  82. </el-form-item>
  83. </el-col>
  84. <el-col class="mb-30" :span="5" style="height:51px">
  85. <el-form-item>
  86. <el-checkbox v-model="form.isleader" :false-label="0" :true-label="1">是否部门负责人</el-checkbox>
  87. </el-form-item>
  88. </el-col>
  89. <el-col class="mb-30" :span="5">
  90. <el-form-item>
  91. <el-checkbox v-model="form.isworker" :false-label="0" :true-label="1">是否服务人员</el-checkbox>
  92. </el-form-item>
  93. </el-col>
  94. <el-col :span="12">
  95. <el-form-item>
  96. <el-radio-group v-model="form.status">
  97. <el-radio :label="0">在职</el-radio>
  98. <el-radio :label="1">离职</el-radio>
  99. </el-radio-group>
  100. </el-form-item>
  101. </el-col>
  102. </el-form>
  103. </el-row>
  104. </div>
  105. <div class="fixed__btn__panel">
  106. <el-button size="small" @click="dialogFormVisible = false,$refs.form.resetFields()" class="normal-btn-width">取 消</el-button>
  107. <el-button size="small" type="primary" @click="onSubmit" class="normal-btn-width">确 定</el-button>
  108. </div>
  109. </el-drawer>
  110. <!-- <el-dialog
  111. title="授权角色"
  112. :visible.sync="drawer"
  113. width="564px"
  114. append-to-body
  115. :show-close="false"
  116. @close="onClose">
  117. <div>
  118. <el-row :gutter="50">
  119. <el-form :model="roleForm" :rules="roleRules" ref="roleForm" size="mini" label-position="right">
  120. <el-col :span="24">
  121. <el-form-item label="授权角色" label-width="100px" prop="roleids">
  122. <el-select v-model="roleForm.roleids" style="width:100%" placeholder="请选择" multiple>
  123. <el-option
  124. v-for="item in options"
  125. :key="item.index"
  126. :label="item.rolename"
  127. :value="item.roleid">
  128. </el-option>
  129. </el-select>
  130. </el-form-item>
  131. </el-col>
  132. </el-form>
  133. </el-row>
  134. </div>
  135. <div class="dialog-footer">
  136. &lt;!&ndash; <el-button size="small" @click="drawer = false" class="normal-btn-width">取 消</el-button>&ndash;&gt;
  137. <el-button size="small" type="warning" @click="createUser" class="normal-btn-width btn-warning">确 定</el-button>
  138. </div>
  139. </el-dialog>-->
  140. </div>
  141. </template>
  142. <script>
  143. import {mapGetters} from 'vuex'
  144. import selectMenber from '@/components/selectMenber/index.vue'
  145. export default {
  146. props:['depInfo'],
  147. components:{
  148. selectMenber
  149. },
  150. computed:{
  151. ...mapGetters({
  152. deplist:'deplist',
  153. sys_options:'sys_options'
  154. })
  155. },
  156. watch: {
  157. dialogFormVisible(val) {
  158. !val && this.$refs.form.resetFields()
  159. }
  160. },
  161. data () {
  162. return {
  163. dialogFormVisible:false,
  164. visible:false,
  165. rules:{
  166. hrcode: [
  167. { required: true, message: '请输入员工编码', trigger: 'blur' },
  168. ],
  169. name: [
  170. { required: true, message: '请输入员工姓名', trigger: 'blur' },
  171. ],
  172. depname: [
  173. { required: true, message: '请选择部门', trigger: 'change' },
  174. ],
  175. phonenumber: [
  176. { required: true, message: '请输入员工电话', trigger: 'blur' },
  177. { pattern:/^1[3-9]\d{9}$/, message: '请输入正确手机号码',trigger: 'blur' }
  178. ],
  179. email:[
  180. { pattern:/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/, message: '请输入正确邮箱',trigger: 'blur' }
  181. ],
  182. },
  183. form:{
  184. "hrid":0,
  185. "hrcode":"",
  186. "name":"",
  187. "sex":'男',
  188. "phonenumber":"",
  189. "officetelephone":"",
  190. "idcard":"",
  191. "email":"",
  192. "birthday":"",
  193. "remarks":"",
  194. "departmentid":"",
  195. "isleader":"",
  196. "position":"",
  197. "reporthrid":"",
  198. "isworker":"",
  199. "userid":"0",
  200. 'status':0
  201. },
  202. value:[],
  203. drawer:false,
  204. roleRules:{
  205. roleids: [
  206. { required: true, message: '请选择授权角色', trigger: 'change' }
  207. ],
  208. },
  209. roleForm:{
  210. "hrid":'',
  211. "userid": 0,
  212. "name": "",
  213. "phonenumber": "",
  214. "status": 1,
  215. "remarks":"",
  216. "roleids":[]
  217. },
  218. options:[]
  219. }
  220. },
  221. methods:{
  222. onShow () {
  223. this.dialogFormVisible = true
  224. this.form.status = 0
  225. // this.form.depname = this.depInfo.data.label
  226. // this.form.departmentid = this.depInfo.data.departmentid
  227. this.$store.dispatch('optiontypeselect','sex')
  228. },
  229. selectDep (data) {
  230. let obj = {
  231. depname:data.label,
  232. departmentid:data.departmentid
  233. }
  234. this.form = Object.assign({},this.form,obj)
  235. this.showTree = !this.showTree
  236. },
  237. onSubmit () {
  238. this.$refs['form'].validate(async (valid) => {
  239. if (!valid) return false;
  240. const res = await this.$api.requested({
  241. "classname": "webmanage.hr.hr",
  242. "method": "insertormodify_hr",
  243. "content": this.form
  244. })
  245. if (res.code === 0) return this.$notify({
  246. title: '失败',
  247. message: res.data,
  248. type: 'error'
  249. });
  250. this.$notify({
  251. title: '成功',
  252. message: '添加成功',
  253. type: 'success'
  254. });
  255. /*this.drawer = true*/
  256. this.roleForm.hrid = res.data.hrid
  257. /*this.rolelist()*/
  258. this.dialogFormVisible = false
  259. this.refreshData()
  260. this.$emit('onSuccess')
  261. this.$store.dispatch('changeDetailDrawer',true)
  262. this.$router.push({path:'/depManage/staffDetail',query:{id:res.data.hrid,rowindex:res.data.rowindex}})
  263. });
  264. },
  265. refreshData () {
  266. this.form = {
  267. "hrid":0,
  268. "hrcode":"",
  269. "name":"",
  270. "sex":'男',
  271. "phonenumber":"",
  272. "officetelephone":"",
  273. "idcard":"",
  274. "email":"",
  275. "birthday":"",
  276. "remarks":"",
  277. "departmentid":"",
  278. "isleader":"",
  279. "position":"",
  280. "reporthrid":"",
  281. "userid":"0"
  282. }
  283. },
  284. // 监听汇报对象选择
  285. selectMenber (data) {
  286. this.form.reporthrid = data.hrid
  287. },
  288. async rolelist () {
  289. let param = {
  290. "classname": "sysmanage.develop.optiontype.optiontype",
  291. "method": "optiontypeselect",
  292. "content": {
  293. "pageNumber": 1,
  294. "pageSize": 20,
  295. "typename": "role",
  296. "parameter": {
  297. }
  298. }
  299. }
  300. const res = await this.$api.requested(param)
  301. this.options = res.data
  302. },
  303. createUser () {
  304. this.$refs['roleForm'].validate(async (valid) => {
  305. if (!valid) return false
  306. const res = await this.$api.requested({
  307. "classname": "webmanage.hr.hr",
  308. "method": "createUser",
  309. "content": {
  310. "hrid":this.roleForm.hrid,
  311. "roleids":this.roleForm.roleids
  312. }
  313. })
  314. this.tool.showMessage(res,()=>{
  315. this.drawer = false
  316. this.dialogFormVisible = false
  317. this.refreshData()
  318. this.$emit('onSuccess')
  319. })
  320. })
  321. },
  322. onClose () {
  323. this.$refs['roleForm'].resetFields()
  324. }
  325. }
  326. }
  327. </script>
  328. <style>
  329. </style>
  330. <style scoped>
  331. .mb-30{
  332. margin-bottom:12px
  333. }
  334. </style>