|
1 | 1 | <script lang="ts" setup> |
2 | | -import { ref, reactive, onMounted, computed, watch, nextTick } from 'vue' |
| 2 | +import { ref, reactive, onMounted, computed, watch, nextTick, onBeforeUnmount } from 'vue' |
3 | 3 | import { useI18n } from 'vue-i18n' |
4 | 4 | import { datasourceApi } from '@/api/datasource' |
5 | 5 | import icon_upload_outlined from '@/assets/svg/icon_upload_outlined.svg' |
@@ -246,23 +246,40 @@ const save = async (formEl: FormInstance | undefined) => { |
246 | 246 | if (form.value.id) { |
247 | 247 | if (!isEditTable.value) { |
248 | 248 | // only update datasource config info |
249 | | - datasourceApi.update(requestObj).then(() => { |
250 | | - close() |
251 | | - emit('refresh') |
252 | | - }) |
| 249 | + datasourceApi |
| 250 | + .update(requestObj) |
| 251 | + .then(() => { |
| 252 | + close() |
| 253 | + emit('refresh') |
| 254 | + }) |
| 255 | + .finally(() => { |
| 256 | + saveLoading.value = false |
| 257 | + }) |
253 | 258 | } else { |
254 | 259 | // save table and field |
255 | | - datasourceApi.chooseTables(form.value.id, list).then(() => { |
256 | | - close() |
257 | | - emit('refresh') |
258 | | - }) |
| 260 | + datasourceApi |
| 261 | + .chooseTables(form.value.id, list) |
| 262 | + .then(() => { |
| 263 | + close() |
| 264 | + emit('refresh') |
| 265 | + }) |
| 266 | + .finally(() => { |
| 267 | + saveLoading.value = false |
| 268 | + }) |
259 | 269 | } |
260 | 270 | } else { |
261 | 271 | requestObj.tables = list |
262 | | - datasourceApi.add(requestObj).then(() => { |
263 | | - close() |
264 | | - emit('refresh') |
265 | | - }) |
| 272 | + const a = datasourceApi |
| 273 | + .add(requestObj) |
| 274 | + .then(() => { |
| 275 | + close() |
| 276 | + emit('refresh') |
| 277 | + }) |
| 278 | + .finally(() => { |
| 279 | + saveLoading.value = false |
| 280 | + }) |
| 281 | +
|
| 282 | + console.log(a, 'datasourceApi') |
266 | 283 | } |
267 | 284 | } |
268 | 285 | }) |
@@ -319,6 +336,8 @@ const check = () => { |
319 | 336 | }) |
320 | 337 | } |
321 | 338 |
|
| 339 | +onBeforeUnmount(() => (saveLoading.value = false)) |
| 340 | +
|
322 | 341 | const next = async (formEl: FormInstance | undefined) => { |
323 | 342 | if (!formEl) return |
324 | 343 | await formEl.validate((valid) => { |
@@ -459,7 +478,7 @@ defineExpose({ |
459 | 478 |
|
460 | 479 | <template> |
461 | 480 | <div |
462 | | - v-loading="uploadLoading" |
| 481 | + v-loading="uploadLoading || saveLoading" |
463 | 482 | class="model-form" |
464 | 483 | :class="(!isCreate || activeStep === 2) && 'edit-form'" |
465 | 484 | > |
@@ -691,12 +710,7 @@ defineExpose({ |
691 | 710 | <el-button v-show="activeStep === 1 && isCreate" type="primary" @click="next(dsFormRef)"> |
692 | 711 | {{ t('common.next') }} |
693 | 712 | </el-button> |
694 | | - <el-button |
695 | | - v-show="activeStep === 2 || !isCreate" |
696 | | - :loading="saveLoading" |
697 | | - type="primary" |
698 | | - @click="save(dsFormRef)" |
699 | | - > |
| 713 | + <el-button v-show="activeStep === 2 || !isCreate" type="primary" @click="save(dsFormRef)"> |
700 | 714 | {{ t('common.save') }} |
701 | 715 | </el-button> |
702 | 716 | </div> |
|
0 commit comments