Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
inscode
NodeJS_639770
提交
15a1c6e5
N
NodeJS_639770
项目概览
inscode
/
NodeJS_639770
与 Fork 源项目一致
Fork自
inscode / NodeJS
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
NodeJS_639770
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
15a1c6e5
编写于
6月 04, 2024
作者:
D
DebugIsFalse
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feature: 拆分搜索过程组件
上级
ea7e1154
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
89 addition
and
83 deletion
+89
-83
components/i/search/Content.vue
components/i/search/Content.vue
+1
-68
components/i/search/Process.vue
components/i/search/Process.vue
+72
-2
pages/search/[id].vue
pages/search/[id].vue
+16
-13
未找到文件。
components/i/search/Content.vue
浏览文件 @
15a1c6e5
<
template
>
<UCard
:ui=
"
{ body: { padding: 'p-4 sm:p-4' } }">
<div
class=
"flex justify-between items-center"
>
<div
class=
"flex items-center gap-2 text-lg"
>
<UIcon
name=
"i-heroicons-sparkles-20-solid"
/>
搜索过程
</div>
<UButton
size=
"md"
color=
"gray"
variant=
"ghost"
:icon=
"openCollapse ? 'i-heroicons-chevron-up-20-solid' : 'i-heroicons-chevron-down-20-solid'"
:ui=
"
{ rounded: 'rounded-full' }"
@click="handleToggleCollapse"
/>
</div>
<ICollapse
:open=
"openCollapse"
class=
"mt-2"
>
<div
class=
"flex flex-col gap-2 w-full text-gray-500 dark:text-gray-400"
>
<div
class=
"text-base flex items-center gap-1"
>
<UIcon
name=
"i-heroicons-inbox-arrow-down"
/>
理解问题
</div>
<template
v-if=
"item.desLoading"
>
<USkeleton
class=
"h-4"
/>
<USkeleton
class=
"h-4 w-2/3"
/>
</
template
>
<IMdMdc
v-else
:content=
"item.description"
/>
<
template
v-if=
"item.searchLoading !== undefined"
>
<div
class=
"text-base flex items-center gap-1"
>
<UIcon
name=
"i-heroicons-magnifying-glass"
/>
搜索项目
</div>
<template
v-if=
"item.searchLoading"
>
<USkeleton
class=
"h-4"
/>
<USkeleton
class=
"h-4 w-2/3"
/>
</
template
>
<div
class=
"text-xs pl-5"
v-else
>
找到 {{ item.source
&&
item.source.length || 0 }} 条来源
</div>
</template>
<div
class=
"text-base flex items-center gap-1"
v-if=
"item.ansLoading !== undefined"
>
<UIcon
name=
"i-heroicons-pencil-square"
/>
整理答案
</div>
</div>
</ICollapse>
</UCard>
<div
class=
"text-xl flex items-center space-x-1"
v-if=
"item.ansLoading !== undefined"
>
<UIcon
name=
"i-heroicons-chat-bubble-left-right-20-solid"
/>
<span>
{{
item
.
ansLoading
?
'
回答中
'
:
'
回答
'
}}
</span>
...
...
@@ -82,33 +38,11 @@ const props = defineProps({
index
:
{
type
:
Number
,
default
:
0
},
collapse
:
{
type
:
Boolean
,
default
:
true
}
})
const
emits
=
defineEmits
([
'
regenerate
'
])
const
openCollapse
=
ref
(
props
.
collapse
)
function
handleToggleCollapse
()
{
openCollapse
.
value
=
!
openCollapse
.
value
}
function
handleCollapse
(
state
)
{
openCollapse
.
value
=
state
}
watch
(
()
=>
props
.
item
.
ansLoading
,
(
value
,
oldValue
)
=>
{
if
(
oldValue
===
undefined
&&
value
)
{
setTimeout
(()
=>
{
handleCollapse
(
false
)
},
500
)
}
},
{
immediate
:
true
}
)
function
handleReGenerate
()
{
handleCollapse
(
true
)
emits
(
'
regenerate
'
,
props
.
index
)
}
function
handleCopyMD
()
{
...
...
@@ -124,5 +58,4 @@ function handleShare () {
const
url
=
window
.
location
.
href
+
(
hash
?
'
#
'
+
hash
:
''
)
Search
.
handleUpdateOpenState
(
url
)
}
defineExpose
({
handleCollapse
})
</
script
>
\ No newline at end of file
components/i/search/Process.vue
浏览文件 @
15a1c6e5
<
template
>
<UCard
:ui=
"
{ body: { padding: 'p-4 sm:p-4' } }">
<div
class=
"flex justify-between items-center"
>
<div
class=
"flex items-center gap-2 text-lg"
>
<UIcon
name=
"i-heroicons-sparkles-20-solid"
/>
搜索过程
</div>
<UButton
size=
"md"
color=
"gray"
variant=
"ghost"
:icon=
"openCollapse ? 'i-heroicons-chevron-up-20-solid' : 'i-heroicons-chevron-down-20-solid'"
:ui=
"
{ rounded: 'rounded-full' }"
@click="handleToggleCollapse"
/>
</div>
<ICollapse
:open=
"openCollapse"
class=
"mt-2"
>
<div
class=
"flex flex-col gap-2 w-full text-gray-500 dark:text-gray-400"
>
<div
class=
"text-base flex items-center gap-1"
>
<UIcon
name=
"i-heroicons-inbox-arrow-down"
/>
理解问题
</div>
<template
v-if=
"item.desLoading"
>
<USkeleton
class=
"h-4"
/>
<USkeleton
class=
"h-4 w-2/3"
/>
</
template
>
<IMdMdc
v-else
:content=
"item.description"
/>
<
template
v-if=
"item.searchLoading !== undefined"
>
<div
class=
"text-base flex items-center gap-1"
>
<UIcon
name=
"i-heroicons-magnifying-glass"
/>
搜索项目
</div>
<template
v-if=
"item.searchLoading"
>
<USkeleton
class=
"h-4"
/>
<USkeleton
class=
"h-4 w-2/3"
/>
</
template
>
<div
class=
"text-xs pl-5"
v-else
>
找到 {{ item.source
&&
item.source.length || 0 }} 条来源
</div>
</template>
<div
class=
"text-base flex items-center gap-1"
v-if=
"item.ansLoading !== undefined"
>
<UIcon
name=
"i-heroicons-pencil-square"
/>
整理答案
</div>
</div>
</ICollapse>
</UCard>
</template>
<
script
setup
>
defineProps
({
const
props
=
defineProps
({
type
:
{
type
:
String
,
default
:
'
search
'
},
item
:
{
type
:
Object
,
default
:
(()
=>
{})
},
collapse
:
{
type
:
Boolean
,
default
:
true
}
})
const
openCollapse
=
ref
(
props
.
collapse
)
function
handleToggleCollapse
()
{
openCollapse
.
value
=
!
openCollapse
.
value
}
function
handleCollapse
(
state
)
{
openCollapse
.
value
=
state
}
watch
(
()
=>
props
.
item
.
ansLoading
,
(
value
,
oldValue
)
=>
{
if
(
oldValue
===
undefined
&&
value
)
{
setTimeout
(()
=>
{
handleCollapse
(
false
)
},
500
)
}
},
{
immediate
:
true
}
)
defineExpose
({
handleCollapse
})
</
script
>
pages/search/[id].vue
浏览文件 @
15a1c6e5
...
...
@@ -14,27 +14,27 @@
<div
class=
"grid"
>
<ISearchTitle
as=
"h2"
:title=
"item.question"
:id=
"index + 1"
/>
</div>
<ISearchProcess
ref=
"historyAskRefs"
:item=
"item"
:collapse=
"false"
/>
<ISearchContent
:item=
"item"
ref=
"historyAskRefs"
:asking=
"false"
:collapse=
"false"
:is-last-index=
"false"
:index=
"index"
/>
<UDivider
v-if=
"data.length !== index + 1 || askingData.question"
class=
"pt-3 pb-2"
/>
</
template
>
<div
class=
"grid"
v-if=
"askingData.question"
>
<ISearchTitle
as=
"h2"
:title=
"askingData.question"
:id=
"data.length + 1"
/>
</div>
<ISearchContent
v-if=
"askingData.question"
:item=
"askingData"
:asking=
"asking"
ref=
"askingRef"
:is-last-index=
"true"
@
regenerate=
"handleReGenerate"
/>
<
template
v-if=
"askingData.question"
>
<div
class=
"grid"
>
<ISearchTitle
as=
"h2"
:title=
"askingData.question"
:id=
"data.length + 1"
/>
</div>
<ISearchProcess
ref=
"askingRef"
:item=
"askingData"
:collapse=
"false"
/>
<ISearchContent
:item=
"askingData"
:asking=
"asking"
:is-last-index=
"true"
@
regenerate=
"handleReGenerate"
/>
</
template
>
<ISearchRecommendQuestion
v-if=
"recommendQuestions.length > 0 && !asking"
:recommend-questions=
"recommendQuestions"
...
...
@@ -147,6 +147,9 @@ const handleReGenerate = () => {
question
,
desLoading
:
true
}
nextTick
(()
=>
{
askingRef
.
value
&&
askingRef
.
value
.
handleCollapse
(
true
)
})
generateFetchData
(
`根据上述回答,对问题"
${
question
}
"重新生成`
)
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录