Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
a222fed6e2 | ||
|
149670c3cf | ||
|
0b1426b72f | ||
|
1250b670e9 | ||
|
a21420754c |
@ -82,3 +82,12 @@
|
||||
|
||||
主要代码路径:AIchat\src\pages\index\index.vue
|
||||
其他文件删除时需要注意是否被AIchat\src\pages\index\index.vue引用
|
||||
|
||||
# 发版 只看这里
|
||||
|
||||
- 现在只用ob
|
||||
- 发正式 pnpm build:h5执行后,打包 AIchat\dist\build\h5,压缩文件名 obAiChat-xiaomo.zip,注意 env/.env.production下请求地址
|
||||
- 上传至 <http://114.218.158.24:8044/files/prod/front/AIchat/>, 然后构建 【线上】前端 front-obaichat-xiaomo
|
||||
- 查看<https://xiaomo.fiee.com> 是否更新
|
||||
- 请求地址为 <https://oa-a.szjixun.cn/api>
|
||||
- 此项目提交commit有规则,通用为 fix: xxx
|
||||
|
1
env/.env
vendored
1
env/.env
vendored
@ -8,6 +8,7 @@ VITE_DEV_TOKEN= ""
|
||||
VITE_APP_PUBLIC_BASE=/
|
||||
|
||||
VITE_SERVER_BASEURL = 'http://114.218.158.24:9020'
|
||||
# VITE_SERVER_BASEURL = 'https://oa-b.szjixun.cn/api'
|
||||
VITE_UPLOAD_BASEURL = 'http://114.218.158.24:9020'
|
||||
|
||||
# 有些同学可能需要在微信小程序里面根据 develop、trial、release 分别设置上传地址,参考代码如下。
|
||||
|
4
env/.env.development
vendored
4
env/.env.development
vendored
@ -12,10 +12,10 @@ VITE_SHOW_SOURCEMAP = true
|
||||
# VITE_SERVER_BASEURL = 'https://warehouse.szjixun.cn/oa_backend'
|
||||
|
||||
#体制外
|
||||
# VITE_SERVER_BASEURL = 'https://oa-a.szjixun.cn/api'
|
||||
VITE_SERVER_BASEURL = 'https://oa-a.szjixun.cn/api'
|
||||
|
||||
# 体制内
|
||||
VITE_SERVER_BASEURL = 'https://oa-b.szjixun.cn/api'
|
||||
# VITE_SERVER_BASEURL = 'https://oa-b.szjixun.cn/api'
|
||||
# VITE_SERVER_BASEURL = 'https://oa-b.szjixun.cn/api'
|
||||
# VITE_SERVER_BASEURL = 'https://erpapi.fontree.cn'
|
||||
|
||||
|
4
env/.env.production
vendored
4
env/.env.production
vendored
@ -10,10 +10,10 @@ VITE_SHOW_SOURCEMAP = false
|
||||
# VITE_SERVER_BASEURL = 'https://warehouse.szjixun.cn/oa_backend'
|
||||
# VITE_SERVER_BASEURL = 'https://oa-a.szjixun.cn/api'
|
||||
#体制外
|
||||
# VITE_SERVER_BASEURL = 'https://oa-a.szjixun.cn/api'
|
||||
VITE_SERVER_BASEURL = 'https://oa-a.szjixun.cn/api'
|
||||
|
||||
# 体制内
|
||||
VITE_SERVER_BASEURL = 'https://oa-b.szjixun.cn/api'
|
||||
# VITE_SERVER_BASEURL = 'https://oa-b.szjixun.cn/api'
|
||||
|
||||
|
||||
|
||||
|
@ -11,7 +11,8 @@
|
||||
<div class="flex flex-col h-screen bg-#ffffff tops">
|
||||
<!-- Navigation Bar -->
|
||||
<div
|
||||
class="flex-none flex items-center justify-between px-5 pb-6 bg-white shadow-md h-20 pt-15 z-999 fixed top-0 w-full box-border"
|
||||
class="flex-none flex items-center justify-between px-5 pb-2 bg-white shadow-md pt-2 z-999 fixed w-full box-border"
|
||||
:style="{ top: statusBarHeight + 'px' }"
|
||||
>
|
||||
<image src="/static/aichat/black.png" class="w-3 h-4.5" @click="goBack" />
|
||||
<div class="text-lg font-medium ml-12">小墨</div>
|
||||
@ -21,7 +22,6 @@
|
||||
<image src="/static/aichat/new.png" class="w-5 h-5" @click="newChat" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 消息区 -->
|
||||
<div
|
||||
:class="[
|
||||
@ -514,7 +514,6 @@ import {
|
||||
import 'dayjs/locale/zh-cn'
|
||||
import { showToastErr, showToastOk, time_format3 } from '@/utils/tools'
|
||||
import { uploadFileChunk } from './utils/api.js'
|
||||
// import { TOKEN, AVATAR } from './utils/test'
|
||||
import { deepClone } from 'wot-design-uni/components/common/util'
|
||||
import VConsole from 'vconsole'
|
||||
|
||||
@ -627,11 +626,16 @@ async function createChatSession() {
|
||||
gptModel: chatMode.value,
|
||||
},
|
||||
header: {
|
||||
Authorization: token.value,
|
||||
Authorization: chatToken.value,
|
||||
},
|
||||
})
|
||||
// 如果后台返回新的会话信息,可以在这里处理,比如拿到 listUuid 等
|
||||
|
||||
if (res.data.status === 401) {
|
||||
const { token: newToken } = await window.NativeBridge.call('auth.refreshToken')
|
||||
chatToken.value = newToken
|
||||
createChatSession()
|
||||
return
|
||||
}
|
||||
if (res.data.code === 0 && res?.data?.data?.listUuid) {
|
||||
listUuid.value = res?.data?.data?.listUuid
|
||||
} else {
|
||||
@ -669,10 +673,14 @@ async function fetchHistoryList() {
|
||||
page: state.page,
|
||||
pageSize: state.pageSize,
|
||||
},
|
||||
header: {
|
||||
// Authorization: token.value,
|
||||
},
|
||||
header: {},
|
||||
})
|
||||
if (resp.data.status === 401) {
|
||||
const { token: newToken } = await window.NativeBridge.call('auth.refreshToken')
|
||||
chatToken.value = newToken
|
||||
fetchHistoryList()
|
||||
return
|
||||
}
|
||||
if (resp.data.code == 0 && resp.data.data) {
|
||||
if (rawList.value.length > 0) {
|
||||
rawList.value = rawList.value.concat(resp.data.data.data)
|
||||
@ -731,10 +739,14 @@ async function fetchHistoryDiets(value) {
|
||||
listUuid: value,
|
||||
gptModel: chatMode.value,
|
||||
},
|
||||
header: {
|
||||
// Authorization: token.value,
|
||||
},
|
||||
header: {},
|
||||
})
|
||||
if (resp.data.status === 401) {
|
||||
const { token: newToken } = await window.NativeBridge.call('auth.refreshToken')
|
||||
chatToken.value = newToken
|
||||
fetchHistoryDiets(value)
|
||||
return
|
||||
}
|
||||
if (resp.data.status === 0 && resp.data && resp.data.data) {
|
||||
const rawList = resp?.data?.data?.detail // 假设后端直接返回消息数组
|
||||
listUuid.value = resp?.data?.data?.listUuid
|
||||
@ -1004,35 +1016,31 @@ function tryParseMapFormat(str: string): ParsedPart[] | null {
|
||||
return result.length > 0 ? result : null
|
||||
}
|
||||
|
||||
const token = ref<string>()
|
||||
const userInfo = ref<any>({})
|
||||
const refreshToken = ref<string>('')
|
||||
const statusBarHeight = ref<number>(0)
|
||||
const chatToken = ref<string>()
|
||||
const chatUserInfo = ref<any>({})
|
||||
let statusBarHeight = ref<number>(0)
|
||||
const mask = ref('')
|
||||
// ---- 页面初始化 ----
|
||||
|
||||
onMounted(async () => {
|
||||
const info = await window?.NativeBridge?.call('device.getInfo')
|
||||
if (info) statusBarHeight.value += info.safeAreaInsets.top
|
||||
|
||||
const { token } = await window.NativeBridge.getAccessToken()
|
||||
const { user } = await window.NativeBridge.call('auth.getUser')
|
||||
chatToken.value = token
|
||||
chatUserInfo.value = user
|
||||
// 1. 定义一个 init 函数,拿 Extras 并依次调用接口
|
||||
try {
|
||||
const init = async () => {
|
||||
const wv = plus.webview.currentWebview() // 获取当前页面所属的 Webview 对象。
|
||||
token.value =
|
||||
wv.token ||
|
||||
uni.getStorageSync('token') ||
|
||||
store.userInfo.token ||
|
||||
import.meta.env.VITE_DEV_TOKEN
|
||||
userInfo.value = JSON.parse(wv.userInfo) || {}
|
||||
refreshToken.value = wv.refreshToken || uni.getStorageSync('refreshToken')
|
||||
statusBarHeight.value = wv.statusBarHeight || uni.getSystemInfoSync().statusBarHeight
|
||||
userAvatar.value = userInfo.value.Avatar
|
||||
mask.value = userInfo.value.ID
|
||||
userAvatar.value = chatUserInfo.value.Avatar
|
||||
mask.value = chatUserInfo.value.ID
|
||||
store.setUserInfo({
|
||||
token: token.value,
|
||||
avatar: userInfo.value.Avatar,
|
||||
refreshToken: refreshToken.value,
|
||||
statusBarHeight: statusBarHeight.value,
|
||||
token: chatToken.value,
|
||||
avatar: chatUserInfo.value.Avatar,
|
||||
})
|
||||
if (userInfo.value.TelNum === '18639432358') {
|
||||
if (chatUserInfo.value.TelNum === '18639432358') {
|
||||
new VConsole()
|
||||
}
|
||||
await createChatSession()
|
||||
@ -1041,12 +1049,7 @@ onMounted(async () => {
|
||||
} catch (e) {
|
||||
console.error('onMounted e: ', e)
|
||||
} finally {
|
||||
// store.userInfo.token = ''
|
||||
// token.value = store.userInfo.token
|
||||
}
|
||||
// if (JSON.parse(uni.getStorageSync('userInfo'))?.NickName === '常东方') {
|
||||
// new VConsole()
|
||||
// }
|
||||
})
|
||||
|
||||
function scrollToBottom() {
|
||||
@ -1098,9 +1101,10 @@ const shouldShowTimestamp = (i: number) => {
|
||||
const formatDayGroup = (d: Date) => dayjs(d).format('YYYY/MM/DD HH:mm')
|
||||
const formatTimeShort = (d: Date) => dayjs(d).format('MM/DD HH:mm')
|
||||
|
||||
function goBack() {
|
||||
const wv = plus.webview.currentWebview()
|
||||
wv.close('slide-out-right', 300) // 或者直接 wv.close()
|
||||
async function goBack() {
|
||||
await window.NativeBridge.router.back()
|
||||
// const wv = plus.webview.currentWebview()
|
||||
// wv.close('slide-out-right', 300) // 或者直接 wv.close()
|
||||
}
|
||||
function viewHistory() {
|
||||
uni.navigateTo({ url: '/pages/history/history' })
|
||||
@ -1908,12 +1912,11 @@ const send = async (body) => {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization: token.value,
|
||||
Authorization: chatToken.value,
|
||||
},
|
||||
body: JSON.stringify(body),
|
||||
signal: signal,
|
||||
})
|
||||
// console.log(resp)
|
||||
|
||||
const reader = resp.body!.getReader()
|
||||
const decoder = new TextDecoder()
|
||||
@ -1922,8 +1925,6 @@ const send = async (body) => {
|
||||
|
||||
while (!done) {
|
||||
if (stopStreamMsg) {
|
||||
// 立刻停下
|
||||
// reader.cancel();
|
||||
controller.abort()
|
||||
stopStreamMsg = false
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user