Przeglądaj źródła

feat: 锡林浩特-调整

sunxiao 6 miesięcy temu
rodzic
commit
33a33e8428

+ 2 - 2
.env.development

@@ -1,4 +1,4 @@
 # 请求地址
-VITE_BASE_URL=http://10.0.0.28:8080
+VITE_BASE_URL=http://localhost:8888
 # 请求前缀
-VITE_BASE_PREFIX='' 
+VITE_BASE_PREFIX=''

+ 48 - 0
src/api/xlht.js

@@ -0,0 +1,48 @@
+import http, { streamHttp } from "@/utils/request";
+
+export const xlhtApi = {
+  /**
+   * 获取记录
+   */
+  getRecordFetch: (path, params) => http.get(path, { params }),
+  
+  /**
+   * 问答列表
+   */
+  getAnswerHistoryList: params => http.get('/front/bigModel/qa/pageList', { params }),
+
+  /**
+   * 通过sessionId获取某个用户的问答列表
+   */
+  getAnswerHistoryDetail: params => http.get('/front/bigModel/qa/qaListBySessionId', { params }),
+
+  /**
+   * 问答流数据
+   */
+  getChatStream: ({ data, onDownloadProgress, signal }) => streamHttp.post('/grpc/inferStreamRag', data, { onDownloadProgress, signal }),
+
+  /**
+   * 获取sessionId
+   */
+  getChatSessionTag: params =>http.get('/front/bigModel/chat/generateSessionId', { params }),
+
+  /**
+   * 推荐问答列表
+   */
+  getWelcomeRecommend: params => http.get('/front/bigModel/home/recommendQAList/' + params),
+
+  /**
+   * 删除历史记录
+   */
+  deleteHistory: params => http.delete('/front/bigModel/chat/deleteOneChtById/' + params),
+
+  /**
+   * 点赞 or 取消点赞
+   */
+  putIsSatisfiedAnswer: data => http.put(`/front/bigModel/chat/isSatisfiedAnswer`, data),
+
+  /**
+   * 停止流数据
+   */
+  getStopChatStream: params => http.get('/front/bigModel/warning/stopChat/' + params)
+}

+ 66 - 35
src/views/control/MedicinalView.vue

@@ -15,6 +15,14 @@ const message = useMessage();
 const isVisibleBtn = ref(true);
 const isVisibleUpdateInfo = ref(false);
 const systemStatus = ref(0);
+const resultNumberSet = ref({
+  flowNum1: 0,
+  flowNum2: 0,
+  doseNum1: 0,
+  doseNum2: 0,
+  updateNum1: 0,
+  updateNum2: 0
+});
 
 const columnData = ref([
   { label: '后反馈设定', key: 'htfksd', value: '' },
@@ -28,7 +36,7 @@ const columnData = ref([
   { label: '药剂密度', key: 'yymd', value: '' },
   { label: '最小启动流量', key: 'zxqdll', value: '' },
   { label: '碳氮比', key: 'tdb', value: '' }
-])
+]);
 
 const doseNum = ref(null);
 const flowNum = ref(null);
@@ -66,6 +74,8 @@ const tabActiveKey = computed(() => tabKeyEnum[baseSourceParams.value.type]);
 const tdbNum = computed(() => {
   const type = tabActiveKey.value;
 
+  const [ r1, r2, rOne, rTwo] = getTotalNum();
+
   const { 
     jsLlOne, jsLlTwo,
     jsCodOne, jsCodTwo,
@@ -76,19 +86,19 @@ const tdbNum = computed(() => {
     tydl, zhxs
   } = baseSourceParams.value
  
-  const { tytjzl } = waterConfigParams.value;
-
   if ( type === 'auto' || type === 'worker' ) {
-    const jsll = Math.max( jsLlOne, jsLlTwo );
-    const cod = Math.max( jsCodOne, jsCodTwo );
-    const jsTn = Math.max( jsTnOne, jsTnTwo );
-    return Number(((tytjzl*1000/jsll*tydl+cod*zhxs*tydl)/jsTn).toFixed(2));
+    const rNum = Math.max( r1, r2 );
+    const jsll = rNum == r1 ? jsLlOne: jsLlTwo;
+    const cod = rNum == r1 ? jsCodOne: jsCodTwo;
+    const jsTn = rNum == r1 ? jsTnOne: jsTnTwo;
+    const n = rNum == r1 ? rOne : rOne
+    return Number(((n*1000/jsll*tydl+cod*zhxs*tydl)/jsTn).toFixed(2)) + "%";
   }
   if ( type === 'onePool' ) {
-    return Number(((tytjzl*1000/jsLlOne*tydl+jsCodOne*zhxs*tydl)/jsTnOne).toFixed(2));
+    return Number(((rOne*1000/jsLlOne*tydl+jsCodOne*zhxs*tydl)/jsTnOne).toFixed(2)) + "%";
   }
   if ( type === 'twoPool' ) {
-    return Number(((tytjzl*1000/jsLlTwo*tydl+jsCodTwo*zhxs*tydl)/jsTnTwo).toFixed(2));
+    return Number(((rTwo*1000/jsLlTwo*tydl+jsCodTwo*zhxs*tydl)/jsTnTwo).toFixed(2)) + "%";
   }
 })
 
@@ -120,13 +130,14 @@ const onEditCancel = () => {
   })
 }
 
-const onFinalResult = () => {
+const onFinalResult = async () => {
+
   const addStatus = systemStatus.value === 0 ? 1 : 0;
 
   controlApi.putSystemStatus({ addStatus });
 
   systemStatus.value = addStatus;
-
+  
   message.warning(addStatus === 0 ? '当前投药状态:已停用' : '当前投药状态:投放中');
 
 }
@@ -141,7 +152,7 @@ const onUpdateTab = (index) => {
   handleMedicateAmount();
 }
 
-const getTotalNum = () => {
+function getTotalNum() {
   const {
     hycXsyOne = 0, hycXsyTwo = 0,
     qycAdOne = 0, qycAdTwo = 0,
@@ -165,7 +176,7 @@ const getTotalNum = () => {
   const r1 = Number((rOne3 < 0 || !rOne3) ? 0 : rOne3.toFixed(3)) || 0;
   const r2 = Number((rTwo3 < 0 || !rTwo3) ? 0 : rTwo3.toFixed(3)) || 0;
 
-  return [ r1, r2 ];
+  return [ r1, r2, rOne2, rTwo2 ];
 }
 
 const onConfirmUpdate = async () => {
@@ -177,14 +188,22 @@ const onConfirmUpdate = async () => {
   isVisibleUpdateInfo.value = false;
 
   message.success("系统加药量,更新成功");
+  
+  if ( tabActiveKey === 'onePool' ) {
+    resultNumberSet.value.doseNum1 = resultNumberSet.value.updateNum1;
+  } else {
+    resultNumberSet.value.doseNum2 = resultNumberSet.value.updateNum2;    
+  }
 
-  doseNum.value = updateNum.value;
+  // doseNum.value = updateNum.value;
 }
 
 // 更新投药结果
 const handleMedicateAmount = () => {
   const type = tabActiveKey.value;
-  const lastNum = unref(updateNum);
+  // const lastNum = unref(updateNum);
+  const { updateNum1, updateNum2 } = unref(resultNumberSet);
+
   const tdb = tdbNum.value;
 
   if ( type === 'worker' ) {
@@ -204,25 +223,28 @@ const handleMedicateAmount = () => {
   const [r1, r2] = getTotalNum();
   const maxR = Math.max( r1, r2 );
 
-  if ( type === 'auto' && maxR !== lastNum) {
-    updateNum.value = maxR;
+  if ( type === 'auto' && maxR !== updateNum1) {
+    resultNumberSet.value.updateNum = maxR;
     isVisibleUpdateInfo.value = true;
     baseSourceParams.value.tdb = tdb;
     message.warning("有新的投放方案, 请查看");
   }
-
-  if ( type === 'onePool' && r1 != lastNum) {
-    updateNum.value = r1;
+  console.log( "r1", r1 );
+  if ( type === 'onePool' && r1 != updateNum1) {
+    console.log( "r1", r1 );
+    resultNumberSet.value.updateNum1 = r1;
+    // updateNum.value = r1;
     isVisibleUpdateInfo.value = true;
     baseSourceParams.value.tdb = tdb;
-    message.warning("有新的投放方案, 请查看");
+    message.warning("1#有新的投放方案, 请查看");
   }
 
-  if ( type === 'twoPool' && r2 != lastNum ) {
-    updateNum.value = r2;
+  if ( type === 'twoPool' && r2 != updateNum2 ) {
+    resultNumberSet.value.updateNum2 = r2;
+    // updateNum.value = r2;
     isVisibleUpdateInfo.value = true;
     baseSourceParams.value.tdb = tdb;
-    message.warning("有新的投放方案, 请查看");
+    message.warning("1#有新的投放方案, 请查看");
   }
 
 }
@@ -234,27 +256,35 @@ onMounted(async () => {
       numberBeng = 0, type = 0,
       htfksd, jzxs, xzxs, kzxs, slfpxs, tydl, zhxs, sxps, yymd, zxqdll,
       medicineAmount,
-      addType,
-      tytjTransientLL
+      tytjTransientLL,
+      tytjTransientLLOne,
+      tytjTransientLLTwo
     } = data;
  
     baseSourceParams.value = { 
       ...baseSourceParams.value,
       numberBeng, type,
-      htfksd, jzxs, xzxs, kzxs, slfpxs, tydl, zhxs, sxps, yymd, zxqdll,
-      addType
+      htfksd, jzxs, xzxs, kzxs, slfpxs, tydl, zhxs, sxps, yymd, zxqdll
     };
     
-    updateNum.value = medicineAmount;
+    resultNumberSet.value = {
+      updateNum1: medicineAmount,
+      updateNum2: medicineAmount,
+      flowNum1: tytjTransientLLOne,
+      flowNum2: tytjTransientLLTwo,
+      doseNum1: medicineAmount,
+      doseNum2: medicineAmount,
+    }
+
+    // updateNum.value = medicineAmount;
 
-    doseNum.value = medicineAmount;
+    // doseNum.value = medicineAmount;
 
-    flowNum.value = tytjTransientLL;
+    // flowNum.value = tytjTransientLL;
 
     dataSourceParams.value[tabActiveKey.value] = data;
 
   })
-
  
   // 获取实时数据
   controlApi.getNumValue().then(({ data }) => {
@@ -304,7 +334,7 @@ onMounted(async () => {
     })
   })
 
-  // 获取是否允许投药开关
+  // 获取是否允许投药开关 - 锡林浩特
   controlApi.getSystemStatus().then(({ data }) => {
     // 0不允许  1允许
     systemStatus.value = data;
@@ -329,7 +359,8 @@ onMounted(async () => {
 
                 <BaseCard title="投加运行方式">
                   <span class="status-bar">
-                    <i>{{ baseSourceParams.addType === 0 ? '启用智适应碳源投加' : '手动碳源投加' }}</i>
+                    
+                    <i>{{ systemStatus === 1 ? '启用智适应碳源投加' : '停用智适应碳源投加' }}</i>
                   </span>
                 </BaseCard>
 
@@ -668,7 +699,7 @@ onMounted(async () => {
               :updateNum="updateNum"
               :flowNum="flowNum"
               :doseNum="doseNum"
-              :configuration-status="baseSourceParams.addType"
+              :nums="resultNumberSet"
               v-model:system="systemStatus"
               v-model="isVisibleUpdateInfo"
               @on-click="onFinalResult"

+ 2 - 2
src/views/control/components/TheEchartPanel.vue

@@ -196,8 +196,8 @@ const onSwitchEchart = (item) => {
 const initWaterEchartData = async () => {
   const [tBegin, tEnd] = datePickerValue.value || [];
 
-  const timeBegin = tBegin ? dayjs(tBegin).format('YYYY/MM/DD') : null;
-  const timeEnd = tEnd ? dayjs(tEnd).format('YYYY/MM/DD') : null;
+  const timeBegin = tBegin ? dayjs(tBegin).format('YYYY-MM-DD') : null;
+  const timeEnd = tEnd ? dayjs(tEnd).format('YYYY-MM-DD') : null;
   const { data: echartData } = await controlApi.getEchartData(unref(selectValue), { timeBegin, timeEnd });
 
   const enumSource = {

+ 60 - 35
src/views/control/components/TheResultPanel.vue

@@ -10,33 +10,30 @@ const modelSystemStatus = defineModel('system');
 const emit = defineEmits(['on-click', 'on-update']);
 
 const props = defineProps({
-  flowNum: {
-    type: Number,
-    default: 0
-  },
-  updateNum: {
-    type: Number,
-    default: 0
-  },
-  doseNum: {
-    type: Number,
-    default: 0
-  },
-  configurationStatus: {
-    type: Number,
-    default: 1
+  // flowNum: {
+  //   type: Number,
+  //   default: 0
+  // },
+  // updateNum: {
+  //   type: Number,
+  //   default: 0
+  // },
+  // doseNum: {
+  //   type: Number,
+  //   default: 0
+  // },
+  // configurationStatus: {
+  //   type: Number,
+  //   default: 1
+  // },
+  nums: {
+    type: Object,
+    default: () => ({})
   }
 });
 
-const systemSwitchType = computed(() => props.configurationStatus === 0 && modelSystemStatus.value === 1);
-
 const emitEvent = () => {
-  if ( props.configurationStatus === 1 ) {
-    return message.warning('当前组态未启用,无法投放');
-  } else {
-    emit('on-click');
-  }
-
+  emit('on-click');
 };
 const emitUpdate = async () => {
   emit('on-update');
@@ -51,7 +48,7 @@ const emitUpdate = async () => {
         <ul class="update-message space-x-[16px]" v-show="isVisibleBtn">
           <li class="flex space-x-[4px]">
             <SvgIcon name="control-icon-warning" size="16"></SvgIcon>
-            <span>有新投放方案,系统加药量计算为:{{ updateNum }}m³/h,是否更新?</span>
+            <span>有新投放方案,1#系统加药量计算为:{{ nums.updateNum1 }}m³/h, 2#系统加药量计算为:{{ nums.updateNum2 }}m³/h,是否更新?</span>
           </li>
           <li class="space-x-[10px]">
             <span class="text-[#ed742f] cursor-pointer" @click="emitUpdate">更新投放量</span>
@@ -64,12 +61,40 @@ const emitUpdate = async () => {
           <div class="result-card_item">
             <div class="h-full flex flex-col justify-between">
               <h4>
-                <span>碳源投加瞬时流量</span>
+                <span>1#瞬时流量</span>
+                <span class="block w-[12px] h-[3px] mt-[4px] bg-[#1D2129]"></span>
+              </h4>
+              <p class="num-group space-x-[4px]">
+                <span class="num">
+                  <NNumberAnimation :from="0" :to="nums.flowNum1" :duration="1000" :precision="nums.flowNum1 < 1 ? 3 : 3"></NNumberAnimation>
+                </span>
+                <span class="text-[12px] text-[#86909C]">m³/h</span>
+              </p>
+            </div>
+          </div>
+          <div class="result-card_item">
+            <div class="h-full flex flex-col justify-between">
+              <h4>
+                <span>2#瞬时流量</span>
+                <span class="block w-[12px] h-[3px] mt-[4px] bg-[#1D2129]"></span>
+              </h4>
+              <p class="num-group space-x-[4px]">
+                <span class="num">
+                  <NNumberAnimation :from="0" :to="nums.flowNum2" :duration="1000" :precision="nums.flowNum2 < 1 ? 3 : 3"></NNumberAnimation>
+                </span>
+                <span class="text-[12px] text-[#86909C]">m³/h</span>
+              </p>
+            </div>
+          </div>
+          <div class="result-card_item">
+            <div class="h-full flex flex-col justify-between">
+              <h4>
+                <span>1#系统加药量</span>
                 <span class="block w-[12px] h-[3px] mt-[4px] bg-[#1D2129]"></span>
               </h4>
               <p class="num-group space-x-[4px]">
                 <span class="num">
-                  <NNumberAnimation :from="0" :to="flowNum" :duration="1000" :precision="flowNum < 1 ? 3 : 3"></NNumberAnimation>
+                  <NNumberAnimation :from="0" :to="nums.doseNum1" :duration="1000" :precision="3"></NNumberAnimation>
                 </span>
                 <span class="text-[12px] text-[#86909C]">m³/h</span>
               </p>
@@ -78,12 +103,12 @@ const emitUpdate = async () => {
           <div class="result-card_item">
             <div class="h-full flex flex-col justify-between">
               <h4>
-                <span>系统加药量</span>
+                <span>2#系统加药量</span>
                 <span class="block w-[12px] h-[3px] mt-[4px] bg-[#1D2129]"></span>
               </h4>
               <p class="num-group space-x-[4px]">
                 <span class="num">
-                  <NNumberAnimation :from="0" :to="doseNum" :duration="1000" :precision="3"></NNumberAnimation>
+                  <NNumberAnimation :from="0" :to="nums.doseNum2" :duration="1000" :precision="3"></NNumberAnimation>
                 </span>
                 <span class="text-[12px] text-[#86909C]">m³/h</span>
               </p>
@@ -91,13 +116,13 @@ const emitUpdate = async () => {
           </div>
         </div>
         <div class="btn-card">
-          <div :class="['round-btn', {disable: configurationStatus === 1}]" @click="emitEvent">
-            <div class="circle1" v-show="systemSwitchType"></div>
-            <div class="circle2" v-show="systemSwitchType"></div>
-            <div class="circle3" v-show="systemSwitchType"></div>
+          <div :class="['round-btn', { disable: modelSystemStatus === 0 }]" @click="emitEvent">
+            <div class="circle1" v-show="modelSystemStatus === 1"></div>
+            <div class="circle2" v-show="modelSystemStatus === 1"></div>
+            <div class="circle3" v-show="modelSystemStatus === 1"></div>
             <div class="inner space-y-[4px]">
               <SvgIcon name="control-icon-result-btn" size="24" />
-              <span>{{ systemSwitchType ? "投放中" : "未启用" }}</span>
+              <span>{{ modelSystemStatus === 1 ? "投放中" : "未启用" }}</span>
             </div>
           </div>
         </div>
@@ -107,7 +132,6 @@ const emitUpdate = async () => {
 </template>
 
 <style lang="scss" scoped>
-
 .result-card_view {
   position: relative;
   height: 190px;
@@ -143,11 +167,12 @@ const emitUpdate = async () => {
     background-position: 50% 10%;
 
     .result-inner {
+      width: 80%;
       border-radius: 8px;
       @include flex(x, center, start);
 
       .result-card_item {
-        width: 254px;
+        width: 22%;
         height: 104px;
         padding: 20px 0 20px 20px;
         border-radius: inherit;

+ 42 - 14
src/views/xlht/AnalyseView.vue

@@ -1,11 +1,13 @@
 <script setup>
-import { ref, onMounted, watch } from 'vue';
+import { ref, onMounted, onUnmounted } from 'vue';
 import { NScrollbar, useMessage, NDatePicker, NTabs, NTab, NDataTable, NPagination, NNumberAnimation } from 'naive-ui';
 import * as echarts from 'echarts';
 
 import { columns, getEchartLineOptions } from './config';
 import { TheChatView } from '@/components';
 
+let echart = null;
+const timeRangeValue = ref(null);
 const echartRef = ref(null);
 const formData = ref({
   startTime: '',
@@ -32,10 +34,31 @@ const data = [
   { no: 12, title: "Champagne Supernova", length: "7:27" }
 ]
 
+const onDatePickerConfirm = (val) => {
+ 
+}
+
+const onDatePickerClear = () => {
+  console.log("clean日期了");
+}
+
+const onToggleTab = (name) => {
+  console.log("name", name);
+}
+
+const windowResize = () => echart.resize();
+
 onMounted(() => {
-  const chart = echarts.init(echartRef.value, 'light');
+  echart = echarts.init(echartRef.value, 'light');
   const option = getEchartLineOptions();
-  chart.setOption(option);
+  echart.setOption(option);
+
+  window.addEventListener("resize", windowResize);
+})
+
+onUnmounted(() => {
+  window.removeEventListener("resize", windowResize);
+  echart && echart.dispose();
 })
 
 </script>
@@ -45,7 +68,6 @@ onMounted(() => {
     <TheChatView leftTitle="" :isChatSlot="false" :isFooter="false">
       <template #control>
         <div class="number-card">
-          <span></span>
           <h4 class="text-[#fff] text-[15px] font-bold">数据概况</h4>
           <ul class="board-list space-x-[12px]">
             <li class="board-item">
@@ -84,14 +106,24 @@ onMounted(() => {
           <div class="main">
             <NScrollbar style="height: 100%;">
               <div class="px-[16px]">
-
                 <div class="echart-box">
                   <div class="header-inner">
                     <p class="font-bold">检测数据趋势图「小时」</p>
                     <div class="date-inner space-x-[16px]">
                       <span class="text-[12px]">选择时间</span>
-                      <n-date-picker v-model:value="range" type="datetimerange" clearable size="small"
-                        style="width: 380px" :themeOverrides="dateThemeOverrides" start-placeholder="开始时间" end-placeholder="结束时间"/>
+                      <n-date-picker
+                        type="datetimerange"
+                        clearable size="small"
+                        style="width: 380px"
+                        v-model:formatted-value="timeRangeValue"
+                        value-format="yyyy-MM-dd HH:mm:ss"
+                        start-placeholder="开始时间"
+                        end-placeholder="结束时间"
+                        input-readonly
+                        :themeOverrides="dateThemeOverrides"
+                        :on-confirm="onDatePickerConfirm"
+                        :on-clear="onDatePickerClear"
+                      />
                     </div>
                   </div>
                   <div id="echart" class="h-full w-full" ref="echartRef"></div>
@@ -101,13 +133,9 @@ onMounted(() => {
                   <div class="header-inner">
                     <p class="font-bold">表格数据「小时」</p>
                     <div class="space-x1-[16px] w-[200px]">
-                      <n-tabs type="segment" size="small" class="tabs">
-                        <n-tab name="幸福">
-                          1#二沉池
-                        </n-tab>
-                        <n-tab name="的">
-                          1#二沉池
-                        </n-tab>
+                      <n-tabs type="segment" size="small" class="tabs" :on-update:value="onToggleTab">
+                        <n-tab name="1" tab="1#二沉池"></n-tab>
+                        <n-tab name="2" tab="2#二沉池"></n-tab>
                       </n-tabs>
                     </div>
                   </div>