You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

222 lines
5.2 KiB

  1. <script setup>
  2. import { ref, onMounted } from "vue";
  3. import {
  4. getAnnouncementAPI,
  5. qsArpAamClickAPI,
  6. getMarketAndCodeAPI,
  7. } from "../api/AIxiaocaishen";
  8. import back from "../assets/img/Feedback/back.png";
  9. import { useDataStore } from "@/store/dataList.js";
  10. const dataStore = useDataStore();
  11. import { useChatStore } from "../store/chat";
  12. const chatStore = useChatStore();
  13. const marketList = ref({
  14. usa: "美股",
  15. cn: "A股",
  16. hk: "港股",
  17. sg: "新加坡股",
  18. my: "马股",
  19. th: "泰股",
  20. vi: "越南股",
  21. can: "加拿大股",
  22. });
  23. const codeList = ref([
  24. { market: "美股", code: [] },
  25. { market: "A股", code: [] },
  26. { market: "港股", code: [] },
  27. { market: "新加坡股", code: [] },
  28. { market: "马股", code: [] },
  29. { market: "泰股", code: [] },
  30. { market: "越南股", code: [] },
  31. { market: "加拿大股", code: [] },
  32. ]);
  33. const getMarketAndCode = async () => {
  34. const result = await getMarketAndCodeAPI();
  35. // console.log(result.data, "MarketAndCode");
  36. for (let i = 0; i < result.data.length; i++) {
  37. const item = result.data[i];
  38. const market = marketList.value[item.market];
  39. const codeLists = item.code.split(",");
  40. // console.log(codeLists, "codeLists",market,'market');
  41. const targetMarket = codeList.value.find((item) => item.market == market);
  42. if (targetMarket) {
  43. targetMarket.code = codeLists;
  44. // console.log(targetMarket, "targetMarket");
  45. } else {
  46. console.log("未找到对应的市场");
  47. }
  48. }
  49. };
  50. const announcementVideo = ref({});
  51. const showVideoContainer = ref(false);
  52. const getAnnouncement = async () => {
  53. const result = await getAnnouncementAPI();
  54. // console.log(result.data, "result.data");
  55. // 检查返回的data是否为空数组
  56. if (result.data && result.data.length > 0) {
  57. announcementVideo.value.url = result.data[0].url;
  58. announcementVideo.value.img = result.data[0].img;
  59. showVideoContainer.value = true;
  60. const click = await qsArpAamClickAPI({
  61. token: localStorage.getItem("localToken"),
  62. id: result.data[0].id,
  63. });
  64. // console.log(click);
  65. } else {
  66. showVideoContainer.value = false;
  67. }
  68. // console.log(announcementVideo.value, "announcementVideo");
  69. };
  70. const handleVideoPlay = () => {
  71. console.log("视频开始播放");
  72. // 可以在这里添加播放统计逻辑
  73. };
  74. const clickCode = (code) => {
  75. console.log(code);
  76. chatStore.announcementMsg = code;
  77. console.log("chatStore.announcementMsg", chatStore.announcementMsg);
  78. dataStore.isFeedback = false;
  79. };
  80. const feedbackBack = () => {
  81. dataStore.isFeedback = false;
  82. };
  83. onMounted(() => {
  84. getAnnouncement();
  85. getMarketAndCode();
  86. });
  87. </script>
  88. <template>
  89. <!-- <div>
  90. <div>
  91. <img :src="back" alt="返回按钮" class="backImg" @click="feedbackBack" />
  92. </div>
  93. </div> -->
  94. <div class="main-wrapper">
  95. <div v-if="showVideoContainer" class="video-container">
  96. <video
  97. ref="videoPlayer"
  98. :poster="announcementVideo.img"
  99. :src="announcementVideo.url"
  100. controls
  101. class="video-player"
  102. @play="handleVideoPlay"
  103. >
  104. Your browser does not support the video tag.
  105. </video>
  106. </div>
  107. <!-- 一段文字水平居中宽度为500px -->
  108. <div class="announcement">
  109. <p class="announcementItem">各位AI小财神的用户,大家好!</p>
  110. <p class="announcementItem">
  111. 试运行期间,用户可在AI小财神中查看全市场数据,每个市场可查看一定数量的股票.
  112. </p>
  113. <p class="announcementItem">以下为各个市场可以查看的股票</p>
  114. <!-- <p class="announcementItem">历软件云版静态市场一致!</p>
  115. <p class="announcementItem">特此公告!</p> -->
  116. <div
  117. v-for="(item, index) in codeList"
  118. :key="index"
  119. class="announcementItem"
  120. >
  121. <div class="announcementItem">
  122. {{ item.market }}
  123. <br>
  124. <span
  125. class="codeItem"
  126. v-for="(code, index) in item.code"
  127. :key="index"
  128. >
  129. <span v-if="index != 0" class="codeItem"> </span>
  130. <span @click="clickCode(code)" class="code">
  131. {{ code }}
  132. </span>
  133. </span>
  134. </div>
  135. </div>
  136. </div>
  137. </div>
  138. </template>
  139. <style scoped>
  140. .backImg {
  141. width: 40px;
  142. height: 40px;
  143. margin-left: 10px;
  144. }
  145. .main-wrapper {
  146. height: 100%;
  147. display: flex;
  148. flex-direction: column;
  149. overflow-y: auto;
  150. }
  151. .video-container {
  152. max-width: 800px;
  153. /* 从 800px 改为百分比 */
  154. width: 90%;
  155. margin: 20px auto;
  156. border-radius: 8px;
  157. overflow: hidden;
  158. box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
  159. flex-shrink: 0;
  160. }
  161. .video-player {
  162. width: 100%;
  163. aspect-ratio: 16/9;
  164. background-color: #000;
  165. object-fit: contain;
  166. /* 从 cover 改为 contain */
  167. }
  168. /* 添加移动端适配 */
  169. @media (max-width: 768px) {
  170. .video-container {
  171. margin: 10px auto;
  172. border-radius: 4px;
  173. }
  174. .announcement {
  175. max-width: 90%;
  176. font-size: 14px;
  177. }
  178. }
  179. .announcement {
  180. margin: 0px 10%;
  181. font-size: 20px;
  182. font-weight: bold;
  183. }
  184. .announcementItem {
  185. margin-bottom: 10px;
  186. color: white;
  187. }
  188. p {
  189. color: white;
  190. }
  191. .codeItem {
  192. color: #4591e7;
  193. }
  194. .code {
  195. cursor: pointer;
  196. white-space: nowrap;
  197. }
  198. </style>