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.

899 lines
18 KiB

4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
  1. <template>
  2. <view class="main">
  3. <!-- 顶部状态栏占位 -->
  4. <view class="top" :style="{height:iSMT+'px'}"></view>
  5. <deepExploration_header></deepExploration_header>
  6. <view class="search">
  7. <input v-model="searchName" class="searchInput" type="text" placeholder="请输入股票名称、股票代码"
  8. placeholder-style="color: #A6A6A6; font-size: 22rpx;" />
  9. <image @click="searchStock" class="seachIcon" src="/static/deepExploration-images/search.png"
  10. mode="aspectFill"></image>
  11. </view>
  12. <view class="content">
  13. <view class="select">
  14. <image class="img" :src="navItems[currentIndex].icon" mode=""></image>
  15. <view v-for="(item, index) in navItems" :key="index" class="selectItem"
  16. :class="{ active: currentIndex === index }" @click="handleModel(index)">
  17. <button class="btn"></button>
  18. </view>
  19. </view>
  20. <view class="graphAndTxt">
  21. <view class="graph">
  22. <view class="graph_header">
  23. <view class="left">TESA</view>
  24. <view class="center">
  25. <image class="last" src="/static/deepExploration-images/last.png" mode="aspectFill"></image>
  26. <text>Taewlkj.sejssssssssf</text>
  27. <image class="next" src="/static/deepExploration-images/next.png" mode="aspectFill"></image>
  28. </view>
  29. <view class="right">2025/10/26</view>
  30. </view>
  31. <view class="graph_data">
  32. <text>435.900</text>
  33. <text>22.410</text>
  34. <text>5.120%</text>
  35. </view>
  36. <view class="graph_content">
  37. <view class="charts-box">
  38. <!-- uCharts 蜡烛图组件 -->
  39. <qiun-data-charts type="candle" :opts="opts" :chartData="chartData" :disableScroll="true"
  40. :ontouch="true" :onzoom="true" />
  41. </view>
  42. </view>
  43. </view>
  44. <view class="txt">
  45. <view class="txtHeader">
  46. <image src="/static/deepExploration-images/plus.png" mode="aspectFill"></image>
  47. <text>{{navItems[currentIndex].name}}</text>
  48. </view>
  49. <view class="txtContent">
  50. <view v-if="loading" class="loading">加载中...</view>
  51. <rich-text :nodes="htmlContent"></rich-text>
  52. </view>
  53. </view>
  54. </view>
  55. </view>
  56. <!-- 底部切换栏 -->
  57. <footerBar class="static-footer" :type="type"></footerBar>
  58. </view>
  59. </template>
  60. <script setup>
  61. import {
  62. ref,
  63. onMounted
  64. } from 'vue'
  65. import deepExploration_header from '@/components/deepExploration_header.vue'
  66. import footerBar from '@/components/footerBar.vue'
  67. import {
  68. onLoad
  69. } from '@dcloudio/uni-app'
  70. import {
  71. getModel1First,
  72. getModel1Second,
  73. getModel2First,
  74. getModel2Second,
  75. getModel3First,
  76. getModel3Second,
  77. getModel4First,
  78. getModel4Second,
  79. getModeldefault
  80. } from '/api/deepExploration/deepExploration.js'
  81. import marked from 'marked'; // 引入 marked 库
  82. import hljs from 'highlight.js';
  83. import 'highlight.js/styles/atom-one-dark.css'; // 可替换为其他主题
  84. // 响应式变量定义
  85. const type = ref('deepExploration')
  86. const iSMT = ref(0)
  87. const currentIndex = ref(0)
  88. const navItems = ref([{
  89. name: '主力追踪',
  90. icon: '/static/deepExploration-images/1.png'
  91. },
  92. {
  93. name: '主力雷达',
  94. icon: '/static/deepExploration-images/2.png'
  95. },
  96. {
  97. name: '主力解码',
  98. icon: '/static/deepExploration-images/3.png'
  99. },
  100. {
  101. name: '主力资金流',
  102. icon: '/static/deepExploration-images/4.png'
  103. },
  104. ])
  105. //搜索股票
  106. const searchStock = () => {
  107. console.log('搜索参数:', stockName.value);
  108. if (currentIndex.value == 0) {
  109. handleModel(0)
  110. } else if (currentIndex.value == 1) {
  111. console.log(index);
  112. handleModel(1)
  113. } else if (currentIndex.value == 2) {
  114. console.log(index);
  115. handleModel(2)
  116. } else if (currentIndex.value == 3) {
  117. console.log(index);
  118. handleModel(3)
  119. } else {
  120. uni.showToast({
  121. title: '请选择模块',
  122. icon: 'none',
  123. duration: 2000
  124. })
  125. }
  126. }
  127. //点击四大模块
  128. const handleModel = (index) => {
  129. currentIndex.value = index
  130. if (currentIndex.value == 0) {
  131. console.log(index);
  132. handleTrack()
  133. } else if (currentIndex.value == 1) {
  134. console.log(index);
  135. handleRadar()
  136. } else if (currentIndex.value == 2) {
  137. console.log(index);
  138. handleDecode()
  139. } else if (currentIndex.value == 3) {
  140. console.log(index);
  141. handleCapitalFlow()
  142. }
  143. }
  144. const stockName = ref('')
  145. const searchName = ref('')
  146. const stockCode = ref('')
  147. const language = ref('')
  148. const recordId = ref('')
  149. const parentId = ref('')
  150. const stockId = ref('')
  151. const loading = ref(true);
  152. const error = ref('');
  153. const htmlContent = ref('');
  154. const markdownContent = ref('');
  155. const renderer = new marked.Renderer();
  156. renderer.heading = function(text, level) {
  157. return `<p>${text}</p>`;
  158. };
  159. // 初始化 marked 配置(支持代码高亮)
  160. marked.setOptions({
  161. renderer: new marked.Renderer(),
  162. highlight: null, // 如果需要代码高亮,可以设置适当的函数
  163. langPrefix: "language-",
  164. pedantic: false,
  165. gfm: true,
  166. breaks: false,
  167. sanitize: false,
  168. smartLists: true,
  169. smartypants: false,
  170. xhtml: false,
  171. });
  172. //点击主力追踪
  173. const handleTrack = async () => {
  174. try {
  175. markdownContent.value = '\n## 📊 主力追踪分析:\n\n### 🕵️ 主力行为\n\t1. 📊 该股庄家中长期筹码成本价格为 360.249,短期资金成本价格为 412.577。该股筹码分散,当日筹码成本价格为 444.330。\n\t2. 🔍 近日没有出现主力集中吸筹。\n\t3. 📈 近期主力持仓比例大于散户持仓比例。 当日主力持仓增加。 当日散户持仓减少。\n\n### 📊 空间维度:\n\t- 📉 预测低一值: <font color=\"#13c2c2\">443.092</font> \n - 📈 预测高一值: <font color=\"#ff4d4f\">466.458</font>\n\t- 📉 预测低二值: <font color=\"#13c2c2\">447.354</font>\n\t- 📈 预测高二值: <font color=\"#ff4d4f\">462.514</font>\n\t<font color=\"#722ed1\">AI智能均线空头排列,当前卖盘小于买盘</font>\n\n### 综合作战\n\t\t\t<font color=\"#fa8c16\">当前股票处于安全区,牵牛绳为红色,出现蓝色推进K线。</font>\n\t\t\t<font color=\"#eb2f96\">该股整体趋势相对较强,个股正处于推进上涨的关键阶段。若当前持有该股票,建议继续持有,进行持续跟踪。若当前无该股票,建议持续跟踪,等待适当时机再进行介入。</font>\n\n---\n<font color=\"#8c8c8c\">*该内容由AI生成,仅供参考,投资有风险,请注意甄别。*</font>\n '
  176. htmlContent.value = marked.parse(markdownContent.value);
  177. loading.value = true;
  178. // if(searchName.value){
  179. // }
  180. // const result = await getModel1First({
  181. // content: searchName.value,
  182. // language: "cn",
  183. // marketList: "hk,cn,usa,my,sg,vi,in,gb",
  184. // model: 1
  185. // })
  186. // console.log('result', result);
  187. // if (result.code == 200) {
  188. // stockCode.value = result.data.code
  189. // stockName.value = result.data.name
  190. // recordId.value = result.data.recordId
  191. // parentId.value = result.data.parentId
  192. // stockId.value = result.data.stockId
  193. // language.value = result.data.language
  194. // }else{
  195. // return
  196. // }
  197. // const res = await getModel1Second({
  198. // language: language.value,
  199. // recordId: recordId.value,
  200. // parentId: parentId.value,
  201. // stockId: stockId.value,
  202. // token: 'pCtw6AYK0EHAaIexoFHsbZjtsfEAIhcmwkCFm6uKko8VPfMvyDiODL9v9c0veic9fIpQbvT8zN4sH/Si6Q'
  203. // })
  204. // if (res.code == 200) {
  205. // const rawMarkdown = res.data.markdown;
  206. // const adaptedMarkdown = rawMarkdown.replace(/^### /gm, ''); // 全局替换行首的###
  207. // markdownContent.value = adaptedMarkdown;
  208. // // markdownContent.value = res.data.markdown
  209. // htmlContent.value = marked.parse(markdownContent.value);
  210. // }
  211. // console.log('res', res);
  212. } catch {
  213. error.value = e.message || '加载失败,请重试';
  214. } finally {
  215. loading.value = false;
  216. }
  217. }
  218. //点击主力雷达
  219. const handleRadar = () => {
  220. }
  221. //点击主力解码
  222. const handleDecode = () => {
  223. }
  224. //点击主力资金流
  225. const handleCapitalFlow = () => {
  226. }
  227. const handleDefault = async()=>{
  228. }
  229. // 1. K线图配置
  230. const opts = ref({
  231. rotate: false,
  232. rotateLock: false,
  233. color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4", "#ea7ccc"],
  234. padding: [15, 15, 0, 15],
  235. dataLabel: false,
  236. enableScroll: true,
  237. enableMarkLine: false,
  238. legend: {},
  239. xAxis: {
  240. labelCount: 4,
  241. itemCount: 30,
  242. disableGrid: true,
  243. gridColor: "#CCCCCC",
  244. gridType: "solid",
  245. dashLength: 4,
  246. scrollShow: false,
  247. scrollAlign: "left",
  248. scrollColor: "#A6A6A6",
  249. scrollBackgroundColor: "#EFEBEF",
  250. labelColor: "#8C8C8C",
  251. fontSize: 9
  252. },
  253. yAxis: {
  254. labelColor: "#8C8C8C",
  255. fontSize: 9
  256. },
  257. extra: {
  258. candle: {
  259. color: {
  260. upLine: "#f04864",
  261. upFill: "#f04864",
  262. downLine: "#2fc25b",
  263. downFill: "#2fc25b"
  264. },
  265. average: {
  266. show: false,
  267. name: ["MA5", "MA10", "MA30"],
  268. day: [5, 10, 20],
  269. color: ["#1890ff", "#2fc25b", "#facc14"]
  270. }
  271. },
  272. markLine: {
  273. type: "dash",
  274. dashLength: 5,
  275. data: [{
  276. value: 2150,
  277. lineColor: "#f04864",
  278. showLabel: false
  279. },
  280. {
  281. value: 2350,
  282. lineColor: "#f04864",
  283. showLabel: false
  284. }
  285. ]
  286. },
  287. tooltip: {
  288. showCategory: true
  289. }
  290. }
  291. })
  292. // 2. K线图数据(响应式定义)
  293. const chartData = ref({})
  294. // 获取K线数据函数(直接定义,无需methods)
  295. const getServerData = () => {
  296. // 模拟服务器请求延时
  297. setTimeout(() => {
  298. const res = {
  299. "categories": [
  300. "2025/08/25",
  301. "2025/08/26",
  302. "2025/08/27",
  303. "2025/08/28",
  304. "2025/08/29",
  305. "2025/09/01",
  306. "2025/09/02",
  307. "2025/09/03",
  308. "2025/09/04",
  309. "2025/09/05",
  310. "2025/09/08",
  311. "2025/09/09",
  312. "2025/09/10",
  313. "2025/09/11",
  314. "2025/09/12",
  315. "2025/09/15",
  316. "2025/09/16",
  317. "2025/09/17",
  318. "2025/09/18",
  319. "2025/09/19",
  320. "2025/09/22",
  321. "2025/09/23",
  322. "2025/09/24",
  323. "2025/09/25",
  324. "2025/09/26",
  325. "2025/09/29",
  326. "2025/09/30",
  327. "2025/10/09",
  328. "2025/10/10",
  329. "2025/10/13",
  330. "2025/10/14",
  331. "2025/10/15",
  332. "2025/10/16",
  333. "2025/10/17",
  334. "2025/10/20",
  335. "2025/10/21",
  336. "2025/10/22",
  337. "2025/10/23",
  338. "2025/10/24",
  339. "2025/10/27"
  340. ],
  341. series: [{
  342. "name": "贵州茅台",
  343. "data": [
  344. [
  345. 1470.01,
  346. 1496.0,
  347. 1466.0,
  348. 1499.33
  349. ],
  350. [
  351. 1490.32,
  352. 1474.23,
  353. 1480.01,
  354. 1481.61
  355. ],
  356. [
  357. 1481.88,
  358. 1484.93,
  359. 1448.0,
  360. 1448.0
  361. ],
  362. [
  363. 1447.97,
  364. 1456.1,
  365. 1438.77,
  366. 1446.1
  367. ],
  368. [
  369. 1453.0,
  370. 1482.58,
  371. 1452.0,
  372. 1480.0
  373. ],
  374. [
  375. 1482.2,
  376. 1488.0,
  377. 1465.7,
  378. 1476.1
  379. ],
  380. [
  381. 1478.66,
  382. 1509.0,
  383. 1478.0,
  384. 1491.3
  385. ],
  386. [
  387. 1491.0,
  388. 1503.5,
  389. 1466.0,
  390. 1480.55
  391. ],
  392. [
  393. 1472.0,
  394. 1479.3,
  395. 1460.47,
  396. 1480.66
  397. ],
  398. [
  399. 1471.0,
  400. 1486.97,
  401. 1464.0,
  402. 1483.0
  403. ],
  404. [
  405. 1483.0,
  406. 1506.44,
  407. 1477.5,
  408. 1501.23
  409. ],
  410. [
  411. 1505.0,
  412. 1509.95,
  413. 1493.42,
  414. 1505.0
  415. ],
  416. [
  417. 1506.66,
  418. 1529.95,
  419. 1496.0,
  420. 1522.01
  421. ],
  422. [
  423. 1522.01,
  424. 1526.02,
  425. 1508.5,
  426. 1523.5
  427. ],
  428. [
  429. 1526.0,
  430. 1538.02,
  431. 1510.53,
  432. 1516.0
  433. ],
  434. [
  435. 1515.87,
  436. 1517.48,
  437. 1501.5,
  438. 1515.1
  439. ],
  440. [
  441. 1515.1,
  442. 1520.99,
  443. 1496.21,
  444. 1499.98
  445. ],
  446. [
  447. 1499.99,
  448. 1510.28,
  449. 1490.01,
  450. 1493.0
  451. ],
  452. [
  453. 1492.0,
  454. 1497.8,
  455. 1463.5,
  456. 1467.96
  457. ],
  458. [
  459. 1467.99,
  460. 1475.5,
  461. 1457.01,
  462. 1467.97
  463. ],
  464. [
  465. 1465.09,
  466. 1467.97,
  467. 1450.01,
  468. 1453.35
  469. ],
  470. [
  471. 1450.5,
  472. 1457.5,
  473. 1440.0,
  474. 1447.42
  475. ],
  476. [
  477. 1434.07,
  478. 1456.78,
  479. 1434.07,
  480. 1442.0
  481. ],
  482. [
  483. 1442.83,
  484. 1445.21,
  485. 1436.0,
  486. 1439.0
  487. ],
  488. [
  489. 1441.18,
  490. 1447.11,
  491. 1428.01,
  492. 1435.0
  493. ],
  494. [
  495. 1439.38,
  496. 1469.99,
  497. 1435.0,
  498. 1460.86
  499. ],
  500. [
  501. 1460.0,
  502. 1460.76,
  503. 1440.0,
  504. 1443.99
  505. ],
  506. [
  507. 1436.0,
  508. 1439.38,
  509. 1420.0,
  510. 1436.78
  511. ],
  512. [
  513. 1437.6,
  514. 1439.94,
  515. 1427.5,
  516. 1430.0
  517. ],
  518. [
  519. 1415.7,
  520. 1422.85,
  521. 1415.12,
  522. 1419.2
  523. ],
  524. [
  525. 1429.99,
  526. 1464.0,
  527. 1429.99,
  528. 1451.02
  529. ],
  530. [
  531. 1450.98,
  532. 1463.0,
  533. 1445.08,
  534. 1462.0
  535. ],
  536. [
  537. 1461.92,
  538. 1484.95,
  539. 1458.88,
  540. 1484.91
  541. ],
  542. [
  543. 1483.1,
  544. 1488.0,
  545. 1454.03,
  546. 1455.0
  547. ],
  548. [
  549. 1455.0,
  550. 1469.5,
  551. 1454.88,
  552. 1457.93
  553. ],
  554. [
  555. 1459.0,
  556. 1469.94,
  557. 1455.5,
  558. 1462.26
  559. ],
  560. [
  561. 1462.08,
  562. 1465.73,
  563. 1456.0,
  564. 1458.7
  565. ],
  566. [
  567. 1455.0,
  568. 1468.8,
  569. 1447.2,
  570. 1467.98
  571. ],
  572. [
  573. 1467.95,
  574. 1478.88,
  575. 1449.34,
  576. 1450.0
  577. ],
  578. [
  579. 1440.0,
  580. 1452.49,
  581. 1435.99,
  582. 1440.41
  583. ]
  584. ],
  585. }]
  586. }
  587. // 给响应式变量赋值(需修改.value)
  588. chartData.value = JSON.parse(JSON.stringify(res))
  589. }, 500)
  590. }
  591. // 生命周期钩子:组件挂载后执行(替代onReady)
  592. onMounted(() => {
  593. iSMT.value = uni.getSystemInfoSync().statusBarHeight
  594. getServerData() // 调用数据获取函数
  595. })
  596. // 页面加载时执行
  597. onLoad((e) => {
  598. if (e.index) {
  599. currentIndex.value = e.index - 1
  600. console.log('模块:', currentIndex.value)
  601. }
  602. if (e.stockName) {
  603. stockName.value = e.stockName
  604. console.log('股票名称:', stockName.value)
  605. }
  606. })
  607. </script>
  608. <style scoped lang="scss">
  609. .main {
  610. width: 100%;
  611. min-height: 100vh;
  612. background-color: #fff;
  613. padding-bottom: 120rpx;
  614. .search {
  615. position: relative;
  616. display: flex;
  617. align-items: center;
  618. background-color: #F3F3F3;
  619. width: calc(100% - 60rpx);
  620. height: 80rpx;
  621. border-radius: 50rpx;
  622. box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
  623. padding: 0 40rpx;
  624. margin: 15rpx 30rpx 0 30rpx;
  625. .seachIcon {
  626. position: absolute;
  627. right: 50rpx;
  628. width: 32rpx;
  629. height: 32rpx;
  630. }
  631. .searchInput {
  632. color: #111;
  633. }
  634. }
  635. .content {
  636. margin-top: 30rpx;
  637. padding-top: 30rpx;
  638. background-color: rgb(248, 248, 248);
  639. .select {
  640. position: relative;
  641. margin-bottom: -5rpx;
  642. .img {
  643. width: 750rpx;
  644. height: 198rpx;
  645. }
  646. .selectItem {
  647. .btn {
  648. position: absolute;
  649. width: 120rpx;
  650. height: 150rpx;
  651. background-color: transparent;
  652. &::after {
  653. border: none;
  654. }
  655. }
  656. &:nth-of-type(1) .btn {
  657. top: 30rpx;
  658. left: 60rpx;
  659. }
  660. &:nth-of-type(2) .btn {
  661. top: 30rpx;
  662. left: 230rpx;
  663. }
  664. &:nth-of-type(3) .btn {
  665. top: 30rpx;
  666. left: 400rpx;
  667. }
  668. &:nth-of-type(4) .btn {
  669. top: 30rpx;
  670. left: 570rpx;
  671. }
  672. }
  673. }
  674. .graphAndTxt {
  675. background-color: #fff;
  676. border-radius: 50rpx 50rpx 0 0;
  677. padding: 68.6rpx 36.5rpx 0 36.5rpx;
  678. .graph {
  679. border: 1rpx solid #e2e2e2;
  680. border-radius: 30rpx 30rpx 0 0;
  681. .graph_header {
  682. padding: 32rpx 20.5rpx 0 24rpx;
  683. display: flex;
  684. align-items: center;
  685. .left {
  686. color: #333333;
  687. font-family: "PingFang SC";
  688. font-size: 15px;
  689. font-style: normal;
  690. font-weight: 400;
  691. line-height: 15px;
  692. }
  693. .center {
  694. margin-left: 105rpx;
  695. display: flex;
  696. align-items: center;
  697. text {
  698. width: 160rpx;
  699. height: 36rpx;
  700. padding-left: 10rpx;
  701. color: #000000;
  702. white-space: nowrap;
  703. overflow: hidden;
  704. text-overflow: ellipsis;
  705. text-align: center;
  706. font-family: "PingFang SC";
  707. font-size: 18px;
  708. font-style: normal;
  709. font-weight: 500;
  710. line-height: 18px;
  711. }
  712. .last {
  713. width: 15rpx;
  714. height: 20rpx;
  715. margin-right: 30rpx;
  716. }
  717. .next {
  718. width: 15rpx;
  719. height: 20rpx;
  720. margin-left: 30rpx;
  721. }
  722. }
  723. .right {
  724. margin-left: 50rpx;
  725. color: #6a6a6a;
  726. font-family: "PingFang SC";
  727. font-size: 13px;
  728. font-style: normal;
  729. font-weight: 400;
  730. line-height: 15px;
  731. }
  732. }
  733. .graph_data {
  734. display: flex;
  735. padding: 48rpx 24rpx;
  736. text {
  737. display: flex;
  738. color: #25ba5d;
  739. font-family: "PingFang SC";
  740. font-size: 17px;
  741. line-height: 17px;
  742. }
  743. text:nth-child(2) {
  744. margin-left: 120rpx;
  745. }
  746. text:nth-child(3) {
  747. margin-left: 150rpx;
  748. }
  749. }
  750. .graph_content {
  751. .charts-box {
  752. width: 100%;
  753. height: 100%;
  754. }
  755. }
  756. }
  757. .txt {
  758. background-color: #F3F3F3;
  759. margin-top: 48rpx;
  760. border-radius: 30rpx;
  761. .txtHeader {
  762. padding: 30rpx 24rpx;
  763. image {
  764. width: 20rpx;
  765. height: 20rpx;
  766. }
  767. text {
  768. background-color: #FFFFFF;
  769. color: #000000;
  770. padding: 0 22rpx;
  771. border-radius: 22rpx;
  772. font-size: 28rpx;
  773. font-weight: 400;
  774. line-height: 37rpx;
  775. }
  776. }
  777. .txtContent {
  778. min-height: 200rpx;
  779. padding: 20rpx 30rpx;
  780. margin-bottom: 100rpx;
  781. ::v-deep * {
  782. box-sizing: border-box;
  783. width: 100% !important; // 强制所有解析后的标签占满容器宽度
  784. white-space: normal !important; // 取消强制不换行
  785. word-wrap: break-word !important; // 长词/长数字自动换行
  786. }
  787. // 标题样式(确保换行)
  788. ::v-deep h2 {
  789. font-size: 32rpx;
  790. color: #333;
  791. margin: 25rpx 0 15rpx;
  792. line-height: 1.5;
  793. }
  794. // 段落样式(核心换行控制)
  795. ::v-deep p {
  796. font-size: 26rpx;
  797. color: #666;
  798. margin: 15rpx 0;
  799. line-height: 1.8; // 增加行高,提升可读性
  800. text-align: justify; // 两端对齐,避免单侧参差不齐
  801. }
  802. // 列表样式(纵向排列)
  803. ::v-deep ul,
  804. ::v-deep ol {
  805. margin: 15rpx 0 15rpx 30rpx;
  806. }
  807. ::v-deep li {
  808. margin: 10rpx 0;
  809. line-height: 1.6;
  810. }
  811. // 加载状态样式
  812. .loading {
  813. text-align: center;
  814. padding: 50rpx 0;
  815. color: #666;
  816. font-size: 26rpx;
  817. }
  818. }
  819. }
  820. }
  821. }
  822. .static-footer {
  823. position: fixed;
  824. bottom: 0;
  825. width: 100%;
  826. }
  827. }
  828. * {
  829. box-sizing: border-box;
  830. }
  831. </style>