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.

212 lines
4.9 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 getAnnouncement = async () => {
  52. const result = await getAnnouncementAPI();
  53. // console.log(result.data, "result.data");
  54. announcementVideo.value.url = result.data[0].url;
  55. announcementVideo.value.img = result.data[0].img;
  56. const click = await qsArpAamClickAPI({
  57. token: localStorage.getItem("localToken"),
  58. id: result.data[0].id,
  59. });
  60. // console.log(click);
  61. // console.log(announcementVideo.value, "announcementVideo");
  62. };
  63. const handleVideoPlay = () => {
  64. console.log("视频开始播放");
  65. // 可以在这里添加播放统计逻辑
  66. };
  67. const clickCode = (code) => {
  68. console.log(code);
  69. chatStore.announcementMsg = code;
  70. console.log("chatStore.announcementMsg", chatStore.announcementMsg);
  71. dataStore.isFeedback = false;
  72. };
  73. const feedbackBack = () => {
  74. dataStore.isFeedback = false;
  75. };
  76. onMounted(() => {
  77. getAnnouncement();
  78. getMarketAndCode();
  79. });
  80. </script>
  81. <template>
  82. <div>
  83. <div>
  84. <img :src="back" alt="返回按钮" class="backImg" @click="feedbackBack" />
  85. </div>
  86. </div>
  87. <div class="main-wrapper">
  88. <div class="video-container">
  89. <video
  90. ref="videoPlayer"
  91. :poster="announcementVideo.img"
  92. :src="announcementVideo.url"
  93. controls
  94. class="video-player"
  95. @play="handleVideoPlay"
  96. >
  97. Your browser does not support the video tag.
  98. </video>
  99. </div>
  100. <!-- 一段文字水平居中宽度为500px -->
  101. <div class="announcement">
  102. <p class="announcementItem">各位AI小财神的用户,大家好!</p>
  103. <p class="announcementItem">
  104. 试运行期间,用户可在AI小财神中查看全市场数据,每个市场可查看20只股票.
  105. </p>
  106. <p class="announcementItem">以下为各个市场可以查看的股票</p>
  107. <!-- <p class="announcementItem">历软件云版静态市场一致!</p>
  108. <p class="announcementItem">特此公告!</p> -->
  109. <div
  110. v-for="(item, index) in codeList"
  111. :key="index"
  112. class="announcementItem"
  113. >
  114. <div class="announcementItem">
  115. {{ item.market }}
  116. <span
  117. class="codeItem"
  118. v-for="(code, index) in item.code"
  119. :key="index"
  120. >
  121. <span v-if="index != 0" class="codeItem"> </span>
  122. <span @click="clickCode(code)" class="code">
  123. {{ code }}
  124. </span>
  125. </span>
  126. </div>
  127. </div>
  128. </div>
  129. </div>
  130. </template>
  131. <style scoped>
  132. .backImg {
  133. width: 40px;
  134. height: 40px;
  135. margin-left: 10px;
  136. }
  137. .main-wrapper {
  138. height: 100%;
  139. display: flex;
  140. flex-direction: column;
  141. overflow-y: auto;
  142. }
  143. .video-container {
  144. max-width: 800px;
  145. /* 从 800px 改为百分比 */
  146. width: 90%;
  147. margin: 20px auto;
  148. border-radius: 8px;
  149. overflow: hidden;
  150. box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
  151. flex-shrink: 0;
  152. }
  153. .video-player {
  154. width: 100%;
  155. aspect-ratio: 16/9;
  156. background-color: #000;
  157. object-fit: contain;
  158. /* 从 cover 改为 contain */
  159. }
  160. /* 添加移动端适配 */
  161. @media (max-width: 768px) {
  162. .video-container {
  163. margin: 10px auto;
  164. border-radius: 4px;
  165. }
  166. .announcement {
  167. max-width: 90%;
  168. font-size: 14px;
  169. }
  170. }
  171. .announcement {
  172. margin: 20px 10%;
  173. font-size: 20px;
  174. font-weight: bold;
  175. }
  176. .announcementItem {
  177. margin-bottom: 10px;
  178. color: white;
  179. }
  180. p {
  181. color: white;
  182. }
  183. .codeItem {
  184. color: #4591e7;
  185. }
  186. .code {
  187. cursor: pointer;
  188. }
  189. </style>