From e8bd11a2b39c04f6c22f5bc3e692ca0905ef97b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E6=9D=B0?= Date: Wed, 29 Oct 2025 10:24:04 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E7=9A=84=E6=88=91=E7=9A=84=E8=87=AA=E9=80=89=E7=9A=84=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3js=E6=96=87=E4=BB=B6=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/home/mySelections.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 api/home/mySelections.js diff --git a/api/home/mySelections.js b/api/home/mySelections.js new file mode 100644 index 0000000..e69de29 From 3f05e3926ed32b84c9a66deea2dbe37c3a8f3827 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E6=9D=B0?= Date: Wed, 29 Oct 2025 11:39:30 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E5=B0=81=E8=A3=85=E6=88=91=E7=9A=84?= =?UTF-8?q?=E8=87=AA=E9=80=89=E6=8E=A5=E5=8F=A3=E6=96=87=E4=BB=B6=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/home/mySelections.js | 142 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) diff --git a/api/home/mySelections.js b/api/home/mySelections.js index e69de29..21cabd3 100644 --- a/api/home/mySelections.js +++ b/api/home/mySelections.js @@ -0,0 +1,142 @@ +/** + * 我的自选股相关API接口封装 + * 使用common/util.js中的请求方法 + */ + +import util from '../../common/util.js' + +/** + * 我的自选股API接口类 + */ +class MySelectionsAPI { + + /** + * 判断用户是否存在自选股分组 + * @param {Function} successCallback - 成功回调函数 + * @param {Function} failCallback - 失败回调函数 + * @param {Object} data - 请求参数 + * @returns {void} + */ + static checkExist(successCallback, failCallback = null, data = {}) { + const url = '/api/homePage/userStock/checkExist' + + util.request( + url, + (response) => { + console.log('检查用户自选股分组存在性 - 响应:', response) + if (successCallback && typeof successCallback === 'function') { + successCallback(response) + } + }, + data, + (error) => { + console.error('检查用户自选股分组存在性 - 失败:', error) + if (failCallback && typeof failCallback === 'function') { + failCallback(error) + } + } + ) + } + + /** + * 查询用户所有自选股分组 + * @param {Function} successCallback - 成功回调函数 + * @param {Function} failCallback - 失败回调函数 + * @param {Object} data - 请求参数 + * @returns {void} + */ + static getUserStockGroupList(successCallback, failCallback = null, data = {}) { + const url = '/api/homePage/userStockGroup/list' + + util.request( + url, + (response) => { + console.log('查询用户自选股分组列表 - 响应:', response) + if (successCallback && typeof successCallback === 'function') { + successCallback(response) + } + }, + data, + (error) => { + console.error('查询用户自选股分组列表 - 失败:', error) + if (failCallback && typeof failCallback === 'function') { + failCallback(error) + } + } + ) + } + + /** + * 分页查询某一个分组下的所有自选股 + * @param {Function} successCallback - 成功回调函数 + * @param {Function} failCallback - 失败回调函数 + * @param {Object} data - 请求参数 {groupId, pageNum, pageSize, ...} + * @returns {void} + */ + static getUserStockList(successCallback, failCallback = null, data = {}) { + const url = '/api/homePage/userStock/list' + + // 设置默认分页参数 + const requestData = { + pageNum: 1, + pageSize: 20, + ...data + } + + util.request( + url, + (response) => { + console.log('分页查询分组自选股 - 响应:', response) + if (successCallback && typeof successCallback === 'function') { + successCallback(response) + } + }, + requestData, + (error) => { + console.error('分页查询分组自选股 - 失败:', error) + if (failCallback && typeof failCallback === 'function') { + failCallback(error) + } + } + ) + } + + /** + * 查询默认自选股 + * @param {Function} successCallback - 成功回调函数 + * @param {Function} failCallback - 失败回调函数 + * @param {Object} data - 请求参数 + * @returns {void} + */ + static getUserOrDefault(successCallback, failCallback = null, data = {}) { + const url = '/api/homePage/userStock/getUserOrDefault' + + util.request( + url, + (response) => { + console.log('查询默认自选股 - 响应:', response) + if (successCallback && typeof successCallback === 'function') { + successCallback(response) + } + }, + data, + (error) => { + console.error('查询默认自选股 - 失败:', error) + if (failCallback && typeof failCallback === 'function') { + failCallback(error) + } + } + ) + } +} + +// 导出API类 +export default MySelectionsAPI + +// 也可以导出单个方法供直接使用 +export const { + checkExist, + getUserStockGroupList, + getUserStockList, + getUserOrDefault +} = MySelectionsAPI \ No newline at end of file From 1c26940540b4074f86feaecd9cc27d6d4ef4d3d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E6=9D=B0?= Date: Wed, 29 Oct 2025 11:45:33 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E6=8E=89=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E7=9A=84tcp=E8=BF=9E=E6=8E=A5=EF=BC=88=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E6=97=B6=E5=90=AF=E7=94=A8=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/home/home.vue | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/pages/home/home.vue b/pages/home/home.vue index 92f54cf..92c129c 100644 --- a/pages/home/home.vue +++ b/pages/home/home.vue @@ -193,7 +193,7 @@ import MarketOverview from '../../components/MarketOverview.vue' import DeepMate from '../../components/DeepMate.vue' import tcpConnection from '../../api/tcpConnection.js' import th from '../../static/language/th' - +import MySelectionsAPI from '../../api/home/mySelections.js' export default { components: { footerBar, @@ -338,21 +338,21 @@ export default { this.initTcpListeners() // 页面渲染完成后自动连接两个TCP连接 - this.$nextTick(() => { - console.log('页面渲染完成,开始自动连接TCP服务器...') - // 延迟一小段时间确保页面完全加载后再连接 - setTimeout(() => { - // 连接今日市场概览TCP(channel 1) - console.log('连接今日市场概览TCP(channel 1)...') - this.connectTcp() + // this.$nextTick(() => { + // console.log('页面渲染完成,开始自动连接TCP服务器...') + // // 延迟一小段时间确保页面完全加载后再连接 + // setTimeout(() => { + // // 连接今日市场概览TCP(channel 1) + // console.log('连接今日市场概览TCP(channel 1)...') + // this.connectTcp() - // 稍微延迟后连接我的自选TCP(channel 2) - setTimeout(() => { - console.log('连接我的自选TCP(channel 2)...') - this.connectMyStocksTcp() - }, 500) - }, 1000) - }) + // // 稍微延迟后连接我的自选TCP(channel 2) + // setTimeout(() => { + // console.log('连接我的自选TCP(channel 2)...') + // this.connectMyStocksTcp() + // }, 500) + // }, 1000) + // }) }, // 页面销毁前的清理工作 From be05468cea4261d6bda090b0202eefec4720a04f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E6=9D=B0?= Date: Wed, 29 Oct 2025 14:55:53 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=88=91=E7=9A=84?= =?UTF-8?q?=E8=87=AA=E9=80=89=E6=96=B9=E6=B3=95=E6=96=87=E4=BB=B6=EF=BC=9B?= =?UTF-8?q?http=E4=B8=AD=E5=8A=A0=E5=85=A5=E6=89=93=E5=8D=B0=E6=9C=80?= =?UTF-8?q?=E7=BB=88=E8=AF=B7=E6=B1=82=E5=8F=82=E6=95=B0=EF=BC=9B=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E5=BC=B9=E7=99=BB=E5=BD=95=E6=8F=90=E7=A4=BA=EF=BC=9B?= =?UTF-8?q?=E5=8A=A0=E5=85=A5=E7=94=A8=E6=88=B7=E7=99=BB=E5=BD=95=E5=90=8E?= =?UTF-8?q?=E6=89=8D=E4=BC=9A=E8=B0=83=E7=94=A8=E6=8E=A5=E5=8F=A3=E7=9A=84?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/home/mySelections.js | 152 +++++++++++++++++++++++--------------------- pages/home/home.vue | 159 ++++++++++++++++++++++++++++++++++++++++++++++- utils/http.js | 2 + 3 files changed, 242 insertions(+), 71 deletions(-) diff --git a/api/home/mySelections.js b/api/home/mySelections.js index 21cabd3..4a99366 100644 --- a/api/home/mySelections.js +++ b/api/home/mySelections.js @@ -1,9 +1,9 @@ /** * 我的自选股相关API接口封装 - * 使用common/util.js中的请求方法 + * 使用utils/http.js中的拦截器封装请求方法 */ -import util from '../../common/util.js' +import { http } from '../../utils/http.js' /** * 我的自选股API接口类 @@ -15,27 +15,30 @@ class MySelectionsAPI { * @param {Function} successCallback - 成功回调函数 * @param {Function} failCallback - 失败回调函数 * @param {Object} data - 请求参数 - * @returns {void} + * @returns {Promise} */ - static checkExist(successCallback, failCallback = null, data = {}) { + static async checkExist(successCallback, failCallback = null, data = {}) { const url = '/api/homePage/userStock/checkExist' - util.request( - url, - (response) => { - console.log('检查用户自选股分组存在性 - 响应:', response) - if (successCallback && typeof successCallback === 'function') { - successCallback(response) - } - }, - data, - (error) => { - console.error('检查用户自选股分组存在性 - 失败:', error) - if (failCallback && typeof failCallback === 'function') { - failCallback(error) - } + try { + const response = await http({ + url: url, + method: 'POST', + data: data + }) + + console.log('检查用户自选股分组存在性 - 响应:', response) + if (successCallback && typeof successCallback === 'function') { + successCallback(response) } - ) + return response + } catch (error) { + console.error('检查用户自选股分组存在性 - 失败:', error) + if (failCallback && typeof failCallback === 'function') { + failCallback(error) + } + throw error + } } /** @@ -43,27 +46,30 @@ class MySelectionsAPI { * @param {Function} successCallback - 成功回调函数 * @param {Function} failCallback - 失败回调函数 * @param {Object} data - 请求参数 - * @returns {void} + * @returns {Promise} */ - static getUserStockGroupList(successCallback, failCallback = null, data = {}) { + static async getUserStockGroupList(successCallback, failCallback = null, data = {}) { const url = '/api/homePage/userStockGroup/list' - util.request( - url, - (response) => { - console.log('查询用户自选股分组列表 - 响应:', response) - if (successCallback && typeof successCallback === 'function') { - successCallback(response) - } - }, - data, - (error) => { - console.error('查询用户自选股分组列表 - 失败:', error) - if (failCallback && typeof failCallback === 'function') { - failCallback(error) - } + try { + const response = await http({ + url: url, + method: 'POST', + data: data + }) + + console.log('查询用户自选股分组列表 - 响应:', response) + if (successCallback && typeof successCallback === 'function') { + successCallback(response) } - ) + return response + } catch (error) { + console.error('查询用户自选股分组列表 - 失败:', error) + if (failCallback && typeof failCallback === 'function') { + failCallback(error) + } + throw error + } } /** @@ -71,9 +77,9 @@ class MySelectionsAPI { * @param {Function} successCallback - 成功回调函数 * @param {Function} failCallback - 失败回调函数 * @param {Object} data - 请求参数 {groupId, pageNum, pageSize, ...} - * @returns {void} + * @returns {Promise} */ - static getUserStockList(successCallback, failCallback = null, data = {}) { + static async getUserStockList(successCallback, failCallback = null, data = {}) { const url = '/api/homePage/userStock/list' // 设置默认分页参数 @@ -83,22 +89,25 @@ class MySelectionsAPI { ...data } - util.request( - url, - (response) => { - console.log('分页查询分组自选股 - 响应:', response) - if (successCallback && typeof successCallback === 'function') { - successCallback(response) - } - }, - requestData, - (error) => { - console.error('分页查询分组自选股 - 失败:', error) - if (failCallback && typeof failCallback === 'function') { - failCallback(error) - } + try { + const response = await http({ + url: url, + method: 'POST', + data: requestData + }) + + console.log('分页查询分组自选股 - 响应:', response) + if (successCallback && typeof successCallback === 'function') { + successCallback(response) } - ) + return response + } catch (error) { + console.error('分页查询分组自选股 - 失败:', error) + if (failCallback && typeof failCallback === 'function') { + failCallback(error) + } + throw error + } } /** @@ -106,27 +115,30 @@ class MySelectionsAPI { * @param {Function} successCallback - 成功回调函数 * @param {Function} failCallback - 失败回调函数 * @param {Object} data - 请求参数 - * @returns {void} + * @returns {Promise} */ - static getUserOrDefault(successCallback, failCallback = null, data = {}) { + static async getUserOrDefault(successCallback, failCallback = null, data = {}) { const url = '/api/homePage/userStock/getUserOrDefault' - util.request( - url, - (response) => { - console.log('查询默认自选股 - 响应:', response) - if (successCallback && typeof successCallback === 'function') { - successCallback(response) - } - }, - data, - (error) => { - console.error('查询默认自选股 - 失败:', error) - if (failCallback && typeof failCallback === 'function') { - failCallback(error) - } + try { + const response = await http({ + url: url, + method: 'POST', + data: data + }) + + console.log('查询默认自选股 - 响应:', response) + if (successCallback && typeof successCallback === 'function') { + successCallback(response) } - ) + return response + } catch (error) { + console.error('查询默认自选股 - 失败:', error) + if (failCallback && typeof failCallback === 'function') { + failCallback(error) + } + throw error + } } } diff --git a/pages/home/home.vue b/pages/home/home.vue index 92c129c..62b45e9 100644 --- a/pages/home/home.vue +++ b/pages/home/home.vue @@ -2,7 +2,8 @@ - + + @@ -194,6 +195,7 @@ import DeepMate from '../../components/DeepMate.vue' import tcpConnection from '../../api/tcpConnection.js' import th from '../../static/language/th' import MySelectionsAPI from '../../api/home/mySelections.js' +import { useUserStore } from '../../stores/modules/userInfo' export default { components: { footerBar, @@ -205,6 +207,9 @@ export default { type: 'home', iSMT: 0, + // 用户信息 store + userStore: null, + // 深度探索数据 explorationItems: [ { title: '主力追踪', icon: '/static/c1.png' }, @@ -319,6 +324,9 @@ export default { // 状态栏高度 this.iSMT = uni.getSystemInfoSync().statusBarHeight; + // 初始化用户信息 store + this.userStore = useUserStore(); + // 预加载图片资源 this.myStocks.forEach(stock => { // 使用uni.getImageInfo替代Image对象 @@ -337,6 +345,14 @@ export default { // 初始化TCP连接监听器 this.initTcpListeners() + // 检查用户登录状态,只有已登录才加载自选股数据 + if (this.userStore.userInfo) { + console.log('用户已登录,加载自选股数据') + this.loadMySelectionsData() + } else { + console.log('用户未登录,跳过自选股数据加载') + } + // 页面渲染完成后自动连接两个TCP连接 // this.$nextTick(() => { // console.log('页面渲染完成,开始自动连接TCP服务器...') @@ -401,6 +417,147 @@ export default { }, delay) }, + // 自选股数据加载相关方法 + + // 加载自选股数据的主方法 + async loadMySelectionsData() { + try { + console.log('开始加载自选股数据...') + + // 调用checkExist判断用户是否存在自选股 + const checkResult = await MySelectionsAPI.checkExist() + console.log('检查用户自选股存在性结果:', checkResult) + + if (checkResult.code === 200) { + const isHave = checkResult.data.is_have + + if (isHave === 1) { + // 用户有自选股,查询所有分组 + console.log('用户存在自选股,查询所有分组...') + await this.loadUserStockGroups() + } else { + // 用户没有自选股,查询默认自选股 + console.log('用户不存在自选股,查询默认自选股...') + await this.loadDefaultStocks() + } + } else { + console.error('检查用户自选股存在性失败:', checkResult.message) + // 失败时也尝试加载默认自选股 + await this.loadDefaultStocks() + } + } catch (error) { + console.error('加载自选股数据失败:', error) + // 出错时尝试加载默认自选股 + await this.loadDefaultStocks() + } + }, + + // 加载用户自选股分组 + async loadUserStockGroups() { + try { + const groupResult = await MySelectionsAPI.getUserStockGroupList() + console.log('查询用户自选股分组结果:', groupResult) + + if (groupResult.code === 200 && groupResult.data && groupResult.data.length > 0) { + // 找到id最小的分组 + const minIdGroup = groupResult.data.reduce((min, current) => { + return current.id < min.id ? current : min + }) + + console.log('找到最小id分组:', minIdGroup) + + // 查询该分组下的股票 + await this.loadGroupStocks(minIdGroup.id) + } else { + console.log('没有找到用户自选股分组,加载默认自选股') + await this.loadDefaultStocks() + } + } catch (error) { + console.error('加载用户自选股分组失败:', error) + await this.loadDefaultStocks() + } + }, + + // 加载指定分组下的股票 + async loadGroupStocks(groupId) { + try { + const stockResult = await MySelectionsAPI.getUserStockList(null, null, { + groupId: groupId, + pageNum: 1, + pageSize: 20 + }) + + console.log('查询分组自选股结果:', stockResult) + + if (stockResult.code === 200 && stockResult.data) { + this.processStockData(stockResult.data) + } else { + console.log('分组下没有股票数据,加载默认自选股') + await this.loadDefaultStocks() + } + } catch (error) { + console.error('加载分组股票失败:', error) + await this.loadDefaultStocks() + } + }, + + // 加载默认自选股 + async loadDefaultStocks() { + try { + const defaultResult = await MySelectionsAPI.getUserOrDefault() + console.log('查询默认自选股结果:', defaultResult) + + if (defaultResult.code === 200 && defaultResult.data) { + this.processStockData(defaultResult.data) + } else { + console.log('没有默认自选股数据') + } + } catch (error) { + console.error('加载默认自选股失败:', error) + } + }, + + // 处理股票数据 + processStockData(stockData) { + console.log('处理股票数据:', stockData) + + // 根据返回的数据结构更新myStocks数组 + // 这里需要根据实际API返回的数据结构进行调整 + if (Array.isArray(stockData)) { + // 如果是数组格式 + this.myStocks = stockData.map(stock => ({ + name: stock.name || stock.stock_name || '', + code: stock.code || stock.stock_code || '', + // price: stock.price || stock.current_price || '0.00', + // change: stock.change || stock.change_percent || 0, + chartImg: stock.chartImg || '/static/c5.png' // 默认图片 + })) + //重新赋值机构动向简报 + this.institutionalReports = stockData.map(stock => ({ + stock: stock.name || stock.stock_name || '', + status: stock.code || stock.stock_code || '', + + })) + } else if (stockData.list && Array.isArray(stockData.list)) { + // 如果是分页格式 + this.myStocks = stockData.list.map(stock => ({ + name: stock.name || stock.stock_name || '', + code: stock.code || stock.stock_code || '', + // price: stock.price || stock.current_price || '0.00', + // change: stock.change || stock.change_percent || 0, + chartImg: stock.chartImg || '/static/c5.png' // 默认图片 + })) + //重新赋值机构动向简报 + //重新赋值机构动向简报 + this.institutionalReports = stockData.map(stock => ({ + stock: stock.name || stock.stock_name || '', + status: stock.code || stock.stock_code || '', + })) + } + + console.log('更新后的自选股数据:', this.myStocks) + }, + // TCP连接相关方法 // 初始化TCP监听器 diff --git a/utils/http.js b/utils/http.js index b4a2740..2aff8f6 100644 --- a/utils/http.js +++ b/utils/http.js @@ -43,10 +43,12 @@ const httpInterceptor = { //4 添加token,优先用store,没有则回退到body中的token,保持与Apifox一致 const memberStore = useUserStore() const token = memberStore.userInfo?.token || options.data?.token + // const token = '2d0b5654409646713cdd40ec0d0bb56c' // const token = '1b3a58424c5324e40d4bf4d085e18047' if (token) { options.header.token = token } + console.log("最终请求参数:",options) // 避免误用 Authorization 头,后端要求的是 token 头 // if (options.header.Authorization) delete options.header.Authorization return options From 65e9c59ba9906c0196641f9b95032ca5a8b78898 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E6=9D=B0?= Date: Wed, 29 Oct 2025 15:48:09 +0800 Subject: [PATCH 05/12] =?UTF-8?q?=E8=AF=B7=E6=B1=82checkExist=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E6=97=B6=E4=B8=8D=E8=B0=83=E7=94=A8=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E8=87=AA=E9=80=89=E8=82=A1=E7=9A=84=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/home/home.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/home/home.vue b/pages/home/home.vue index 62b45e9..b103c20 100644 --- a/pages/home/home.vue +++ b/pages/home/home.vue @@ -443,7 +443,7 @@ export default { } else { console.error('检查用户自选股存在性失败:', checkResult.message) // 失败时也尝试加载默认自选股 - await this.loadDefaultStocks() + // await this.loadDefaultStocks() } } catch (error) { console.error('加载自选股数据失败:', error) From f1fbedfcfde97f53cd025af824375eac800306a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E6=9D=B0?= Date: Wed, 29 Oct 2025 16:57:07 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E6=97=B6=E6=89=8D=E4=BC=9A=E8=B0=83=E7=94=A8=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?;home353=E8=A1=8C=E7=94=A8=E6=9D=A5=E5=86=99=E6=B8=B8=E5=AE=A2?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E8=87=AA=E9=80=89=E8=82=A1=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/home/home.vue | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/pages/home/home.vue b/pages/home/home.vue index b103c20..c089e3d 100644 --- a/pages/home/home.vue +++ b/pages/home/home.vue @@ -345,12 +345,18 @@ export default { // 初始化TCP连接监听器 this.initTcpListeners() - // 检查用户登录状态,只有已登录才加载自选股数据 - if (this.userStore.userInfo) { - console.log('用户已登录,加载自选股数据') + // 检查用户登录状态,只有已登录并且不是游客才加载自选股数据 + if (this.userStore.userInfo && !this.userStore.userInfo.isVisitor) { + console.log('是用户登录,加载自选股数据', this.userStore.userInfo) this.loadMySelectionsData() - } else { - console.log('用户未登录,跳过自选股数据加载') + } else if (this.userStore.userInfo && this.userStore.userInfo.isVisitor){ + console.log('是游客登录,加载默认自选股',this.userStore.userInfo) + + + + + }else { + console.log('用户未登录',this.userStore.userInfo) } // 页面渲染完成后自动连接两个TCP连接 From ccf5b14ec7d01359c825053c523f06258b47c33c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E6=9D=B0?= Date: Wed, 29 Oct 2025 17:07:59 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=B8=B8=E5=AE=A2?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=BB=98=E8=AE=A4=E7=9A=84=E6=96=B9=E6=B3=95?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/home/mySelections.js | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/api/home/mySelections.js b/api/home/mySelections.js index 4a99366..6801ebc 100644 --- a/api/home/mySelections.js +++ b/api/home/mySelections.js @@ -140,6 +140,36 @@ class MySelectionsAPI { throw error } } + + /** + * 游客查询默认自选股 + * @param {Function} successCallback - 成功回调函数 + * @param {Function} failCallback - 失败回调函数 + * @returns {Promise} + */ + static async getDefaultStocks(successCallback, failCallback = null) { + const url = '/api/homePage/userStock/getDefaultStocks' + + try { + const response = await http({ + url: url, + method: 'POST', + data: {} + }) + + console.log('游客查询默认自选股 - 响应:', response) + if (successCallback && typeof successCallback === 'function') { + successCallback(response) + } + return response + } catch (error) { + console.error('游客查询默认自选股 - 失败:', error) + if (failCallback && typeof failCallback === 'function') { + failCallback(error) + } + throw error + } + } } // 导出API类 @@ -150,5 +180,6 @@ export const { checkExist, getUserStockGroupList, getUserStockList, - getUserOrDefault + getUserOrDefault, + getDefaultStocks } = MySelectionsAPI \ No newline at end of file From bd24b3706691357681601fa41bb40804068bd12d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E6=9D=B0?= Date: Wed, 29 Oct 2025 17:26:38 +0800 Subject: [PATCH 08/12] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=B8=B8=E5=AE=A2?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=BB=98=E8=AE=A4=E7=9A=84=E6=96=B9=E6=B3=95?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/home/home.vue | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/pages/home/home.vue b/pages/home/home.vue index c089e3d..3193d4e 100644 --- a/pages/home/home.vue +++ b/pages/home/home.vue @@ -351,10 +351,7 @@ export default { this.loadMySelectionsData() } else if (this.userStore.userInfo && this.userStore.userInfo.isVisitor){ console.log('是游客登录,加载默认自选股',this.userStore.userInfo) - - - - + this.loadGuestDefaultStocks() }else { console.log('用户未登录',this.userStore.userInfo) } @@ -523,6 +520,23 @@ export default { } }, + // 游客加载默认自选股 + async loadGuestDefaultStocks() { + try { + console.log('游客开始加载默认自选股...') + const guestResult = await MySelectionsAPI.getDefaultStocks() + console.log('游客查询默认自选股结果:', guestResult) + + if (guestResult.code === 200 && guestResult.data) { + this.processStockData(guestResult.data) + } else { + console.log('游客没有默认自选股数据') + } + } catch (error) { + console.error('游客加载默认自选股失败:', error) + } + }, + // 处理股票数据 processStockData(stockData) { console.log('处理股票数据:', stockData) From 98a016d957645189cebc11340bef59c5da2ed841 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E6=9D=B0?= Date: Wed, 29 Oct 2025 18:34:04 +0800 Subject: [PATCH 09/12] =?UTF-8?q?=E5=8A=A8=E6=80=81=E6=9B=B4=E6=96=B0tcp?= =?UTF-8?q?=E5=91=BD=E4=BB=A4=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/home/home.vue | 66 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 46 insertions(+), 20 deletions(-) diff --git a/pages/home/home.vue b/pages/home/home.vue index 3193d4e..5f75c8c 100644 --- a/pages/home/home.vue +++ b/pages/home/home.vue @@ -256,6 +256,9 @@ export default { type: '' }, + // 当前TCP使用的股票代码 + currentStockCodes: ['SH.000001', 'SH.000002', 'SH.000003'], + // 我的自选TCP股票数据存储 myStocksTcpData: { count: 0, @@ -341,10 +344,8 @@ export default { } }) }) - - // 初始化TCP连接监听器 - this.initTcpListeners() - + + // 检查用户登录状态,只有已登录并且不是游客才加载自选股数据 if (this.userStore.userInfo && !this.userStore.userInfo.isVisitor) { console.log('是用户登录,加载自选股数据', this.userStore.userInfo) @@ -355,23 +356,26 @@ export default { }else { console.log('用户未登录',this.userStore.userInfo) } + + // 初始化TCP连接监听器 + this.initTcpListeners() // 页面渲染完成后自动连接两个TCP连接 - // this.$nextTick(() => { - // console.log('页面渲染完成,开始自动连接TCP服务器...') - // // 延迟一小段时间确保页面完全加载后再连接 - // setTimeout(() => { - // // 连接今日市场概览TCP(channel 1) - // console.log('连接今日市场概览TCP(channel 1)...') - // this.connectTcp() + this.$nextTick(() => { + console.log('页面渲染完成,开始自动连接TCP服务器...') + // 延迟一小段时间确保页面完全加载后再连接 + setTimeout(() => { + // 连接今日市场概览TCP(channel 1) + console.log('连接今日市场概览TCP(channel 1)...') + this.connectTcp() - // // 稍微延迟后连接我的自选TCP(channel 2) - // setTimeout(() => { - // console.log('连接我的自选TCP(channel 2)...') - // this.connectMyStocksTcp() - // }, 500) - // }, 1000) - // }) + // 稍微延迟后连接我的自选TCP(channel 2) + setTimeout(() => { + console.log('连接我的自选TCP(channel 2)...') + this.connectMyStocksTcp() + }, 500) + }, 1000) + }) }, // 页面销毁前的清理工作 @@ -576,6 +580,28 @@ export default { } console.log('更新后的自选股数据:', this.myStocks) + + // 更新TCP消息中的股票代码 + this.updateTcpStockCodes() + }, + + // 更新TCP消息中的股票代码 + updateTcpStockCodes() { + // 从myStocks中提取前3个股票代码 + const stockCodes = this.myStocks.slice(0, 3).map(stock => stock.code).filter(code => code) + console.log('更新TCP消息股票代码:', stockCodes) + + // 如果有股票代码,更新TCP消息 + if (stockCodes.length > 0) { + // 补充到3个代码(如果不足3个,用默认代码补充) + while (stockCodes.length < 3) { + stockCodes.push('SH.000001') // 默认代码 + } + + // 保存到组件数据中,供TCP方法使用 + this.currentStockCodes = stockCodes + console.log('当前TCP使用的股票代码:', this.currentStockCodes) + } }, // TCP连接相关方法 @@ -1033,7 +1059,7 @@ export default { // } // {"command": "stock_list"} // {"command": "batch_real_time", "stock_codes": ["SH.000001"]} - {"command": "batch_real_time", "stock_codes": ["SH.000001","SH.000002","SH.000003"]} + {"command": "batch_real_time", "stock_codes": this.currentStockCodes} // 发送消息 const success = tcpConnection.send(messageData) @@ -1050,7 +1076,7 @@ export default { // 发送我的自选TCP消息 sendMyStocksTcpMessage() { // 构造要发送的消息对象 - 我的自选股票数据请求 - const messageData = {"command": "batch_real_time", "stock_codes": ["SH.000001","SH.000002","SH.000003"]} + const messageData = {"command": "batch_real_time", "stock_codes": this.currentStockCodes} // 发送消息到channel 2(我的自选TCP连接) const success = tcpConnection.send(messageData, { channel: '2' }) From 96e176897cff177bd880ab08cfda3b767c585ef1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E6=9D=B0?= Date: Wed, 29 Oct 2025 20:17:12 +0800 Subject: [PATCH 10/12] =?UTF-8?q?=E9=87=8D=E6=96=B0=E9=80=82=E9=85=8D?= =?UTF-8?q?=E9=A6=96=E9=A1=B5=E8=BD=AE=E6=92=AD=E5=9B=BE=E5=A4=A7=E5=B0=8F?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/home/home.vue | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/pages/home/home.vue b/pages/home/home.vue index 5f75c8c..a095310 100644 --- a/pages/home/home.vue +++ b/pages/home/home.vue @@ -27,8 +27,8 @@ - - + + @@ -218,6 +218,15 @@ export default { { title: '主力资金流', icon: '/static/c4.png' } ], + // 轮播图片数据 + swiperImages: [ + 'https://d31zlh4on95l9h.cloudfront.net/images/44ec37501cf3ecf5438d401c3d66fcd3.png', + 'https://d31zlh4on95l9h.cloudfront.net/images/80274b6626bb403d717469b3672333c9.png', + 'https://d31zlh4on95l9h.cloudfront.net/images/14481c76b09509977d3879ba3141ebc7.png', + 'https://d31zlh4on95l9h.cloudfront.net/images/19e4c5542e5f974e1c6938897aa20ef9.png', + 'https://d31zlh4on95l9h.cloudfront.net/images/d0bc1c1bb71917132865b82dab99831b.png' + ], + // 我的自选股票数据 myStocks: [ { name: '特斯拉', code: 'TSLA', price: '482.00', change: 2.80, chartImg: '/static/c5.png' }, @@ -1627,7 +1636,7 @@ export default { .welcome-swiper { width: 100%; - height: 150px; + height: 110px; border-radius: 0; overflow: hidden; } From 1922787df71340589dd1d47b41d7ce7f755d6191 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E6=9D=B0?= Date: Wed, 29 Oct 2025 20:30:57 +0800 Subject: [PATCH 11/12] =?UTF-8?q?=E7=99=BB=E5=BD=95=E5=BC=B9=E5=87=BA?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=8A=A0=E5=85=A5=E5=AF=B9=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E6=B8=B8=E5=AE=A2=E7=99=BB=E5=BD=95=E7=9A=84=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E7=9B=91=E5=90=AC=EF=BC=9B=E9=A6=96=E9=A1=B5=E6=B8=B8=E5=AE=A2?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E6=88=90=E5=8A=9F=E5=90=8E=EF=BC=8C=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E5=8A=A0=E8=BD=BD=E9=A1=B5=E9=9D=A2=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/login-prompt.vue | 5 +++++ pages/home/home.vue | 30 ++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/components/login-prompt.vue b/components/login-prompt.vue index 4d302be..0b9af30 100644 --- a/components/login-prompt.vue +++ b/components/login-prompt.vue @@ -85,6 +85,11 @@ const continueAsVisitor = async () => { if (res.code === 200) { userStore.setUserInfo(res.data); hide(); + + // 发送游客登录成功事件,通知首页重新加载 + uni.$emit('visitorLoginSuccess', { + userInfo: res.data + }); } }; diff --git a/pages/home/home.vue b/pages/home/home.vue index a095310..466b9b0 100644 --- a/pages/home/home.vue +++ b/pages/home/home.vue @@ -369,6 +369,9 @@ export default { // 初始化TCP连接监听器 this.initTcpListeners() + // 监听游客登录成功事件 + uni.$on('visitorLoginSuccess', this.handleVisitorLoginSuccess) + // 页面渲染完成后自动连接两个TCP连接 this.$nextTick(() => { console.log('页面渲染完成,开始自动连接TCP服务器...') @@ -421,9 +424,36 @@ export default { // 移除TCP监听器,防止内存泄漏 this.removeTcpListeners() + + // 移除游客登录成功事件监听器 + uni.$off('visitorLoginSuccess', this.handleVisitorLoginSuccess) }, methods: { + // 处理游客登录成功事件 + handleVisitorLoginSuccess(data) { + console.log('收到游客登录成功事件:', data) + // 重新加载页面数据 + this.reloadPageData() + }, + + // 重新加载页面数据 + reloadPageData() { + console.log('重新加载页面数据...') + + // 更新用户信息store + this.userStore = useUserStore() + + // 根据新的用户状态加载相应的数据 + if (this.userStore.userInfo && this.userStore.userInfo.isVisitor) { + console.log('游客登录成功,加载默认自选股') + this.loadGuestDefaultStocks() + } else if (this.userStore.userInfo && !this.userStore.userInfo.isVisitor) { + console.log('用户登录,加载自选股数据') + this.loadMySelectionsData() + } + }, + // 防抖函数 debounce(fn, delay = 300) { if (this.debounceTimer) clearTimeout(this.debounceTimer) From f24fd1d1ee8c426f21d40092c424f3fa45133edc Mon Sep 17 00:00:00 2001 From: hongxilin <17663930442@163.com> Date: Wed, 29 Oct 2025 20:36:48 +0800 Subject: [PATCH 12/12] =?UTF-8?q?=E5=BC=95=E5=85=A5=E5=90=84=E5=B8=82?= =?UTF-8?q?=E5=9C=BA=E5=9B=BD=E6=97=97=EF=BC=8C=E6=8E=A5=E5=85=A5=E5=85=A8?= =?UTF-8?q?=E7=90=83=E5=B8=82=E5=9C=BA=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=9C=B0?= =?UTF-8?q?=E5=8C=BA=E5=88=86=E7=BB=84=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=8C=E5=9C=B0=E5=8C=BA=E8=AF=A6=E6=83=85=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=8C=E4=B8=80=E6=AC=A1=E6=80=A7=E6=9F=A5=E8=AF=A2=E6=89=80?= =?UTF-8?q?=E6=9C=89Tabs=E6=A0=8F=E7=88=B6=E5=AD=90=E7=BB=93=E6=9E=84?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=E4=BF=AE=E6=94=B9IndexCards?= =?UTF-8?q?=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/marketSituation/marketSituation.js | 70 ++ components/IndexCard.vue | 288 +++---- pages/marketSituation/countryMarket.vue | 589 +++++++------- pages/marketSituation/globalIndex.vue | 842 ++++++++++---------- pages/marketSituation/marketCondition.vue | 74 +- pages/marketSituation/marketDetail.vue | 697 +++++++++-------- pages/marketSituation/marketOverview.vue | 121 +-- pages/marketSituation/marketSituation.vue | 844 ++++++++++----------- static/marketSituation-image/country-flag/can.png | Bin 0 -> 1149 bytes static/marketSituation-image/country-flag/cn.png | Bin 0 -> 1131 bytes .../marketSituation-image/country-flag/global.png | Bin 0 -> 2557 bytes static/marketSituation-image/country-flag/hk.png | Bin 0 -> 1722 bytes static/marketSituation-image/country-flag/my.png | Bin 0 -> 1783 bytes static/marketSituation-image/country-flag/sg.png | Bin 0 -> 1165 bytes static/marketSituation-image/country-flag/th.png | Bin 0 -> 703 bytes static/marketSituation-image/country-flag/us.png | Bin 0 -> 1430 bytes static/marketSituation-image/country-flag/vi.png | Bin 0 -> 1132 bytes stores/modules/marketSituation.js | 78 ++ 18 files changed, 1856 insertions(+), 1747 deletions(-) create mode 100644 api/marketSituation/marketSituation.js create mode 100644 static/marketSituation-image/country-flag/can.png create mode 100644 static/marketSituation-image/country-flag/cn.png create mode 100644 static/marketSituation-image/country-flag/global.png create mode 100644 static/marketSituation-image/country-flag/hk.png create mode 100644 static/marketSituation-image/country-flag/my.png create mode 100644 static/marketSituation-image/country-flag/sg.png create mode 100644 static/marketSituation-image/country-flag/th.png create mode 100644 static/marketSituation-image/country-flag/us.png create mode 100644 static/marketSituation-image/country-flag/vi.png create mode 100644 stores/modules/marketSituation.js diff --git a/api/marketSituation/marketSituation.js b/api/marketSituation/marketSituation.js new file mode 100644 index 0000000..9452062 --- /dev/null +++ b/api/marketSituation/marketSituation.js @@ -0,0 +1,70 @@ +/** @format */ + +import { http } from "../../utils/http"; + +export const getData = () => { + return http({ + method: "GET", + url: "/ka", + }); +}; + +/** + * 获取全球指数 + * POST /api/global/getGlobalIndex + */ +export const getGlobalIndexAPI = (data) => { + return http({ + method: "POST", + url: "/api/global/getGlobalIndex", + data, + }); +}; + +/** + * 获取地区分组列表 + * POST /api/global/regionalGroup + */ +export const getRegionalGroupAPI = (data) => { + return http({ + method: "POST", + url: "/api/global/regionalGroup", + data, + }); +}; + +/** + * 获取地区详情 + * POST /api/global/regionalGroupList + */ +export const getRegionalGroupListAPI = (data) => { + return http({ + method: "POST", + url: "/api/global/regionalGroupList", + data, + }); +}; + +/** + * 一次性查询所有Tab栏父子结构 + * POST /api/homework/tab/getAll + */ +export const getAllTabsAPI = (data) => { + return http({ + method: "POST", + url: "/api/homework/tab/getAll", + data, + }); +}; + +/** + * 通用市场数据分页查询接口(默认1页20条) + * POST /api/market/data/page/query + */ +export const queryStockDataAPI = (data) => { + return http({ + method: "POST", + url: "/api/market/data/page/query", + data, + }); +}; diff --git a/components/IndexCard.vue b/components/IndexCard.vue index 24d0e7e..ad1ae69 100644 --- a/components/IndexCard.vue +++ b/components/IndexCard.vue @@ -1,190 +1,220 @@ + + \ No newline at end of file + diff --git a/pages/marketSituation/countryMarket.vue b/pages/marketSituation/countryMarket.vue index 9bb0a30..465e8e7 100644 --- a/pages/marketSituation/countryMarket.vue +++ b/pages/marketSituation/countryMarket.vue @@ -1,493 +1,498 @@ + + \ No newline at end of file + diff --git a/pages/marketSituation/globalIndex.vue b/pages/marketSituation/globalIndex.vue index beb2fc4..662c11d 100644 --- a/pages/marketSituation/globalIndex.vue +++ b/pages/marketSituation/globalIndex.vue @@ -1,586 +1,566 @@ + + \ No newline at end of file + diff --git a/pages/marketSituation/marketCondition.vue b/pages/marketSituation/marketCondition.vue index b244d26..5c29c5e 100644 --- a/pages/marketSituation/marketCondition.vue +++ b/pages/marketSituation/marketCondition.vue @@ -8,12 +8,12 @@ - + {{ stockInformation.stockName }} {{ stockInformation.stockCode }} - + ··· @@ -240,6 +240,10 @@ const tcpConnected = ref(false); const connectionListener = ref(null); const messageListener = ref(null); +// 股票来源 +const currentStockFrom = ref(); +// 当前股票位置 +const currentStockIndex = ref(-1); // 股票信息栏变量 const stockInformation = ref({ stockName: "----", //股票名称 @@ -511,6 +515,35 @@ const backToHomepage = () => { } }; +const toLeftPage = () => { + if(currentStockFrom.value == "marketOverview"){ + return; + } + if (currentStockIndex.value > 0) { + currentStockIndex.value--; + // updateStockInformation(); + } else { + uni.showToast({ + title: "没有更多股票了", + icon: "none", + duration: 1000, + }); + } +}; + +const toRightPage = () => { + if (currentStockIndex.value < stockList.length - 1) { + currentStockIndex.value++; + // updateStockInformation(); + } else { + uni.showToast({ + title: "没有更多股票了", + icon: "none", + duration: 1000, + }); + } +}; + const openStockDetail = () => { isStockDetail.value = true; }; @@ -2136,10 +2169,10 @@ const startAddDataTimer = () => { onLoad((options) => { console.log("页面接收到的参数:", options); - // 处理通过data参数传递的复杂对象 - if (options.data) { + // 处理通过stockInformation参数传递的复杂对象 + if (options.stockInformation) { try { - const stockData = JSON.parse(decodeURIComponent(options.data)); + const stockData = JSON.parse(decodeURIComponent(options.stockInformation)); console.log("解析的股票数据:", stockData); // 更新stockInformation @@ -2152,30 +2185,17 @@ onLoad((options) => { } } - // 处理通过stockInformation参数传递的数据(兼容globalIndex.vue的传参方式) - if (options.stockInformation) { - try { - const stockData = JSON.parse(decodeURIComponent(options.stockInformation)); - console.log("解析的股票信息:", stockData); - - // 更新stockInformation - if (stockData) { - stockInformation.value = { - ...stockInformation.value, - ...stockData, - }; - } - } catch (error) { - console.error("解析股票信息失败:", error); - } + // 处理index参数(股票在列表中的位置) + if (options.index !== undefined) { + const stockIndex = parseInt(options.index); + console.log("股票在列表中的索引:", stockIndex); + // 将index保存到响应式变量中,用于后续的左右切换功能 + currentStockIndex.value = stockIndex; } - // 处理简单参数 - if (options.stockCode) { - stockInformation.value.stockCode = options.stockCode; - } - if (options.stockName) { - stockInformation.value.stockName = decodeURIComponent(options.stockName); + // 处理stockFrom参数(股票来源) + if (options.stockFrom) { + currentStockFrom.value = options.stockFrom; } }); diff --git a/pages/marketSituation/marketDetail.vue b/pages/marketSituation/marketDetail.vue index 0252547..1c559b2 100644 --- a/pages/marketSituation/marketDetail.vue +++ b/pages/marketSituation/marketDetail.vue @@ -1,481 +1,478 @@ + + \ No newline at end of file + diff --git a/pages/marketSituation/marketOverview.vue b/pages/marketSituation/marketOverview.vue index b9da06d..fa68843 100644 --- a/pages/marketSituation/marketOverview.vue +++ b/pages/marketSituation/marketOverview.vue @@ -20,8 +20,16 @@ - - + + @@ -41,6 +49,9 @@ import { ref, onMounted, watch, nextTick, computed } from "vue"; import util from "../../common/util.js"; import IndexCard from "../../components/IndexCard.vue"; +import { useMarketSituationStore } from "../../stores/modules/marketSituation.js"; +const marketSituationStore = useMarketSituationStore(); +import { getGlobalIndexAPI } from "../../api/marketSituation/marketSituation.js"; const iSMT = ref(0); const searchValue = ref(""); @@ -63,95 +74,7 @@ const warnTextClass = computed(() => { return isWarnTextOverflow.value ? "warn_text scroll-active" : "warn_text"; }); -// 弹窗相关数据 -const showCountryModal = ref(false); -const selectedCountry = ref("概况"); -const countryList = ref(["概况", "新加坡", "马来西亚", "印度尼西亚", "美国", "中国香港", "泰国", "中国", "加拿大", "越南", "外汇", "贵金属"]); - -// 卡片数据 -const cardData = ref([ - { - flagIcon: "🇺🇸", - stockName: "道琼斯", - stockCode: "noCode", - currentPrice: "45757.90", - changeAmount: "-125.22", - changePercent: "-0.27%", - isRising: false, - }, - { - flagIcon: "🇺🇸", - stockName: "纳斯达克", - stockCode: "noCode", - currentPrice: "22333.96", - changeAmount: "+125.22", - changePercent: "+0.47%", - isRising: true, - }, - { - flagIcon: "🇺🇸", - stockName: "标普500", - stockCode: "noCode", - currentPrice: "6606.08", - changeAmount: "+125.22", - changePercent: "+0.27%", - isRising: true, - }, - { - flagIcon: "🇨🇳", - stockName: "上证指数", - stockCode: "noCode", - currentPrice: "3333.96", - changeAmount: "+125.22", - changePercent: "+0.27%", - isRising: true, - }, - { - flagIcon: "🇨🇳", - stockName: "科创50", - stockCode: "noCode", - currentPrice: "757.90", - changeAmount: "-25.22", - changePercent: "-0.27%", - isRising: false, - }, - { - flagIcon: "🇭🇰", - stockName: "恒生指数", - stockCode: "noCode", - currentPrice: "19757.90", - changeAmount: "-125.22", - changePercent: "-0.63%", - isRising: false, - }, - { - flagIcon: "🇸🇬", - stockName: "道琼斯", - stockCode: "noCode", - currentPrice: "3757.90", - changeAmount: "+85.22", - changePercent: "+2.31%", - isRising: true, - }, - { - flagIcon: "🇲🇾", - stockName: "纳斯达克", - stockCode: "noCode", - currentPrice: "1657.90", - changeAmount: "-15.22", - changePercent: "-0.91%", - isRising: false, - }, - { - flagIcon: "🇹🇭", - stockName: "标普500", - stockCode: "noCode", - currentPrice: "1457.90", - changeAmount: "+35.22", - changePercent: "+2.48%", - isRising: true, - }, -]); +const globalIndexArray = ref([]); // 搜索输入事件 const onSearchInput = (e) => { @@ -216,7 +139,7 @@ const checkWarnTextOverflow = () => { }; // 方法:查看指数详情 -const viewIndexDetail = (item) => { +const viewIndexDetail = (item, index) => { console.log("查看指数详情:", item.stockName); // uni.showToast({ // title: `查看 ${item.stockName} 详情`, @@ -225,7 +148,7 @@ const viewIndexDetail = (item) => { // }) // 这里可以跳转到具体的指数详情页面 uni.navigateTo({ - url: `/pages/marketSituation/marketCondition?stockInformation=${encodeURIComponent(JSON.stringify(item))}`, + url: `/pages/marketSituation/marketCondition?stockInformation=${encodeURIComponent(JSON.stringify(item))}&index=${index}&from=marketOverview`, }); }; @@ -236,7 +159,17 @@ const goToGlobalIndex = () => { }); }; -onMounted(() => { +const getGlobalIndex = async () => { + try { + const result = await getGlobalIndexAPI(); + globalIndexArray.value = result.data; + } catch (e) { + console.log("获取全球指数失败", e); + } +}; + +onMounted(async () => { + await getGlobalIndex(); // 状态栏高度 iSMT.value = uni.getSystemInfoSync().statusBarHeight; diff --git a/pages/marketSituation/marketSituation.vue b/pages/marketSituation/marketSituation.vue index e76aa2d..af09fdf 100644 --- a/pages/marketSituation/marketSituation.vue +++ b/pages/marketSituation/marketSituation.vue @@ -1,593 +1,589 @@ + + \ No newline at end of file + diff --git a/static/marketSituation-image/country-flag/can.png b/static/marketSituation-image/country-flag/can.png new file mode 100644 index 0000000000000000000000000000000000000000..35fd6ca6dd984bc447d4f65afc3e71abbd1dd9eb GIT binary patch literal 1149 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 TvyEq&00000NkvXXu0mjf{VBdT literal 0 HcmV?d00001 diff --git a/static/marketSituation-image/country-flag/hk.png b/static/marketSituation-image/country-flag/hk.png new file mode 100644 index 0000000000000000000000000000000000000000..dc6c3521d2018fc0733cc42b5494fe0b4bd3f7ef GIT binary patch literal 1722 zcmV;r21WUaP)Px*bV)=(R9Hu?mw#|n)fLA-_r14yo6Y72o0yOgDL+FiBUms=TW9JIn3ih6L5sD* zXcfn)S`iXjUk~op~NL6 z)M*X%o=2!Ri%*=7WaC1?^zU214fpClVP@iomk#Y6VIIKAIry>1U{WVW4hF}L%LNvZmIy zA$%em+v6ZdnRGex(o5(Su0 z{`d~k8l?B9tH^uw$Cz{H5?=Q-u_NzfWd^WX;v&p$WqZ&GxGt3IG7Cb z-uECf7-Hz{H^A_KQXmxOw-!^l`FUdJ&f=YQ1Ilp-@7h89{loYkUqkLUZ%6m$;x^^b z`4;+r`!Yjs9|A44MFncP=%}gMD_~_Z0e{^_e9M+2gFT4+d{qAc;T>C$7yr$K{eQqY zcMkIXMCzVE)49N*)s$z8ArJUOUHn4t^jiT(9; zVu$~N+b!0?1}41vCU#E{?@e=wzWht9eLKgj{3JF#X^U_aP$`7zL$92S92h`$e2iuo zbM|RVy>z4~aHRH;6`O0DNmVQE=Z1q?Cy* zCm19i>_+$J5#3NnVE^xN`l3X4y-4BO4G1OazI8sziKop%Vh|0F;>(%zp8Lloe|i^f zVmaZhn=$WNicwsQQCUgfo}I*xy-(o4YskJReSbcLf9XAFW-gZ()a z8EI3hDEZwRXqv$K=nPtE8J^NIhT1Oh*+ch&Wl^~20Oq{;2qADkI~pdqur|5vMvzer zyuM}reu4AEL-t|5F_3JTmeF^98l1dRf)kJi|YGl}LB6pH_Fc&Q$zivIc zKcDDpjSM{h^K^f2YmWS~tBkIVrOw)_Z7AwfER;gOaX#ML7NVC=N>q95_)+2?ybJ0| zJ&auDvIp_6c!bbH_n>-1V-gVX!o-s;b?)Xh0tp%J_*^|WI~{EoJZg@O0rY(1c4Yen zt>%Jk8q^oksJbzxSbbWEa&Ydftv4rxkNkCf;CM_HbE=D3<=Tv>kA z#jregA0}y!W883~0nM5t?;h)!mNr+eOvh_ItKg|@#A+Hs?)CSgZ47L>D#Md;<33Ik zidoZthEVq>>&6UOh=Dq&G`3Y7Z#|nSTjLVAYCOjCeDa85?L~?9FY-M9FHQ%r-_ON1 Q+yDRo07*qoM6N<$f-nd^MF0Q* literal 0 HcmV?d00001 diff --git a/static/marketSituation-image/country-flag/my.png b/static/marketSituation-image/country-flag/my.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1907f7f52ca38f34767f26139a57a605d052ae GIT binary patch literal 1783 zcmVPx*u}MThR9Hu?mwixF=M~0(=iXiUCV~_d$4FpM(Hg4+8<@scO)9A-rXfu!&`JDi zG!at}VrESKa7@%mu}o?vO)|!|rX)_AkJe&p#?)qLq#!gRN;Fi|BAJL(h{B32d+*!1 zcVU5L#ZBt@V`uK(^YPsCKIeJgR|wh)qS1SoqGTa32S^0Q_J?->Ex=Jk9l{8yfSp%@ zNi8>aT9t~XmjJmy$c_DNj~-wzrg|P;YaT6T6aa-`4oBCP@bGI-hJ_lA?rtYNz2TS` zptK-y;L(tsrs;YX-f#s93J9R?y@koA&s^L$JLS@h32_FErz2@-j-&R|Fg~nKp!M@x zP$&ci{l8!!==MKD%_>k_cxU4arH|e(B4_+Ti~!(1JT9Fv#sQbdjNP#(l~@0mLT6_r zCZLpoh=!@GFva9aJzTh;;W0vRI^B$qGim)IbQlQBbNklsQ&RFkhZtIxjFDP@fWBw- zk6V&FAw9L{JK|y=D$1b#)HqD8ze;y!wlO2Ao0s2Aq-aGWHT4sztc!&qoe(shDM)2? z?mWa}b~NpMYu=)rJAJ(HWmm_Da9@i!qLgFC_a4unrv6sD$^I4<)yKnG=h^qccv7cz zQt?7H`J3lZ{@f?rTQHx0pAF}}MIHR%uamfP)qyBsy+O5xj;DdcR-?0+>9fQZRM_q6cR)Adv}M6+~W3uqb|9{yaD#CKn$1uF5s&i+S+~zBEIesLDt+pk zyMO-RXUowwre`nVbn7=p0I=3_YEl=Qe%3(tf{Qq%8%Lj2+!*AL2!`h5nig7(<1n8@yxXDi+(GQ`F9@-&`#>GpsC!a_`zEc%>|b_ZS8;G@?n z?Y26l2M?k2^}%fd(OZ~b9;9t6?&;3Pl9qY1> zaq03nX8veCotI-!w*2_ZhIcsE0n;L!-E^UNzG6jsG!B2A)*T%d0E@<&CMJoKuJUf_ zVP+(DQ1xjXYo1G^>1;fhhEMxVP1!`YB-xT?M7Za!77kV>BhqJ07=~$Wn%-&_fNk3r zQMBO!yCZ&P`T%&H6``SSHazkfYk%BCOc)$IGLHR+6F71_mTs4hI74VY8*Vdvz%&s| zOLYR+z+O=N)DMS@V85ea1GofO0`4;rMP!(p%x_&}TH;m0LwafdGLpJeF`R6Q!fiML z77GYK3B?OwRa&%HgOv4|{oT+wlY&qG71r2+MC)=AiN@cI&#Vv;j1gm8H7&A80_S;OQMy zmFsasJdyW5I6Y7m z(=@+58;g~G`(s@}N%EBZhmU9ueV8zPtwI5UOpnoVZtt7v>1AcUb&#yk zHVKjggax@2y#nQ6l%~PS(PC~0U?8{}q8;cV%z`#002ovPDHLkV1ir{U+w?^ literal 0 HcmV?d00001 diff --git a/static/marketSituation-image/country-flag/sg.png b/static/marketSituation-image/country-flag/sg.png new file mode 100644 index 0000000000000000000000000000000000000000..18f5dbab3803878c97ab548b3cd68664c1293897 GIT binary patch literal 1165 zcmV;81akX{P)Px(M@d9MR9HvFmtRa%R~*N`ze`&!?TG7eFrCbZBrOWMWfiECWW*(q5VuSd32ttT zJ?urCIwBK&*y>D{v6*GBlRYfU<`!clE^&MCZGy02BvhE-vOma_0%a|XYVW3(ZF!rxs$r2QJ8=|&)gj0)g0%{*};yQ^zrHlXz zuMPfW8#hI$0oIYW*$J(?7a&8?5Pp5Ss_x3_>-cRZL=wR8CXYM)Xx%02t9ui|{7$o2~9)bc_pR_>~hK>E;V%$c(83D_GCWAe+hi2U@kQ3zi+1oygu z)=4?BsFvSV@(F-L_EX2O@}){>1A_?cd>JAV=F%cqb`)dcjSYW+ti;|E)DukV~Lx81a2Zc#i%WnRBwt83FJM zfM=4vF~j_v8`f9$!o0Nr_gk+{m*VR(KT*V+&Om$8okSZOq&ZKpsZRIGTy5HVWVZ&?U~CWdab*s*{Lr z#fm#KHvu@ZOaP~e=&J(cEo$H1y280YFO%mqUd8MUiwfmv_#q88h1ecmW((#O@H;{waVH zL?qjA!vJy75P8uEpeouo8c5Q6)77p5^4 fz(pc5)F}Q3{?(98rWlRC00000NkvXXu0mjfAC@5X literal 0 HcmV?d00001 diff --git a/static/marketSituation-image/country-flag/th.png b/static/marketSituation-image/country-flag/th.png new file mode 100644 index 0000000000000000000000000000000000000000..ad615360dbe6c663706360925de23ba9fbccd893 GIT binary patch literal 703 zcmV;w0zmzVP)Px%c}YY;R9HvNS3zqNVHBL%CX^USB}x;aN@*Ig3W7rI#gkG{PQAT6VjMucbl&!d)=9N!~4G7 zH;=IS%=`U5P26WG+DU;NCC~|A*9Kh|;2XgYLSxck=1o}F*X>Bt3beR;Z;#|;M1Vm6 ztycJr_bCD|vtrx{udOW9;#4*8y`#gENn}R>Tm#^;S-2dQCFHTE713Zko~)!%(ZGCL zdq|@eBXDSog*VX%%w|N+A6ScjE!X?Uz=AK>OAT)U_*E1y(a^=f>CpP}bgAwp10vG( z=iTJABoeBN=WEjI)pzutI!>~9FNy|4#0y{wirQYId$Ry~Nv86q3P2IL4`4`f+pEdl zBYC4}Ktw_SKG$*Eo%+rKI6`tR-vJRB2XM)$N}c%UBrmh?%p>2G$cbfF3q5rTI-=)t zk{-GnYbV0dK?o)su~mVIi$wSBrvM|WG@a?lGtRiR~u=#Ksbut$}oLmk~T zkOQDOB&vcNO<`bl8wQWv4*hC|OW5eou+cvv^H+RxxPL{{XgBZKJ>Qx*BWI+ZyqF0# zau|)1j1&y?0QmHu$MHck8I=Z-F#y+<^w(PC0mu=GTQVBUvBGd`vG7 zrJ>}j*He;AZd)kz4xBUdU@@LIS1d0y_Dfr!%T2~a(Q%lINmh)3N^4rx)$C&+;Ps_3 zD&W;Rz78{dK6LMNMfWW&WbG5FlrGWyu l!g{{HWQzV4U~wz!`Co8hPx)P)S5VR9Hu?muqZPRS?I2bMM}J_t9=)mu>+8+ilAV5&;zmA_$d;lB$W1STTlR z{o(@-|UsX#Z$~+D54Y!qP36Rdycsat)R4B z+MZ9Fz4M>>pP4!H5VAZaC3C|q$9&~9wUqs!*N*k6bRp31EW8mo4D8X!CpPZ;0;jW4 zE!_!4d1Qn()WW;&OUw!eO=r{Uy?n3MVX3yRpv@w(Su1y`9}adU*eQV_EC{qYZA-*p zekd67<@8seq4DV7)GUl)nW{VPU>Iq0#tpB8ub%jnh%{XYa6tm2N){F$txs=3GxDxE z3F4(uo?rB3hJX`v`LS^&w&m-dK)Zxc2izhehyDxtAAu+jj&pMS9|dxW6c$DJcHc>$ zh5T5U+_1&rL&r((UxZ_s*%JV?QjMtt-`yCRI(_%K!1D-{4tpSe;)t_bv>Tar^Q8<= zM0jmQE!q`sxx18TB*dmQ)$C_Ie${$W1lp6;uk?61Coeh(6!3T`Ww_NN#so%QJ2k=D zS8C9%X8e@F#D_=O^!h#o!EdyZG}dFgT_#~y40R?E~tRgb|M~50~Hkcn5))Gq-s3gvfWd zSB&*N^XLxJDb2K*1DPvTiAuxm_m&bX2(fO>*BokCfo)qo2|+t14O}52$;>qp zmn^7K+MJV<r22?_?~0SeO;j{V+3US1HNqY?3Os^K)r9hKO<@PKDi|JC$nX!7Ly zv^$v$3X6ph%x^S5h_QIk21Mz2&-P$=RH~`PajHQX_yUbz5!)1^Nu0phHbXI{VjV} zU4vuv&bWs*a&p$nbrYYhnLeZN%2hA!BHd;(>gq64%M!f0d?#*Nm~?$U#fg00TAj>< z#0sXUZ&-$Pk%g!ey0tQ`TSj>ymp!L%7Yf zj{#2hz&?>|w%xXYnP4`3_+gci7oO86YO_?LPM)d?m6um$2xzTG0Q-Q881%BVbYU^C zkz6Js2RqWa<y_Fp!DhT@rGHAptX)GrMGBQpM*n@I>Rt-^^)$tPU^I#YOO=9$#0gpTR)zQQayVe-fA}Urk9=J zBfZruGlpkPpu-zD#ftP|paKYVALfjNx3z3EFqa8!$*wS2cNMQ`l}VQ~&?~07*qoM6N<$f(O&S>;M1& literal 0 HcmV?d00001 diff --git a/static/marketSituation-image/country-flag/vi.png b/static/marketSituation-image/country-flag/vi.png new file mode 100644 index 0000000000000000000000000000000000000000..5c52706f969a04b0977f3cdb495511b390eef43f GIT binary patch literal 1132 zcmV-y1e5!TP)Px(CP_p=R9HvNS4(UgRTMpU#&P^fT*r!?G{hllY&WGM2v7<_-L!02pmqg?h7Ckr zBGjLtLPbJV7oZk|SfEO@U7(0aED%u_2=S3vfRu`sRsuV*Q?+pvrwN%jspIc>9(ohU zotUxxrtN~avgh4<-kJN(eRCc`aKu9)k4pKMiD*9F#aHHY0LEp8v*AQ?rcq8^0?FQ9XVyVy7~vfNHo=8! z!&FB2yyz&Ne(L7kbu$c80`X9AKqX8N@WcZyyd{l*zX)_75}&WB49` z?@=snz)*6*W9>V)B?f#uTsbxzoSWl9MU_A_68wZ1j*6mrM>1&JpTpd!Uo@o}M-1n8CXy$r z1i0wRgqRhz_l+;YF;v9N-X4?{$tnr81Zn8W_?@U;fmk?r3Ba48C@qhv*zscukb%1& zbRa$6CYoxDyF3_AzD4|mD^p1vAslj*T-j=z{ z4^HHxc2fem>vm*+bC{DOT%=ey_y>SzY9m~G3h4fL87)258hsOo6$ne`w_)Y0cA!4Q zHBMj&K&Kf+$*m!9DvfQgteaM&Ud{72>`0yRp_piCwk--L!1*=oqqY}w==yL4wm{=* zuo7YU3lEeF?cl!!h9*RS1IbJ6Gy~uo@V=hem}0=n zSQ`p4I|A>fA+>AzbGtzp7lbzSJN~Ebc|%sc_NL~ zZ+J|HNC9#(TkjV782OK{>Ti|#sqyE+-mk)cERFf2ogzl%(qKF}suQR<-<$P5$C8sl z%L(;0xJ!b}z={pyRheOsJELmUR490k5sr)0?qOpX;nQ8y$zvR+NaPP)o~-4DA! zqkL}3^3LLOn>Kw*ohr^~Qs`iMFqVo08aCSV|CcS_d?{|v8Q8?5+74cJiQ%BxHLb2x zb(@~IpCN{~t(euCol%M5GgqFS-n8MhJJ+|$BuM8X@jKBbq7+k8 yJmmAJ { + const cardData = ref([ + { + market: "usa", + stockName: "道琼斯", + stockCode: "noCode", + currentPrice: "45757.90", + changeAmount: "-125.22", + changePercent: "-0.27%", + isRising: false, + }, + { + market: "usa", + stockName: "纳斯达克", + stockCode: "noCode", + currentPrice: "22333.96", + changeAmount: "+125.22", + changePercent: "+0.47%", + isRising: true, + }, + { + market: "usa", + stockName: "标普500", + stockCode: "noCode", + currentPrice: "6606.08", + changeAmount: "+125.22", + changePercent: "+0.27%", + isRising: true, + }, + { + market: "cn", + stockName: "上证指数", + stockCode: "noCode", + currentPrice: "3333.96", + changeAmount: "+125.22", + changePercent: "+0.27%", + isRising: true, + }, + { + market: "cn", + stockName: "科创50", + stockCode: "noCode", + currentPrice: "757.90", + changeAmount: "-25.22", + changePercent: "-0.27%", + isRising: false, + }, + ]); + + // 记得 return + return { + cardData + }; + }, + // TODO: 持久化 + { + // 网页端持久化 + // persist: true, + // 小程序端持久化 + persist: { + storage: { + getItem(key) { + return uni.getStorageSync(key); + }, + setItem(key, value) { + uni.setStorageSync(key, value); + }, + }, + }, + } +);