edit.vue 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. <template>
  2. <div>
  3. <el-button type="default" size="mini" @click="onShow">编 辑</el-button>
  4. <el-drawer title="编辑员工" direction="rtl" append-to-body :visible.sync="dialogFormVisible" size="800px" @close="$refs.form.clearValidate()">
  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="12">
  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="12">
  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-form>
  95. </el-row>
  96. </div>
  97. <div class="fixed__btn__panel">
  98. <el-button size="small" @click="dialogFormVisible = false" class="normal-btn-width">取 消</el-button>
  99. <el-button size="small" type="primary" @click="onSubmit" class="normal-btn-width">确 定</el-button>
  100. </div>
  101. </el-drawer>
  102. </div>
  103. </template>
  104. <script>
  105. import {mapGetters} from 'vuex'
  106. import selectMenber from '@/components/selectMenber/index.vue'
  107. export default {
  108. components:{
  109. selectMenber
  110. },
  111. computed:{
  112. ...mapGetters({
  113. sys_options:'sys_options'
  114. })
  115. },
  116. data () {
  117. return {
  118. dialogFormVisible:false,
  119. visible:false,
  120. rules:{
  121. hrcode: [
  122. { required: true, message: '请输入员工编码', trigger: 'blur' },
  123. ],
  124. name: [
  125. { required: true, message: '请输入员工姓名', trigger: 'blur' },
  126. ],
  127. depname: [
  128. { required: true, message: '请选择部门', trigger: 'change' },
  129. ],
  130. phonenumber: [
  131. { required: true, message: '请输入员工电话', trigger: 'blur' },
  132. { pattern:/^1[3-9]\d{9}$/, message: '请输入正确手机号码',trigger: 'blur' }
  133. ],
  134. email:[
  135. { pattern:/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/, message: '请输入正确邮箱',trigger: 'blur' }
  136. ],
  137. },
  138. form:{
  139. "hrid":0,
  140. "hrcode":"",
  141. "name":"",
  142. "sex":0,
  143. "phonenumber":"",
  144. "officetelephone":"",
  145. "idcard":"",
  146. "email":"",
  147. "birthday":"",
  148. "remarks":"",
  149. "departmentid":"",
  150. "isleader":"",
  151. "position":"",
  152. "reporthrid":"",
  153. "userid":"0"
  154. },
  155. value:[],
  156. deplist:[]
  157. }
  158. },
  159. methods:{
  160. async query_hrMain () {
  161. const res = await this.$api.requested({
  162. "classname": "webmanage.hr.hr",
  163. "method": "query_hrMain",
  164. "content": {
  165. "hrid":this.$route.query.id
  166. }
  167. })
  168. this.form = Object.assign({},this.form, res.data)
  169. },
  170. async department () {
  171. const res = await this.$api.requested({
  172. "classname": "webmanage.department.department",
  173. "method": "querydepartment",
  174. "content": {
  175. }
  176. })
  177. // 数据格式转换成elementui-tree所需的格式
  178. this.deplist = this.createMenu(res.data)
  179. },
  180. createMenu (array) {
  181. var that = this
  182. let arr = []
  183. function convertToElementTree(node) {
  184. // 新节点
  185. var elNode = {
  186. label: node["depname"],
  187. parentid:node['parentid'],
  188. departmentid:node["departmentid"],
  189. value:node["departmentid"],
  190. remarks:node["remarks"],
  191. isused:node["isused"],
  192. changedate:node['changedate'],
  193. changeby:node['changeby'],
  194. createdate:node['createdate'],
  195. createby:node['createby'],
  196. depno:node['depno'],
  197. children: []
  198. }
  199. if (node.subdep && node.subdep.length > 0) {
  200. // 如果存在子节点
  201. for (var index = 0; index < node.subdep.length; index++) {
  202. // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
  203. elNode.children.push(convertToElementTree(node.subdep[index]));
  204. }
  205. }
  206. return elNode;
  207. }
  208. array.forEach((element) => {
  209. arr.push(convertToElementTree(element))
  210. });
  211. return arr
  212. },
  213. onShow () {
  214. this.query_hrMain()
  215. this.department()
  216. this.$store.dispatch('optiontypeselect','sex')
  217. this.dialogFormVisible = true
  218. },
  219. selectDep (data) {
  220. let obj = {
  221. depname:data.label,
  222. departmentid:data.departmentid
  223. }
  224. this.form = Object.assign({},this.form,obj)
  225. this.showTree = !this.showTree
  226. },
  227. onSubmit () {
  228. this.$refs['form'].validate(async (valid) => {
  229. if (!valid) return false;
  230. const res = await this.$api.requested({
  231. "classname": "webmanage.hr.hr",
  232. "method": "insertormodify_hr",
  233. "content": this.form
  234. })
  235. if (res.code === 0) return this.$notify({
  236. title: '失败',
  237. message: res.data,
  238. type: 'error'
  239. });
  240. this.$notify({
  241. title: '成功',
  242. message: '添加成功',
  243. type: 'success'
  244. });
  245. this.dialogFormVisible = false
  246. this.$emit('onSuccess')
  247. });
  248. },
  249. // 监听汇报对象选择
  250. selectMenber (data) {
  251. this.form.reporthrid = data.hrid
  252. }
  253. }
  254. }
  255. </script>
  256. <style>
  257. .custom-tree-node {
  258. flex: 1;
  259. display: flex;
  260. align-items: center;
  261. justify-content: space-between;
  262. font-size: 14px;
  263. padding-right: 8px;
  264. background: none;
  265. }
  266. </style>
  267. <style scoped>
  268. .mb-30{
  269. margin-bottom:12px
  270. }
  271. </style>