dialogComponent.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. <template>
  2. <el-dialog
  3. :title="dialogTitle"
  4. v-model="dialogVisible"
  5. width="640px"
  6. @close="closeDialog()"
  7. @open="open"
  8. >
  9. <el-form
  10. ref="formInfo"
  11. :model="form"
  12. class="demo-form-inline userManageDialog"
  13. label-width="100px"
  14. :rules="rules"
  15. >
  16. <el-form-item label="用户名:" prop="nickName">
  17. <el-input
  18. v-model="form.nickName"
  19. :disabled="dialogTitle === '查看'"
  20. ></el-input>
  21. </el-form-item>
  22. <el-form-item label="账号:" prop="userName">
  23. <el-input
  24. v-model="form.userName"
  25. :disabled="dialogTitle === '查看'"
  26. ></el-input>
  27. </el-form-item>
  28. <el-form-item label="性别:" prop="sex">
  29. <el-radio-group v-model="form.sex" :disabled="dialogTitle === '查看'">
  30. <el-radio label="1" value="1">男</el-radio>
  31. <el-radio label="2" value="2">女</el-radio>
  32. </el-radio-group>
  33. </el-form-item>
  34. <el-form-item label="手机号码:" prop="phonenumber">
  35. <el-input
  36. v-model="form.phonenumber"
  37. :disabled="dialogTitle === '查看'"
  38. ></el-input>
  39. </el-form-item>
  40. <el-form-item label="密码" prop="password" v-if="dialogTitle == '新增'">
  41. <el-input
  42. v-model="form.password"
  43. :disabled="dialogTitle === '查看'"
  44. ></el-input>
  45. </el-form-item>
  46. <!-- <el-form-item
  47. label="创建时间:"
  48. prop="createTime"
  49. style="margin-top: 0px"
  50. >
  51. <el-date-picker
  52. v-model="form.createTime"
  53. width="100%"
  54. type="datetime"
  55. placeholder="选择日期时间"
  56. :disabled="dialogTitle === '查看'"
  57. ></el-date-picker>
  58. </el-form-item> -->
  59. <el-form-item label="角色名称:" prop="roleName">
  60. <!-- <el-input v-model="form.roleName"></el-input> -->
  61. <el-select
  62. v-model="form.roleId"
  63. placeholder="请选择"
  64. clearable
  65. :disabled="dialogTitle === '查看'"
  66. >
  67. <el-option
  68. v-for="(item, index) in roleSelectData"
  69. :key="index"
  70. :label="item.roleName"
  71. :value="item.roleId"
  72. ></el-option>
  73. </el-select>
  74. </el-form-item>
  75. <br />
  76. <br />
  77. <br />
  78. <div style="text-align: right">
  79. <el-button @click="closeDialog(0)">取消</el-button>
  80. <el-button
  81. type="primary"
  82. @click="submitForm('formInfo')"
  83. :disabled="isDisable"
  84. >
  85. 确定
  86. </el-button>
  87. </div>
  88. </el-form>
  89. </el-dialog>
  90. </template>
  91. <script>
  92. import { defineComponent, ref, onMounted, watchEffect } from 'vue'
  93. import * as api from '@/api/systemManage/userManage.js'
  94. import { ElMessage } from 'element-plus'
  95. import { parseTime, validatorPhone } from '@/utils'
  96. export default defineComponent({
  97. name: 'DialogComponent',
  98. emits: ['closeDialog'],
  99. props: {
  100. flag: Boolean,
  101. dialogTitle: String,
  102. itemInfo: Object,
  103. },
  104. setup(props, context) {
  105. context
  106. const dialogVisible = ref(false)
  107. const formInfo = ref(null)
  108. const isDisable = ref(false)
  109. const form = ref([])
  110. const roleSelectData = ref([])
  111. // open(): Dialog弹窗打开之前做的事
  112. const open = () => {
  113. form.value = props.itemInfo.value
  114. console.log('form.value')
  115. console.log(form.value)
  116. }
  117. const options = [
  118. {
  119. value: '选项1',
  120. label: '站点一',
  121. },
  122. {
  123. value: '选项2',
  124. label: '站点二',
  125. },
  126. {
  127. value: '选项3',
  128. label: '站点三',
  129. },
  130. {
  131. value: '选项4',
  132. label: '站点四',
  133. },
  134. {
  135. value: '选项5',
  136. label: '站点五',
  137. },
  138. ]
  139. // 关闭弹框
  140. const closeDialog = () => {
  141. resetForm()
  142. context.emit('closeDialog', false)
  143. dialogVisible.value = false
  144. }
  145. watchEffect((fn, options) => {
  146. fn, options
  147. dialogVisible.value = props.flag
  148. })
  149. const roleValid = (rule, value, callback) => {
  150. rule
  151. if (value.length === 0) {
  152. callback(new Error('角色不能为空'))
  153. } else {
  154. callback()
  155. }
  156. }
  157. // 保存-修改操作
  158. const submitForm = () => {
  159. form.value.createTime = parseTime(new Date())
  160. formInfo.value.validate((valid) => {
  161. if (valid) {
  162. isDisable.value = true
  163. setTimeout(() => {
  164. isDisable.value = false //点击一次时隔两秒后才能再次点击
  165. }, 2000)
  166. form.value.roleIds = [form.value.roleId] //roleIds 传给后台
  167. if (props.dialogTitle === '新增') {
  168. api.userAdd(form.value).then((requset) => {
  169. if (requset.status === 'SUCCESS') {
  170. ElMessage.success({
  171. message: '新增成功',
  172. type: 'success',
  173. })
  174. setTimeout(() => {
  175. isDisable.value = false //点击一次时隔两秒后才能再次点击
  176. }, 2000)
  177. closeDialog()
  178. } else {
  179. alert(requset.msg)
  180. // ElMessage.error(requset.msg)
  181. }
  182. })
  183. } else {
  184. api.userUpdate(form.value).then((requset) => {
  185. if (requset.status === 'SUCCESS') {
  186. ElMessage.success({
  187. message: '修改成功',
  188. type: 'success',
  189. })
  190. closeDialog()
  191. } else {
  192. ElMessage.error(requset.msg)
  193. }
  194. })
  195. }
  196. } else {
  197. console.log('error submit!!')
  198. return false
  199. }
  200. })
  201. }
  202. //角色下拉请求
  203. function optionselect() {
  204. api.optionselect().then((requset) => {
  205. if (requset.status === 'SUCCESS') {
  206. console.log('requset.data')
  207. console.log(requset.data)
  208. roleSelectData.value = requset.data
  209. } else {
  210. ElMessage.error(requset.msg)
  211. }
  212. })
  213. }
  214. function resetForm() {
  215. formInfo.value.resetFields()
  216. }
  217. onMounted(() => {
  218. optionselect()
  219. })
  220. return {
  221. closeDialog,
  222. dialogVisible,
  223. options,
  224. roleValid,
  225. formInfo,
  226. form,
  227. roleSelectData,
  228. open,
  229. submitForm,
  230. resetForm,
  231. isDisable,
  232. rules: {
  233. nickName: [
  234. { required: true, message: '请输入用户名', trigger: 'blur' },
  235. {
  236. min: 2,
  237. message: '用户名长度至少2个字符',
  238. trigger: 'blur',
  239. },
  240. ],
  241. userName: [
  242. { required: true, message: '请输入账号', trigger: 'blur' },
  243. {
  244. max: 10,
  245. message: '账号最多输入 10 个字符',
  246. trigger: 'blur',
  247. },
  248. ],
  249. sex: [{ required: true, message: '请选择性别', trigger: 'change' }],
  250. phonenumber: [
  251. { required: true, message: '请输入手机号码', trigger: 'blur' },
  252. {
  253. validator: validatorPhone,
  254. message: '输入的电话号码不正确',
  255. trigger: 'blur',
  256. },
  257. ],
  258. createTime: [
  259. { required: true, message: '请输入创建时间', trigger: 'change' },
  260. ],
  261. roleId: [
  262. { required: true, message: '请选择角色名称', trigger: 'change' },
  263. ],
  264. password: [
  265. { required: true, message: '请输入密码', trigger: 'blur' },
  266. {
  267. min: 3,
  268. max: 6,
  269. message: '长度在 3 到 6 个字符',
  270. trigger: 'blur',
  271. },
  272. ],
  273. },
  274. }
  275. },
  276. })
  277. </script>
  278. <style scoped lang="scss">
  279. .el-input,
  280. .el-select {
  281. width: 240px;
  282. }
  283. </style>
  284. <style lang="scss">
  285. </style>