User.vue 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <template>
  2. <el-drawer
  3. :title="title"
  4. :modal-append-to-body="false"
  5. :modal="false"
  6. :wrapper-closable="false"
  7. size="35%"
  8. :visible.sync="dialogVisible"
  9. >
  10. <div class="content-container">
  11. <vuescroll :ops="ops" style="height: calc(100vh - 250px)">
  12. <el-form ref="ruleForm" :model="formData" :rules="rules" label-position="right" label-width="100px">
  13. <el-form-item label="账号" prop="accountName">
  14. <el-input v-model="formData.accountName" placeholder="输入账号" />
  15. </el-form-item>
  16. <el-form-item label="所在部门" prop="positionId">
  17. <group-selector v-model="formData.groupId" />
  18. </el-form-item>
  19. <el-form-item label="密码">
  20. <span style="color: #eeeeee">初始化密码为 888888</span>
  21. </el-form-item>
  22. <el-form-item label="姓名" prop="accountRealName">
  23. <el-input v-model="formData.accountRealName" placeholder="输入姓名" />
  24. </el-form-item>
  25. <el-form-item label="工号" prop="accountStaffNo">
  26. <el-input v-model="formData.accountStaffNo" max="11" placeholder="输入工号" />
  27. </el-form-item>
  28. <el-form-item v-show="viewData.isFixed!==1" label="岗位" prop="positionId">
  29. <position-selector v-model="formData.positionId" />
  30. </el-form-item>
  31. <el-form-item label="手机号">
  32. <el-input v-model="formData.accountPhone" max="11" placeholder="输入手机号码" />
  33. </el-form-item>
  34. <el-form-item label="备注">
  35. <el-input v-model="formData.accountIntro" type="textarea" rows="6" max="127" placeholder="备注" />
  36. </el-form-item>
  37. </el-form>
  38. <div class="btn-group">
  39. <el-button type="primary" @click="submitForm('ruleForm')">保存</el-button>
  40. <el-button class="cancel-btn" @click="dialogVisible = false">取消</el-button>
  41. </div>
  42. </vuescroll>
  43. </div>
  44. </el-drawer>
  45. </template>
  46. <script>
  47. import { GroupSelector, PositionSelector } from '@/components'
  48. import { getUserById, createUser, updateUser } from '@/api/system/userApi'
  49. import { ACTION_ADD, ACTION_UPDATE } from '@/utils/actionType'
  50. import vuescroll from 'vuescroll'
  51. export default {
  52. name: 'User',
  53. components: { vuescroll, PositionSelector, GroupSelector },
  54. props: {
  55. title: {
  56. type: String,
  57. default: '添加用户'
  58. }
  59. },
  60. data() {
  61. return {
  62. ops: {
  63. bar: {
  64. keepShow: false,
  65. onlyShowBarOnScroll: false
  66. }
  67. },
  68. dialogVisible: false,
  69. formData: {
  70. gmId: undefined,
  71. gmpId: undefined,
  72. accountId: undefined, // 帐号ID
  73. groupId: undefined, // 所属部门
  74. groupName: '',
  75. accountName: '', // 帐号名称
  76. password: '888888', // 密码
  77. accountRealName: '', // 姓名
  78. accountStaffNo: '', // 工号
  79. accountPhone: '', // 手机号
  80. positionId: undefined, // 岗位,
  81. accountIntro: ''
  82. },
  83. viewData: {
  84. parentName: '',
  85. groupName: '',
  86. isFixed: 0
  87. },
  88. rules: {
  89. accountName: [
  90. { required: true, message: '请选择帐号名称', trigger: 'blur' }
  91. ],
  92. accountRealName: [
  93. { required: false, message: '请选择姓名', trigger: 'blur' }
  94. ],
  95. accountPhone: [
  96. { required: false, message: '请输入手机号', trigger: 'blur' }
  97. ],
  98. accountStaffNo: [
  99. { required: false, message: '请输入工号', trigger: 'blur' }
  100. ],
  101. positionId: [
  102. { required: true, message: '请选择岗位', trigger: 'blur' }
  103. ]
  104. },
  105. actionType: ''
  106. }
  107. },
  108. mounted() {},
  109. methods: {
  110. // Show Add Model Dialog
  111. showAddModel(groupId, groupName) {
  112. this.actionType = ACTION_ADD
  113. this.resetFormData()
  114. this.dialogVisible = true
  115. this.formData.groupId = groupId
  116. this.formData.groupName = groupName
  117. },
  118. // Show Edit Model
  119. showEditModel(groupId, userId) {
  120. this.actionType = ACTION_UPDATE
  121. this.dialogVisible = true
  122. getUserById(groupId, userId).then((resp) => {
  123. const { data } = resp
  124. this.formData = data
  125. this.viewData.isFixed = data.isFixed
  126. }).catch((error) => {
  127. console.log(error)
  128. })
  129. },
  130. // Init Form Data
  131. resetFormData() {
  132. this.formData = {
  133. accountId: undefined, // 帐号ID
  134. groupId: undefined, // 所属部门
  135. accountName: '', // 帐号名称
  136. password: '888888', // 密码
  137. accountRealName: '', // 姓名
  138. accountPhone: '', // 手机号
  139. positionId: undefined// 岗位
  140. }
  141. },
  142. // Submit Form
  143. submitForm(formName) {
  144. this.$refs[formName].validate((valid) => {
  145. if (valid) {
  146. this.handleActionCommand()
  147. } else {
  148. console.log('error submit!!')
  149. return false
  150. }
  151. })
  152. },
  153. // Handle 'ACTION' Command
  154. handleActionCommand() {
  155. const actionType = this.actionType
  156. switch (actionType) {
  157. case ACTION_ADD:
  158. createUser(this.formData).then((resp) => {
  159. const { msg } = resp
  160. this.dialogVisible = false
  161. this.$emit('formSuccess')
  162. this.$message.success(msg)
  163. }).catch((error) => {
  164. console.log(error)
  165. })
  166. break
  167. case ACTION_UPDATE:
  168. updateUser(this.formData).then((resp) => {
  169. const { msg } = resp
  170. this.dialogVisible = false
  171. this.$message.success(msg)
  172. this.$emit('formSuccess')
  173. }).catch((error) => {
  174. console.log(error)
  175. })
  176. break
  177. }
  178. },
  179. // Reset From Fields
  180. resetFormField(formName) {
  181. this.$refs[formName].resetFields()
  182. }
  183. }
  184. }
  185. </script>
  186. <style lang="scss">
  187. </style>
  188. <style lang="scss" scoped>
  189. .content-container {
  190. padding: 10px;
  191. font-size: 14px;
  192. line-height: 1.5;
  193. word-wrap: break-word;
  194. .btn-group {
  195. padding-left: 90px;
  196. }
  197. }
  198. </style>