From c78175f93ba16684e9292bc08cc75e8f872120e9 Mon Sep 17 00:00:00 2001 From: lihui Date: Tue, 28 Oct 2025 17:47:42 +0800 Subject: [PATCH 01/16] =?UTF-8?q?add:=E5=AF=B9=E6=8E=A5=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3=20?= =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E4=BF=AE=E6=94=B9=E5=AF=86=E7=A0=81=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=20=E9=85=8D=E7=BD=AE=E4=BF=A1=E6=81=AF=E6=8E=A5?= =?UTF-8?q?=EF=BC=88=E9=83=A8=E5=88=86=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/member.js | 46 ++++ api/setting/general.js | 13 + api/setting/nextPwd.js | 16 ++ api/setting/password.js | 31 +++ pages/home/member.vue | 583 +++++++++++++++++++++++---------------------- pages/setting/account.vue | 27 ++- pages/setting/general.vue | 331 +++++++++++++------------ pages/setting/nextPwd.vue | 303 ++++++++++++----------- pages/setting/password.vue | 362 +++++++++++++++------------- utils/http.js | 7 +- 10 files changed, 969 insertions(+), 750 deletions(-) create mode 100644 api/member.js create mode 100644 api/setting/general.js create mode 100644 api/setting/nextPwd.js create mode 100644 api/setting/password.js diff --git a/api/member.js b/api/member.js new file mode 100644 index 0000000..257801c --- /dev/null +++ b/api/member.js @@ -0,0 +1,46 @@ +import util from '../common/util.js' + +/*export const getUserInfo = (data = {}) => { + return util.request( + '/api/my/userInfo', + (res) => { + console.log('用户信息请求成功:', res); + }, + {data}, + + (err) => { + console.log('用户信息请求失败:', err); + } + ); +}; +*/ + +import { http } from '../utils/http' + + +/** + * 用户信息获取接口 + * @param data + * @returns {Promise} + */ +export const getUserInfo = (data) => { + return http({ + method: 'POST', + url: '/api/my/userInfo', + data: + data + , + }) +} + + + + + + + + + + + + diff --git a/api/setting/general.js b/api/setting/general.js new file mode 100644 index 0000000..ea0a395 --- /dev/null +++ b/api/setting/general.js @@ -0,0 +1,13 @@ +import { http } from '../utils/http' + + + +export const getSetting = (data) => { + return http({ + method: 'POST', + url: '/api/my/getSetting', + data: + data + , + }) +} diff --git a/api/setting/nextPwd.js b/api/setting/nextPwd.js new file mode 100644 index 0000000..3508c99 --- /dev/null +++ b/api/setting/nextPwd.js @@ -0,0 +1,16 @@ +import {http} from '../../utils/http' + +/** + * 修改密码 + * @param data + * @returns {*} + */ +export const updatePassword = (data) => { + return http({ + method: 'POST', + url: '/api/my/updatePassword', + data: + data + , + }) +} diff --git a/api/setting/password.js b/api/setting/password.js new file mode 100644 index 0000000..daf81f2 --- /dev/null +++ b/api/setting/password.js @@ -0,0 +1,31 @@ +import {http} from '../../utils/http' + +/** + * 验证码发送 + * @param data + * @returns {*} + */ +export const sendEmail = (data) => { + return http({ + method: 'POST', + url: '/UserLogin/sendEmail', + data: + data + , + }) +} + +/** + * 验证码验证 + * @param data + * @returns {*} + */ +export const validateCode = (data) => { + return http({ + method: 'POST', + url: '/api/my/validateCode', + data: + data + , + }) +} diff --git a/pages/home/member.vue b/pages/home/member.vue index 4805ac3..8de12f4 100644 --- a/pages/home/member.vue +++ b/pages/home/member.vue @@ -1,294 +1,305 @@ \ No newline at end of file diff --git a/pages/setting/account.vue b/pages/setting/account.vue index 5dd5a60..1c1607a 100644 --- a/pages/setting/account.vue +++ b/pages/setting/account.vue @@ -15,21 +15,21 @@ 昵称 - DeepChart + {{userInfoRes.dcname}} ID - {{ jwcode }} + {{ userInfoRes.dccode }} 密码 - qwertyuiop + {{userInfoRes.password}} @@ -71,10 +71,27 @@ ref, onMounted } from 'vue' + import {getUserInfo} from "@/api/member"; const iSMT = ref(0) - const jwcode = ref('90047681') + // const dccode = ref('') + const userInfoRes = ref({}) const showLogout = ref(false) - + + const userInfoPromise = getUserInfo() + userInfoPromise.then(res => { + if (res.code === 200){ + userInfoRes.value.dccode = res.data.dccode; + userInfoRes.value.dcname = res.data.dcname; + userInfoRes.value.password = res.data.password; + console.log('用户信息', res.data) + }else{ + uni.showToast({ + title: '用户信息请求失败', + icon: 'none', + }) + } + + }) const handleConfirmLogout = () => { showLogout.value = false uni.showToast({ diff --git a/pages/setting/general.vue b/pages/setting/general.vue index cbf21c0..a9a5931 100644 --- a/pages/setting/general.vue +++ b/pages/setting/general.vue @@ -1,165 +1,182 @@ \ No newline at end of file diff --git a/pages/setting/nextPwd.vue b/pages/setting/nextPwd.vue index e55d771..7d410d5 100644 --- a/pages/setting/nextPwd.vue +++ b/pages/setting/nextPwd.vue @@ -1,144 +1,175 @@ \ No newline at end of file diff --git a/pages/setting/password.vue b/pages/setting/password.vue index fec980a..6425aec 100644 --- a/pages/setting/password.vue +++ b/pages/setting/password.vue @@ -1,171 +1,207 @@ \ No newline at end of file diff --git a/utils/http.js b/utils/http.js index a446baf..724ebd6 100644 --- a/utils/http.js +++ b/utils/http.js @@ -1,6 +1,7 @@ import { useUserStore } from "../stores/modules/userInfo" -const baseURL = "https://hwjb.homilychart.com/testApi" +// const baseURL = "https://hwjb.homilychart.com/testApi" +const baseURL = "http://192.168.40.8:9000" const httpInterceptor = { @@ -39,8 +40,8 @@ const httpInterceptor = { //4 添加token,优先用store,没有则回退到body中的token,保持与Apifox一致 const memberStore = useUserStore() // const token = memberStore.userInfo?.token || options.data?.token - options.header.token = '790750702588f1ea79f24dc56ccd5d8a' - const token = '790750702588f1ea79f24dc56ccd5d8a' + options.header.token = '1' + const token = '1' if (token) { options.header.token = token } From 188765185ac2992de680e1892ee34080c579a886 Mon Sep 17 00:00:00 2001 From: no99 <17663930442@163.com> Date: Wed, 29 Oct 2025 10:17:40 +0800 Subject: [PATCH 02/16] =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E9=94=80=E6=AF=81?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E7=A7=BB=E9=99=A4=E7=9B=91=E5=90=AC=E5=99=A8?= =?UTF-8?q?=EF=BC=8C=E6=96=AD=E5=BC=80=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/marketSituation/marketCondition.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pages/marketSituation/marketCondition.vue b/pages/marketSituation/marketCondition.vue index e1f6696..f83db6a 100644 --- a/pages/marketSituation/marketCondition.vue +++ b/pages/marketSituation/marketCondition.vue @@ -1789,7 +1789,8 @@ onLoad((options) => { // 保存定时器,用于页面卸载时清理 onUnmounted(() => { - // disconnect(); + removeTcpListeners(); + disconnect(); if (timer) { console.log("卸载定时器"); clearInterval(timer); From f46711c992f62fbbc102868bb260c7ddf131f65c Mon Sep 17 00:00:00 2001 From: hongxilin <17663930442@163.com> Date: Wed, 29 Oct 2025 15:24:16 +0800 Subject: [PATCH 03/16] =?UTF-8?q?=E6=8E=A5k=E7=BA=BF=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=EF=BC=8C=E5=8A=A0=E5=A4=9A=E8=AF=AD=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/marketSituation/marketCondition.vue | 360 ++++++++++++++++++++---------- static/language/en.js | 33 +-- static/language/ms.js | 7 +- static/language/th.js | 7 +- static/language/vi.js | 7 +- static/language/zh_CN.js | 33 +-- static/language/zh_HK.js | 33 +-- 7 files changed, 317 insertions(+), 163 deletions(-) diff --git a/pages/marketSituation/marketCondition.vue b/pages/marketSituation/marketCondition.vue index f83db6a..58c1b51 100644 --- a/pages/marketSituation/marketCondition.vue +++ b/pages/marketSituation/marketCondition.vue @@ -145,7 +145,7 @@ - + - + - - {{ item }} - K线图开发中... @@ -240,21 +237,6 @@ import tcpConnection, { TCPConnection, TCP_CONFIG } from "@/api/tcpConnection.js // TCP相关响应式变量 const tcpConnected = ref(false); -const tcpMessages = ref([]); -const tcpStockData = ref({ - count: 0, - data: {}, - stock_count: 0, - timestamp: "", - type: "", -}); -const currentStockInfo = ref({ - stock_name: "未知股票", - current_price: "0.00", - change: "0.00%", - change_value: 0, - change_percent: 0, -}); const connectionListener = ref(null); const messageListener = ref(null); @@ -465,11 +447,54 @@ const confirmStockColor = (price, lastDayStockClosePrice) => { // 股票K线类型方法 const selectKlineTab = (tabId) => { klineTab.value = tabId; - - if (klineTab.value == 1) { - sendTcpMessage("init_real_time"); + if (klineTab.value) { + sendTcpMessage("stop_real_time"); + } + switch (klineTab.value) { + case 1: + sendTcpMessage("init_real_time"); + break; + case 2: + sendTcpMessage("daily_data"); + break; + case 3: + sendTcpMessage("weekly_data"); + break; + case 4: + sendTcpMessage("monthly_data"); + break; + case 5: + sendTcpMessage("daily_one_minutes_data"); + break; + case 6: + sendTcpMessage("daily_five_minutes_data"); + break; + case 7: + sendTcpMessage("daily_fifteen_minutes_data"); + break; + case 8: + sendTcpMessage("daily_thirty_minutes_data"); + break; + case 9: + sendTcpMessage("daily_sixty_minutes_data"); + break; + case 10: + uni.showToast({ + title: "暂无季K数据", + icon: "none", + duration: 2000, + }); + break; + case 11: + uni.showToast({ + title: "暂无年K数据", + icon: "none", + duration: 2000, + }); + break; + default: + break; } - initCanvas(); // startAddDataTimer(); }; @@ -1246,6 +1271,7 @@ const touchMove = (e) => { } } } else { + return; if (klineTab.value === 2) { // if(currentY) if (currentX < touchState.startX) { @@ -1413,10 +1439,6 @@ const initTcpListeners = () => { timestamp: new Date().toLocaleTimeString(), direction: "received", }; - console.log("0000"); - tcpMessages.value.push(messageObj); - // console.log('收到TCP消息:', messageObj) - console.log("home开始调用parseStockData", messageObj); // 解析股票数据 parseStockData(message); @@ -1469,6 +1491,7 @@ const sendTcpMessage = (command) => { command: "stock_list", }; break; + // 日线数据 case "daily_data": messageData = { command: "daily_data", @@ -1477,38 +1500,53 @@ const sendTcpMessage = (command) => { end_date: "20251023", }; break; + // 周线数据 case "weekly_data": messageData = { command: "weekly_data", stock_code: "000001.SZ", - start_date: "20251001", - end_date: "20251023", + start_date: "2024912", + end_date: "20251029", }; break; + // 周线数据 + case "monthly_data": + messageData = { + command: "monthly_data", + stock_code: "000001.SZ", + start_date: "2024912", + end_date: "20251029", + }; + break; + // 1分钟线数据 case "daily_one_minutes_data": messageData = { command: "daily_one_minutes_data", stock_code: "000001.SZ", }; break; + // 5分钟线数据 case "daily_five_minutes_data": messageData = { command: "daily_five_minutes_data", stock_code: "000001.SZ", }; break; + // 15分钟线数据 case "daily_fifteen_minutes_data": messageData = { command: "daily_fifteen_minutes_data", stock_code: "000001.SZ", }; break; + // 30分钟线数据 case "daily_thirty_minutes_data": messageData = { command: "daily_thirty_minutes_data", stock_code: "000001.SZ", }; break; + // 60分钟线数据 case "daily_sixty_minutes_data": messageData = { command: "daily_sixty_minutes_data", @@ -1531,7 +1569,7 @@ const sendTcpMessage = (command) => { uni.showToast({ title: "命令不存在", icon: "none", - duration: 1500, + duration: 1000, }); return; } else { @@ -1543,7 +1581,7 @@ const sendTcpMessage = (command) => { uni.showToast({ title: "消息发送成功", icon: "success", - duration: 1500, + duration: 1000, }); } } catch (error) { @@ -1551,34 +1589,66 @@ const sendTcpMessage = (command) => { uni.showToast({ title: "消息发送失败", icon: "none", - duration: 1500, + duration: 1000, }); } } }; -// 清空消息记录 -const clearTcpMessages = () => { - tcpMessages.value = []; - uni.showToast({ - title: "消息记录已清空", - icon: "success", - duration: 1500, - }); -}; - // 获取TCP连接状态 const getTcpStatus = () => { const status = tcpConnection.getConnectionStatus(); uni.showModal({ title: "TCP连接状态", - content: `当前状态: ${status ? "已连接" : "未连接"}\n消息数量: ${tcpMessages.value.length}`, + content: `当前状态: ${status ? "已连接" : "未连接"}`, showCancel: false, }); }; -let isMorePacket = false; +let isMorePacket = { + init_real_time: false, + daily_data: false, + weekly_data: false, + monthly_data: false, + daily_one_minutes_data: false, + daily_five_minutes_data: false, + daily_fifteen_minutes_data: false, + daily_thirty_minutes_data: false, + daily_sixty_minutes_data: false, +}; let receivedMessage; +const findJsonPacket = (message, command) => { + let jsonStartIndex = 0; + let jsonEndIndex = message.indexOf(command); + let jsonStartCount = 0; + let jsonEndCount = 0; + + for (let i = 0; i < message.length - 1; ++i) { + if (message[i] == "{") { + jsonStartCount++; + if (jsonStartCount == 2) { + jsonStartIndex = i; + break; + } + } + } + + for (let i = message.indexOf(command); i >= 0; --i) { + if (message[i] == "}" || i == jsonStartIndex) { + jsonEndCount++; + if (jsonEndCount == 1) { + jsonEndIndex = i; + break; + } + } + } + + // 检查JSON字符串是否有效 + if (jsonStartIndex >= jsonEndIndex) { + return { error: true }; + } + return { json: JSON.parse(message.substring(jsonStartIndex, jsonEndIndex + 1)) }; +}; // 解析TCP股票数据 const parseStockData = (message) => { try { @@ -1592,105 +1662,153 @@ const parseStockData = (message) => { console.log("服务器命令列表,不予处理"); return; } - if ((typeof message === "string" && message.includes("init_real_data_start")) || isMorePacket) { + if ((typeof message === "string" && message.includes("init_real_data_start")) || isMorePacket.init_real_time) { if (typeof message === "string" && message.includes("init_real_data_start")) { console.log("开始接受分包数据"); receivedMessage = ""; } else { console.log("接收分包数据过程中"); } - isMorePacket = true; + isMorePacket.init_real_time = true; receivedMessage += message; // 如果当前消息包含},说明收到JSON字符串结尾,结束接收,开始解析 if (receivedMessage.includes("init_real_data_complete")) { console.log("接受分包数据结束"); - isMorePacket = false; + isMorePacket.init_real_time = false; console.log("展示数据", receivedMessage); - // 获取JSON字符串的开头和结尾的坐标 - let jsonStartIndex = 0; - let jsonEndIndex = receivedMessage.indexOf("init_real_data_complete"); - let jsonStartCount = 0; - let jsonEndCount = 0; - for (let i = 0; i < receivedMessage.length - 1; ++i) { - if (receivedMessage[i] == "{") { - jsonStartCount++; - if (jsonStartCount == 2) { - jsonStartIndex = i; - break; - } + + const result = findJsonPacket(receivedMessage, "init_real_data_complete"); + if (result.error) { + throw new Error("解析JSON字符串失败"); + } else { + parsedMessage = result.json; + console.log("JSON解析成功,解析后类型:", typeof parsedMessage, parsedMessage); + if (parsedMessage.type === "daily_data") { + timeData.value = parsedMessage.data; + stockInformation.value.lastDayStockClosePrice = parsedMessage.pre_close; + console.log("lastDayStockClosePrice", stockInformation.value.lastDayStockClosePrice); + drawChart(); + sendTcpMessage("stop_real_time"); + sendTcpMessage("real_time"); } } + } + } else if ((typeof message === "string" && message.includes("daily_data_start")) || isMorePacket.daily_data) { + if (typeof message === "string" && message.includes("daily_data_start")) { + console.log("开始接受分包数据"); + receivedMessage = ""; + } else { + console.log("接收分包数据过程中"); + } + isMorePacket.daily_data = true; + receivedMessage += message; + // 如果当前消息包含},说明收到JSON字符串结尾,结束接收,开始解析 + if (receivedMessage.includes("daily_data_complete")) { + console.log("接受分包数据结束"); + isMorePacket.daily_data = false; - for (let i = receivedMessage.indexOf("init_real_data_complete"); i >= 0; --i) { - if (receivedMessage[i] == "}" || i == jsonStartIndex) { - jsonEndCount++; - if (jsonEndCount == 1) { - jsonEndIndex = i; - break; - } + console.log("展示数据", receivedMessage); + + const result = findJsonPacket(receivedMessage, "daily_data_complete"); + if (result.error) { + throw new Error("解析JSON字符串失败"); + } else { + parsedMessage = result.json; + console.log("JSON解析成功,解析后类型:", typeof parsedMessage, parsedMessage); + if (parsedMessage.type === "daily_data") { + klineData.value = parsedMessage.data.map((item) => ({ + open: item.ask_open, + close: item.ask_close, + high: item.ask_high, + low: item.ask_low, + volume: item.tick_qty, + date: item.trade_date ? `${item.trade_date.slice(0, 4)}-${item.trade_date.slice(4, 6)}-${item.trade_date.slice(6, 8)}` : item.trade_date, + })); + stockInformation.value.lastDayStockClosePrice = klineData.value[klineData.value.length - 2].close; + touchState.offset = canvasWidth.value / klineData.value.length / 2; + console.log("lastDayStockClosePrice", stockInformation.value.lastDayStockClosePrice); + drawChart(); } } - // 检查JSON字符串是否有效 - if (jsonStartIndex >= jsonEndIndex) { - throw new Error("JSON字符串格式错误"); - } + } + } else if ((typeof message === "string" && message.includes("weekly_data_start")) || isMorePacket.weekly_data) { + if (typeof message === "string" && message.includes("weekly_data_start")) { + console.log("开始接受分包数据"); + receivedMessage = ""; + } else { + console.log("接收分包数据过程中"); + } + isMorePacket.weekly_data = true; + receivedMessage += message; + // 如果当前消息包含},说明收到JSON字符串结尾,结束接收,开始解析 + if (receivedMessage.includes("weekly_data_complete")) { + console.log("接受分包数据结束"); + isMorePacket.weekly_data = false; - console.log("检测到JSON字符串,开始解析"); - parsedMessage = JSON.parse(receivedMessage.substring(jsonStartIndex, jsonEndIndex + 1)); - console.log("JSON解析成功,解析后类型:", typeof parsedMessage, parsedMessage); - if (parsedMessage.type === "daily_data") { - timeData.value = parsedMessage.data; - stockInformation.value.lastDayStockClosePrice = parsedMessage.pre_close; - console.log("lastDayStockClosePrice", stockInformation.value.lastDayStockClosePrice); - drawChart(); + console.log("展示数据", receivedMessage); + + const result = findJsonPacket(receivedMessage, "weekly_data_complete"); + if (result.error) { + throw new Error("解析JSON字符串失败"); + } else { + parsedMessage = result.json; + console.log("JSON解析成功,解析后类型:", typeof parsedMessage, parsedMessage); + if (parsedMessage.type === "weekly_data") { + klineData.value = parsedMessage.data.map((item) => ({ + open: item.bid_open, + close: item.bid_close, + high: item.bid_high, + low: item.bid_low, + volume: item.vol, + amount: item.amount, + date: item.trade_date ? `${item.trade_date.slice(0, 4)}-${item.trade_date.slice(4, 6)}-${item.trade_date.slice(6, 8)}` : item.trade_date, + })); + stockInformation.value.lastDayStockClosePrice = klineData.value[klineData.value.length - 2].close; + touchState.offset = canvasWidth.value / klineData.value.length / 2; + console.log("lastDayStockClosePrice", stockInformation.value.lastDayStockClosePrice); + drawChart(); + } } } - // 通过了JSON解析判断,说明返回的数据是需要的正确数据,进行股票实时数据检查 - console.log("开始处理解析后的数据"); - - // 检查是否是股票数据(支持batch_data_chunk和batch_realtime_data两种类型) - if ((parsedMessage.type === "batch_data_chunk" || parsedMessage.type === "batch_realtime_data") && parsedMessage.data) { - console.log("开始更新TCP股票数据存储"); - // 更新TCP股票数据存储 - tcpStockData.value = { - count: parsedMessage.count || 0, - data: parsedMessage.data || {}, - stock_count: parsedMessage.stock_count || 0, - timestamp: parsedMessage.timestamp || "", - type: parsedMessage.type || "", - }; + } else if ((typeof message === "string" && message.includes("daily_one_minutes_data_start")) || isMorePacket.daily_one_minutes_data) { + if (typeof message === "string" && message.includes("daily_one_minutes_data_start")) { + console.log("开始接受分包数据"); + receivedMessage = ""; + } else { + console.log("接收分包数据过程中"); + } + isMorePacket.daily_one_minutes_data = true; + receivedMessage += message; + // 如果当前消息包含},说明收到JSON字符串结尾,结束接收,开始解析 + if (receivedMessage.includes("daily_one_minutes_data_complete")) { + console.log("接受分包数据结束"); + isMorePacket.daily_one_minutes_data = false; - // 获取第一个股票的数据用于显示 - const stockCodes = Object.keys(parsedMessage.data); - if (stockCodes.length > 0) { - const firstStockCode = stockCodes[0]; - - // 检查数据结构 - if (parsedMessage.data[firstStockCode] && Array.isArray(parsedMessage.data[firstStockCode]) && parsedMessage.data[firstStockCode].length > 0) { - const stockData = parsedMessage.data[firstStockCode][0]; // 取第一条数据 - - if (stockData && stockData.current_price !== undefined && stockData.pre_close !== undefined) { - // 计算涨跌幅 - const changeValue = stockData.current_price - stockData.pre_close; - const changePercent = ((changeValue / stockData.pre_close) * 100).toFixed(2); - const changeSign = changeValue >= 0 ? "+" : ""; - - // 更新当前显示的股票信息 - currentStockInfo.value = { - stock_name: stockData.stock_name || "未知股票", - current_price: stockData.current_price ? stockData.current_price.toFixed(2) : "0.00", - change: `${changeSign}${changePercent}%`, - change_value: changeValue, - change_percent: parseFloat(changePercent), - }; - - console.log("股票数据更新成功:", currentStockInfo.value); - } + console.log("展示数据", receivedMessage); + + const result = findJsonPacket(receivedMessage, "daily_one_minutes_data_complete"); + if (result.error) { + throw new Error("解析JSON字符串失败"); + } else { + parsedMessage = result.json; + console.log("JSON解析成功,解析后类型:", typeof parsedMessage, parsedMessage); + if (parsedMessage.type === "daily_one_minutes_data") { + // klineData.value = parsedMessage.data.map((item) => ({ + // open: item.open, + // close: item.close, + // high: item.high, + // low: item.low, + // volume: item.volume, + // amount: item.amount, + // date: item.time, + // })); + stockInformation.value.lastDayStockClosePrice = klineData.value[klineData.value.length - 2].close; + touchState.offset = canvasWidth.value / klineData.value.length / 2; + console.log("lastDayStockClosePrice", stockInformation.value.lastDayStockClosePrice); + drawChart(); } } - } else { - console.log("不是batch_data_chunk或batch_realtime_data类型的消息,跳过处理"); } } else { // 没有通过JSON解析判断,说明不是需要的数据 diff --git a/static/language/en.js b/static/language/en.js index 4165665..3fb3b04 100644 --- a/static/language/en.js +++ b/static/language/en.js @@ -1,14 +1,21 @@ +/** @format */ + export default { - language: { - "name": "Simplified Chinese" - }, - components: { - footerBar: { - homepage: '首页', - marketSituation: '行情', - deepMate: 'DeepMate', - deepExploration: '深度探索', - member: '我的', - }, - } -} \ No newline at end of file + language: { + name: "Simplified Chinese", + }, + components: { + footerBar: { + homepage: "首页", + marketSituation: "行情", + deepMate: "DeepMate", + deepExploration: "深度探索", + member: "我的", + }, + }, + marketSituation: { + globalIndex: "全球指数", + globalIndexMore:'查看更多', + warn:'全球指数为试运行,免费开放,有诸多不足请见谅' + }, +}; diff --git a/static/language/ms.js b/static/language/ms.js index 511083a..1b5488f 100644 --- a/static/language/ms.js +++ b/static/language/ms.js @@ -10,5 +10,10 @@ export default { deepExploration: '深度探索', member: '我的', }, - } + }, + marketSituation: { + globalIndex: "全球指数", + globalIndexMore:'查看更多', + warn:'全球指数为试运行,免费开放,有诸多不足请见谅' + }, } \ No newline at end of file diff --git a/static/language/th.js b/static/language/th.js index 4a6ad2e..5b3179b 100644 --- a/static/language/th.js +++ b/static/language/th.js @@ -10,5 +10,10 @@ export default { deepExploration: '深度探索', member: '我的', }, - } + }, + marketSituation: { + globalIndex: "全球指数", + globalIndexMore:'查看更多', + warn:'全球指数为试运行,免费开放,有诸多不足请见谅' + }, } diff --git a/static/language/vi.js b/static/language/vi.js index cc829a2..862aa11 100644 --- a/static/language/vi.js +++ b/static/language/vi.js @@ -10,5 +10,10 @@ export default { deepExploration: '深度探索', member: '我的', }, - } + }, + marketSituation: { + globalIndex: "全球指数", + globalIndexMore:'查看更多', + warn:'全球指数为试运行,免费开放,有诸多不足请见谅' + }, } \ No newline at end of file diff --git a/static/language/zh_CN.js b/static/language/zh_CN.js index 1569257..b939954 100644 --- a/static/language/zh_CN.js +++ b/static/language/zh_CN.js @@ -1,15 +1,22 @@ +/** @format */ + // 中文简体 export default { - language: { - name: '中文简体' - }, - components: { - footerBar:{ - homepage: '首页', - marketSituation: '行情', - deepMate: 'DeepMate', - deepExploration: '深度探索', - member: '我的', - }, - }, -} + language: { + name: "中文简体", + }, + components: { + footerBar: { + homepage: "首页", + marketSituation: "行情", + deepMate: "DeepMate", + deepExploration: "深度探索", + member: "我的", + }, + }, + marketSituation: { + globalIndex: "全球指数", + globalIndexMore:'查看更多', + warn:'全球指数为试运行,免费开放,有诸多不足请见谅' + }, +}; diff --git a/static/language/zh_HK.js b/static/language/zh_HK.js index 14c440f..76d90f9 100644 --- a/static/language/zh_HK.js +++ b/static/language/zh_HK.js @@ -1,15 +1,22 @@ +/** @format */ + // 中文繁体 export default { - language: { - name: "中文繁体" - }, - components: { - footerBar: { - homepage: '首页', - marketSituation: '行情', - deepMate: 'DeepMate', - deepExploration: '深度探索', - member: '我的', - }, - }, -} \ No newline at end of file + language: { + name: "中文繁体", + }, + components: { + footerBar: { + homepage: "首页", + marketSituation: "行情", + deepMate: "DeepMate", + deepExploration: "深度探索", + member: "我的", + }, + }, + marketSituation: { + globalIndex: "全球指数", + globalIndexMore:'查看更多', + warn:'全球指数为试运行,免费开放,有诸多不足请见谅' + }, +}; From cbf88d106fc955fe602156a584e9c95a3c36e569 Mon Sep 17 00:00:00 2001 From: wangyi <3432649580@qq.com> Date: Wed, 29 Oct 2025 15:24:25 +0800 Subject: [PATCH 04/16] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages.json | 10 ------ pages/setting/account.vue | 4 +++ pages/start/Registration/Registration.vue | 2 +- pages/start/index/index.vue | 56 ------------------------------- utils/http.js | 6 ++-- 5 files changed, 8 insertions(+), 70 deletions(-) delete mode 100644 pages/start/index/index.vue diff --git a/pages.json b/pages.json index cfa20c4..6e16917 100644 --- a/pages.json +++ b/pages.json @@ -29,16 +29,6 @@ } }, { - "path": "pages/start/index/index", - "style": { - "navigationStyle": "custom", - "navigationBarTitleText": "uni-app", - "disableSwipeBack": true, - "titleNView": false, - "bounce": false - } - }, - { "path": "pages/start/Registration/Registration", "style": { "navigationBarTitleText": "", diff --git a/pages/setting/account.vue b/pages/setting/account.vue index d03f1d1..2080ad1 100644 --- a/pages/setting/account.vue +++ b/pages/setting/account.vue @@ -86,6 +86,10 @@ title: '退出登录成功', icon: 'none', }) + + uni.navigateTo({ + url: '/pages/start/login/login' + }) } const goToBind = () =>{ diff --git a/pages/start/Registration/Registration.vue b/pages/start/Registration/Registration.vue index e786964..fc07232 100644 --- a/pages/start/Registration/Registration.vue +++ b/pages/start/Registration/Registration.vue @@ -246,7 +246,7 @@ function showCountryPicker() { function goToIndex() { // 返回上一页 uni.navigateTo({ - url: "/pages/start/index/index", + url: "/pages/start/login/login", }); } diff --git a/pages/start/index/index.vue b/pages/start/index/index.vue deleted file mode 100644 index 30c8683..0000000 --- a/pages/start/index/index.vue +++ /dev/null @@ -1,56 +0,0 @@ - - - - - \ No newline at end of file diff --git a/utils/http.js b/utils/http.js index b4a2740..125a156 100644 --- a/utils/http.js +++ b/utils/http.js @@ -1,7 +1,7 @@ import { useUserStore } from "../stores/modules/userInfo" import { useDeviceStore } from "../stores/modules/deviceInfo" -const baseURL = "https://hwjb.homilychart.com/testApi" +const baseURL = "https://dbqb.nfdxy.net/testApi" const httpInterceptor = { @@ -22,7 +22,7 @@ const httpInterceptor = { // 打印最终请求地址 console.log('HTTP(finalUrl)=', options.url) // 2.请求超时,默认60s - options.timeout = 60000 + options.timeout = 10000 console.log(options) //3 添加小程序端请求头 const sys = uni.getSystemInfoSync(); @@ -91,7 +91,7 @@ export const http = (options) => { fail: (err) => { reject(err) uni.showToast({ - title: '网络错误', + title: '请求超时', icon: 'none' }) } From 54f190ef3869d12e521175a393f18556d43eb748 Mon Sep 17 00:00:00 2001 From: ZhangYong Date: Wed, 29 Oct 2025 15:24:42 +0800 Subject: [PATCH 05/16] =?UTF-8?q?=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 10 ++ package.json | 7 +- pages/deepExploration/MainForceActions.vue | 146 ++++++++++++++++++++++------- 3 files changed, 127 insertions(+), 36 deletions(-) diff --git a/package-lock.json b/package-lock.json index 310d170..0af07b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "@dcloudio/uni-ui": "^1.5.11", "@element-plus/icons-vue": "^2.3.2", "element-plus": "^2.11.5", + "highlight.js": "^11.11.1", "marked": "^2.0.1", "pinia": "^3.0.3", "pinia-plugin-persistedstate": "^4.5.0", @@ -480,6 +481,15 @@ "license": "MIT", "peer": true }, + "node_modules/highlight.js": { + "version": "11.11.1", + "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-11.11.1.tgz", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/hookable": { "version": "5.5.3", "license": "MIT" diff --git a/package.json b/package.json index 6f2aeb3..14c932c 100644 --- a/package.json +++ b/package.json @@ -3,11 +3,10 @@ "@dcloudio/uni-ui": "^1.5.11", "@element-plus/icons-vue": "^2.3.2", "element-plus": "^2.11.5", - "vue-i18n": "^9.14.5", + "highlight.js": "^11.11.1", "marked": "^2.0.1", "pinia": "^3.0.3", - "pinia-plugin-persistedstate": "^4.5.0" + "pinia-plugin-persistedstate": "^4.5.0", + "vue-i18n": "^9.14.5" } - - } diff --git a/pages/deepExploration/MainForceActions.vue b/pages/deepExploration/MainForceActions.vue index f9e87fc..64f7ea9 100644 --- a/pages/deepExploration/MainForceActions.vue +++ b/pages/deepExploration/MainForceActions.vue @@ -47,9 +47,12 @@ - 主力追踪 + {{navItems[currentIndex].name}} + + + 加载中... + - @@ -79,6 +82,9 @@ getModel4First, getModel4Second, } from '/api/deepExploration/deepExploration.js' + import marked from 'marked'; // 引入 marked 库 + import hljs from 'highlight.js'; + import 'highlight.js/styles/atom-one-dark.css'; // 可替换为其他主题 // 响应式变量定义 const type = ref('deepExploration') @@ -116,12 +122,12 @@ } else if (currentIndex.value == 3) { console.log(index); handleModel(3) - }else{ + } else { uni.showToast({ - title: '请选择模块', - icon: 'none', - duration: 2000 - }) + title: '请选择模块', + icon: 'none', + duration: 2000 + }) } } @@ -150,34 +156,67 @@ const recordId = ref('') const parentId = ref('') const stockId = ref('') + + const loading = ref(true); + const error = ref(''); + const htmlContent = ref(''); + const markdownContent = ref(''); + + // 初始化 marked 配置(支持代码高亮) + marked.setOptions({ + highlight: (code, lang) => { + if (lang && hljs.getLanguage(lang)) { + return hljs.highlight(code, { language: lang }).value; + } + return hljs.highlightAuto(code).value; + }, + breaks: true, + gfm: true, + sanitize: true, // 过滤掉 Markdown 中的 inline style(可能导致横向溢出) + sanitizer: (html) => { + // 移除所有 style 属性,避免后端返回的 Markdown 带强制横向样式 + return html.replace(/style="[^"]*"/g, ''); + } + }); + //点击主力追踪 const handleTrack = async () => { try { - const result = await getModel1First({ - content: searchName.value, - language: "cn", - marketList: "hk,cn,usa,my,sg,vi,in,gb", - model: 1 - }) - console.log('result', result); - if (result.code == 200) { - stockCode.value = result.data.code - stockName.value = result.data.name - recordId.value = result.data.recordId - parentId.value = result.data.parentId - stockId.value = result.data.stockId - language.value = result.data.language - const res = await getModel1Second({ - language: language.value, - recordId: recordId.value, - parentId: parentId.value, - stockId: stockId.value - }) - console.log('res', res); - } + markdownContent.value = '\n## 📊 主力解码分析:\n### 序列密码\n\tL2情绪解码。当前股票序列密码为53、0、17、158,市场情绪未出现确定性转折。\n\n### 股票温度\n\tL1情绪监控。当前股票温度为51,处于温热区,情绪积极向上,资金稳步进场。趋势健康,量价配合良好。此时应积极跟随趋势,顺势而为。\n\n### 市场温度\n\t当前市场温度为61,处于温热区,指数温和上行,技术面呈多头排列,资金有序进场,赚钱效应扩散。需警惕市场风险,以规避“甜蜜陷阱”。\n ' + htmlContent.value = marked.parse(markdownContent.value); + loading.value = true; + // const result = await getModel1First({ + // content: searchName.value, + // language: "cn", + // marketList: "hk,cn,usa,my,sg,vi,in,gb", + // model: 1 + // }) + // console.log('result', result); + // if (result.code == 200) { + // stockCode.value = result.data.code + // stockName.value = result.data.name + // recordId.value = result.data.recordId + // parentId.value = result.data.parentId + // stockId.value = result.data.stockId + // language.value = result.data.language + // const res = await getModel1Second({ + // language: language.value, + // recordId: recordId.value, + // parentId: parentId.value, + // stockId: stockId.value, + // token: 'pCtw6AYK0EHAaIexoFHsbZjtsfEAIhcmwkCFm6uKko8VPfMvyDiODL9v9c0veic9fIpQbvT8zN4sH/Si6Q' + // }) + // if (res.code == 200) { + // markdownContent.value = res.data.markdown + // htmlContent.value = marked.parse(markdownContent.value); + // } + // console.log('res', res); + // } } catch { - + error.value = e.message || '加载失败,请重试'; + }finally{ + loading.value = false; } } @@ -584,8 +623,9 @@ \ No newline at end of file diff --git a/pages/setting/email.vue b/pages/setting/email.vue index b3016f6..cc39b5b 100644 --- a/pages/setting/email.vue +++ b/pages/setting/email.vue @@ -15,11 +15,10 @@ - +86 - + - @@ -35,7 +34,7 @@ - + @@ -45,23 +44,67 @@ ref, onMounted } from 'vue' + import { + getUserInfo + } from "@/api/member" + import { + sendEmail, + changeBind + } from "@/api/setting/password" const iSMT = ref(0) - const email = ref('analsak@16.com') + const email = ref('') const gettingCode = ref(false) const time = ref(60) + const userEmail = ref('') + + const userInfoPromise = getUserInfo() + userInfoPromise.then(res => { + if (res.code === 200) { + console.log('个人信息', res.data) + email.value = res.data.email + } else { + uni.showToast({ + title: '用户信息请求失败', + icon: 'none', + }) + } + }) - const getVerification = () => { + const changeAccount = () => { + const res = changeBind({ + verificateType: 0, + account: userEmail.value + }) + if(res.code === 200){ + uni.showToast({ + title: '绑定成功', + icon: 'none', + }) + }else { + uni.showToast({ + title: '用户绑定失败', + icon: 'none', + }) + } + } + + const getCode = () => { if (gettingCode.value) return gettingCode.value = true - time.value = 60 + time.value = 2 + const timer = setInterval(() => { time.value-- if (time.value <= 0) { clearInterval(timer) gettingCode.value = false + time.value = 2 } }, 1000) + sendEmail({ + email: userEmail.value + }) } onMounted(() => { @@ -131,7 +174,7 @@ .change-btn { height: 85rpx; width: 610rpx; - padding:0 20rpx; + padding: 0 20rpx; background-color: black; color: white; border-radius: 40rpx; diff --git a/pages/setting/font.vue b/pages/setting/font.vue index 357739f..cd3efaf 100644 --- a/pages/setting/font.vue +++ b/pages/setting/font.vue @@ -4,18 +4,18 @@ 标准 - + 中号 - + 大号 - + @@ -26,17 +26,39 @@ ref, onMounted } from 'vue' + import { + getSetting + } from "@/api/setting/general" const iSMT = ref(0) const selectedIndex = ref(0) + const getFont = async () => { + try { + const res = await getSetting() + if (res.code === 200) { + const fontSize = res.data.fontSize + const sizeMap = { + small: 0, + medium: 1, + large: 2 + } + console.log('看看字体', res.data.fontSize) + selectedIndex.value = sizeMap[fontSize] ?? 0; + } + } catch (err) { + console.error("获取字体设置失败:", err); + } + } + const selectFont = (index) => { selectedIndex.value = index - console.log('看看选中状态',selectedIndex.value) + console.log('看看选中状态', selectedIndex.value) } onMounted(() => { // 状态栏高度 iSMT.value = uni.getSystemInfoSync().statusBarHeight; console.log('看看高度', iSMT.value) + getFont() }) @@ -53,7 +75,7 @@ display: flex; align-items: center; margin: 0 40rpx; - padding:0 10rpx; + padding: 0 10rpx; border-bottom: 1rpx solid #eee; } diff --git a/pages/setting/general.vue b/pages/setting/general.vue index a9a5931..d60d59d 100644 --- a/pages/setting/general.vue +++ b/pages/setting/general.vue @@ -3,37 +3,37 @@ - 语言 + 语言 {{settingRes.language}} - + - 字体大小 - + 字体大小 + - 主题切换 - + 主题切换 + - 消息推送 - + 消息推送 + - 切换服务器 - + 切换服务器 + - 清理缓存 + 清理缓存 {{ cache }}M - + @@ -171,7 +171,6 @@ onMounted(() => { } .cache { - margin-left: 55%; font-size: 14px; color: rgb(203, 203, 203); } @@ -179,4 +178,9 @@ onMounted(() => { .bottom-list:last-child { border-bottom: none; } + +.label{ + flex:1; + font-size:28rpx; +} \ No newline at end of file diff --git a/pages/setting/introduce.vue b/pages/setting/introduce.vue index ff98778..6a5d07a 100644 --- a/pages/setting/introduce.vue +++ b/pages/setting/introduce.vue @@ -13,7 +13,7 @@ 的品牌标签(DeepChart=全球最懂机构行为的AI),主打"深度解读机构行为"的APP。 2.产品介绍 - DeepChart是一款以"Al智能体”为决策核心的智能投资分析平台, + DeepChart是一款以"Al智能体"为决策核心的智能投资分析平台, 专注于深度研究机构行为,专为全球散户投资者量身打造。它重新定义了人与投资工具之间的关系, 是一个真正懂投资、懂市场、更懂用户的AI投资伙伴。 diff --git a/pages/setting/market.vue b/pages/setting/market.vue index f25dcf7..170b3cb 100644 --- a/pages/setting/market.vue +++ b/pages/setting/market.vue @@ -206,6 +206,7 @@ .indicator-text { font-size: 28rpx; + flex:1; } .indicator-icons { diff --git a/pages/setting/message.vue b/pages/setting/message.vue index b40720b..e600648 100644 --- a/pages/setting/message.vue +++ b/pages/setting/message.vue @@ -3,10 +3,10 @@ - 语言 + 消息推送 通知已开启 通知未开启 - + @@ -51,12 +51,11 @@ } .message { - margin-left: 60%; font-size: 14px; color: rgb(203, 203, 203); } - - .arrow { - margin-left: auto; + + .text{ + flex:1; } \ No newline at end of file diff --git a/pages/setting/password.vue b/pages/setting/password.vue index 6425aec..f2db2fd 100644 --- a/pages/setting/password.vue +++ b/pages/setting/password.vue @@ -1,207 +1,245 @@ \ No newline at end of file diff --git a/pages/setting/phone.vue b/pages/setting/phone.vue index c33bddb..a74c916 100644 --- a/pages/setting/phone.vue +++ b/pages/setting/phone.vue @@ -11,15 +11,14 @@ 已绑手机号:{{ phone }} - +86 - + - @@ -35,7 +34,7 @@ - + @@ -45,12 +44,34 @@ ref, onMounted } from 'vue' + import { + sendPhone, + changeBind + } from "@/api/setting/password" + import { + getUserInfo + } from "@/api/member" + const iSMT = ref(0) - const phone = ref('15105421566') + const phone = ref('') const gettingCode = ref(false) const time = ref(60) + const userPhone = ref('') + + const userInfoPromise = getUserInfo() + userInfoPromise.then(res => { + if (res.code === 200) { + console.log('个人信息', res.data) + phone.value = res.data.phone + } else { + uni.showToast({ + title: '用户信息请求失败', + icon: 'none', + }) + } + }) - const getVerification = () => { + const getCode = () => { if (gettingCode.value) return gettingCode.value = true @@ -63,6 +84,27 @@ gettingCode.value = false } }, 1000) + sendPhone({ + phone: userPhone.value + }) + } + + const changeAccount = () => { + const res = changeBind({ + verificateType: 1, + account: userPhone.value + }) + if(res.code === 200){ + uni.showToast({ + title: '绑定成功', + icon: 'none', + }) + }else { + uni.showToast({ + title: '用户绑定失败', + icon: 'none', + }) + } } onMounted(() => { diff --git a/pages/setting/push.vue b/pages/setting/push.vue index 2aaecf4..9ab36c1 100644 --- a/pages/setting/push.vue +++ b/pages/setting/push.vue @@ -3,25 +3,35 @@ - 公共消息 - 重大咨询、财经要闻等系统提醒 - + 公共消息 + + 重大咨询、财经要闻等系统提醒 + + - 字体大小 - + 指标消息提醒 + + 所有指标消息的提醒 + + - 盯盘预警 - + 盯盘预警 + + 自选股预警和个性化预警设置 + + - 订阅服务 - 45.5M - + 订阅服务 + + 订阅你感兴趣的专题服务 + + @@ -53,7 +63,6 @@ height: 7vh; display: flex; align-items: center; - justify-content: center; margin: 0 40rpx; padding: 0 10rpx; border-bottom: 1rpx solid #eee; @@ -63,25 +72,24 @@ border-bottom: none; } + .right { + display: flex; + align-items: center; + gap: 10rpx; + } + .switch-btn { - width: 100rpx; transform: scale(0.6); transform-origin: center right; } .public { - width: 450rpx; - margin-left: auto; font-size: 10px; color: rgb(203, 203, 203); } - .arrow { - margin-left: auto; - } - .bottom { - height: 13.5vh; + height: 14vh; background-color: white; margin-top: 1vh; } @@ -105,4 +113,8 @@ .bottom-list:last-child { border-bottom: none; } + + .label { + flex: 1; + } \ No newline at end of file diff --git a/pages/setting/server.vue b/pages/setting/server.vue index 044d6aa..9524cfc 100644 --- a/pages/setting/server.vue +++ b/pages/setting/server.vue @@ -26,9 +26,31 @@ ref, onMounted } from 'vue' + import { + getSetting + } from "@/api/setting/general" + const iSMT = ref(0) const selectedIndex = ref(0) + const getServer = async () => { + try { + const res = await getSetting() + if (res.code === 200) { + const fontSize = res.data.fontSize + const sizeMap = { + 'auto': 0, + 'singapore': 1, + 'hongkong': 2 + } + console.log('看看服务器', res.data.fontSize) + selectedIndex.value = sizeMap[fontSize] ?? 0; + } + } catch (err) { + console.error("获取服务器设置失败:", err); + } + } + const selectFont = (index) => { selectedIndex.value = index console.log('看看选中状态',selectedIndex.value) @@ -38,6 +60,7 @@ // 状态栏高度 iSMT.value = uni.getSystemInfoSync().statusBarHeight; console.log('看看高度', iSMT.value) + getServer() }) diff --git a/pages/setting/theme.vue b/pages/setting/theme.vue index 3752eab..43573d9 100644 --- a/pages/setting/theme.vue +++ b/pages/setting/theme.vue @@ -21,8 +21,28 @@ ref, onMounted } from 'vue' + import { + getSetting + } from "@/api/setting/general" const iSMT = ref(0) const selectedIndex = ref(0) + + const getTheme = async () => { + try { + const res = await getSetting() + if (res.code === 200) { + const theme = res.data.theme + const sizeMap = { + 'light': 0, + 'dark': 1 + } + console.log('看看主题', res.data.theme) + selectedIndex.value = sizeMap[theme] ?? 0; + } + } catch (err) { + console.error("获取主题设置失败:", err); + } + } const selectFont = (index) => { selectedIndex.value = index @@ -32,6 +52,7 @@ // 状态栏高度 iSMT.value = uni.getSystemInfoSync().statusBarHeight; console.log('看看高度', iSMT.value) + getTheme() }) diff --git a/utils/http.js b/utils/http.js index 724ebd6..7d5c9b3 100644 --- a/utils/http.js +++ b/utils/http.js @@ -35,13 +35,14 @@ const httpInterceptor = { 'content-type': 'application/json', // 'contentType': 'application/json', 'version': '1', - 'client': client + 'client': client, + 'deviceId':'1' } //4 添加token,优先用store,没有则回退到body中的token,保持与Apifox一致 const memberStore = useUserStore() // const token = memberStore.userInfo?.token || options.data?.token - options.header.token = '1' - const token = '1' + options.header.token = '9cd87893b9282b6a7a6cc9b780c905db' + const token = '9cd87893b9282b6a7a6cc9b780c905db' if (token) { options.header.token = token } diff --git a/vue.config.js b/vue.config.js index 76eaa5d..0345309 100644 --- a/vue.config.js +++ b/vue.config.js @@ -1,14 +1,24 @@ module.exports = { devServer: { - proxy: { + /* proxy: { '/api': { // 你的目标服务器的请求路径前缀 target: 'https://hwjb.homilychart.com', // 目标服务器的地址 changeOrigin: true, // 是否跨域 secure: false, // 如果是https接口,需要配置这个参数 pathRewrite: { - '^/': '/testApi' // 将 /api 替换为 /testApi,以便正确请求目标服务器的资源 + '^/api': '' // 将 /api 替换为 /testApi,以便正确请求目标服务器的资源 } } - } + } */ + proxy: { + '/api': { // 你的目标服务器的请求路径前缀 + target: 'http://192.168.40.8:9000', // 目标服务器的地址 + changeOrigin: true, // 是否跨域 + secure: false, // 如果是https接口,需要配置这个参数 + pathRewrite: { + '^/api': '' // 将 /api 替换为 /testApi,以便正确请求目标服务器的资源 + } + } + } } } \ No newline at end of file From 2dabe35ca4019a2a0a29ba8712363a32a553ef55 Mon Sep 17 00:00:00 2001 From: wangyi <3432649580@qq.com> Date: Wed, 29 Oct 2025 19:54:57 +0800 Subject: [PATCH 15/16] =?UTF-8?q?=E5=BD=93=E8=BF=94=E5=9B=9E401=E7=9A=84?= =?UTF-8?q?=E6=97=B6=E5=80=99=EF=BC=8C=E5=BC=B9=E5=87=BA=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/deepExploration_header.vue | 2 ++ components/login-prompt.vue | 25 ++++++++++++++++++-- stores/index.js | 1 + stores/modules/login.js | 44 +++++++++++++++++++++++++++++++++++ utils/http.js | 13 +++++++++-- 5 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 stores/modules/login.js diff --git a/components/deepExploration_header.vue b/components/deepExploration_header.vue index daae53c..cddab00 100644 --- a/components/deepExploration_header.vue +++ b/components/deepExploration_header.vue @@ -72,6 +72,7 @@ {{ item.stockName }} ({{ item.stockCode }}) + ({{ item.stockCode }}) {{ formatTimeForHistory(item.createdTime) @@ -98,6 +99,7 @@ const props = defineProps({ }, }); const showHistoryDrawer = ref(false); +const modelType = ref(''); const drawerOffsetY = ref(0); // const handleHistory = () => { // showHistoryDrawer.value = true; diff --git a/components/login-prompt.vue b/components/login-prompt.vue index 4d302be..cb13c61 100644 --- a/components/login-prompt.vue +++ b/components/login-prompt.vue @@ -15,20 +15,40 @@