DrawerFrom.vue 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. <script setup lang="ts">
  2. import { ref, reactive, onMounted, nextTick } from 'vue'
  3. import Drawer from '@/components/Drawer/index.vue'
  4. import { User_Power_List } from '@/api/role/index'
  5. import { User_Post_List, User_Add, User_Edit } from '@/api/user/index'
  6. import { GlobalStore } from '@/stores/index'
  7. import type { FormInstance, FormRules } from 'element-plus'
  8. import { ElMessage } from 'element-plus'
  9. import { reuls_validator } from './relus'
  10. import md5 from 'js-md5'
  11. const globalStore = GlobalStore()
  12. const _PASS = '******'
  13. let userPowerList: any = []
  14. const getUserPowerList = async () => {
  15. const res: any = await User_Power_List({ User_tokey: globalStore.GET_User_tokey, page: 1, page_z: 9999 })
  16. userPowerList = res.Data.Data
  17. }
  18. let userPostList = ref<any>([])
  19. const changeDept = async (val: number) => {
  20. const res = await User_Post_List({ T_dept: val })
  21. userPostList.value = res.Data
  22. }
  23. const resetForm = (formEl: FormInstance | undefined) => {
  24. if (!formEl) return
  25. formEl.resetFields()
  26. }
  27. const formRef = ref()
  28. const drawerRef = ref()
  29. const formLabelWidth = ref('95px')
  30. let form = ref({
  31. T_power: '',
  32. T_name: '',
  33. T_user: '',
  34. T_pass: '',
  35. T_dept: '',
  36. T_post: '',
  37. T_sex: '',
  38. T_id_card: '',
  39. T_nation: '',
  40. T_school: '',
  41. T_major: '',
  42. T_education: '',
  43. T_marry: '',
  44. T_phone: '',
  45. T_entry_time: '',
  46. T_spouse_name: '',
  47. T_entry_type: '',
  48. T_contract_start_time: '',
  49. T_contract_end_time: '',
  50. T_remark: '',
  51. T_positive_time: '',
  52. T_spouse_phone: '',
  53. T_expire: ''
  54. })
  55. const rules = reactive<FormRules>(reuls_validator)
  56. type Fn = () => void
  57. const callbackDrawer = (done: Fn) => {
  58. done()
  59. nextTick(() => {
  60. resetForm(formRef.value)
  61. })
  62. }
  63. const openDrawer = () => {
  64. drawerRef.value.openDrawer()
  65. }
  66. const AddUser = (formEl: FormInstance | undefined) => {
  67. if (!formEl) return
  68. formEl.validate(async valid => {
  69. if (valid) {
  70. let res: any = {}
  71. if (props.action) {
  72. form.value.T_pass = md5(form.value.T_pass)
  73. res = await User_Add(form.value)
  74. } else {
  75. form.value.T_pass === _PASS && (form.value.T_pass = '')
  76. res = await User_Edit(form.value)
  77. }
  78. if (res.Code === 200) {
  79. ElMessage({
  80. type: 'success',
  81. message: `${props.action ? '添加' : '编辑'}成功!`
  82. })
  83. nextTick(() => {
  84. drawerRef.value.closeDrawer()
  85. emit('onTableList')
  86. resetForm(formRef.value)
  87. emit('onaction', true)
  88. })
  89. }
  90. } else {
  91. return false
  92. }
  93. })
  94. }
  95. const DataEcho = async (row: any) => {
  96. row.T_entry_type = +row.T_entry_type
  97. row.T_pass = _PASS
  98. const res = await User_Post_List({ T_dept: row.T_dept })
  99. userPostList.value = res.Data
  100. nextTick(() => {
  101. form.value = { ...row }
  102. })
  103. }
  104. onMounted(() => {
  105. if (userPowerList.length <= 0) {
  106. getUserPowerList()
  107. }
  108. })
  109. const emit = defineEmits<{ (event: 'onTableList'): void; (event: 'onaction', val: boolean): void }>()
  110. interface PropsType {
  111. action: boolean
  112. }
  113. const props = defineProps<PropsType>()
  114. defineExpose({
  115. openDrawer,
  116. callbackDrawer,
  117. DataEcho
  118. })
  119. </script>
  120. <template>
  121. <Drawer ref="drawerRef" :handleClose="callbackDrawer">
  122. <template #header="{ params }">
  123. <h4 :id="params.titleId" :class="params.titleClass">{{ action ? '添加' : '编辑' }} - 账户管理</h4>
  124. </template>
  125. <el-form :model="form" ref="formRef" :rules="rules">
  126. <el-form-item label="角色权限:" :label-width="formLabelWidth" prop="T_power">
  127. <el-select v-model="form.T_power" placeholder="请选择角色">
  128. <el-option v-for="item in userPowerList" :key="item.T_id" :label="item.T_name" :value="item.T_id" />
  129. </el-select>
  130. </el-form-item>
  131. <el-form-item label="名称:" :label-width="formLabelWidth" prop="T_name">
  132. <el-input v-model="form.T_name" autocomplete="off" placeholder="名称" />
  133. </el-form-item>
  134. <el-form-item label="账号:" :label-width="formLabelWidth" prop="T_user">
  135. <el-input v-model="form.T_user" autocomplete="off" placeholder="账号" />
  136. </el-form-item>
  137. <el-form-item label="密码:" :label-width="formLabelWidth" prop="T_pass">
  138. <el-input v-model="form.T_pass" type="password" autocomplete="off" placeholder="密码" />
  139. </el-form-item>
  140. <el-form-item label="部门:" :label-width="formLabelWidth" prop="T_dept">
  141. <el-select v-model="form.T_dept" placeholder="请选择部门" @change="changeDept">
  142. <el-option v-for="item in globalStore.GET_Dept_List" :key="item.Id" :label="item.T_name" :value="item.Id" />
  143. </el-select>
  144. </el-form-item>
  145. <el-form-item label="岗位:" :label-width="formLabelWidth" prop="T_post">
  146. <el-select v-model="form.T_post" placeholder="请选择岗位">
  147. <el-option v-for="item in userPostList" :key="item.Id" :label="item.T_name" :value="item.Id" />
  148. </el-select>
  149. </el-form-item>
  150. <el-form-item label="性别:" :label-width="formLabelWidth" prop="T_sex">
  151. <el-radio-group v-model="form.T_sex" class="ml-4">
  152. <el-radio :label="1">男</el-radio>
  153. <el-radio :label="2">女</el-radio>
  154. </el-radio-group>
  155. </el-form-item>
  156. <el-form-item label="身份证号:" :label-width="formLabelWidth" prop="T_id_card">
  157. <el-input v-model="form.T_id_card" autocomplete="off" placeholder="身份证号" />
  158. </el-form-item>
  159. <el-form-item label="民族:" :label-width="formLabelWidth" prop="T_nation">
  160. <el-input v-model="form.T_nation" autocomplete="off" placeholder="民族" />
  161. </el-form-item>
  162. <el-form-item label="毕业院校:" :label-width="formLabelWidth" prop="T_school">
  163. <el-input v-model="form.T_school" autocomplete="off" placeholder="毕业院校" />
  164. </el-form-item>
  165. <el-form-item label="专业:" :label-width="formLabelWidth" prop="T_major">
  166. <el-input v-model="form.T_major" autocomplete="off" placeholder="专业" />
  167. </el-form-item>
  168. <el-form-item label="学历:" :label-width="formLabelWidth" prop="T_education">
  169. <el-input v-model="form.T_education" autocomplete="off" placeholder="学历" />
  170. </el-form-item>
  171. <el-form-item label="联系电话:" :label-width="formLabelWidth" prop="T_phone">
  172. <el-input v-model="form.T_phone" autocomplete="off" placeholder="联系电话" />
  173. </el-form-item>
  174. <el-form-item label="婚否:" :label-width="formLabelWidth" prop="T_marry">
  175. <el-radio-group v-model="form.T_marry" class="ml-4">
  176. <el-radio :label="0">未婚</el-radio>
  177. <el-radio :label="1">已婚</el-radio>
  178. </el-radio-group>
  179. </el-form-item>
  180. <el-form-item label="入职时间:" :label-width="formLabelWidth" prop="T_entry_time">
  181. <el-date-picker
  182. v-model="form.T_entry_time"
  183. type="date"
  184. placeholder="入职时间"
  185. format="YYYY-MM-DD"
  186. value-format="YYYY-MM-DD"
  187. />
  188. </el-form-item>
  189. <el-form-item label="转正时间:" :label-width="formLabelWidth" prop="T_positive_time">
  190. <el-date-picker
  191. v-model="form.T_positive_time"
  192. type="date"
  193. placeholder="转正时间"
  194. format="YYYY-MM-DD"
  195. value-format="YYYY-MM-DD"
  196. />
  197. </el-form-item>
  198. <el-form-item label="配偶姓名:" :label-width="formLabelWidth">
  199. <el-input v-model="form.T_spouse_name" autocomplete="off" placeholder="配偶姓名" />
  200. </el-form-item>
  201. <el-form-item label="配偶联系电话:" label-width="110px">
  202. <el-input v-model="form.T_spouse_phone" autocomplete="off" placeholder="配偶联系电话" />
  203. </el-form-item>
  204. <el-form-item label="入职类型:" :label-width="formLabelWidth" prop="T_entry_type">
  205. <el-radio-group v-model="form.T_entry_type" class="ml-4">
  206. <el-radio :label="1">全职</el-radio>
  207. <el-radio :label="2">兼职</el-radio>
  208. <el-radio :label="3">实习生</el-radio>
  209. </el-radio-group>
  210. </el-form-item>
  211. <el-form-item label="劳动合同开始时间:" label-width="150px" prop="T_contract_start_time">
  212. <el-date-picker
  213. v-model="form.T_contract_start_time"
  214. type="date"
  215. placeholder="劳动合同开始时间"
  216. format="YYYY-MM-DD"
  217. value-format="YYYY-MM-DD"
  218. />
  219. </el-form-item>
  220. <el-form-item label="劳动合同结束时间:" label-width="150px" prop="T_contract_end_time">
  221. <el-date-picker
  222. v-model="form.T_contract_end_time"
  223. type="date"
  224. placeholder="劳动合同结束时间"
  225. format="YYYY-MM-DD"
  226. value-format="YYYY-MM-DD"
  227. />
  228. </el-form-item>
  229. <el-form-item label="是否到期:" :label-width="formLabelWidth" prop="T_expire">
  230. <el-radio-group v-model="form.T_expire" class="ml-4">
  231. <el-radio :label="0">否</el-radio>
  232. <el-radio :label="1">是</el-radio>
  233. </el-radio-group>
  234. </el-form-item>
  235. <el-form-item label="备注:" :label-width="formLabelWidth">
  236. <el-input v-model="form.T_remark" type="textarea" autocomplete="off" placeholder="备注" />
  237. </el-form-item>
  238. <el-form-item :label-width="formLabelWidth">
  239. <el-button v-if="action" color="#626aef" @click="AddUser(formRef)">添加</el-button>
  240. <el-button v-else color="#626aef" @click="AddUser(formRef)">编辑</el-button>
  241. </el-form-item>
  242. </el-form>
  243. </Drawer>
  244. </template>
  245. <style scoped lang="scss"></style>