index.vue 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <template>
  2. <el-select
  3. v-model="selectedId"
  4. placeholder="选择租户"
  5. clearable
  6. filterable
  7. size="small"
  8. style="width: 160px"
  9. @change="handleChange"
  10. >
  11. <el-option
  12. v-for="item in tenantList"
  13. :key="item.id"
  14. :label="item.tenantName"
  15. :value="item.id"
  16. />
  17. </el-select>
  18. </template>
  19. <script>
  20. import { tenantList } from '@/api/tenant/tenant'
  21. import { listCompanyOptions } from '@/api/admin/sysCompany'
  22. export default {
  23. name: 'InlineTenantSelector',
  24. props: {
  25. /** admin=总后台(/admin/company/options),saas=租户总后台(/tenant/tenant/tenantList) */
  26. mode: {
  27. type: String,
  28. default: 'saas'
  29. }
  30. },
  31. data() {
  32. return {
  33. tenantList: [],
  34. selectedId: null
  35. }
  36. },
  37. created() {
  38. // 从Vuex恢复上次选择
  39. const saved = this.$store.getters.selectedCompanyId
  40. if (saved) {
  41. this.selectedId = saved
  42. }
  43. this.loadTenants()
  44. },
  45. methods: {
  46. loadTenants() {
  47. const loader = this.mode === 'admin'
  48. ? listCompanyOptions().then(response => response.data || [])
  49. : tenantList().then(response => response.rows || response.data || [])
  50. loader.then(list => {
  51. this.tenantList = list
  52. }).catch(() => {
  53. this.tenantList = []
  54. })
  55. },
  56. handleChange(val) {
  57. this.$store.dispatch('tenant/setCompanyId', val || null)
  58. const item = val ? this.tenantList.find(t => t.id === val) : null
  59. this.$emit('change', val || null, item)
  60. },
  61. /** 供父组件「重置」时清空租户选择 */
  62. reset() {
  63. this.selectedId = null
  64. this.$store.dispatch('tenant/setCompanyId', null)
  65. this.$emit('change', null, null)
  66. }
  67. }
  68. }
  69. </script>