data-source.vue 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <template>
  2. <hc-new-dialog v-model="isShow" title="租户数据源配置" widths="400px" is-footer-center @close="dialogClose">
  3. <el-form ref="formRef" :model="formModel" :rules="formRules" label-position="left" label-width="auto">
  4. <el-form-item label="数据源:" prop="datasourceId">
  5. <el-select v-model="formModel.datasourceId" placeholder="请选择数据源" filterable block>
  6. <el-option v-for="item in sourceList" :key="item.id" :label="item.name" :value="item.id" />
  7. </el-select>
  8. </el-form-item>
  9. </el-form>
  10. <template #footer>
  11. <el-button hc-btn @click="dialogClose">取消</el-button>
  12. <el-button hc-btn type="primary" :loading="submitLoading" @click="dialogSubmit">提交</el-button>
  13. </template>
  14. </hc-new-dialog>
  15. </template>
  16. <script setup>
  17. import { ref, watch } from 'vue'
  18. import { deepClone, getArrValue } from 'js-fast-way'
  19. import mainApi from '~api/system/tenant'
  20. import { get } from '~api'
  21. const props = defineProps({
  22. info: {
  23. type: Object,
  24. default: () => ({}),
  25. },
  26. })
  27. //事件
  28. const emit = defineEmits(['finish'])
  29. //双向绑定
  30. // eslint-disable-next-line no-undef
  31. const isShow = defineModel('modelValue', {
  32. default: false,
  33. })
  34. //监听可否编辑
  35. const dataInfo = ref(props.info)
  36. watch(() => props.info, (data) => {
  37. dataInfo.value = data
  38. }, { immediate: true, deep: true })
  39. //监听显示
  40. watch(isShow, (val) => {
  41. if (val) {
  42. initFormData()
  43. }
  44. })
  45. //菜单表单
  46. const formRef = ref(null)
  47. const formModel = ref({})
  48. const formRules = {
  49. datasourceId: [{ required: true, message: '请选择数据源', trigger: 'change' }],
  50. }
  51. //初始化表单
  52. const sourceList = ref([])
  53. const initFormData = async () => {
  54. submitLoading.value = false
  55. formModel.value = deepClone(dataInfo.value)
  56. //获取数据源列表
  57. const { data } = await get({
  58. url: '/api/blade-develop/datasource/select',
  59. })
  60. sourceList.value = getArrValue(data)
  61. }
  62. //提交表单
  63. const submitLoading = ref(false)
  64. const dialogSubmit = async () => {
  65. submitLoading.value = true
  66. const { error, code, msg } = await mainApi.datasource(formModel.value)
  67. if (!error && code === 200) {
  68. submitLoading.value = false
  69. window?.$message?.success('操作成功')
  70. emit('finish')
  71. dialogClose()
  72. } else {
  73. window?.$message?.error(msg ?? '操作失败')
  74. }
  75. }
  76. //关闭弹窗
  77. const dialogClose = () => {
  78. isShow.value = false
  79. submitLoading.value = false
  80. formModel.value = {}
  81. }
  82. </script>