|
@@ -6,7 +6,7 @@ import { ChatAsk, ChatAnswer } from '@/components/Chat';
|
|
import { orderApi } from "@/api/order";
|
|
import { orderApi } from "@/api/order";
|
|
import { chatApi } from '@/api/chat';
|
|
import { chatApi } from '@/api/chat';
|
|
import { formatEchart, isNumberComprehensive } from '@/utils/format';
|
|
import { formatEchart, isNumberComprehensive } from '@/utils/format';
|
|
-import { ORDER_OPTION_ENUM } from './config/enum';
|
|
|
|
|
|
+import { ORDER_OPTION_ENUM } from '@/utils/enum';
|
|
import { getAreaOptions, getOrderAreaOptions } from './config/echartOptions'
|
|
import { getAreaOptions, getOrderAreaOptions } from './config/echartOptions'
|
|
import * as echarts from 'echarts';
|
|
import * as echarts from 'echarts';
|
|
import dayjs from 'dayjs';
|
|
import dayjs from 'dayjs';
|
|
@@ -17,30 +17,19 @@ const { recordList, isFetching, onScrolltolower, onReset, addHistoryRecord } = u
|
|
const { scrollRef, scrollToBottom, scrollToBottomIfAtBottom } = useScroll();
|
|
const { scrollRef, scrollToBottom, scrollToBottomIfAtBottom } = useScroll();
|
|
const { chatDataSource, addChat, updateChat, clearChat, updateById } = useChat();
|
|
const { chatDataSource, addChat, updateChat, clearChat, updateById } = useChat();
|
|
|
|
|
|
-const ANSWER_ID_KEY = '@@id@@';
|
|
|
|
-
|
|
|
|
-const arr = []
|
|
|
|
-for (let i = 0; i < 2; i++) {
|
|
|
|
- arr.push({
|
|
|
|
- title: '2024-06-' + (i + 1),
|
|
|
|
- key: 'no' + i,
|
|
|
|
- width: '150px',
|
|
|
|
- align: 'center'
|
|
|
|
- })
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
|
|
+let controller = new AbortController();
|
|
|
|
|
|
-const columns = ref(arr)
|
|
|
|
|
|
+const ANSWER_ID_KEY = '@@id@@';
|
|
|
|
|
|
-const tableData = ref([{ no0: 1, no1: 2 }]);
|
|
|
|
const pageDataSource = ref({});
|
|
const pageDataSource = ref({});
|
|
|
|
+const chartRefDom = ref(null);
|
|
|
|
|
|
-let chart = null;
|
|
|
|
-let controller = new AbortController();
|
|
|
|
|
|
+const chartInstance = {};
|
|
|
|
|
|
const echartRef = ref([]);
|
|
const echartRef = ref([]);
|
|
const message = useMessage();
|
|
const message = useMessage();
|
|
const reportDate = ref();
|
|
const reportDate = ref();
|
|
|
|
+
|
|
const workOrderParams = ref({
|
|
const workOrderParams = ref({
|
|
timeBegin: null,
|
|
timeBegin: null,
|
|
timeEnd: null,
|
|
timeEnd: null,
|
|
@@ -48,22 +37,6 @@ const workOrderParams = ref({
|
|
checkGroup: [],
|
|
checkGroup: [],
|
|
})
|
|
})
|
|
|
|
|
|
-/**
|
|
|
|
- * 将他们分组,
|
|
|
|
- * 1、进水指标:jsGroup 出水指标:csGroup 化验指标:hyGroup
|
|
|
|
- * 2、组内的数据项和之前一样的,但是只返回勾选的子项
|
|
|
|
- * 3、勾选的项如果没值,字段一定也要返回,可以是null or 0
|
|
|
|
- * */
|
|
|
|
-
|
|
|
|
-// const mockData = {
|
|
|
|
-
|
|
|
|
-// jsGroup: [{ jsCod: 1, jsNh3: null, time: '2024/06/05', .... }, {}],
|
|
|
|
-// csGroup: [],
|
|
|
|
-// hyGroup: []
|
|
|
|
-
|
|
|
|
-// }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
const switchActive = ref(false);
|
|
const switchActive = ref(false);
|
|
const tabActive = ref("daily");
|
|
const tabActive = ref("daily");
|
|
const model = ref({})
|
|
const model = ref({})
|
|
@@ -75,6 +48,8 @@ const recordActive = ref(null);
|
|
const currenSessionId = ref(null);
|
|
const currenSessionId = ref(null);
|
|
|
|
|
|
const isExistInHistory = computed(() => (recordList.value.findIndex(({ sessionId: sId }) => sId === unref(currenSessionId)) === -1));
|
|
const isExistInHistory = computed(() => (recordList.value.findIndex(({ sessionId: sId }) => sId === unref(currenSessionId)) === -1));
|
|
|
|
+const isChart = computed(() => tabActive.value == 'customDaily');
|
|
|
|
+const chatDataSourceItem = computed(() => unref(chatDataSource)[chatDataSource.value.length - 1]);
|
|
|
|
|
|
// 新建对话
|
|
// 新建对话
|
|
const handleCreateDialog = async () => {
|
|
const handleCreateDialog = async () => {
|
|
@@ -87,6 +62,8 @@ const handleCreateDialog = async () => {
|
|
if (!unref(chatDataSource).length) {
|
|
if (!unref(chatDataSource).length) {
|
|
return message.info('已切换最新会话');
|
|
return message.info('已切换最新会话');
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ tabActive.value = 'daily';
|
|
|
|
|
|
currenSessionId.value = null;
|
|
currenSessionId.value = null;
|
|
|
|
|
|
@@ -101,17 +78,37 @@ const handleChatDetail = async ({ sessionId }) => {
|
|
|
|
|
|
controller.abort();
|
|
controller.abort();
|
|
|
|
|
|
|
|
+ if(currenSessionId.value === sessionId) return;
|
|
|
|
+
|
|
recordActive.value = sessionId;
|
|
recordActive.value = sessionId;
|
|
|
|
|
|
const { data } = await chatApi.getAnswerHistoryDetail({ sessionId });
|
|
const { data } = await chatApi.getAnswerHistoryDetail({ sessionId });
|
|
|
|
|
|
- chatDataSource.value = data.map(item => ({ ...item, loading: false, }));
|
|
|
|
|
|
+ let echartData = [];
|
|
|
|
+
|
|
|
|
+ chatDataSource.value = data.map(item => {
|
|
|
|
+ if ( item.remark ) {
|
|
|
|
+ echartData = item.echartWithTableData = formatData(JSON.parse(item.remark));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return { ...item, loading: false };
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ echartData.length && createEchart(echartData);
|
|
|
|
+
|
|
currenSessionId.value = sessionId;
|
|
currenSessionId.value = sessionId;
|
|
|
|
|
|
|
|
+ workOrderParams.value = {
|
|
|
|
+ timeBegin: null,
|
|
|
|
+ timeEnd: null,
|
|
|
|
+ whichWay: 1,
|
|
|
|
+ checkGroup: [],
|
|
|
|
+ }
|
|
|
|
+
|
|
scrollToBottom();
|
|
scrollToBottom();
|
|
}
|
|
}
|
|
|
|
|
|
-const onRegenerate = async ({ question, params1 }) => {
|
|
|
|
|
|
+const onRegenerate = async (question, options) => {
|
|
controller = new AbortController();
|
|
controller = new AbortController();
|
|
|
|
|
|
const sessionId = unref(currenSessionId);
|
|
const sessionId = unref(currenSessionId);
|
|
@@ -122,7 +119,8 @@ const onRegenerate = async ({ question, params1 }) => {
|
|
question,
|
|
question,
|
|
module: 1,
|
|
module: 1,
|
|
isStrong: Number(unref(switchActive)),
|
|
isStrong: Number(unref(switchActive)),
|
|
- reportDate: reportDate.value
|
|
|
|
|
|
+ reportDate: reportDate.value,
|
|
|
|
+ ...options,
|
|
},
|
|
},
|
|
signal: controller.signal,
|
|
signal: controller.signal,
|
|
onDownloadProgress: ({ event }) => {
|
|
onDownloadProgress: ({ event }) => {
|
|
@@ -131,6 +129,7 @@ const onRegenerate = async ({ question, params1 }) => {
|
|
const [answer] = responseText.split(ANSWER_ID_KEY);
|
|
const [answer] = responseText.split(ANSWER_ID_KEY);
|
|
|
|
|
|
updateChat({
|
|
updateChat({
|
|
|
|
+ ...chatDataSourceItem.value,
|
|
sessionId,
|
|
sessionId,
|
|
showVal: question,
|
|
showVal: question,
|
|
answer,
|
|
answer,
|
|
@@ -148,6 +147,7 @@ const onRegenerate = async ({ question, params1 }) => {
|
|
const [answer, id] = data.split(ANSWER_ID_KEY);
|
|
const [answer, id] = data.split(ANSWER_ID_KEY);
|
|
|
|
|
|
updateChat({
|
|
updateChat({
|
|
|
|
+ ...chatDataSourceItem.value,
|
|
id,
|
|
id,
|
|
sessionId,
|
|
sessionId,
|
|
showVal: question,
|
|
showVal: question,
|
|
@@ -166,6 +166,7 @@ const onRegenerate = async ({ question, params1 }) => {
|
|
onReset();
|
|
onReset();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
// 提交问题
|
|
// 提交问题
|
|
const handleSubmit = async (question, params) => {
|
|
const handleSubmit = async (question, params) => {
|
|
|
|
|
|
@@ -185,69 +186,28 @@ const handleSubmit = async (question, params) => {
|
|
echartWithTableData: []
|
|
echartWithTableData: []
|
|
}
|
|
}
|
|
|
|
|
|
- const isChart = tabActive.value == 'customDaily';
|
|
|
|
-
|
|
|
|
- if (isChart) {
|
|
|
|
|
|
+ if (isChart.value) {
|
|
const { data } = await orderApi.postOrderChart(params);
|
|
const { data } = await orderApi.postOrderChart(params);
|
|
- const titleEnum = {
|
|
|
|
- jsGroup: '进水指标',
|
|
|
|
- csGroup: '出水指标',
|
|
|
|
- hyGroup: '化验指标'
|
|
|
|
- }
|
|
|
|
- const reuslt = Object.entries(data).map(([key, value]) => {
|
|
|
|
- if ( value.length ) {
|
|
|
|
- const [ xAxisData, yAxisData ] = formatEchart(value);
|
|
|
|
- const [ item ] = value;
|
|
|
|
- const columns = Object.keys(item).map(k => ({
|
|
|
|
- title: ORDER_OPTION_ENUM[k],
|
|
|
|
- key: k,
|
|
|
|
- width: '150px',
|
|
|
|
- align: 'center',
|
|
|
|
- }))
|
|
|
|
- const data = value.map(item => {
|
|
|
|
- Object.entries(item).forEach(([k, v]) => {
|
|
|
|
- console.log(k, isNumberComprehensive(v));
|
|
|
|
- if (isNumberComprehensive(v)) {
|
|
|
|
- item[k] = v ? Number(v.toFixed(2)) : 0
|
|
|
|
- }
|
|
|
|
- })
|
|
|
|
- return item;
|
|
|
|
- })
|
|
|
|
- return {
|
|
|
|
- id: key,
|
|
|
|
- title: titleEnum[key],
|
|
|
|
- xAxisData,
|
|
|
|
- yAxisData,
|
|
|
|
- columns,
|
|
|
|
- data
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }).filter(Boolean);
|
|
|
|
|
|
+ const reuslt = formatData(data);
|
|
|
|
|
|
option.echartWithTableData = reuslt;
|
|
option.echartWithTableData = reuslt;
|
|
-
|
|
|
|
- console.log( option );
|
|
|
|
}
|
|
}
|
|
|
|
|
|
addChat(option);
|
|
addChat(option);
|
|
|
|
|
|
- scrollToBottom();
|
|
|
|
-
|
|
|
|
setTimeout(() => {
|
|
setTimeout(() => {
|
|
|
|
|
|
- option.echartWithTableData.forEach(({ id, xAxisData, yAxisData }) => {
|
|
|
|
- const dom = document.getElementById(id);
|
|
|
|
- const chart = echarts.init(dom, null, { width: 680, height: 300 });
|
|
|
|
- const option = getOrderAreaOptions({ xAxisData, yAxisData });
|
|
|
|
- chart.setOption(option);
|
|
|
|
|
|
+ updateChat({
|
|
|
|
+ ...chatDataSourceItem.value,
|
|
|
|
+ delayLoading: false
|
|
})
|
|
})
|
|
|
|
|
|
- // if(!chart) {
|
|
|
|
- // const dom = document.getElementById('chartContainer')
|
|
|
|
- // chart = echarts.init(dom, null, { width: 680, height: 300 });
|
|
|
|
- // }
|
|
|
|
|
|
+ createEchart(option.echartWithTableData);
|
|
|
|
+
|
|
|
|
+ scrollToBottom();
|
|
|
|
+
|
|
|
|
+ // onRegenerate(question, params)
|
|
|
|
|
|
- // onRegenerate({ question }), 2 * 1000
|
|
|
|
}, 2 * 1000);
|
|
}, 2 * 1000);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -256,11 +216,7 @@ const handleCreateOrder = async () => {
|
|
const { timeBegin, timeEnd, whichWay, checkGroup } = unref(workOrderParams);
|
|
const { timeBegin, timeEnd, whichWay, checkGroup } = unref(workOrderParams);
|
|
const startDateTime = dayjs(timeBegin);
|
|
const startDateTime = dayjs(timeBegin);
|
|
const endDateTime = dayjs(timeEnd);
|
|
const endDateTime = dayjs(timeEnd);
|
|
- const params = {
|
|
|
|
- timeBegin,
|
|
|
|
- timeEnd,
|
|
|
|
- whichWay
|
|
|
|
- };
|
|
|
|
|
|
+ let params = {};
|
|
|
|
|
|
let question = `请生成${reportDate.value}智慧工单分析报告`;
|
|
let question = `请生成${reportDate.value}智慧工单分析报告`;
|
|
|
|
|
|
@@ -272,7 +228,12 @@ const handleCreateOrder = async () => {
|
|
if (!timeEnd) return message.warning('请选择结束日期');
|
|
if (!timeEnd) return message.warning('请选择结束日期');
|
|
if (!isStartAfterThirtyDaysBeforeEnd) return message.warning('只可生成一个月区间的工单报告');
|
|
if (!isStartAfterThirtyDaysBeforeEnd) return message.warning('只可生成一个月区间的工单报告');
|
|
if (!checkGroup.length) return message.warning('请至少选择一项指标项');
|
|
if (!checkGroup.length) return message.warning('请至少选择一项指标项');
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ params = {
|
|
|
|
+ timeBegin,
|
|
|
|
+ timeEnd,
|
|
|
|
+ whichWay
|
|
|
|
+ }
|
|
checkGroup.forEach(key => params[key] = true);
|
|
checkGroup.forEach(key => params[key] = true);
|
|
|
|
|
|
question = `请成生${startDateTime.format("MM月DD日")}-${endDateTime.format("MM月DD日")}的在线仪表的日报工单`
|
|
question = `请成生${startDateTime.format("MM月DD日")}-${endDateTime.format("MM月DD日")}的在线仪表的日报工单`
|
|
@@ -286,9 +247,63 @@ const handleCreateOrder = async () => {
|
|
handleSubmit(question, params)
|
|
handleSubmit(question, params)
|
|
}
|
|
}
|
|
|
|
|
|
-// 创建echart
|
|
|
|
-const createLineEchart = async (params) => {
|
|
|
|
- await orderApi.postOrderChart(params);
|
|
|
|
|
|
+// 创建echart图形
|
|
|
|
+const createEchart = (echartData) => {
|
|
|
|
+
|
|
|
|
+ setTimeout(() => {
|
|
|
|
+
|
|
|
|
+ echartData.forEach(({ key, xAxisData, yAxisData }) => {
|
|
|
|
+
|
|
|
|
+ // if ( !chartInstance[key] ) {
|
|
|
|
+ const dom = document.getElementById(key);
|
|
|
|
+ chartInstance[key] = echarts.init(dom, null, { width: 680, height: 300 });
|
|
|
|
+ // }
|
|
|
|
+
|
|
|
|
+ const option = getOrderAreaOptions({ xAxisData, yAxisData });
|
|
|
|
+
|
|
|
|
+ // chartInstance[key].clear();
|
|
|
|
+ chartInstance[key].setOption(option);
|
|
|
|
+ })
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 格式化 echart 和 table 数据
|
|
|
|
+const formatData = (data) => {
|
|
|
|
+ const titleEnum = {
|
|
|
|
+ jsGroup: '进水指标',
|
|
|
|
+ csGroup: '出水指标',
|
|
|
|
+ hyGroup: '化验指标'
|
|
|
|
+ }
|
|
|
|
+ return Object.entries(data).map(([key, value]) => {
|
|
|
|
+ if ( value.length ) {
|
|
|
|
+ const [ xAxisData, yAxisData ] = formatEchart(value);
|
|
|
|
+ const [ item ] = value;
|
|
|
|
+ const columns = Object.keys(item).map(k => ({
|
|
|
|
+ title: ORDER_OPTION_ENUM[k],
|
|
|
|
+ key: k,
|
|
|
|
+ width: '150px',
|
|
|
|
+ align: 'center',
|
|
|
|
+ }))
|
|
|
|
+ const data = value.map(item => {
|
|
|
|
+ Object.entries(item).forEach(([k, v]) => {
|
|
|
|
+ !v && v!=0 && (item[k] = '-');
|
|
|
|
+ if (isNumberComprehensive(v)) {
|
|
|
|
+ item[k] = v ? Number(v.toFixed(2)) : 0
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ return item;
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ return {
|
|
|
|
+ key: key,
|
|
|
|
+ title: titleEnum[key],
|
|
|
|
+ xAxisData,
|
|
|
|
+ yAxisData,
|
|
|
|
+ columns,
|
|
|
|
+ data
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }).filter(Boolean);
|
|
}
|
|
}
|
|
|
|
|
|
// 删除历史对话
|
|
// 删除历史对话
|
|
@@ -322,13 +337,11 @@ const dateEndDisabled = (timestamp) => {
|
|
}
|
|
}
|
|
|
|
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
- // const dom = document.getElementById('chartContainer')
|
|
|
|
- // console.log( echartRef.value );
|
|
|
|
- // chart = echarts.init(dom);
|
|
|
|
})
|
|
})
|
|
|
|
|
|
onUnmounted(() => {
|
|
onUnmounted(() => {
|
|
controller.abort();
|
|
controller.abort();
|
|
|
|
+ // Object.keys(chartInstance).forEach(key => chartInstance[key].clear());
|
|
})
|
|
})
|
|
</script>
|
|
</script>
|
|
|
|
|
|
@@ -353,15 +366,9 @@ onUnmounted(() => {
|
|
|
|
|
|
<TheChatView ref="scrollRef" :is-footer="false">
|
|
<TheChatView ref="scrollRef" :is-footer="false">
|
|
<ChatWelcome title="您好,我是LibraAI智慧工单助手" :sub-title="[
|
|
<ChatWelcome title="您好,我是LibraAI智慧工单助手" :sub-title="[
|
|
- '基于大语言模型的智能工单分析助手,可以为您实现数据分析及数据解读',
|
|
|
|
- '选择日期并为您生成日报分析'
|
|
|
|
- ]" v-if="!chatDataSource.length" />
|
|
|
|
- <!-- :loading="item.loading" :delay-loading="item.delayLoading" -->
|
|
|
|
- <!-- <ChatAnswer content="11111111111"> -->
|
|
|
|
- <!-- v-show="item.isChart && !item.delayLoading" -->
|
|
|
|
-
|
|
|
|
- <!-- </ChatAnswer> -->
|
|
|
|
-
|
|
|
|
|
|
+ '基于大语言模型的智能工单分析助手,可以为您实现数据分析及数据解读',
|
|
|
|
+ '选择日期并为您生成日报分析'
|
|
|
|
+ ]" v-if="!chatDataSource.length" />
|
|
|
|
|
|
<div class="conversation-item" v-show="chatDataSource.length">
|
|
<div class="conversation-item" v-show="chatDataSource.length">
|
|
<div v-for="item in chatDataSource" :key="item.sessionId">
|
|
<div v-for="item in chatDataSource" :key="item.sessionId">
|
|
@@ -372,37 +379,41 @@ onUnmounted(() => {
|
|
:loading="item.loading"
|
|
:loading="item.loading"
|
|
:delay-loading="item.delayLoading"
|
|
:delay-loading="item.delayLoading"
|
|
:isSatisfied="item.isSatisfied"
|
|
:isSatisfied="item.isSatisfied"
|
|
|
|
+ :toggleVisibleIcons="false"
|
|
@on-click-icon="params => updateById(params)"
|
|
@on-click-icon="params => updateById(params)"
|
|
>
|
|
>
|
|
- <div v-show="!item.delayLoading">
|
|
|
|
- <div v-for="(item, index) in item.echartWithTableData" :key="index">
|
|
|
|
|
|
+ <main v-show="!item.delayLoading">
|
|
|
|
+ <div
|
|
|
|
+ class="area_inner"
|
|
|
|
+ v-for="(item, index) in item.echartWithTableData"
|
|
|
|
+ :key="index + new Date().getTime()"
|
|
|
|
+ >
|
|
<div class="echart-warpper" >
|
|
<div class="echart-warpper" >
|
|
<span class="mb-[10px] #1A2029 font-bold">{{ item.title }}</span>
|
|
<span class="mb-[10px] #1A2029 font-bold">{{ item.title }}</span>
|
|
- <div :id="item.id" class="w-[680px] h-[300px]" style="width: 680px; height: 300px;"></div>
|
|
|
|
|
|
+ <div :id="item.key" class="w-[680px] h-[300px]"></div>
|
|
</div>
|
|
</div>
|
|
- <div class="w-[700px]">
|
|
|
|
|
|
+
|
|
|
|
+ <div class="w-[680px]" style="max-width: 680px; overflow-x: auto;">
|
|
<NDataTable
|
|
<NDataTable
|
|
- :max-height="250"
|
|
|
|
bordered
|
|
bordered
|
|
|
|
+ size="small"
|
|
|
|
+ :scroll-x="item.columns.length > 5 ? 1200: 670"
|
|
|
|
+ :max-height="250"
|
|
:single-line="false"
|
|
:single-line="false"
|
|
:columns="item.columns"
|
|
:columns="item.columns"
|
|
:data="item.data"
|
|
:data="item.data"
|
|
- scroll="{ x: true }"
|
|
|
|
- size="small"
|
|
|
|
>
|
|
>
|
|
- <template #empty>
|
|
|
|
|
|
+ <template #empty>
|
|
<span class="leading-[32px]">暂无数据</span>
|
|
<span class="leading-[32px]">暂无数据</span>
|
|
</template>
|
|
</template>
|
|
</NDataTable>
|
|
</NDataTable>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- </div>
|
|
|
|
|
|
+ </main>
|
|
</ChatAnswer>
|
|
</ChatAnswer>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
<div class="order-container px-[60px] py-[30px] mt-[36px] rounded-[10px] bg-[#fff]" v-if="!chatDataSource.length">
|
|
<div class="order-container px-[60px] py-[30px] mt-[36px] rounded-[10px] bg-[#fff]" v-if="!chatDataSource.length">
|
|
<div
|
|
<div
|
|
class="flex items-center justify-start space-x-[24px] pb-[20px] border-b-[1px] border-solid border-[#F1F1F1]">
|
|
class="flex items-center justify-start space-x-[24px] pb-[20px] border-b-[1px] border-solid border-[#F1F1F1]">
|
|
@@ -517,7 +528,6 @@ onUnmounted(() => {
|
|
</footer>
|
|
</footer>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
-
|
|
|
|
</TheChatView>
|
|
</TheChatView>
|
|
</section>
|
|
</section>
|
|
</template>
|
|
</template>
|
|
@@ -527,6 +537,16 @@ onUnmounted(() => {
|
|
font-size: 12px !important;
|
|
font-size: 12px !important;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+.area_inner {
|
|
|
|
+ display: flex;
|
|
|
|
+ align-items: center;
|
|
|
|
+ flex-flow: column;
|
|
|
|
+ padding-bottom: 20px;
|
|
|
|
+ border-radius: 8px;
|
|
|
|
+ margin-bottom: 20px;
|
|
|
|
+ background: #eff8fc;
|
|
|
|
+}
|
|
|
|
+
|
|
.list-item {
|
|
.list-item {
|
|
margin-bottom: 16px;
|
|
margin-bottom: 16px;
|
|
|
|
|
|
@@ -597,4 +617,4 @@ onUnmounted(() => {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-</style>
|
|
|
|
|
|
+</style>../../utils/enum
|