PymolView.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <script setup lang="jsx">
  2. import { ref } from 'vue';
  3. import { useRouter } from 'vue-router';
  4. import { NTabs, NTab } from 'naive-ui';
  5. import { useChatStore } from '@/stores/modules/chatStore';
  6. import { BaseTable, ChatWelcome, RecodeSquareCardItem, TheSubMenu, TheChatView } from "@/components";
  7. import { ChatBaseCard, ChatAnswer } from '@/components/Chat';
  8. import { formatToData } from "@/utils/format";
  9. import { waterApi } from '@/api/water';
  10. import { useInfinite, useRecommend, useScroll } from '@/composables'
  11. import { inColumns, outColumns } from './config';
  12. const { recommendList } = useRecommend({ type: 2 });
  13. const { scrollRef, scrollToTop } = useScroll();
  14. const { recordList, isFetching, onScrolltolower, onRestore } = useInfinite('/front/bigModel/warning/pageList', { type: 1, warningStatus: 0 });
  15. const router = useRouter();
  16. const chatStore = useChatStore();
  17. const answerResult = ref("");
  18. const textDataSources = ref(null);
  19. const subMenuRef = ref(null);
  20. // 进出水数据
  21. const jsTableData = ref([]);
  22. const csTableData = ref([]);
  23. // 切换Tabs
  24. const onChangeTabs = warningStatus => {
  25. answerResult.value = '';
  26. textDataSources.value = '';
  27. onRestore({ warningStatus })
  28. subMenuRef.value.scrollToTop();
  29. }
  30. // 打开详情
  31. const handleOpenContent = async ({ id, reason:title }) => {
  32. const { data } = await waterApi.getWaringDetails(id);
  33. const showVal = JSON.parse(data.showVal);
  34. const { basic, jsData, csData } = showVal;
  35. answerResult.value = data.answer;
  36. basic.title = title
  37. textDataSources.value = formatToData(basic, '报警值', true);
  38. jsTableData.value = [jsData];
  39. csTableData.value = [csData];
  40. scrollToTop();
  41. }
  42. // 欢迎 - 问答
  43. const handleWelcomeRecommend = question => {
  44. chatStore.setChatQuestion(question);
  45. router.push('/answer');
  46. }
  47. </script>
  48. <template>
  49. <section class="flex items-start h-full" id="warning">
  50. <TheSubMenu title="生化报警" @scrollToLower="onScrolltolower" :loading="isFetching" ref="subMenuRef">
  51. <template #top>
  52. <div class="border-[#DAE5ED]">
  53. <n-tabs type="line" justify-content="space-evenly">
  54. <n-tab name="oasis" tab="正在报警" @click="onChangeTabs(0)"></n-tab>
  55. <n-tab name="thebeatles" tab="历史报警" @click="onChangeTabs(1)"></n-tab>
  56. </n-tabs>
  57. </div>
  58. </template>
  59. <div class="px-[12px] py-[14px] text-[#5e5e5e]">
  60. <p v-show="!recordList.length" class="pt-[30px] text-[12px] text-[#999] text-center">暂无报警数据</p>
  61. <div class="grid grid-cols-1 gap-[12px]">
  62. <RecodeSquareCardItem v-for="item in recordList" :key="item.id" :item="item" @on-click="handleOpenContent" />
  63. </div>
  64. </div>
  65. </TheSubMenu>
  66. <TheChatView ref="scrollRef" :is-footer="false">
  67. <ChatWelcome title="您好,我是LibraAI工艺管控助手" card-title="常见处理方案:" :sub-title="[
  68. '水质报警功能对工艺过程指标实时监测,发现异常后将推送给相关人员决策方案',
  69. '报警时间为每小时警报,请大家及时处理'
  70. ]"
  71. v-if="!textDataSources"
  72. :card-content="recommendList"
  73. @on-click="handleWelcomeRecommend"
  74. />
  75. <ChatBaseCard v-if="textDataSources">
  76. <div class="waring-answer-wrapper">
  77. <dl class="message-inner warning-info_medium ">
  78. <dt class="mb-[2px] font-bold text-[#1A2029]">{{ textDataSources?.title }}</dt>
  79. <dd v-for="item, index in textDataSources?.list" :key="index"><span :class="{'text-[#F44C49]': item.isWarning}">{{ item.label }}: {{ item.value }}</span></dd>
  80. </dl>
  81. <div class="table-inner">
  82. <div class="warning-table mb-[8px]">
  83. <div class="title">
  84. <span>当前进水数据:</span>
  85. </div>
  86. <div class="main">
  87. <BaseTable :columns="inColumns" :data="jsTableData"></BaseTable>
  88. </div>
  89. </div>
  90. <div class="warning-table">
  91. <div class="title">
  92. <span>当前出水数据:</span>
  93. </div>
  94. <div class="main">
  95. <BaseTable :columns="outColumns" :data="csTableData"></BaseTable>
  96. </div>
  97. </div>
  98. </div>
  99. </div>
  100. </ChatBaseCard>
  101. <ChatAnswer
  102. :loading="false"
  103. :delay-loading="false"
  104. :toggleVisibleIcons="false"
  105. :content="answerResult"
  106. v-if="answerResult"
  107. />
  108. </TheChatView>
  109. </section>
  110. </template>
  111. <style scoped lang="scss"></style>