index.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <template>
  2. <div class="feedback">
  3. <div class="feedbackTop">
  4. <img src="/src/assets/image/logo_4dage.svg" alt="" />
  5. <div class="title">用户反馈</div>
  6. </div>
  7. <div class="submit bg-white">
  8. <mcSubmit class="submitMc" ref="submitMc" :columns="columns" @submit="onSubmit" />
  9. <pcSubmit class="submitPc" ref="submitPc" :columns="columns" @submit="onSubmit" />
  10. </div>
  11. </div>
  12. </template>
  13. <script lang="ts" setup name="HomeSubmit">
  14. // import { showLoadingToast, closeToast } from 'vant';
  15. import { computed, reactive, unref, ref, onMounted } from 'vue';
  16. import { useUserStore } from '/@/store/modules/user';
  17. import { showToast, showSuccessToast } from 'vant';
  18. import mcSubmit from './mcSubmit.vue';
  19. import pcSubmit from './pcSubmit.vue';
  20. import axios from 'axios';
  21. // import useAxiosApi from '/@/utils/useAxiosApi';
  22. // import { Toast } from '@nutui/nutui';
  23. import { getAllByTypeId, feedbackAdd } from '/@/api/feedback';
  24. // import { setLang } from '/@/i18n';
  25. // import { useI18n } from 'vue-i18n';
  26. const emit = defineEmits(['setActive']);
  27. const submitPc = ref(null);
  28. const submitMc = ref(null);
  29. const userStore = useUserStore();
  30. const wxOpenId = computed(() => {
  31. return userStore.getWxOpenId;
  32. });
  33. const columns = reactive({
  34. industryOptionId: [],
  35. softwareOptionId: [],
  36. hardwareOptionId: [],
  37. });
  38. async function onSubmit(formData, setObjId = {}) {
  39. console.log('feedbackAdd', formData);
  40. // return new Promise((resolve) => {
  41. let apiData = {
  42. ...formData,
  43. address: formData.countries ? `${formData.country},${formData.countries}` : formData.country,
  44. problemDescImgs: formData.problemDescImgs.map((ele) => {
  45. return ele.response ? ele.response.data : ele.url;
  46. } ),
  47. solutionImgs: formData.solutionImgs.map((ele) => {
  48. return ele.response ? ele.response.data : ele.url;
  49. } ),
  50. };
  51. const { response } = await feedbackAdd(apiData);
  52. let data = unref(response);
  53. showSuccessToast('提交成功');
  54. formData.problemDesc = '';
  55. formData.problemDescImgs = [];
  56. formData.solution = '';
  57. formData.solutionImgs = [];
  58. formData.hardwareOptionId = '';
  59. formData.softwareOptionId = '';
  60. formData.industryOptionId = '';
  61. formData.nickName = '';
  62. formData.phone = '';
  63. formData.country = '';
  64. formData.address = '';
  65. formData.countries = [];
  66. formData.score = 5;
  67. formData.scoreReason = '';
  68. setObjId.hardwareOptionId = '';
  69. setObjId.softwareOptionId = '';
  70. setObjId.industryOptionId = '';
  71. }
  72. onMounted(async () => {
  73. let industryRes = await getAllByTypeId(1);
  74. columns.industryOptionId = industryRes.data.map((ele) => {
  75. return {
  76. text: ele.nameCn,
  77. label: ele.nameCn,
  78. value: ele.id,
  79. };
  80. });
  81. let hardwareRes = await getAllByTypeId(2);
  82. columns.hardwareOptionId = hardwareRes.data.map((ele) => {
  83. return {
  84. text: ele.nameCn,
  85. label: ele.nameCn,
  86. value: ele.id,
  87. };
  88. });
  89. let softwareRes = await getAllByTypeId(3);
  90. columns.softwareOptionId = softwareRes.data.map((ele) => {
  91. return {
  92. text: ele.nameCn,
  93. label: ele.nameCn,
  94. value: ele.id,
  95. };
  96. });
  97. });
  98. </script>
  99. <style lang="scss" scoped>
  100. .feedback {
  101. background: #e5edf9;
  102. min-height: 100vh;
  103. min-width: 100vw;
  104. padding: 16px;
  105. .submit {
  106. max-width: 1088px;
  107. padding: 64px 48px;
  108. margin: 0 auto;
  109. .submitMc {
  110. display: none;
  111. }
  112. .submitPc {
  113. display: block;
  114. }
  115. }
  116. @media screen and (max-width: 450px) {
  117. ::v-deep .submit {
  118. padding: 24px 0;
  119. .submitPc {
  120. display: none;
  121. }
  122. .submitMc {
  123. display: block;
  124. }
  125. }
  126. }
  127. /* 在屏幕宽度小于 800px 时应用的样式 */
  128. .feedbackTop {
  129. max-width: 1088px;
  130. margin: 0 auto;
  131. padding-top: 14px;
  132. width: 100%;
  133. .logo {
  134. height: 34px;
  135. width: auto;
  136. margin: 32px 0 16px 0;
  137. }
  138. .title {
  139. font-size: 40px;
  140. font-family: Microsoft YaHei, Microsoft YaHei;
  141. font-weight: bold;
  142. color: #042d5c;
  143. line-height: 47px;
  144. letter-spacing: 8px;
  145. text-align: center;
  146. height: 120px;
  147. background: url(../../assets/image/bg_pc.png) no-repeat;
  148. margin-top: 30px;
  149. background-size: 1088px 120px;
  150. }
  151. }
  152. @media screen and (max-width: 450px) {
  153. ::v-deep .feedbackTop {
  154. .title {
  155. margin-top: 32px;
  156. background: url(../../assets/image/bg_mc.png) no-repeat;
  157. background-size: 100% auto;
  158. background-position-y: -14px;
  159. font-size: 24px;
  160. font-family: Source Han Sans CN, Source Han Sans CN;
  161. height: 76px;
  162. font-weight: bold;
  163. color: #042d5c;
  164. line-height: 28px;
  165. }
  166. .submit {
  167. margin: 24px;
  168. }
  169. }
  170. }
  171. }
  172. </style>