index.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <template>
  2. <div class="p-8px bg-white">
  3. <div class="px-4">
  4. <BasicForm @register="registerForm">
  5. <template #title1>
  6. <TypographyTitle :level="4">基础信息</TypographyTitle>
  7. <Divider></Divider>
  8. </template>
  9. <template #address="{ model }">
  10. <JAreaSelect v-model:province="model['province']" v-model:city="model['city']" v-model:area="model['area']"> </JAreaSelect>
  11. </template>
  12. <template #phone="{ model, field }">
  13. <Input v-model:value="model[field]"></Input>
  14. <span class="text-gray">用户拨打商家电话时,拨打的号码为该号码。</span>
  15. </template>
  16. <template #title3>
  17. <TypographyTitle :level="4">视频/图片</TypographyTitle>
  18. <Divider></Divider>
  19. </template>
  20. <template #VideoUpload="{ model, field }">
  21. <uploadVideo v-model:model-value="model[field]"></uploadVideo>
  22. <span class="text-gray">单个视频;时长10s ~ 5分钟以内;宽高比为5:4。单个文件不超过100M;</span>
  23. </template>
  24. <template #title4>
  25. <div class="flex items-center">
  26. <TypographyTitle :level="4">VR实景 </TypographyTitle>
  27. <span class="ml-8 text-gray">找一个能呈现体育馆特点的站点,拍摄前、后,左、右,上、下6张图片。 </span>
  28. </div>
  29. <Divider></Divider>
  30. </template>
  31. <template #formFooter>
  32. <div style="margin: 0 auto">
  33. <a-button type="primary" @click="save" class="mr-2" :loading="isLoading"> 保存 </a-button>
  34. <a-button type="error" @click="back" class="mr-2"> 关闭 </a-button>
  35. </div>
  36. </template>
  37. </BasicForm>
  38. <div class="h-20px"></div>
  39. </div>
  40. </div>
  41. </template>
  42. <script lang="ts" setup>
  43. import { TypographyTitle, Divider, FormItem, Textarea, Input, message } from 'ant-design-vue';
  44. import { BasicForm, useForm, JAreaSelect } from '/@/components/Form/index';
  45. import uploadVideo from '@/components/uploadVideo/index.vue';
  46. import { onUnmounted, ref, watch } from 'vue';
  47. import { useUserStore } from '/@/store/modules/user';
  48. const { userInfo } = storeToRefs(useUserStore());
  49. import { formSchema } from './shopInfo.data';
  50. import { isCertified, queryById, saveOrUpdate } from './shopInfo.api';
  51. import { router } from '/@/router';
  52. import { storeToRefs } from 'pinia';
  53. const [registerForm, { setProps, resetFields, setFieldsValue, updateSchema, validate, clearValidate, getSchemaByField, getFieldsValue }] = useForm({
  54. schemas: formSchema,
  55. showActionButtonGroup: false,
  56. labelWidth: 200,
  57. labelCol: { span: 4 },
  58. wrapperCol: { span: 18 },
  59. });
  60. const isEdit = ref(false);
  61. const isLoading = ref(false);
  62. function back() {
  63. router.back();
  64. }
  65. async function getisCertified() {
  66. const res = await isCertified(userInfo.value?.orgCode);
  67. console.log(res, 'rens ');
  68. if (res) {
  69. setFieldsValue({ isCertified: true });
  70. updateSchema({ field: 'isCertified', componentProps: { disabled: true } });
  71. }
  72. }
  73. getisCertified();
  74. async function getData(id) {
  75. const res = await queryById(id);
  76. console.log(res, 'asdsad');
  77. if (!res.id) return;
  78. const vr = res.vr ? res.vr.split(',') : null;
  79. isEdit.value = true;
  80. setFieldsValue({
  81. ...res,
  82. categoryId: res.categoryId ? res.categoryId.split(',') : null,
  83. Time: res.startTime ? [res.startTime, res.endTime].join(',') : null,
  84. down: vr ? vr[vr.length - 1] : null,
  85. up: vr ? vr[4] : null,
  86. before: vr ? vr[0] : null,
  87. after: vr ? vr[1] : null,
  88. left: vr ? vr[2] : null,
  89. right: vr ? vr[3] : null,
  90. });
  91. }
  92. getData(userInfo.value?.orgCode);
  93. async function save() {
  94. const res = await isCertified(userInfo.value?.orgCode);
  95. if (!res) return message.error('请完成企业认证!');
  96. await validate();
  97. isLoading.value = true;
  98. const form = await getFieldsValue();
  99. console.log(form, 'av');
  100. const obj = {
  101. ...form,
  102. startTime: form.Time ? form.Time.split(',')[0] : '',
  103. endTime: form.Time ? form.Time.split(',')[1] : '',
  104. vr: '',
  105. };
  106. if (form.before || form.after || form.left || form.right || form.up || form.down) {
  107. if (!form.before || !form.after || !form.left || !form.right || !form.up || !form.down) return message.error('请上传完整VR实景');
  108. obj.vr = [form.before, form.after, form.left, form.right, form.up, form.down].join(',');
  109. }
  110. try {
  111. await saveOrUpdate(obj, isEdit.value);
  112. getData(userInfo.value?.orgCode);
  113. isLoading.value = false;
  114. } catch (error) {
  115. isLoading.value = false;
  116. }
  117. }
  118. </script>