common.vue 3.2 KB

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