index.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <template>
  2. <div class='app-container'>
  3. <el-button type="primary" icon="el-icon-plus" size="mini" @click="dialogVisible = true">新增</el-button>
  4. <!-- 列表 -->
  5. <el-table :data="tableData" v-loading="loading">
  6. <el-table-column label="账号ID" align="center" prop="id" />
  7. <el-table-column label="账号名称" align="center" prop="name" />
  8. <el-table-column label="手机号" align="center" prop="phone" />
  9. <el-table-column label="性别" align="center" prop="sex" :formatter="sexFormatter" />
  10. <el-table-column label="创建时间" align="center" prop="createTime" />
  11. <el-table-column label="操作" align="center">
  12. <template slot-scope="scope">
  13. <el-button type="delete" @click="getDelete(scope.row)">删除</el-button>
  14. </template>
  15. </el-table-column>
  16. </el-table>
  17. <pagination v-show="total > 0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
  18. @pagination="getList" />
  19. <!-- 弹窗 -->
  20. <el-dialog :visible.sync="dialogVisible" title="新增" width="500px" :before-close="cancel">
  21. <el-form :model="dialogForm" ref="dialogForm" :rules="rules" label-width="100px">
  22. <el-form-item label="账号名称:" prop="name">
  23. <el-input v-model="dialogForm.name" placeholder="请输入账号名称" />
  24. </el-form-item>
  25. <el-form-item label="手机号:" prop="phone">
  26. <el-input v-model="dialogForm.phone" placeholder="请输入手机号" />
  27. </el-form-item>
  28. <el-form-item label="性别:" prop="sex">
  29. <el-radio-group v-model="dialogForm.sex">
  30. <el-radio v-for="item in sexOptions.slice(0, 2)" :key="item.value" :label="item.value">
  31. {{ item.label }}
  32. </el-radio>
  33. </el-radio-group>
  34. </el-form-item>
  35. </el-form>
  36. <div slot="footer">
  37. <el-button @click="cancel">取消</el-button>
  38. <el-button type="primary" @click="getSubmit">确定</el-button>
  39. </div>
  40. </el-dialog>
  41. </div>
  42. </template>
  43. <script>
  44. import { list, submit, remove } from '@/api/user/store'
  45. import { sexMixin } from '@/mixin/index'
  46. export default {
  47. mixins: [sexMixin],
  48. data() {
  49. const checkPhone = (rule, value, callback) => {
  50. if (!value) {
  51. return callback(new Error('请输入手机号'))
  52. } else {
  53. const reg = /^1[3-9][0-9]\d{8}$/
  54. if (reg.test(value)) {
  55. callback()
  56. } else {
  57. return callback(new Error('请输入正确的手机号'))
  58. }
  59. }
  60. }
  61. return {
  62. // 遮罩层
  63. loading: false,
  64. // 表单
  65. form: {
  66. pageNum: 1,
  67. pageSize: 10
  68. },
  69. // 列表
  70. tableData: [],
  71. // 总数据
  72. total: 0,
  73. // 弹窗
  74. dialogVisible: false,
  75. // 弹窗表单
  76. dialogForm: {},
  77. // 校验
  78. rules: {
  79. name: [{
  80. required: true, message: '请输入账户名称', trigger: 'blur'
  81. }],
  82. phone: [{
  83. required: true, validator: checkPhone, trigger: 'blur'
  84. }],
  85. sex: [{
  86. required: true, message: '请选择性别', trigger: 'change'
  87. }]
  88. }
  89. }
  90. },
  91. mounted() {
  92. this.getList()
  93. },
  94. methods: {
  95. // 列表
  96. getList() {
  97. this.loading = true
  98. list(this.form).then(res => {
  99. if (res.code === 0) {
  100. this.tableData = res.data.records
  101. this.total = res.data.total
  102. this.loading = false
  103. }
  104. })
  105. },
  106. // 取消
  107. cancel() {
  108. this.$refs.dialogForm.resetFields()
  109. this.dialogForm = {}
  110. this.dialogVisible = false
  111. },
  112. // 提交
  113. getSubmit() {
  114. this.$refs.dialogForm.validate((valid) => {
  115. if (valid) {
  116. submit(this.dialogForm).then(res => {
  117. if (res.code === 0) {
  118. this.$message.success('提交成功!')
  119. this.cancel()
  120. this.getList()
  121. }
  122. })
  123. } else {
  124. return false
  125. }
  126. })
  127. },
  128. // 删除
  129. getDelete(row) {
  130. this.$confirm(`是否删除${row.name}?`, '提示', {
  131. type: 'warning'
  132. }).then(() => {
  133. remove(row.id).then(res => {
  134. if (res.code === 0) {
  135. this.$message.success('删除成功!')
  136. this.getList()
  137. }
  138. })
  139. }).catch(() => { })
  140. },
  141. // 字典翻译
  142. sexFormatter(row) {
  143. return this.selectDictLabel(this.sexOptions, row.sex)
  144. }
  145. }
  146. }
  147. </script>