历史记录页修改

This commit is contained in:
luJianJun 2023-08-23 17:13:21 +08:00
parent 3f8a11e1e0
commit a2c90214ad
12 changed files with 221 additions and 107 deletions

View File

@ -6,6 +6,7 @@ import ConversationSidebarItem from './ConversationSidebarItem'
import ConversationSidebarAdd from './ConversationSidebarAdd'
import { addConversation } from '@/stores/conversation'
import { showConversationEditModal } from '@/stores/ui'
import ChatList from '../../pages/chat/datalist'
export default () => {
const { t } = useI18n()
@ -36,26 +37,28 @@ export default () => {
}
}
onMount(() => {
setTimeout(() => {
let itemList = conversationMapSortList.get()
let setName = JSON.parse(sessionStorage.getItem('dialogueName') as any)||'未命名对话'
let numList: number[] = []
itemList.map((res, i) => {
if (checkName(res.name, setName.name)) numList.push(i)
})
// onMount(() => {
// return
// setTimeout(() => {
// let itemList = conversationMapSortList.get()
// let setName = JSON.parse(sessionStorage.getItem('dialogueName') as any) || '未命名对话'
// let numList: number[] = []
// itemList.map((res, i) => {
// if (checkName(res.name, setName.name)) numList.push(i)
// })
if(setName.switch){
addConversation({name:setNameNum(setName.name, numList),systemInfo:setName.systemInfo})
showConversationEditModal.set(true)
setName.switch=false
sessionStorage.setItem('dialogueName',JSON.stringify({name:setName.name,switch:false}))
}
}, 1000)
})
// if (setName.switch) {
// addConversation({ name: setNameNum(setName.name, numList), systemInfo: setName.systemInfo })
// showConversationEditModal.set(true)
// setName.switch = false
// sessionStorage.setItem('dialogueName', JSON.stringify({ name: setName.name, switch: false }))
// }
// }, 1000)
// })
return (
<div class="h-full flex flex-col bg-sidebar">
<div style={{height:'100vh'}}>
<div class="h-full flex flex-col bg-sidebar" style={{height:'50%',overflow:'auto'}}>
<header class="h-14 fi justify-between px-4 text-xs uppercase">
<p class="px-2">{t('conversations.title')}</p>
<div class="fi gap-1">
@ -77,5 +80,7 @@ export default () => {
</div>
</div>
</div>
<ChatList></ChatList>
</div>
)
}

View File

@ -3,6 +3,7 @@ import { currentConversationId, deleteConversationById } from '@/stores/conversa
import { showConversationSidebar } from '@/stores/ui'
import { useI18n } from '@/hooks'
import type { Conversation } from '@/types/conversation'
import { chatShow } from '@/pages/chat/ts/store'
interface Props {
instance: Omit<Conversation, 'messages'> & {
@ -16,6 +17,7 @@ export default ({ instance }: Props) => {
const isTouchDevice = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0
const handleClick = () => {
chatShow.set(false)
currentConversationId.set(instance.id)
showConversationSidebar.set(false)
}

View File

@ -1,4 +1,4 @@
import { Match, Switch, createEffect,onMount } from 'solid-js'
import { Match, Switch, createEffect, Show } from 'solid-js'
import { useStore } from '@nanostores/solid'
import { conversationMap, currentConversationId } from '@/stores/conversation'
import { conversationMessagesMap } from '@/stores/messages'
@ -10,6 +10,8 @@ import Welcome from './Welcome'
import Continuous from './Continuous'
import Single from './Single'
import Image from './Image'
import { chatShow } from '@/pages/chat/ts/store'
import Iframe from '@/pages/chat/components/iframe'
export default () => {
const { t } = useI18n()
@ -43,7 +45,12 @@ export default () => {
}
})
let chat: any = null
chat = useStore(chatShow)
return (
<>
<Show when={!chat()}>
<Switch
fallback={(
<Welcome />
@ -72,5 +79,11 @@ export default () => {
/>
</Match>
</Switch>
</Show>
<Show when={chat()}>
<Iframe></Iframe>
</Show>
</>
)
}

View File

@ -1,7 +1,8 @@
import type { JSXElement } from 'solid-js'
import '../../pages/chat/css/list.css'
interface Props {
direction: 'left' | 'right'
direction: 'left' | 'right' | 'none'
class?: string
children: JSXElement
}
@ -10,6 +11,7 @@ export default (props: Props) => {
const containerBaseClass = {
left: 'w-[260px] h-100dvh border-r',
right: 'w-[300px] h-100dvh border-l',
none:'w-100'
}[props.direction]
return (

View File

@ -3,7 +3,11 @@ import ConversationSidebarItem from './listItem'
import { createStore } from "solid-js/store";
import '../css/list.css'
import { fetchData } from '../../../http/api'
import { addConversation } from '@/stores/conversation'
import { showConversationEditModal } from '@/stores/ui'
import { conversationMapSortList } from '@/stores/conversation'
import { chatShow,uniqid } from '../ts/store';
import { showConversationSidebar } from '@/stores/ui'
export default () => {
// dataItemLists.set([{id:'1'},{id:'2'},{id:'3'},{id:'4'},{id:'5'},{id:'6'}])
@ -37,10 +41,10 @@ export default () => {
title: ''
}
//新建对话框
const newlyAdded = () => {
window.open(`${location.protocol}//${location.host}`)
}
// //新建对话框
// const newlyAdded = () => {
// window.open(`${location.protocol}//${location.host}`)
// }
//删除记录
let deleteItem = { key: null, e: null }
@ -79,16 +83,54 @@ export default () => {
setPop(!pop())
}
//设置副标题数字
const setNameNum = (setName: string, numList: any) => {
let list = conversationMapSortList.get()
let title = ''
let count = 0
numList.map((res: number) => {
let regex1 = new RegExp("" + setName + '\\(\\d+\\)', 'g')
let seachText = list[res].name.match(regex1) || 'null'
let num = seachText[0].match(/\(\d+\)/g) || 'null'
if (num !== 'null') {
count = Math.max(count, Number(num[0].replace('(', '').replace(')', '')))
}
})
title = count ? `${setName}(${count + 1})` : `${setName}${numList.length > 0 ? '(1)' : ''}`
return title
}
//查重
const checkName = (name: string, setName: string) => {
let setNameReg = new RegExp(setName, 'g')
if (setNameReg.test(name) && name.replace(/\(\d+\)/g, '') === setName) {
return true
}
}
//确认按钮
const determineBtn = () => {
if (popType() === 'open') {
console.log(dialogue)
sessionStorage.setItem('dialogueName', JSON.stringify({ name: dialogue.title, switch: true, systemInfo: dialogue.systemmessage }))
if (isMobile()) {
location.pathname = '/'
} else {
newlyAdded()
// if (isMobile()) {
// location.pathname = '/'
// } else {
// newlyAdded()
let itemList = conversationMapSortList.get()
let setName = JSON.parse(sessionStorage.getItem('dialogueName') as any) || '未命名对话'
let numList: number[] = []
itemList.map((res, i) => {
if (checkName(res.name, setName.name)) numList.push(i)
})
if (setName.switch) {
addConversation({ name: setNameNum(setName.name, numList), systemInfo: setName.systemInfo })
showConversationEditModal.set(true)
setName.switch = false
sessionStorage.setItem('dialogueName', JSON.stringify({ name: setName.name, switch: false }))
}
chatShow.set(false)
// }
} else if (popType() === 'delete') {
handleDelete(deleteItem['e'] as any, deleteItem['key'] as any)
}
@ -104,6 +146,13 @@ export default () => {
})
}
//查看记录内容
const chatWatch = (id:string='')=>{
chatShow.set(true)
showConversationSidebar.set(false)
uniqid.set(id)
}
//提示弹窗
const ErrorState = () => (
<div class='tps-error-box'>
@ -126,7 +175,7 @@ export default () => {
})
return (
<div class="h-full flex flex-col bg-sidebar max-w-350 min-w-260">
<div class="h-full flex flex-col bg-sidebar">
<Show when={pop()}>
<div class='pop center-f'>
<div class='center-f text-box'>
@ -150,12 +199,12 @@ export default () => {
<Show when={errorShow().show}>
<ErrorState />
</Show>
<div class="flex-1 overflow-auto">
<div class="px-2">
<div class="overflow-auto">
<div style={{ width: '100%' }}>
<For each={list.data}>
{(instance, i) => (
<Show when={instance.title}>
<ConversationSidebarItem popShow={popShow} setErrorFun={setErrorFun} instanceData={{ ...instance }} infoList={list.data} key={i as any} setList={setList} />
<ConversationSidebarItem chatWatch={chatWatch} popShow={popShow} setErrorFun={setErrorFun} instanceData={{ ...instance }} infoList={list.data} key={i as any} setList={setList} />
</Show>
)}
</For>

View File

@ -0,0 +1,19 @@
import { keys } from 'idb-keyval'
import '../css/list.css'
import { createSignal } from 'solid-js'
import { uniqid } from '@/pages/chat/ts/store'
import { useStore } from '@nanostores/solid'
interface Props {
}
export default () => {
let id: any = ''
id = useStore(uniqid) as any
return (
<div style={{width:'100%',height:'100%'}}>
<iframe src={`https://ansnid.com/share/?id=${id()}`} style={{width:'100%',height:'100%'}}></iframe>
</div>
)
}

View File

@ -17,10 +17,11 @@ interface Props {
setList: Function,
infoList: any,
popShow: Function,
setErrorFun:Function
setErrorFun:Function,
chatWatch:Function
}
export default ({ instanceData, key, setList, infoList, popShow,setErrorFun }: Props) => {
export default ({ instanceData, key, setList, infoList, popShow,setErrorFun,chatWatch }: Props) => {
//设置数据
const instanceItem = instanceData
@ -72,7 +73,7 @@ export default ({ instanceData, key, setList, infoList, popShow,setErrorFun }: P
class={[
'group fi h-10 my-0.5 px-2 gap-2 hv-base rounded-md'
].join(' ')}
onClick={()=>window.open(`${location.protocol}//${window.location.host}/share/?id=${ instance.uniqid }`)}
onClick={()=>chatWatch(instance.uniqid)}
>
<div class="fcc w-8 h-8 rounded-full text-xl shrink-0">
<div class="text-base i-carbon-chat" />

View File

@ -98,3 +98,20 @@
background:rgba(246, 246, 246, 1);
width:100%;
}
.chat-list-title{
font-size:0.75rem;
line-height:1rem;
height:3.5rem;
text-transform:uppercase;
padding:0 1rem;
display: flex;
align-items: center;
}
.top-bor{
border-top:1px solid #e9ecef;
}
.chat-list-box{
max-height:;
}

View File

@ -1,21 +0,0 @@
---
import Layout from '@/layouts/Layout.astro'
import Main from '@/components/Main.astro'
import ConversationSidebar from './components/dataList'
import ModalsLayer from '@/components/ModalsLayer'
import Sidebar from '@/components/ui/Sidebar'
import BuildStores from '@/components/client-only/BuildStores'
import './css/list.css'
---
<Layout title="Ansnid">
<div class="h-100vh w-screen flex">
<Sidebar direction="left" class='w-100'>
<ConversationSidebar client:only="solid-js" />
</Sidebar>
<!-- <Main /> -->
</div>
<!-- <ModalsLayer client:only />
<BuildStores client:only /> -->
</Layout>

View File

@ -0,0 +1,23 @@
import ConversationSidebar from './components/dataList'
import Sidebar from '@/components/ui/Sidebar'
import './css/list.css'
export default () => {
return (
<div class='top-bor' style={{height:'50%',overflow:'auto'}}>
<div class='chat-list-title'>
</div>
<div class="flex">
<Sidebar direction="none" class=''>
<ConversationSidebar />
</Sidebar>
</div>
{/* <ModalsLayer />
<BuildStores/> */}
</div>
)
}

View File

@ -0,0 +1,3 @@
import { atom } from 'nanostores';
export const chatShow=atom(false)
export const uniqid=atom('')

View File

@ -6,6 +6,7 @@ import Settings from '@/components/settings/SettingsSidebar'
import ModalsLayer from '@/components/ModalsLayer'
import Sidebar from '@/components/ui/Sidebar'
import BuildStores from '@/components/client-only/BuildStores'
---
<Layout title="Ansnid">