common.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <template>
  2. <CommonRoot class="main">
  3. <LoadingPage v-if="loading" />
  4. <FlexCol :padding="30">
  5. <DynamicForm
  6. ref="formRef"
  7. :formDefine="formDefine"
  8. :formProps="{
  9. labelPosition: 'top',
  10. labelAlign: 'left',
  11. }"
  12. :formGlobalParams="querys"
  13. />
  14. <Height :height="20" />
  15. <Button type="primary" @click="submit">提交</Button>
  16. </FlexCol>
  17. </CommonRoot>
  18. </template>
  19. <script setup lang="ts">
  20. import { ref } from 'vue';
  21. import { showError } from '@/common/composeabe/ErrorDisplay';
  22. import { useLoadQuerys } from '@/common/composeabe/LoadQuerys';
  23. import { getVillageInfoForm } from './forms';
  24. import { backAndCallOnPageBack } from '@imengyu/imengyu-utils/dist/uniapp/PageAction';
  25. import { RequestApiError } from '@imengyu/imengyu-utils/dist/request';
  26. import VillageInfoApi, { CommonInfoModel } from '@/api/inhert/VillageInfoApi';
  27. import DynamicForm from '@/components/dynamic/DynamicForm.vue';
  28. import LoadingPage from '@/components/display/loading/LoadingPage.vue';
  29. import Button from '@/components/basic/Button.vue';
  30. import CommonRoot from '@/components/dialog/CommonRoot.vue';
  31. import FlexCol from '@/components/layout/FlexCol.vue';
  32. import type { FormDefine, FormExport } from '@/components/dynamic';
  33. import Height from '@/components/layout/space/Height.vue';
  34. const popupRef = ref();
  35. const loading = ref(false);
  36. const formRef = ref<FormExport>();
  37. const formDefine = ref<FormDefine>();
  38. async function submit() {
  39. if (!formRef.value)
  40. return;
  41. try {
  42. const data = await formRef.value.submitForm<CommonInfoModel>();
  43. if (!data)
  44. return;
  45. loading.value = true;
  46. data.type = querys.value.subId;
  47. await VillageInfoApi.updateInfo(
  48. querys.value.subType,
  49. querys.value.villageId,
  50. querys.value.villageVolunteerId,
  51. data,
  52. );
  53. popupRef.value.open();
  54. } catch (e) {
  55. showError(e);
  56. } finally {
  57. loading.value = false;
  58. }
  59. }
  60. function backPrev(needRefresh: boolean) {
  61. backAndCallOnPageBack('list', {
  62. needRefresh,
  63. });
  64. }
  65. const { querys } = useLoadQuerys({
  66. villageId: 0,
  67. villageVolunteerId: 0,
  68. subType: '',
  69. subId: 0,
  70. id: 0,
  71. }, async (querys) => {
  72. loading.value = true;
  73. if (!formRef.value)
  74. return;
  75. let formData = undefined;
  76. try {
  77. const [model, forms] = getVillageInfoForm(querys.subType, querys.subId);
  78. formRef.value.initFormData(() => new model());
  79. formDefine.value = forms;
  80. if (querys.id >= 0)
  81. formData = await VillageInfoApi.getInfo(
  82. querys.subType,
  83. querys.subId,
  84. querys.villageId,
  85. querys.villageVolunteerId,
  86. querys.id,
  87. model,
  88. );
  89. } catch (e) {
  90. if (!(e instanceof RequestApiError && e.errorMessage.startsWith('请完成')))
  91. showError(e, undefined, () => backPrev(false));
  92. } finally {
  93. loading.value = false;
  94. }
  95. if (formData) {
  96. formRef.value.loadFormData(formData);
  97. }
  98. });
  99. </script>