tenant.data.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. import type { VxeCrudSchema } from '@/hooks/web/useVxeCrudSchemas'
  2. import { getTenantPackageList, TenantPackageVO } from '@/api/system/tenantPackage'
  3. import { ComponentOptions } from '@/types/components'
  4. const { t } = useI18n() // 国际化
  5. export const tenantPackageOption: ComponentOptions[] = []
  6. const getTenantPackageOptions = async () => {
  7. const res = await getTenantPackageList()
  8. res.forEach((tenantPackage: TenantPackageVO) => {
  9. tenantPackageOption.push({
  10. key: tenantPackage.id,
  11. value: tenantPackage.id,
  12. label: tenantPackage.name
  13. })
  14. })
  15. return tenantPackageOption
  16. }
  17. getTenantPackageOptions()
  18. const validateName = (rule: any, value: any, callback: any) => {
  19. const reg = /^[a-zA-Z0-9]{4,30}$/
  20. if (value === '') {
  21. callback(new Error('请输入用户名称'))
  22. } else {
  23. console.log(reg.test(rule), 'reg.test(rule)')
  24. if (!reg.test(value)) {
  25. callback(new Error('用户名称由 数字、字母 组成'))
  26. } else {
  27. callback()
  28. }
  29. }
  30. }
  31. const validateMobile = (rule: any, value: any, callback: any) => {
  32. const reg = /^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/
  33. if (value === '') {
  34. callback(new Error('请输入联系手机'))
  35. } else {
  36. if (!reg.test(value)) {
  37. callback(new Error('请输入正确的手机号'))
  38. } else {
  39. callback()
  40. }
  41. }
  42. }
  43. // 表单校验
  44. export const rules = reactive({
  45. name: [required],
  46. packageId: [required],
  47. contactName: [required],
  48. contactMobile: [
  49. required,
  50. {
  51. validator: validateMobile,
  52. trigger: 'blur'
  53. }
  54. ],
  55. accountCount: [required],
  56. expireTime: [required],
  57. username: [
  58. required,
  59. {
  60. min: 4,
  61. max: 30,
  62. trigger: 'blur',
  63. message: '用户名称长度为 4-30 个字符'
  64. },
  65. { validator: validateName, trigger: 'blur' }
  66. ],
  67. password: [
  68. required,
  69. {
  70. min: 4,
  71. max: 16,
  72. trigger: 'blur',
  73. message: '密码长度为 4-16 位'
  74. }
  75. ],
  76. domain: [required],
  77. status: [required]
  78. })
  79. // CrudSchema.
  80. const crudSchemas = reactive<VxeCrudSchema>({
  81. primaryKey: 'id',
  82. primaryTitle: '租户编号',
  83. primaryType: 'id',
  84. action: true,
  85. columns: [
  86. {
  87. title: '租户名称',
  88. field: 'name',
  89. isSearch: true
  90. },
  91. {
  92. title: '租户套餐',
  93. field: 'packageId',
  94. table: {
  95. slots: {
  96. default: 'packageId_default'
  97. }
  98. },
  99. form: {
  100. component: 'Select',
  101. componentProps: {
  102. options: tenantPackageOption
  103. }
  104. }
  105. },
  106. {
  107. title: '联系人',
  108. field: 'contactName',
  109. isSearch: true
  110. },
  111. {
  112. title: '联系手机',
  113. field: 'contactMobile',
  114. isSearch: true
  115. },
  116. {
  117. title: '用户名称',
  118. field: 'username',
  119. isTable: false,
  120. isDetail: false,
  121. isForm: false
  122. },
  123. {
  124. title: '用户密码',
  125. field: 'password',
  126. isTable: false,
  127. isDetail: false,
  128. form: {
  129. component: 'InputPassword'
  130. },
  131. isForm: false
  132. },
  133. {
  134. title: '账号额度',
  135. field: 'accountCount',
  136. table: {
  137. slots: {
  138. default: 'accountCount_default'
  139. }
  140. },
  141. form: {
  142. component: 'InputNumber'
  143. }
  144. },
  145. {
  146. title: '过期时间',
  147. field: 'expireTime',
  148. formatter: 'formatDate',
  149. form: {
  150. component: 'DatePicker',
  151. componentProps: {
  152. type: 'datetime',
  153. valueFormat: 'x'
  154. }
  155. }
  156. },
  157. {
  158. title: '绑定域名',
  159. field: 'domain'
  160. },
  161. {
  162. title: '租户状态',
  163. field: 'status',
  164. dictType: DICT_TYPE.COMMON_STATUS,
  165. dictClass: 'number',
  166. isSearch: true
  167. },
  168. {
  169. title: t('table.createTime'),
  170. field: 'createTime',
  171. formatter: 'formatDate',
  172. isForm: false,
  173. search: {
  174. show: true,
  175. itemRender: {
  176. name: 'XDataTimePicker'
  177. }
  178. }
  179. }
  180. ]
  181. })
  182. export const { allSchemas } = useVxeCrudSchemas(crudSchemas)