提交 23fb0f30 authored 作者: coderBryanFu's avatar coderBryanFu

update

上级 46febd14
......@@ -53,6 +53,7 @@ import Portal2 from '@/views/portals/portal2/index.vue';
// 综合搜索
import ComprehensiveSearch from '@/views/comprehensiveSearch/index.vue'
import SearchResults from '@/views/comprehensiveSearch/searchResults/index.vue'
import Chat from '@/views/comprehensiveSearch/chat/index.vue'
const routes = [
// 智能写报
......@@ -429,7 +430,7 @@ const routes = [
title: "综合搜索"
}
},
{
{
path: "/searchResults",
name: "searchResults",
component: SearchResults,
......@@ -437,6 +438,14 @@ const routes = [
title: "搜索结果"
}
},
{
path: "/chat",
name: "chat",
component: Chat,
meta: {
title: "智能问答"
}
},
];
const router = createRouter({
......
......@@ -212,7 +212,7 @@
<div class="icon">
<img src="./assets/images/box2-footer-icon.png" alt="" />
</div>
<div class="text">{{ "风险处理" }}</div>
<div class="text">{{ "查看更多" }}</div>
</div>
</div>
</div>
......@@ -1707,7 +1707,7 @@ onMounted(async () => {
height: 100%;
}
.inner-box {
width: 330px;
width: 100%;
height: 93px;
background: rgba(10, 18, 30, 0.75);
position: absolute;
......@@ -1719,7 +1719,7 @@ onMounted(async () => {
height: 30px;
display: flex;
.inner-box-title {
width: 270px;
flex: 9;
color: rgba(255, 255, 255, 1);
font-family: Microsoft YaHei;
font-size: 16px;
......@@ -1730,7 +1730,7 @@ onMounted(async () => {
white-space: nowrap;
}
.inner-box-time {
width: 60px;
flex: 2;
height: 30px;
color: rgba(255, 255, 255, 0.65);
font-family: Microsoft YaHei;
......@@ -1743,7 +1743,7 @@ onMounted(async () => {
}
}
.inner-box-content {
width: 330px;
width: 100%;
height: 40px;
overflow: hidden;
color: rgba(255, 255, 255, 0.8);
......@@ -1757,7 +1757,7 @@ onMounted(async () => {
}
}
.box2 {
flex: 1;
width: 520px;
height: 450px;
box-shadow: 0px 0px 15px 0px rgba(22, 119, 255, 0.1);
background: rgba(255, 255, 255, 1);
......@@ -1871,16 +1871,16 @@ onMounted(async () => {
}
.box2-footer {
position: absolute;
left: 40px;
left: 30px;
bottom: 20px;
width: 430px;
width: 460px;
height: 42px;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
border-radius: 6px;
background: rgba(22, 119, 255, 1);
background: var(--color-main-active);
cursor: pointer;
.icon {
width: 16px;
......@@ -2792,4 +2792,15 @@ onMounted(async () => {
}
}
}
:deep(.el-input__wrapper) {
box-shadow: none;
}
:deep(.el-input__wrapper:hover) {
box-shadow: none !important;
}
:deep(.el-input__wrapper.is-focus) {
box-shadow: none !important;
}
</style>
\ No newline at end of file
<template>
<div class="wrapper">
<div class="header"><span>首页 </span>> <span>综合检索 </span>> <span>智能问答 </span></div>
<div class="main">
<div class="left">
<div class="left-header">
<div class="icon">
<img src="./assets/images/ai.png" alt="" />
</div>
<el-input placeholder="新对话" v-model="newChatTitle" style="width: 220px" />
</div>
<div class="left-main">
<div class="left-main-title">{{ "历史对话" }}</div>
<div class="left-list">
<div
class="left-list-item"
:class="{ itemActive: currentChatId === item.id }"
v-for="(item, index) in chatList"
:key="index"
>
{{ item.title }}
</div>
</div>
</div>
</div>
<div class="right">
<div class="right-header">{{ curChatTitle }}</div>
<div class="right-main">
<div class="right-main-content">
<div class="chat-content" ref="contentContainer">
<!-- 消息列表 -->
<div class="message-list">
<div v-for="(message, index) in messages" :key="index">
<!-- AI 消息 -->
<div v-if="message.type === 'ai'" class="ai-item">
<div class="ai-header">
<div class="icon">
<img src="./assets/images/ai-avator.png" alt="" />
</div>
<div class="text">{{ `已深度思考(用时6秒钟)` }}</div>
</div>
<div class="content ai-content" v-html="renderMarkdown(message.content)"></div>
</div>
<!-- 用户消息 -->
<div v-else class="user-item">
<div class="user-bubble">
<div class="user-content">{{ message.content }}</div>
</div>
</div>
</div>
<!-- 加载状态 -->
<div v-if="isLoading" class="ai-item">
<div class="ai-header">
<div class="icon">
<img src="./assets/images/ai-avator.png" alt="" />
</div>
<div class="text">{{ `正在思考中,请稍候` }}</div>
</div>
<div class="loading-indicator">
<span class="dot"></span>
<span class="dot"></span>
<span class="dot"></span>
</div>
</div>
</div>
</div>
</div>
<div class="right-main-footer">
<el-input type="textarea" placeholder="发送消息" :rows="4" v-model="userInput" />
<div class="input-footer">
<div class="icon1">
<el-tooltip effect="dark" content="录音" placement="top">
<img src="./assets/images/microphone.png" alt="" />
</el-tooltip>
</div>
<div class="icon2">
<el-tooltip effect="dark" content="收藏" placement="top">
<img src="./assets/images/attach.png" alt="" />
</el-tooltip>
</div>
<div class="line"></div>
<div class="submit" @click="sendMessage">
<el-tooltip effect="dark" content="发送" placement="top">
<img src="./assets/images/submit.png" alt="" />
</el-tooltip>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
import { ref, onMounted, onUnmounted } from "vue";
import { fetchEventSource } from "@microsoft/fetch-event-source";
import MarkdownIt from "markdown-it";
import { ElMessage } from "element-plus";
import { getChat } from "@/api/chat";
const contentContainer = ref(null);
const userInput = ref("");
const isLoading = ref(false);
const abortController = ref(null);
// 消息数据
const messages = ref([
{
type: "user",
content: "你好"
},
{
type: "ai",
content: "您好!我是AI助手,有什么可以帮助您的吗?"
}
]);
// Markdown 渲染器
const md = new MarkdownIt();
// 渲染 markdown
const renderMarkdown = content => {
return md.render(content);
};
// 自动滚动到底部
const scrollToBottom = async () => {
await nextTick();
if (contentContainer.value) {
const container = contentContainer.value;
container.scrollTop = container.scrollHeight;
}
};
// 添加消息
const addMessage = (type, content) => {
messages.value.push({
type,
content,
timestamp: new Date().getTime()
});
scrollToBottom();
};
// 更新最后一条 AI 消息(用于流式输出)
const updateLastAIMessage = content => {
const lastMessage = messages.value[messages.value.length - 1];
if (lastMessage && lastMessage.type === "ai") {
lastMessage.content = content;
scrollToBottom();
}
};
// 使用 fetchEventSource 连接
const connectSSE = async question => {
// 添加用户消息
addMessage("user", question);
// 添加空的 AI 消息用于流式更新
addMessage("ai", "");
isLoading.value = true;
// 创建 AbortController 用于取消请求
abortController.value = new AbortController();
const params = {
query: "如何检索?",
knowledge_base_name: "kb_test251112",
top_k: 6,
score_threshold: 0.5,
metadata: { year: 2024 }
};
try {
await fetchEventSource("/chat/knowledge_base/search_docs", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(params),
signal: abortController.value.signal,
onopen: async response => {
console.log("SSE 连接已建立", response.status);
if (response.status !== 200) {
throw new Error(`请求失败: ${response.status}`);
}
},
onmessage: event => {
try {
if (event.data === "[DONE]") {
// 流式输出结束
isLoading.value = false;
return;
}
const data = JSON.parse(event.data);
if (data.type === "content" && data.content) {
// 流式更新内容
updateLastAIMessage(prev => prev + data.content);
} else if (data.type === "error") {
throw new Error(data.message || "请求失败");
}
} catch (error) {
console.error("解析 SSE 数据错误:", error);
}
},
onclose: () => {
console.log("SSE 连接已关闭");
isLoading.value = false;
},
onerror: error => {
console.error("SSE 连接错误:", error);
ElMessage.error("连接失败,请重试");
isLoading.value = false;
// 不要抛出错误,否则会重试
}
});
} catch (error) {
console.error("SSE 请求失败:", error);
if (error.name !== "AbortError") {
ElMessage.error(error.message || "请求失败");
}
isLoading.value = false;
}
};
const chat = async () => {
const params = {
query: "如何检索?",
knowledge_base_name: "kb_test251112",
top_k: 6,
score_threshold: 0.5,
metadata: { year: 2024 }
};
try {
const res = await getChat(params);
console.log("chat", res);
} catch (error) {
console.error(error);
}
};
// 发送消息
const sendMessage = async () => {
const question = userInput.value.trim();
if (!question) {
ElMessage.warning("请输入问题");
return;
}
if (isLoading.value) {
ElMessage.warning("请等待上一条消息回复完成");
return;
}
userInput.value = "";
await connectSSE(question);
// chat();
};
const newChatTitle = ref(""); // 新对话
const curChatTitle = ref("美国对中国制裁实体清单");
const currentChatId = ref(1);
const chatList = ref([
{
id: 1,
title: "美国对中国制裁实体清单"
},
{
id: 2,
title: "制作中国进口依赖度柱状图"
},
{
id: 3,
title: "列举 2025 年科技产品"
},
{
id: 4,
title: "获取美国国会议员名单"
},
{
id: 5,
title: "2000年以后美国金融法案列举"
},
{
id: 6,
title: "科研机构及高校仪器进口排名"
}
]);
onMounted(() => {
scrollToBottom();
});
onUnmounted(() => {
if (abortController.value) {
abortController.value.abort();
}
});
</script>
<style lang="scss" scoped>
:deep(.el-input__wrapper) {
box-shadow: none;
}
:deep(.el-input__wrapper:hover) {
box-shadow: none !important;
}
:deep(.el-input__wrapper.is-focus) {
box-shadow: none !important;
}
:deep(.el-input ::placeholder) {
color: var(--color-main-active);
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 400;
}
:deep(.el-input__inner) {
color: #333;
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 400;
}
:deep(.el-textarea__inner) {
box-shadow: none;
border-radius: 20px;
resize: none;
}
:deep(.el-textarea__inner:hover) {
box-shadow: none !important;
}
:deep(.el-textarea__inner.is-focus) {
box-shadow: none !important;
}
:deep(.el-textarea ::placeholder) {
color: rgba(132, 136, 142, 1);
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 400;
}
:deep(.el-textarea__inner) {
color: #333;
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 400;
}
.wrapper {
.header {
height: 64px;
color: #fff;
font-family: Microsoft YaHei;
font-size: 20px;
font-weight: 700;
line-height: 26px;
line-height: 64px;
background: url("../assets/images/header-bg.png");
box-sizing: border-box;
padding-left: 160px;
}
.main {
margin-top: 16px;
display: flex;
justify-content: center;
gap: 16px;
.left {
width: 300px;
height: 880px;
border-radius: 4px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: rgba(255, 255, 255, 1);
.left-header {
width: 268px;
height: 48px;
margin: 16px auto;
box-sizing: border-box;
border: 1px solid rgba(5, 95, 194, 1);
border-radius: 8px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: rgba(255, 255, 255, 1);
display: flex;
.icon {
width: 20px;
height: 13px;
margin-top: 13px;
margin-left: 16px;
img {
width: 100%;
height: 100%;
}
}
}
.left-main {
margin-top: 24px;
.left-main-title {
margin-left: 29px;
width: 64px;
height: 24px;
color: rgba(132, 136, 142, 1);
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 400;
line-height: 24px;
letter-spacing: 0px;
text-align: left;
}
.left-list {
margin-top: 12px;
margin-left: 16px;
width: 268px;
height: 720px;
.left-list-item {
width: 268px;
height: 48px;
border-radius: 8px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 400;
line-height: 48px;
box-sizing: border-box;
padding: 0 12px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
cursor: pointer;
&:hover {
background: rgba(246, 250, 255, 1);
}
}
.itemActive {
background: rgba(246, 250, 255, 1);
color: var(--color-main-active);
font-weight: 700;
}
}
}
}
.right {
width: 1284px;
height: 880px;
border-radius: 4px;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: rgba(255, 255, 255, 1);
.right-header {
height: 64px;
border-bottom: 1px solid rgba(234, 236, 238, 1);
line-height: 64px;
box-sizing: border-box;
padding-left: 24px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-size: 18px;
font-weight: 700;
}
.right-main {
.right-main-content {
width: 926px;
margin-left: 166px;
height: 630px;
}
.right-main-footer {
margin: 10px auto;
width: 900px;
height: 160px;
box-sizing: border-box;
border: 1px solid rgba(230, 231, 232, 1);
border-radius: 20px;
background: rgba(255, 255, 255, 1);
.input-footer {
display: flex;
justify-content: flex-end;
.icon1 {
margin-top: 15px;
width: 24px;
height: 24px;
margin-right: 20px;
cursor: pointer;
img {
width: 100%;
height: 100%;
}
}
.icon2 {
margin-top: 15px;
width: 24px;
height: 24px;
margin-right: 20px;
cursor: pointer;
img {
width: 100%;
height: 100%;
}
}
.line {
margin-top: 15px;
margin-right: 20px;
width: 1px;
height: 24px;
background: rgba(234, 236, 238, 1);
}
.submit {
margin-top: 7px;
margin-right: 12px;
width: 40px;
height: 40px;
border-radius: 20px;
background: #b4cfed;
cursor: pointer;
&:hover {
background: rgba(5, 95, 194, 1);
}
img {
width: 24px;
height: 24px;
margin: 8px;
}
}
}
}
}
}
}
}
/* 对话内容区域 */
.chat-content {
overflow-y: auto;
// padding: 20px;
background: #fff;
width: 926px;
.message-list {
padding-bottom: 20px;
}
.ai-item {
width: 926px;
overflow: hidden;
.ai-header {
height: 22px;
display: flex;
.icon {
width: 10px;
height: 10px;
img {
width: 100%;
height: 100%;
}
}
.text {
margin-left: 16px;
height: 22px;
color: rgba(132, 136, 142, 1);
font-family: Microsoft YaHei;
font-size: 14px;
font-weight: 400;
line-height: 22px;
letter-spacing: 0px;
text-align: left;
}
}
.ai-content {
margin-top: 10px;
width: 900px;
margin-left: 26px;
}
}
.user-item {
margin-top: 32px;
height: 42px;
display: flex;
justify-content: flex-end;
.user-bubble {
line-height: 42px;
border-radius: 21px 0px 21px 21px;
background: rgba(234, 236, 238, 1);
box-sizing: border-box;
padding: 0 20px;
text-align: right;
word-wrap: break-word;
.user-content {
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 400;
line-height: 42px;
letter-spacing: 0px;
text-align: left;
}
}
}
}
/* 加载指示器 */
.loading-indicator {
margin-left: 26px;
height: 30px;
display: flex;
gap: 4px;
padding: 11px 0;
}
.dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: #999;
animation: bounce 1.4s infinite ease-in-out;
}
.dot:nth-child(1) {
animation-delay: -0.32s;
}
.dot:nth-child(2) {
animation-delay: -0.16s;
}
</style>
\ No newline at end of file
......@@ -8,7 +8,7 @@
<div class="search">
<div class="search-left">
<el-input placeholder="搜索关键词" style="width: 700px; height: 100%" />
<div class="btn1">
<div class="btn1" @click="handleToChat">
<div class="icon">
<img src="./assets/images/ai-icon.png" alt="" />
</div>
......@@ -279,6 +279,13 @@ const box3List = ref([
}
]);
// 点击智能问答,进入智能问答页
const handleToChat = () => {
router.push({
path: '/chat'
})
}
// 点击全文搜索,进入搜索结果页
const handleToSearchResults = () => {
router.push({
......
......@@ -63,7 +63,7 @@
<div class="header-right">
<div class="header-right-header">{{ "关联检索" }}</div>
<div class="header-right-main">
<div class="header-right-main-item" v-for="item,index in relatedSearchList" :key="index">
<div class="header-right-main-item" v-for="(item, index) in relatedSearchList" :key="index">
<div class="icon">
<img src="./assets/images/search-icon2.png" alt="" />
</div>
......@@ -72,12 +72,39 @@
</div>
</div>
</div>
<div class="main">
<div class="item" v-for="(item, index) in searchResults" :key="index">
<div class="item-left" v-if="item.img">
<img :src="item.img" alt="">
</div>
<div class="item-right">
<div class="title" v-html="renderContent(item.title)"></div>
<div class="content" v-html="renderContent(item.content)"></div>
<div class="item-right-footer">
<div class="time">{{ item.time }}</div>
<div
class="tag"
:class="{ tag1: item.tag.status === 1, tag2: item.tag.status === 2, tag3: item.tag.status === 3 }"
>
{{ item.tag.name }}
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<el-pagination background layout="prev, pager, next" :total="96" />
</div>
</div>
</template>
<script setup>
import { ref, onMounted } from "vue";
import Img1 from './assets/images/img1.png'
import Img2 from './assets/images/img2.png'
import Img3 from './assets/images/img3.png'
const selectTime = ref("全部时间");
const selectRelation = ref("相关度优先");
......@@ -181,13 +208,133 @@ const relationList = ref([
// 关联检索
const relatedSearchList = ref([
'金融制度是如何建立的?',
'金融有什么用?',
'如何办理金融贷款?',
'2025年美国金融法案发布情况',
'中国如何应对金融制裁',
'中国金融制度建立历史'
])
"金融制度是如何建立的?",
"金融有什么用?",
"如何办理金融贷款?",
"2025年美国金融法案发布情况",
"中国如何应对金融制裁",
"中国金融制度建立历史"
]);
const searchResults = ref([
{
img: Img1,
title: "美元 “上链”!美国联邦金融稳定币监管法案正式生效",
content:
"《指导与建立美国稳定币国家创新法案》落地,要求稳定币发行方以 1:1 比例储备美元现金、短期美债等高度流动资产,建立联邦与州双轨监管体系。",
time: "通过日期:2025-10- 05",
tag: {
name: "科技法案",
status: 3
}
},
{
img: Img2,
title: "划清监管边界!美国数字资产分类法案众议院高票通过",
content:
"《数字资产市场清晰法案》按去中心化属性划分资产类别,明确 “数字商品” 归 CFTC 监管、“数字资产证” 归 SEC 监管。创设 “金融成熟链机制”。",
time: "通过日期:2025-10- 05",
tag: {
name: "科技法案",
status: 3
}
},
{
img: null,
title: "划清监管边界!美国数字资产分类法案众议院高票通过",
content:
"《数字资产市场清晰法案》按去中心化属性划分资产类别,明确 “数字商品” 归 CFTC 监管、“数字资产证” 归 SEC 监管。创设 “金融成熟链机制”。",
time: "通过日期:2025-10- 05",
tag: {
name: "科技法案",
status: 3
}
},
{
img: null,
title: "划清监管边界!美国数字资产分类法案众议院高票通过",
content:
"《数字资产市场清晰法案》按去中心化属性划分资产类别,明确 “数字商品” 归 CFTC 监管、“数字资产证” 归 SEC 监管。创设 “金融成熟链机制”。",
time: "通过日期:2025-10- 05",
tag: {
name: "科技法案",
status: 3
}
},
{
img: null,
title: "严管金融稳定币发行!美国《STABLE 法案》推进审议",
content:
"法案禁止未授权发行稳定币,违规者将面临每日最高 10 万美元罚款,同时禁止发行方支付利息。要求发行方开展月度审计并公开储备报告,严防关联方资金占用。",
time: "通过日期:2025-10- 05",
tag: {
name: "科技法案",
status: 3
}
},
{
img: null,
title: "严管金融稳定币发行!美国《STABLE 法案》推进审议",
content:
"法案禁止未授权发行稳定币,违规者将面临每日最高 10 万美元罚款,同时禁止发行方支付利息。要求发行方开展月度审计并公开储备报告,严防关联方资金占用。",
time: "通过日期:2025-10- 05",
tag: {
name: "科技法案",
status: 3
}
},
{
img: null,
title: "拒绝政府数字货币!美国众议院通过反 CBDC 监控法案",
content:
"《反 CBDC 监控国家法案》以保护金融隐私为核心,拟永久禁止美联储发行数字美元,禁止其向个人直接或间接发行 CBDC,也不得将 CBDC 用于货币政策工具或开展相关。",
time: "通过日期:2025-10- 05",
tag: {
name: "科技法案",
status: 3
}
},
{
img: null,
title: "拒绝政府数字货币!美国众议院通过反 CBDC 监控法案",
content:
"《反 CBDC 监控国家法案》以保护金融隐私为核心,拟永久禁止美联储发行数字美元,禁止其向个人直接或间接发行 CBDC,也不得将 CBDC 用于货币政策工具或开展相关。",
time: "通过日期:2025-10- 05",
tag: {
name: "科技法案",
status: 3
}
},
{
img: null,
title: "拒绝政府数字货币!美国众议院通过反 CBDC 监控法案",
content:
"《反 CBDC 监控国家法案》以保护金融隐私为核心,拟永久禁止美联储发行数字美元,禁止其向个人直接或间接发行 CBDC,也不得将 CBDC 用于货币政策工具或开展相关。",
time: "通过日期:2025-10- 05",
tag: {
name: "科技法案",
status: 3
}
},
{
img: Img3,
title: "主流加密货币定调!美国 FIT-21 法案确立 “数字商品” 属性",
content:
"《21 世纪金融创新与技术法案》明确比特币、以太坊等主流加密货币归类为 “数字商品”,适用 CFTC 监管框架。建立 SEC 与 CFTC 跨机构协调机制并要求联合发布分类...",
time: "通过日期:2025-10- 05",
tag: {
name: "科技法案",
status: 3
}
}
]);
const renderContent = str => {
if (str.includes("金融")) {
return str.replace(/金融/g, '<span style="color: #CE4F51">金融</span>');
}
return str;
};
</script>
<style lang="scss" scoped>
......@@ -233,12 +380,12 @@ const relatedSearchList = ref([
border-radius: 20px;
background: rgba(247, 248, 249, 1);
display: flex;
gap: 8px;
margin-bottom: 8px;
cursor: pointer;
&:hover{
background: rgb(234, 234, 234);
}
gap: 8px;
margin-bottom: 8px;
cursor: pointer;
&:hover {
background: rgb(234, 234, 234);
}
.icon {
width: 16px;
height: 16px;
......@@ -449,5 +596,99 @@ const relatedSearchList = ref([
}
}
}
.main {
width: 913px;
height: 1464px;
margin-top: 36px;
margin-left: 264px;
.item {
width: 913px;
height: 132px;
margin-bottom: 16px;
border-bottom: 1px solid rgba(234, 236, 238, 1);
display: flex;
.item-left {
width: 170px;
height: 115px;
img{
width: 100%;
height: 100%;
}
}
.item-right {
// width: 731px;
flex: 1;
margin-left: 12px;
.title {
height: 24px;
width: 731px;
overflow: hidden;
font-family: Microsoft YaHei;
font-size: 18px;
font-weight: 700;
line-height: 24px;
letter-spacing: 0px;
text-align: left;
}
.content {
margin-top: 10px;
height: 48px;
font-family: Microsoft YaHei;
font-size: 16px;
color: rgba(59, 65, 75, 1);
font-weight: 400;
line-height: 24px;
letter-spacing: 0px;
text-align: left;
}
.item-right-footer {
display: flex;
.time {
height: 22px;
color: rgba(132, 136, 142, 1);
font-family: Microsoft YaHei;
font-size: 14px;
font-weight: 400;
line-height: 22px;
letter-spacing: 0px;
text-align: left;
}
.tag {
margin-left: 16px;
height: 24px;
line-height: 24px;
box-sizing: border-box;
padding: 0 8px;
border-radius: 4px;
}
.tag1 {
border: 1px solid rgba(255, 204, 199, 1);
background: rgba(255, 241, 240, 1);
color: rgba(255, 77, 79, 1);
}
.tag2 {
color: rgba(250, 173, 20, 1);
border: 1px solid rgba(255, 241, 184, 1);
background: rgba(255, 251, 230, 1);
}
.tag3 {
color: rgba(22, 119, 255, 1);
border: 1px solid rgba(186, 224, 255, 1);
background: rgba(230, 244, 255, 1);
}
}
}
}
}
.footer {
width: 913px;
margin-left: 264px;
height: 107px;
box-sizing: border-box;
padding-top: 10px;
display: flex;
justify-content: center;
}
}
</style>
\ No newline at end of file
......@@ -2778,4 +2778,15 @@ onMounted(async () => {
.divide {
margin: 0 auto;
}
:deep(.el-input__wrapper) {
box-shadow: none;
}
:deep(.el-input__wrapper:hover) {
box-shadow: none !important;
}
:deep(.el-input__wrapper.is-focus) {
box-shadow: none !important;
}
</style>
\ No newline at end of file
......@@ -1788,4 +1788,14 @@ onMounted(async () => {
}
}
}
:deep(.el-input__wrapper) {
box-shadow: none;
}
:deep(.el-input__wrapper:hover) {
box-shadow: none !important;
}
:deep(.el-input__wrapper.is-focus) {
box-shadow: none !important;
}
</style>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论