common.vue 3.5 KB

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