index.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <template>
  2. <wrapper
  3. fill
  4. margin
  5. padding
  6. background
  7. >
  8. <schema-table
  9. ref="table"
  10. row-key="id"
  11. :schema="schema"
  12. />
  13. <confirm-dialog
  14. ref="editDialog"
  15. title="新增租户"
  16. @confirm="onSave"
  17. >
  18. <div class="c-grid-form u-align-self--center">
  19. <span class="c-grid-form__label u-required">名称</span>
  20. <el-input
  21. v-model.trim="tenant.remark"
  22. placeholder="最多30个字符"
  23. maxlength="30"
  24. clearable
  25. />
  26. <span class="c-grid-form__label u-required">标识</span>
  27. <div
  28. class="has-info"
  29. data-info="仅可包含数字、字母和-_符号"
  30. >
  31. <el-input
  32. v-model.trim="tenant.name"
  33. placeholder="最多30个字符"
  34. maxlength="30"
  35. clearable
  36. />
  37. </div>
  38. </div>
  39. </confirm-dialog>
  40. </wrapper>
  41. </template>
  42. <script>
  43. import {
  44. getTenants,
  45. addTenant,
  46. updateGroup,
  47. deleteTenant
  48. } from '@/api/user'
  49. export default {
  50. name: 'Tenant',
  51. data () {
  52. return {
  53. schema: {
  54. condition: { name: '' },
  55. list: getTenants,
  56. buttons: [
  57. { type: 'add', on: this.onAdd }
  58. ],
  59. filters: [
  60. { key: 'name', type: 'search', placeholder: '租户标识' }
  61. ],
  62. cols: [
  63. { label: '租户名称', render: (data, h) => h('edit-input', {
  64. props: {
  65. value: `${data.remark}`
  66. },
  67. on: { edit: val => this.onEditName(data, val) }
  68. }), 'class-name': 'c-edit-column' },
  69. { prop: 'name', label: '租户标识' },
  70. { type: 'invoke', render: [
  71. { label: '删除', on: this.onDel }
  72. ] }
  73. ]
  74. },
  75. tenant: {}
  76. }
  77. },
  78. methods: {
  79. onAdd () {
  80. this.tenant = {
  81. name: '',
  82. remark: ''
  83. }
  84. this.$refs.editDialog.show()
  85. },
  86. onEditName (tenant, { newVal, oldVal }) {
  87. if (newVal === oldVal) {
  88. return
  89. }
  90. if (!newVal) {
  91. this.$message({
  92. type: 'warning',
  93. message: '请填写租户名称'
  94. })
  95. return
  96. }
  97. tenant.remark = newVal
  98. updateGroup({
  99. id: tenant.id,
  100. name: tenant.name,
  101. remark: newVal
  102. }).catch(() => {
  103. tenant.remark = oldVal
  104. })
  105. },
  106. onSave (done) {
  107. const { name, remark } = this.tenant
  108. if (!name) {
  109. this.$message({
  110. type: 'warning',
  111. message: '请填写租户标识'
  112. })
  113. return
  114. }
  115. if (!/^[\da-zA-Z\-_]+$/.test(name)) {
  116. this.$message({
  117. type: 'warning',
  118. message: '租户标识格式错误'
  119. })
  120. return
  121. }
  122. if (!remark) {
  123. this.$message({
  124. type: 'warning',
  125. message: '请填写租户名称'
  126. })
  127. return
  128. }
  129. addTenant(this.tenant).then(() => {
  130. done()
  131. this.$refs.table.pageTo(1)
  132. })
  133. },
  134. onDel (tenant) {
  135. this.$confirm(
  136. `删除租户 ${tenant.remark}?`,
  137. '操作确认',
  138. { type: 'warning' }
  139. ).then(() => {
  140. const loading = this.$showLoading()
  141. deleteTenant(tenant)
  142. .then(() => {
  143. this.$message({
  144. type: 'success',
  145. message: '删除成功'
  146. })
  147. this.$refs.table.decrease(1)
  148. })
  149. .finally(() => {
  150. this.$closeLoading(loading)
  151. })
  152. })
  153. }
  154. }
  155. }
  156. </script>