Quellcode durchsuchen

feat: 更新碳源投加参数配置

sunxiao vor 2 Wochen
Ursprung
Commit
e9119890aa

+ 1 - 1
package.json

@@ -26,7 +26,7 @@
     "axios": "0.27.2",
     "crypto-js": "^4.2.0",
     "echarts": "^5.5.0",
-    "element-plus": "2.4.3",
+    "element-plus": "2.8.4",
     "file-saver": "2.0.5",
     "fuse.js": "6.6.2",
     "highlight.js": "^11.9.0",

+ 53 - 0
src/api/business/settings.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 后台配置参数(报警值设定、数据范围设定、系统参数设定)
+export function putTytjParams(data) {
+  return request({
+    url: '/business/tytjParams',
+    method: 'put',
+    data
+  })
+}
+
+// 后台配置参数
+export function getTytjParams() {
+  return request({
+    url: '/business/tytjParams/1',
+    method: 'get'
+  })
+}
+
+// 调参逻辑设定 - get
+export function getLatestRecord() {
+  return request({
+    url: '/business/medicineRemote/getLatestRecord',
+    method: 'get'
+  })
+}
+
+// 调参逻辑设定 - post
+export function postLatestRecord(data) {
+  return request({
+    url: '/business/medicineRemote',
+    method: 'post',
+    data
+  })
+}
+
+// 调参逻辑设定 - 新增
+export function gettLatestRecord() {
+  return request({
+    url: '/business/medicineRemote',
+    method: 'get'
+  })
+}
+
+// 调参逻辑设定 - 新增
+export function getHomeValues() {
+  return request({
+    url: '/front/bigModel/smartAdd/homeValues',
+    method: 'get'
+  })
+}
+
+

+ 855 - 0
src/views/business/settings/index copy.vue

@@ -0,0 +1,855 @@
+<script setup>
+import { getTytjParams, putTytjParams, getLatestRecord, postLatestRecord } from '@/api/business/settings';
+import { dayjs } from 'element-plus';
+
+const { proxy } = getCurrentInstance();
+
+const form = ref({});
+const activeName = ref('first');
+
+// 设置参数
+const settingFormData = ref({});
+
+const settingFormData1 = ref({});
+const settingFormData2 = ref({});
+const settingFormData3 = ref({});
+
+const adjustmentFormData = ref({});
+
+/**
+ * 减法函数,解决浮点数精度问题
+ * @param {number} num1 - 被减数
+ * @param {number} num2 - 减数
+ * @returns {number} - 计算结果
+ */
+function subtract(num1, num2) {
+    // 获取两个数字的小数位数
+    const decimalPlaces1 = getDecimalPlaces(num1);
+    const decimalPlaces2 = getDecimalPlaces(num2);
+
+    // 找到最大的小数位数
+    const maxDecimalPlaces = Math.max(decimalPlaces1, decimalPlaces2);
+
+    // 将数字放大对应的倍数,避免浮点数问题
+    const factor = Math.pow(10, maxDecimalPlaces);
+    const intNum1 = Math.round(num1 * factor);
+    const intNum2 = Math.round(num2 * factor);
+
+    // 进行整数运算后,再缩小回去
+    return (intNum1 - intNum2) / factor;
+}
+
+/**
+ * 除法函数,解决浮点数精度问题
+ * @param {number} num1 - 被除数
+ * @param {number} num2 - 除数
+ * @returns {number} - 计算结果
+ */
+function divide(num1, num2) {
+    if (num2 === 0) {
+        throw new Error("除数不能为0");
+    }
+
+    // 获取两个数字的小数位数
+    const decimalPlaces1 = getDecimalPlaces(num1);
+    const decimalPlaces2 = getDecimalPlaces(num2);
+
+    // 将数字放大对应的倍数,避免浮点数问题
+    const factor1 = Math.pow(10, decimalPlaces1);
+    const factor2 = Math.pow(10, decimalPlaces2);
+
+    // 转换为整数运算
+    const intNum1 = Math.round(num1 * factor1);
+    const intNum2 = Math.round(num2 * factor2);
+
+    // 进行整数除法后,调整小数位数
+    return (intNum1 / intNum2) * (factor2 / factor1);
+}
+
+/**
+ * 获取数字的小数位数
+ * @param {number} num - 数字
+ * @returns {number} - 小数位数
+ */
+function getDecimalPlaces(num) {
+    const str = num.toString();
+    if (str.includes('.')) {
+        return str.split('.')[1].length;
+    }
+    return 0;
+}
+
+// 更新参数配置
+const onUpdateParamterConfig = async () => {
+
+  if (activeName.value != 'fourth') {
+    const params = {};
+    if (activeName.value == 'first') {
+      Object.assign(params, settingFormData.value, settingFormData1.value);
+    }
+    if (activeName.value == 'second') {
+      Object.assign(params, settingFormData.value, settingFormData2.value);
+    }
+    if (activeName.value == 'third') {
+      Object.assign(params, settingFormData.value, settingFormData3.value);
+    }
+
+    await putTytjParams(params);
+
+  } else {
+    const list = Object.keys(adjustmentFormData.value);
+
+    if ( !list.length ) {
+      return proxy.$modal.msgError("请填写设定参数");
+    }
+
+    if ( list.length < 60 ) {
+      return proxy.$modal.msgError("请填写完整的设定参数");
+    }
+
+    const r = adjustmentFormData.value;
+
+    const params = {
+      // 前端使用
+      originContent: JSON.stringify(adjustmentFormData.value),
+      // 大模型使用
+      handleContent: {
+        "setfeedback": {
+          "para": [
+            r.a1,
+            r.a2,
+            r.a3,
+            r.a4
+          ],
+          // "hour": r.a5,
+          // "max_hour": r.a6
+        },
+        "update_time": dayjs(new Date()).format('YYYY/MM/DD HH:mm:ss'),
+        // "auto_para": {
+        //   "postfeedback": {
+        //     "1": [
+        //       {
+        //         "low": subtract(0, r.a7),
+        //         "hight": subtract(0, r.a8),
+        //         "prop": subtract(0, r.a9)
+        //       },
+        //       {
+        //         "low": subtract(0, r.a10),
+        //         "hight": subtract(0, r.a11),
+        //         "prop": subtract(0, r.a12)
+        //       },
+        //       {
+        //         "low": subtract(0, r.a13),
+        //         "hight": subtract(0, r.a14),
+        //         "prop": subtract(0, r.a15)
+        //       },
+        //       {
+        //         "low": subtract(0, r.a16),
+        //         "hight": subtract(0, r.a17),
+        //         "prop": subtract(0, r.a18)
+        //       },
+        //       {
+        //         "low": subtract(0, r.a19),
+        //         "hight": subtract(0, r.a20),
+        //         "prop": subtract(0, r.a21)
+        //       }
+        //     ],
+        //     "2": {
+        //       "low": subtract(0, r.a22),
+        //       "control_coef": r.a23
+        //     },
+        //     "3": [
+        //       {
+        //         "hight": r.a24,
+        //         "prop": r.a25
+        //       },
+        //       {
+        //         "low": r.a26,
+        //         "hight": r.a27,
+        //         "prop": r.a28
+        //       },
+        //       {
+        //         "low": r.a29,
+        //         "hight": r.a30,
+        //         "prop": r.a31
+        //       },
+        //       {
+        //         "low": r.a32,
+        //         "prop": r.a33
+        //       }
+        //     ]
+        //   },
+        //   "prefeedback": [
+        //     {
+        //       "low": r.a34,
+        //       "hight": r.a35,
+        //       "prop": r.a36
+        //     },
+        //     {
+        //       "low": r.a37,
+        //       "prop": r.a38
+        //     }
+        //   ]
+        // },
+        // "rules": {
+        //   "common": [
+        //     r.a39,
+        //     r.a40,
+        //     r.a41
+        //   ],
+        //   "to_prefeedback": [
+        //     r.a42,
+        //     r.a43
+        //   ],
+        //   "postfeedback": {
+        //     "1": {
+        //       "down": [
+        //         divide(subtract(0, r.a44), 100)
+        //       ],
+        //       "same": [
+        //         divide(subtract(0, r.a45), 100)
+        //       ]
+        //     },
+        //     "2": {
+        //       "same": [
+        //         r.a46
+        //       ]
+        //     },
+        //     "3": {
+        //       "up": {
+        //         "invalid": {
+        //           "coef": [
+        //             divide(r.a47, 100),
+        //             divide(subtract(0, r.a48), 100)
+        //           ],
+        //           "val": [
+        //             divide(r.a49, 100),
+        //           ]
+        //         },
+        //         "validate": {
+        //           "val": [
+        //             divide(r.a50, 100),
+        //             divide(subtract(0, r.a51), 100)
+        //           ]
+        //         }
+        //       },
+        //       "down": {
+        //         "invalid": {
+        //           "coef": [
+        //             divide(subtract(0, r.a52), 100)
+        //           ]
+        //         },
+        //         "validate": {
+        //           "val": [
+        //             subtract(0, r.a53),
+        //             divide(subtract(0, r.a54), 100)
+        //           ]
+        //         }
+        //       },
+        //       "downto2": r.a55,
+        //       "same": divide(r.a56, 100)
+        //     }
+        //   },
+        //   "to_postfeedback": [
+        //     r.a57,
+        //     r.a58
+        //   ],
+        //   "prefeedback": {
+        //     "up": divide(r.a59, 100),
+        //     "down": divide(r.a60, 100),
+        //   }
+        // }
+      }
+    }
+
+    const data = await postLatestRecord({...params, handleContent: JSON.stringify(params.handleContent) });
+    console.log( "data - SUCCESS", data );
+
+  }
+
+  proxy.$modal.msgSuccess("更新配置已成功");
+}
+
+onMounted(() => {
+  getTytjParams().then(({ data }) => {
+    settingFormData.value = data;
+
+    settingFormData1.value = {
+      kzmbplbjz: data.kzmbplbjz,
+      hycxsygkz: data.hycxsygkz,
+      xhycbjz: data.xhycbjz,
+      jylpybjz: data.jylpybjz,
+      timeVal: data.timeVal
+    }
+
+    settingFormData2.value = {
+      minJsll: data.minJsll,
+      maxJsll: data.maxJsll,
+      minJsCod: data.minJsCod,
+      maxJsCod: data.maxJsCod,
+      minAddAmount: data.minAddAmount,
+      maxAddAmount: data.maxAddAmount
+    }
+
+    settingFormData3.value = {
+      htfksd: data.htfksd,
+      kzxs: data.kzxs,
+      jzxs: data.jzxs,
+      xzxs: data.xzxs,
+      slfpxs: data.slfpxs,
+      tydl: data.tydl,
+      zhxs: data.zhxs,
+      sxps: data.sxps,
+      yymd: data.yymd,
+      zxqdll: data.zxqdll
+    }
+  })
+  getLatestRecord().then(({ data }) => {
+    const { originContent } = data;
+    adjustmentFormData.value = JSON.parse(originContent || "{}");
+  })
+})
+</script>
+
+<template>
+  <el-card shadow="never">
+    <el-tabs v-model="activeName" class="demo-tabs">
+
+      <el-tab-pane label="报警值设定" name="first">
+        <div class="px-[20px] py-[20px]">
+          <el-form :model="settingFormData1" label-width="auto">
+            <el-form-item label="控制目标偏离报警值:">
+              <div>
+                <el-input-number v-model="settingFormData1.kzmbplbjz" style="width: 200px;">
+                  <template #suffix><span>mg/L</span></template>
+                </el-input-number>
+                <p class="tips">大于设定值出发报警</p>
+              </div>
+            </el-form-item>
+            <el-form-item label="好氧池硝酸盐管控值:">
+              <div>
+                <el-input-number v-model="settingFormData1.hycxsygkz" style="width: 200px;">
+                  <template #suffix><span>mg/L</span></template>
+                </el-input-number>
+                <p class="tips">大于设定值出发报警</p>
+              </div>
+            </el-form-item>
+            <el-form-item label="硝化异常报警值:">
+              <div>
+                <el-input-number v-model="settingFormData1.xhycbjz" style="width: 200px;">
+                  <template #suffix><span>mg/L</span></template>
+                </el-input-number>
+                <p class="tips">大于设定值出发报警</p>
+              </div>
+            </el-form-item>
+            <el-form-item label="加药量偏移报警值:">
+              <el-row :gutter="20">
+                <el-col :span="12">
+                  <el-input-number v-model="settingFormData1.jylpybjz" style="width: 200px;">
+                    <template #suffix><span>L/h</span></template>
+                  </el-input-number>
+                  <p class="tips">大于设定值触发报警</p>
+                </el-col>
+                <el-col :span="12">
+                  <el-input-number v-model="settingFormData1.timeVal" style="width: 200px;">
+                    <template #suffix><span>分</span></template>
+                  </el-input-number>
+                  <p class="tips">偏移量统计时间,建议填写5的倍数值</p>
+                </el-col>
+              </el-row>
+            </el-form-item>
+          </el-form>
+        </div>
+      </el-tab-pane>
+
+      <el-tab-pane label="数据范围设定" name="second">
+        <div class="px-[20px] py-[20px]">
+          <el-form :model="settingFormData2" label-width="auto">
+            <el-form-item label="进水流量:">
+              <el-row :gutter="20">
+                <el-col :span="12">
+                  <el-input-number v-model="settingFormData2.minJsll" style="width: 200px;">
+                    <template #suffix><span>m³/h</span></template>
+                  </el-input-number>
+                  <p class="tips">限定最小值</p>
+                </el-col>
+                <el-col :span="12">
+                  <el-input-number v-model="settingFormData2.maxJsll" style="width: 200px;">
+                    <template #suffix><span>m³/h</span></template>
+                  </el-input-number>
+                  <p class="tips">限定最大值</p>
+                </el-col>
+              </el-row>
+            </el-form-item>
+            <el-form-item label="进水COD:">
+              <el-row :gutter="20">
+                <el-col :span="12">
+                  <el-input-number v-model="settingFormData2.minJsCod" style="width: 200px;">
+                    <template #suffix><span>m³/h</span></template>
+                  </el-input-number>
+                  <p class="tips">限定最小值</p>
+                </el-col>
+                <el-col :span="12">
+                  <el-input-number v-model="settingFormData2.maxJsCod" style="width: 200px;">
+                    <template #suffix><span>m³/h</span></template>
+                  </el-input-number>
+                  <p class="tips">限定最大值</p>
+                </el-col>
+              </el-row>
+            </el-form-item>
+            <el-form-item label="投药量:">
+              <el-row :gutter="20">
+                <el-col :span="12">
+                  <el-input-number v-model="settingFormData2.minAddAmount" style="width: 200px;">
+                    <template #suffix><span>m³/h</span></template>
+                  </el-input-number>
+                  <p class="tips">限定最小值</p>
+                </el-col>
+                <el-col :span="12">
+                  <el-input-number v-model="settingFormData2.maxAddAmount" style="width: 200px;">
+                    <template #suffix><span>m³/h</span></template>
+                  </el-input-number>
+                  <p class="tips">限定最大值</p>
+                </el-col>
+              </el-row>
+            </el-form-item>
+          </el-form>
+        </div>
+      </el-tab-pane>
+
+      <el-tab-pane label="参数系数设定" name="third">
+        <div class="px-[20px] py-[20px]">
+          <el-form :model="settingFormData3" label-width="auto">
+            <el-form-item label="后反馈设定:">
+              <div>
+                <el-input-number v-model="settingFormData3.htfksd" style="width: 200px;" disabled>
+                  <template #suffix><span>mg/L</span></template>
+                </el-input-number>
+                <p class="tips">智能调控</p>
+              </div>
+            </el-form-item>
+            <el-form-item label="控制系数:">
+              <div>
+                <el-input-number v-model="settingFormData3.kzxs" style="width: 200px;" disabled>
+                  <template #suffix><span>mg/L</span></template>
+                </el-input-number>
+                <p class="tips">智能调控</p>
+              </div>
+            </el-form-item>
+            <el-form-item label="基准系数:">
+              <el-input-number v-model="settingFormData3.jzxs" style="width: 200px;"></el-input-number>
+            </el-form-item>
+            <el-form-item label="修正系数:">
+              <el-input-number v-model="settingFormData3.xzxs" style="width: 200px;"></el-input-number>
+            </el-form-item>
+            <el-form-item label="水量分配系数:">
+              <el-input-number v-model="settingFormData3.slfpxs" style="width: 200px;"></el-input-number>
+            </el-form-item>
+            <el-form-item label="碳源当量:">
+              <el-input-number v-model="settingFormData3.tydl" style="width: 200px;"></el-input-number>
+            </el-form-item>
+            <el-form-item label="转换系数:">
+              <el-input-number v-model="settingFormData3.zhxs" style="width: 200px;"></el-input-number>
+            </el-form-item>
+            <el-form-item label="稀释倍数:">
+              <el-input-number v-model="settingFormData3.sxps" style="width: 200px;"></el-input-number>
+            </el-form-item>
+            <el-form-item label="药剂密度:">
+              <el-input-number v-model="settingFormData3.yymd" style="width: 200px;"></el-input-number>
+            </el-form-item>
+            <el-form-item label="最小启动流量:">
+              <el-input-number v-model="settingFormData3.zxqdll" style="width: 200px;"></el-input-number>
+            </el-form-item>
+            <!-- <el-form-item label="碳氮比:">
+              <el-input-number v-model="settingFormData.num"  style="width: 200px;"></el-input-number>
+            </el-form-item> -->
+          </el-form>
+        </div>
+      </el-tab-pane>
+
+      <el-tab-pane label="调参逻辑设定" name="fourth" class="space-y-[10px]">
+        <el-card>
+          <template #header>
+            <h4 class="title">后反馈设定值取值规则参数设定</h4>
+          </template>
+          <ul class="space-y-[10px] text-[#606266] text-[14px]">
+            <li class="space-x-[10px] flex items-center">
+              <span class="w-[520px]">缺氧池硝酸盐 + 缺氧池氨氮 - 好氧池硝酸盐 < 3,后反馈设定值 =</span>
+              <el-input-number v-model="adjustmentFormData.a1" style="width: 200px;"></el-input-number>
+            </li>
+
+            <li class="space-x-[10px] flex items-center">
+              <span class="w-[520px]">缺氧池硝酸盐 + 缺氧池氨氮 - 好氧池硝酸盐 ≥ 3 && < 4,后反馈设定值 =</span>
+              <el-input-number v-model="adjustmentFormData.a2" style="width: 200px;"></el-input-number>
+            </li>
+
+            <li class="space-x-[10px] flex items-center">
+              <span class="w-[520px]">缺氧池硝酸盐 + 缺氧池氨氮 - 好氧池硝酸盐 ≥ 4 && < 5,后反馈设定值 =</span>
+              <el-input-number v-model="adjustmentFormData.a3" style="width: 200px;"></el-input-number>
+            </li>
+
+            <li class="space-x-[10px] flex items-center">
+              <span class="w-[520px]">缺氧池硝酸盐 + 缺氧池氨氮 - 好氧池硝酸盐 ≥ 5,后反馈设定值 =</span>
+              <el-input-number v-model="adjustmentFormData.a4" style="width: 200px;"></el-input-number>
+            </li>
+          </ul>
+        </el-card>
+
+        <el-card>
+          <template #header>
+            <h4 class="title">后反馈设定值更新规则参数设定</h4>
+          </template>
+          <div class="text-[#606266] text-[14px]">
+            每
+            <el-input-number v-model="adjustmentFormData.a5" style="width: 200px;"></el-input-number>
+            小时获取一次数据, 连续
+            <el-input-number v-model="adjustmentFormData.a6" style="width: 200px;"></el-input-number>
+            小时数据方向(均> 或 均<),更新最新一组数据的后反馈设定值为当前后反馈设定值。
+          </div>
+        </el-card>
+
+        <el-card>
+          <template #header>
+            <h4 class="title">基础调参表参数设定</h4>
+          </template>
+          <div class="space-y-[20px]">
+            <el-table :data="[{}, {}, {}, {}, {}]" style="width: 100%">
+              <el-table-column label="后反馈档位1" align="center">
+                <el-table-column prop="name" label="控制区间">
+                  <template #default="scope">
+                    <div v-if="scope.$index == 0">
+                      <span>后反馈设定值 - </span>7
+                      <el-input-number v-model="adjustmentFormData.a7"></el-input-number>
+                      <span> < 好氧池硝酸盐 ≤ 后反馈设定值 - </span>8
+                      <el-input-number v-model="adjustmentFormData.a8"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 1">
+                      <span>后反馈设定值 - </span>10
+                      <el-input-number v-model="adjustmentFormData.a10"></el-input-number>
+                      <span> < 好氧池硝酸盐 ≤ 后反馈设定值 - </span>11
+                      <el-input-number v-model="adjustmentFormData.a11"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 2">
+                      <span>后反馈设定值 - </span>13
+                      <el-input-number v-model="adjustmentFormData.a13"></el-input-number>
+                      <span> < 好氧池硝酸盐 ≤ 后反馈设定值 - </span>14
+                      <el-input-number v-model="adjustmentFormData.a14"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 3">
+                      <span>后反馈设定值 - </span>16
+                      <el-input-number v-model="adjustmentFormData.a16"></el-input-number>
+                      <span> < 好氧池硝酸盐 ≤ 后反馈设定值 - </span>17
+                      <el-input-number v-model="adjustmentFormData.a17"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 4">
+                      <span>后反馈设定值 - </span>19
+                      <el-input-number v-model="adjustmentFormData.a19"></el-input-number>
+                      <span> < 好氧池硝酸盐 ≤ 后反馈设定值 - </span>20
+                      <el-input-number v-model="adjustmentFormData.a20"></el-input-number>
+                    </div>
+                    
+                  </template>
+                </el-table-column>
+                <el-table-column prop="name1" label="控制系数" width="300">
+                  基准参数*(100-减幅)/100
+                </el-table-column>
+                <el-table-column prop="name1" label="减幅" width="175">
+                  <template #default="scope">
+                    <div v-if="scope.$index == 0">9
+                      <el-input-number v-model="adjustmentFormData.a9"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 1">12
+                      <el-input-number v-model="adjustmentFormData.a12"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 2">15
+                      <el-input-number v-model="adjustmentFormData.a15"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 3">18
+                      <el-input-number v-model="adjustmentFormData.a18"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 4">21
+                      <el-input-number v-model="adjustmentFormData.a21"></el-input-number>
+                    </div>
+                  </template>
+                </el-table-column>
+              </el-table-column>
+            </el-table>
+
+            <el-table :data="[{}]" style="width: 100%">
+              <el-table-column label="后反馈档位2" align="center">
+                <el-table-column prop="name" label="控制区间">
+                  <template #default="scope">
+                    <div v-if="scope.$index == 0">
+                      <span>后反馈设定值 - </span>22
+                      <el-input-number v-model="adjustmentFormData.a22"></el-input-number>
+                      <span> < 好氧池硝酸盐 ≤ 后反馈设定值</span>
+                    </div>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="name1" label="控制系数" width="300">
+                  <span class="text-[red]">基准参数</span>
+                </el-table-column>
+                <el-table-column prop="name1" label="默认基准系数" width="175">
+                  <template #default="scope">
+                    <div v-if="scope.$index == 0">23
+                      <el-input-number v-model="adjustmentFormData.a23"></el-input-number>
+                    </div>
+                  </template>
+                </el-table-column>
+              </el-table-column>
+            </el-table>
+
+            <el-table :data="[{}, {}, {}, {}]" style="width: 100%">
+              <el-table-column label="后反馈档位3" align="center">
+                <el-table-column prop="name" label="控制区间">
+                  <template #default="scope">
+                    <div v-if="scope.$index == 0">
+                      <span>后反馈设定值 < 好氧池硝酸盐 ≤ 后反馈设定值+ </span>24
+                      <el-input-number v-model="adjustmentFormData.a24"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 1">
+                      <span>后反馈设定值 + </span>26
+                      <el-input-number v-model="adjustmentFormData.a26"></el-input-number>
+                      <span> < 好氧池硝酸盐 ≤ 后反馈设定值+ </span>27
+                      <el-input-number v-model="adjustmentFormData.a27"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 2">
+                      <span>后反馈设定值 + </span>29
+                      <el-input-number v-model="adjustmentFormData.a29"></el-input-number>
+                      <span> < 好氧池硝酸盐 ≤ 后反馈设定值+ </span>30
+                      <el-input-number v-model="adjustmentFormData.a30"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 3">
+                      <span>后反馈设定值 - </span>32
+                      <el-input-number v-model="adjustmentFormData.a32"></el-input-number>
+                      <span> < 好氧池硝酸盐 </span>
+                    </div>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="name1" label="控制系数" width="300">
+                  基准参数*(100+增幅)/100
+                </el-table-column>
+                <el-table-column prop="name1" label="增幅" width="175">
+                  <template #default="scope">
+                    <div v-if="scope.$index == 0">25
+                      <el-input-number v-model="adjustmentFormData.a25"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 1">28
+                      <el-input-number v-model="adjustmentFormData.a28"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 2">31
+                      <el-input-number v-model="adjustmentFormData.a31"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 3">33
+                      <el-input-number v-model="adjustmentFormData.a33"></el-input-number>
+                    </div>
+                  </template>
+                </el-table-column>
+              </el-table-column>
+            </el-table>
+
+            <el-table :data="[{}, {}]" style="width: 100%">
+              <el-table-column label="前反馈基础调参表" align="center">
+                <el-table-column prop="name" label="控制区间">
+                  <template #default="scope">
+                    <div v-if="scope.$index == 0">34
+                      <el-input-number v-model="adjustmentFormData.a34"></el-input-number>
+                      <span>< 缺氧区出水氨氮+缺氧区出水硝酸盐 ≤ </span>35
+                      <el-input-number v-model="adjustmentFormData.a35"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 1">37
+                      <el-input-number v-model="adjustmentFormData.a37"></el-input-number>
+                      <span>< 缺氧区出水氨氮+缺氧区出水硝酸盐</span>
+                    </div>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="name1" label="控制系数" width="300">
+                  基准参数*(100+增幅)/100
+                </el-table-column>
+                <el-table-column prop="name1" label="增幅" width="175">
+                  <template #default="scope">
+                    <div v-if="scope.$index == 0">36
+                      <el-input-number v-model="adjustmentFormData.a36"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 1">38
+                      <el-input-number v-model="adjustmentFormData.a38"></el-input-number>
+                    </div>
+                  </template>
+                </el-table-column>
+              </el-table-column>
+            </el-table>
+          </div>
+        </el-card>
+
+        <el-card>
+          <template #header>
+            <h4 class="title">控制系数限制</h4>
+          </template>
+          <div class="text-[#606266] text-[14px]">
+            控制系数最大值39
+            <el-input-number v-model="adjustmentFormData.a39" style="width: 200px;"></el-input-number>
+            , 最小值40
+            <el-input-number v-model="adjustmentFormData.a40" style="width: 200px;"></el-input-number>
+            ,每41
+            <el-input-number v-model="adjustmentFormData.a41" style="width: 200px;"></el-input-number>
+            小时获取一次数据,进行升\降档调参。
+          </div>
+        </el-card>
+
+        <el-card>
+          <template #header>
+            <h4 class="title">后反馈调参规则参数设定</h4>
+          </template>
+
+          <div class="content space-y-[10px]">
+            <div class="space-y-[10px]">
+              <p>
+                实时监控,缺氧区出水氨氮+缺氧区出水硝酸盐 >42
+                <el-input-number v-model="adjustmentFormData.a42" style="width: 200px;"></el-input-number>
+                , 连续43
+                <el-input-number v-model="adjustmentFormData.a43" style="width: 200px;"></el-input-number>
+                小时, 切换至前反馈调参模式
+              </p>
+              <p>|| 档位1降档调参:</p>
+              <p>if (当前控制系数 < 最新一组数据的控制系数 ) {</p>
+              <p class="pl-[20px]">
+                控制系数 = 当前控制系数 调整 - 44 <el-input-number v-model="adjustmentFormData.a44"
+                  style="width: 200px;"></el-input-number>%;
+              </p>
+              <p>
+                }else{
+              </p>
+              <p class="pl-[20px]">控制系数 = 最新一组数据的控制系数;</p>
+              <p>}</p>
+              <p>|| 档位1同档调参</p>
+              <p>
+                控制系数 = 当前控制系数 调整 - 45<el-input-number v-model="adjustmentFormData.a45"
+                  style="width: 200px;"></el-input-number>%。
+              </p>
+              <p>|| 档位2同档调参,控制系数不变, 控制系数在档位2并且连续46 <el-input-number v-model="adjustmentFormData.a46"
+                  style="width: 200px;"></el-input-number>小时控制系数不变时,将基准参数调整至当前控制系数</p>
+              <p>|| 档位3 升档调参:</p>
+            </div>
+
+            <div class="space-y-[10px]">
+              <p>① 无有效控制系数</p>
+              <p>
+                条件1:当前控制系数 调整47
+                <el-input-number v-model="adjustmentFormData.a47" style="width: 200px;"></el-input-number>
+                % 与 条件2:最新一组数据的控制系数 与 条件3: 最新一组数据上一层区间的控制系数 调整 - 48
+                <el-input-number v-model="adjustmentFormData.a48" style="width: 200px;"></el-input-number>
+                %,三者比较
+              </p>
+              <p>
+                if (条件1 最大){
+              </p>
+              <p class="pl-[20px]">控制系数 = 条件1;</p>
+              <p> }elseif(条件2 最大){</p>
+              <p class="pl-[20px]">49
+                控制系数 = 最新一组数据的控制系数 调整<el-input-number v-model="adjustmentFormData.a49"
+                  style="width: 200px;"></el-input-number>% ;
+              </p>
+              <p>
+                }else{
+              </p>
+              <p class="pl-[20px]">控制系数 = 条件3;</p>
+              <p>}</p>
+            </div>
+
+            <div class="space-y-[10px]">
+              <p>② 有有效控制系数</p>
+              <p>条件1:最新一组好氧池硝酸盐数据 与 条件2:有效控制系数硝酸盐 二者比较</p>
+              <p>if(条件1 最大){</p>
+              <p class="pl-[20px]">控制系数 = 有效控制系数 调整50<el-input-number v-model="adjustmentFormData.a50"
+                  style="width: 200px;"></el-input-number>%;</p>
+              <p>}else{</p>
+              <p class="pl-[20px]">控制系数 = 有效控制系数 调整51 - <el-input-number v-model="adjustmentFormData.a51"
+                  style="width: 200px;"></el-input-number>% ;</p>
+              <p>}</p>
+              <p>|| 档位3降至同档位调参:</p>
+              <p>① 无有效控制系数</p>52
+              <p>条件1:当前控制系数 调整-<el-input-number v-model="adjustmentFormData.a52" style="width: 200px;" />% 与 条件2:最新一组数据的控制系数 二者比较</p>
+              <p>if (条件1  最大){</p>
+              <p>控制系数 = 条件1 ;</p>
+              <p>}else{</p>
+              <p>控制系数 = 条件2;</p>
+              <p>}</p>
+              <p>② 有有效控制系数</p>
+              <p>条件1:最新一组好氧池硝酸盐数据 与 条件2:有效控制系数好氧硝酸 二者比较</p>
+              <p>if(条件1 最大){</p>
+              <p>控制系数 = 有效控制系数调整53 <el-input-number v-model="adjustmentFormData.a53" style="width: 200px;" /> % ;</p>
+              <p>}else{</p>
+              <p>控制系数 = 有效控制系数调整54 - <el-input-number v-model="adjustmentFormData.a54" style="width: 200px;" />% ;</p>
+              <p>}</p>
+            </div>
+            <div class="space-y-[10px]">
+              <p>||  档位3降至档位2调参:</p>55
+              <p>条件1:当前控制*(100- <el-input-number v-model="adjustmentFormData.a55" style="width: 200px;" />* X )/100 与
+                条件2:最新一组数据的控制系数 二者比较</p>
+              <p> if(条件1 大){</p>
+              <p class="pl-[20px]">控制系数 = 条件1 ;</p>
+              <p>}else{</p>
+              <p class="pl-[20px]">控制系数 = 条件2 ;</p>
+              <p>}</p>
+              <p>|| 档位3同档调参</p>56
+              <p>控制系数 = 当前控制系数 调整 <el-input-number v-model="adjustmentFormData.a56" style="width: 200px;" />%。</p>
+            </div>
+          </div>
+        </el-card>
+
+
+        <el-card>
+          <template #header>
+            <h4 class="title">前反馈调参规则参数设定</h4>
+          </template>
+
+          <div class="content space-y-[10px] text-[14px]">
+            <div class="space-y-[10px]">
+              <p>
+                实时监控,缺氧区出水氨氮+缺氧区出水硝酸盐 <57
+                <el-input-number v-model="adjustmentFormData.a57" style="width: 200px;"></el-input-number>
+                , 连续58
+                <el-input-number v-model="adjustmentFormData.a58" style="width: 200px;"></el-input-number>
+                小时, 切换至后反馈调参模式
+              </p>
+              <p>|| 升档调参</p>
+              <p>条件1: 当前控制系数 调整59<el-input-number v-model="adjustmentFormData.a59"
+                  style="width: 200px;"></el-input-number>% 与
+                条件2:最新一组数据的控制系数 二者比较</p>
+              <p>if(条件1 大){</p>
+              <p class="pl-[20px]">控制系数 = 条件1 ;</p>
+              <p>}else{</p>
+              <p class="pl-[20px]">控制系数 = 条件2 ;</p>
+              <p>}</p>
+              <p>|| 同档调参</p>
+              <p>控制系数 = 当前控制系数 调整 60<el-input-number v-model="adjustmentFormData.a60"
+                  style="width: 200px;"></el-input-number>%
+              </p>
+            </div>
+          </div>
+        </el-card>
+
+      </el-tab-pane>
+    </el-tabs>
+  </el-card>
+
+  <div class="flex items-center justify-center pt-[30px]">
+    <el-button type="primary" @click="onUpdateParamterConfig">更新配置</el-button>
+  </div>
+</template>
+
+<style lang="scss" scoped>
+.tips {
+  font-size: 12px;
+  color: #999;
+}
+
+.title {
+  font-weight: bold;
+}
+
+p {
+  font-size: 14px;
+  color: #606266;
+}
+</style>

+ 864 - 0
src/views/business/settings/index.vue

@@ -0,0 +1,864 @@
+<script setup>
+import { getTytjParams, putTytjParams, getLatestRecord, postLatestRecord, getHomeValues } from '@/api/business/settings';
+import { dayjs } from 'element-plus';
+
+const { proxy } = getCurrentInstance();
+
+const activeName = ref('first');
+
+// 设置参数
+const settingFormData = ref({});
+
+const settingFormData1 = ref({});
+const settingFormData2 = ref({});
+const settingFormData3 = ref({});
+
+const adjustmentFormData = ref({});
+
+/**
+ * 减法函数,解决浮点数精度问题
+ * @param {number} num1 - 被减数
+ * @param {number} num2 - 减数
+ * @returns {number} - 计算结果
+ */
+function subtract(num1, num2) {
+  // 获取两个数字的小数位数
+  const decimalPlaces1 = getDecimalPlaces(num1);
+  const decimalPlaces2 = getDecimalPlaces(num2);
+
+  // 找到最大的小数位数
+  const maxDecimalPlaces = Math.max(decimalPlaces1, decimalPlaces2);
+
+  // 将数字放大对应的倍数,避免浮点数问题
+  const factor = Math.pow(10, maxDecimalPlaces);
+  const intNum1 = Math.round(num1 * factor);
+  const intNum2 = Math.round(num2 * factor);
+
+  // 进行整数运算后,再缩小回去
+  return (intNum1 - intNum2) / factor;
+}
+
+/**
+ * 除法函数,解决浮点数精度问题
+ * @param {number} num1 - 被除数
+ * @param {number} num2 - 除数
+ * @returns {number} - 计算结果
+ */
+function divide(num1, num2) {
+  if (num2 === 0) {
+    throw new Error("除数不能为0");
+  }
+
+  // 获取两个数字的小数位数
+  const decimalPlaces1 = getDecimalPlaces(num1);
+  const decimalPlaces2 = getDecimalPlaces(num2);
+
+  // 将数字放大对应的倍数,避免浮点数问题
+  const factor1 = Math.pow(10, decimalPlaces1);
+  const factor2 = Math.pow(10, decimalPlaces2);
+
+  // 转换为整数运算
+  const intNum1 = Math.round(num1 * factor1);
+  const intNum2 = Math.round(num2 * factor2);
+
+  // 进行整数除法后,调整小数位数
+  return (intNum1 / intNum2) * (factor2 / factor1);
+}
+
+/**
+ * 获取数字的小数位数
+ * @param {number} num - 数字
+ * @returns {number} - 小数位数
+ */
+function getDecimalPlaces(num) {
+  const str = num.toString();
+  if (str.includes('.')) {
+    return str.split('.')[1].length;
+  }
+  return 0;
+}
+
+// 更新参数配置
+const onUpdateParamterConfig = async () => {
+
+  if (activeName.value != 'fourth') {
+    const params = {};
+    if (activeName.value == 'first') {
+      Object.assign(params, settingFormData.value, settingFormData1.value);
+    }
+    if (activeName.value == 'second') {
+      Object.assign(params, settingFormData.value, settingFormData2.value);
+    }
+    if (activeName.value == 'third') {
+      Object.assign(params, settingFormData.value, settingFormData3.value);
+    }
+
+    await putTytjParams(params);
+
+  } else {
+    const list = Object.keys(adjustmentFormData.value);
+
+    if (!list.length) {
+      return proxy.$modal.msgError("请填写设定参数");
+    }
+
+    if (list.length < 60) {
+      return proxy.$modal.msgError("请填写完整的设定参数");
+    }
+
+    const r = adjustmentFormData.value;
+
+    const params = {
+      // 前端使用
+      originContent: JSON.stringify(adjustmentFormData.value),
+      // 大模型使用
+      handleContent: {
+        "setfeedback": {
+          "para": [
+            r.a1,
+            r.a2,
+            r.a3,
+            r.a4
+          ],
+          "hour": r.a5,
+          "max_hour": r.a6
+        },
+        "update_time": dayjs(new Date()).format('YYYY/MM/DD HH:mm:ss'),
+        "auto_para": {
+          "postfeedback": {
+            "1": [
+              {
+                "low": subtract(0, r.a7),
+                "hight": subtract(0, r.a8),
+                "prop": subtract(0, r.a9)
+              },
+              {
+                "low": subtract(0, r.a10),
+                "hight": subtract(0, r.a11),
+                "prop": subtract(0, r.a12)
+              },
+              {
+                "low": subtract(0, r.a13),
+                "hight": subtract(0, r.a14),
+                "prop": subtract(0, r.a15)
+              },
+              {
+                "low": subtract(0, r.a16),
+                "hight": subtract(0, r.a17),
+                "prop": subtract(0, r.a18)
+              },
+              {
+                "low": subtract(0, r.a19),
+                "hight": subtract(0, r.a20),
+                "prop": subtract(0, r.a21)
+              }
+            ],
+            "2": {
+              "low": subtract(0, r.a22),
+              "control_coef": r.a23
+            },
+            "3": [
+              {
+                "hight": r.a24,
+                "prop": r.a25
+              },
+              {
+                "low": r.a26,
+                "hight": r.a27,
+                "prop": r.a28
+              },
+              {
+                "low": r.a29,
+                "hight": r.a30,
+                "prop": r.a31
+              },
+              {
+                "low": r.a32,
+                "prop": r.a33
+              }
+            ]
+          },
+          "prefeedback": [
+            {
+              "low": r.a34,
+              "hight": r.a35,
+              "prop": r.a36
+            },
+            {
+              "low": r.a37,
+              "prop": r.a38
+            }
+          ]
+        },
+        "rules": {
+          "common": [
+            r.a39,
+            r.a40,
+            r.a41
+          ],
+          "to_prefeedback": [
+            r.a42,
+            r.a43
+          ],
+          "postfeedback": {
+            "1": {
+              "down": [
+                divide(subtract(0, r.a44), 100)
+              ],
+              "same": [
+                divide(subtract(0, r.a45), 100)
+              ]
+            },
+            "2": {
+              "same": [
+                r.a46
+              ]
+            },
+            "3": {
+              "up": {
+                "invalid": {
+                  "coef": [
+                    divide(r.a47, 100),
+                    divide(subtract(0, r.a48), 100)
+                  ],
+                  "val": [
+                    divide(r.a49, 100),
+                  ]
+                },
+                "validate": {
+                  "val": [
+                    divide(r.a50, 100),
+                    divide(subtract(0, r.a51), 100)
+                  ]
+                }
+              },
+              "down": {
+                "invalid": {
+                  "coef": [
+                    divide(subtract(0, r.a52), 100)
+                  ]
+                },
+                "validate": {
+                  "val": [
+                    subtract(0, r.a53),
+                    divide(subtract(0, r.a54), 100)
+                  ]
+                }
+              },
+              "downto2": r.a55,
+              "same": divide(r.a56, 100)
+            }
+          },
+          "to_postfeedback": [
+            r.a57,
+            r.a58
+          ],
+          "prefeedback": {
+            "up": divide(r.a59, 100),
+            "down": divide(r.a60, 100),
+          }
+        }
+      }
+    }
+
+    const data = await postLatestRecord({ ...params, handleContent: JSON.stringify(params.handleContent) });
+    console.log("data - SUCCESS", data);
+
+  }
+
+  proxy.$modal.msgSuccess("更新配置已成功");
+}
+
+onMounted(async () => {
+  getTytjParams().then(({ data }) => {
+    settingFormData.value = data;
+
+    settingFormData1.value = {
+      kzmbplbjz: data.kzmbplbjz,
+      hycxsygkz: data.hycxsygkz,
+      xhycbjz: data.xhycbjz,
+      jylpybjz: data.jylpybjz,
+      timeVal: data.timeVal
+    }
+
+    settingFormData2.value = {
+      minJsll: data.minJsll,
+      maxJsll: data.maxJsll,
+      minJsCod: data.minJsCod,
+      maxJsCod: data.maxJsCod,
+      minAddAmount: data.minAddAmount,
+      maxAddAmount: data.maxAddAmount
+    }
+
+    settingFormData3.value = {
+      htfksd: data.htfksd,
+      kzxs: data.kzxs,
+      jzxs: data.jzxs,
+      xzxs: data.xzxs,
+      slfpxs: data.slfpxs,
+      tydl: data.tydl,
+      zhxs: data.zhxs,
+      sxps: data.sxps,
+      yymd: data.yymd,
+      zxqdll: data.zxqdll
+    }
+  })
+  await getLatestRecord().then(({ data }) => {
+    const { originContent } = data;
+    adjustmentFormData.value = JSON.parse(originContent || "{}");
+  })
+  await getHomeValues().then(({ data }) => {
+    settingFormData3.value = {...data}
+  })
+})
+</script>
+
+<template>
+  <el-card shadow="never">
+    <el-tabs v-model="activeName" class="demo-tabs">
+
+      <el-tab-pane label="报警值设定" name="first">
+        <div class="px-[20px] py-[20px]">
+          <el-form :model="settingFormData1" label-width="auto">
+            <el-form-item label="控制目标偏离报警值:">
+              <div>
+                <el-input-number v-model="settingFormData1.kzmbplbjz" style="width: 200px;">
+                  <template #suffix><span>mg/L</span></template>
+                </el-input-number>
+                <p class="tips">大于设定值出发报警</p>
+              </div>
+            </el-form-item>
+            <el-form-item label="好氧池硝酸盐管控值:">
+              <div>
+                <el-input-number v-model="settingFormData1.hycxsygkz" style="width: 200px;">
+                  <template #suffix><span>mg/L</span></template>
+                </el-input-number>
+                <p class="tips">大于设定值出发报警</p>
+              </div>
+            </el-form-item>
+            <el-form-item label="硝化异常报警值:">
+              <div>
+                <el-input-number v-model="settingFormData1.xhycbjz" style="width: 200px;">
+                  <template #suffix><span>mg/L</span></template>
+                </el-input-number>
+                <p class="tips">大于设定值出发报警</p>
+              </div>
+            </el-form-item>
+            <el-form-item label="加药量偏移报警值:">
+              <el-row :gutter="20">
+                <el-col :span="12">
+                  <el-input-number v-model="settingFormData1.jylpybjz" style="width: 200px;">
+                    <template #suffix><span>L/h</span></template>
+                  </el-input-number>
+                  <p class="tips">大于设定值触发报警</p>
+                </el-col>
+                <el-col :span="12">
+                  <el-input-number v-model="settingFormData1.timeVal" style="width: 200px;">
+                    <template #suffix><span>分</span></template>
+                  </el-input-number>
+                  <p class="tips">偏移量统计时间,建议填写5的倍数值</p>
+                </el-col>
+              </el-row>
+            </el-form-item>
+          </el-form>
+        </div>
+      </el-tab-pane>
+
+      <el-tab-pane label="数据范围设定" name="second">
+        <div class="px-[20px] py-[20px]">
+          <el-form :model="settingFormData2" label-width="auto">
+            <el-form-item label="进水流量:">
+              <el-row :gutter="20">
+                <el-col :span="12">
+                  <el-input-number v-model="settingFormData2.minJsll" style="width: 200px;">
+                    <template #suffix><span>m³/h</span></template>
+                  </el-input-number>
+                  <p class="tips">限定最小值</p>
+                </el-col>
+                <el-col :span="12">
+                  <el-input-number v-model="settingFormData2.maxJsll" style="width: 200px;">
+                    <template #suffix><span>m³/h</span></template>
+                  </el-input-number>
+                  <p class="tips">限定最大值</p>
+                </el-col>
+              </el-row>
+            </el-form-item>
+            <el-form-item label="进水COD:">
+              <el-row :gutter="20">
+                <el-col :span="12">
+                  <el-input-number v-model="settingFormData2.minJsCod" style="width: 200px;">
+                    <template #suffix><span>mg/L</span></template>
+                  </el-input-number>
+                  <p class="tips">限定最小值</p>
+                </el-col>
+                <el-col :span="12">
+                  <el-input-number v-model="settingFormData2.maxJsCod" style="width: 200px;">
+                    <template #suffix><span>mg/L</span></template>
+                  </el-input-number>
+                  <p class="tips">限定最大值</p>
+                </el-col>
+              </el-row>
+            </el-form-item>
+            <el-form-item label="投药量:">
+              <el-row :gutter="20">
+                <el-col :span="12">
+                  <el-input-number v-model="settingFormData2.minAddAmount" style="width: 200px;">
+                    <template #suffix><span>L/h</span></template>
+                  </el-input-number>
+                  <p class="tips">限定最小值</p>
+                </el-col>
+                <el-col :span="12">
+                  <el-input-number v-model="settingFormData2.maxAddAmount" style="width: 200px;">
+                    <template #suffix><span>L/h</span></template>
+                  </el-input-number>
+                  <p class="tips">限定最大值</p>
+                </el-col>
+              </el-row>
+            </el-form-item>
+          </el-form>
+        </div>
+      </el-tab-pane>
+
+      <el-tab-pane label="参数系数设定" name="third">
+        <div class="px-[20px] py-[20px]">
+          <el-form :model="settingFormData3" label-width="auto">
+            <el-form-item label="后反馈设定:">
+              <div>
+                <el-input-number v-model="settingFormData3.calculateVal" style="width: 200px;" disabled>
+                  <template #suffix><span>mg/L</span></template>
+                </el-input-number>
+                <p class="tips">智能调控</p>
+              </div>
+            </el-form-item>
+            <el-form-item label="控制系数:">
+              <div>
+                <el-input-number v-model="settingFormData3.kzxs" style="width: 200px;" disabled>
+                </el-input-number>
+                <p class="tips">智能调控</p>
+              </div>
+            </el-form-item>
+            <el-form-item label="基准系数:">
+              <el-input-number v-model="settingFormData3.jzxs" style="width: 200px;"></el-input-number>
+            </el-form-item>
+            <el-form-item label="修正系数:">
+              <el-input-number v-model="settingFormData3.xzxs" style="width: 200px;"></el-input-number>
+            </el-form-item>
+            <el-form-item label="水量分配系数:">
+              <el-input-number v-model="settingFormData3.slfpxs" style="width: 200px;"></el-input-number>
+            </el-form-item>
+            <el-form-item label="碳源当量:">
+              <el-input-number v-model="settingFormData3.tydl" style="width: 200px;"></el-input-number>
+            </el-form-item>
+            <el-form-item label="转换系数:">
+              <el-input-number v-model="settingFormData3.zhxs" style="width: 200px;"></el-input-number>
+            </el-form-item>
+            <el-form-item label="稀释倍数:">
+              <el-input-number v-model="settingFormData3.sxps" style="width: 200px;"></el-input-number>
+            </el-form-item>
+            <el-form-item label="药剂密度:">
+              <el-input-number v-model="settingFormData3.yymd" style="width: 200px;"></el-input-number>
+            </el-form-item>
+            <el-form-item label="最小启动流量:">
+              <el-input-number v-model="settingFormData3.zxqdll" style="width: 200px;"></el-input-number>
+            </el-form-item>
+            <!-- <el-form-item label="碳氮比:">
+              <el-input-number v-model="settingFormData.num"  style="width: 200px;"></el-input-number>
+            </el-form-item> -->
+          </el-form>
+        </div>
+      </el-tab-pane>
+
+      <el-tab-pane label="调参逻辑设定" name="fourth" class="space-y-[10px]">
+        <el-card>
+          <template #header>
+            <h4 class="title">后反馈设定值取值规则参数设定</h4>
+          </template>
+          <ul class="space-y-[10px] text-[#606266] text-[14px]">
+            <li class="space-x-[10px] flex items-center">
+              <span class="w-[520px]">缺氧池硝酸盐 + 缺氧池氨氮 - 好氧池硝酸盐 < 3,后反馈设定值 =</span>
+              <el-input-number v-model="adjustmentFormData.a1" style="width: 200px;"></el-input-number>
+            </li>
+
+            <li class="space-x-[10px] flex items-center">
+              <span class="w-[520px]">缺氧池硝酸盐 + 缺氧池氨氮 - 好氧池硝酸盐 ≥ 3 && < 4,后反馈设定值 =</span>
+              <el-input-number v-model="adjustmentFormData.a2" style="width: 200px;"></el-input-number>
+            </li>
+
+            <li class="space-x-[10px] flex items-center">
+              <span class="w-[520px]">缺氧池硝酸盐 + 缺氧池氨氮 - 好氧池硝酸盐 ≥ 4 && < 5,后反馈设定值 =</span>
+              <el-input-number v-model="adjustmentFormData.a3" style="width: 200px;"></el-input-number>
+            </li>
+
+            <li class="space-x-[10px] flex items-center">
+              <span class="w-[520px]">缺氧池硝酸盐 + 缺氧池氨氮 - 好氧池硝酸盐 ≥ 5,后反馈设定值 =</span>
+              <el-input-number v-model="adjustmentFormData.a4" style="width: 200px;"></el-input-number>
+            </li>
+          </ul>
+        </el-card>
+
+        <el-card>
+          <template #header>
+            <h4 class="title">后反馈设定值更新规则参数设定</h4>
+          </template>
+          <div class="text-[#606266] text-[14px]">
+            每
+            <el-input-number v-model="adjustmentFormData.a5" style="width: 200px;"></el-input-number>
+            小时获取一次数据, 连续
+            <el-input-number v-model="adjustmentFormData.a6" style="width: 200px;"></el-input-number>
+            小时数据方向(均> 或 均<),更新最新一组数据的后反馈设定值为当前后反馈设定值。
+          </div>
+        </el-card>
+
+        <el-card>
+          <template #header>
+            <h4 class="title">基础调参表参数设定</h4>
+          </template>
+          <div class="space-y-[20px]">
+            <el-table :data="[{}, {}, {}, {}, {}]" style="width: 100%">
+              <el-table-column label="后反馈档位1" align="center">
+                <el-table-column prop="name" label="控制区间">
+                  <template #default="scope">
+                    <div v-if="scope.$index == 0">
+                      <span>后反馈设定值 - </span>
+                      <el-input-number v-model="adjustmentFormData.a7"></el-input-number>
+                      <span> < 好氧池硝酸盐 ≤ 后反馈设定值 - </span>
+                      <el-input-number v-model="adjustmentFormData.a8"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 1">
+                      <span>后反馈设定值 - </span>
+                      <el-input-number v-model="adjustmentFormData.a10"></el-input-number>
+                      <span> < 好氧池硝酸盐 ≤ 后反馈设定值 - </span>
+                      <el-input-number v-model="adjustmentFormData.a11"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 2">
+                      <span>后反馈设定值 - </span>
+                      <el-input-number v-model="adjustmentFormData.a13"></el-input-number>
+                      <span> < 好氧池硝酸盐 ≤ 后反馈设定值 - </span>14
+                      <el-input-number v-model="adjustmentFormData.a14"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 3">
+                      <span>后反馈设定值 - </span>
+                      <el-input-number v-model="adjustmentFormData.a16"></el-input-number>
+                      <span> < 好氧池硝酸盐 ≤ 后反馈设定值 - </span>
+                      <el-input-number v-model="adjustmentFormData.a17"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 4">
+                      <span>后反馈设定值 - </span>
+                      <el-input-number v-model="adjustmentFormData.a19"></el-input-number>
+                      <span> < 好氧池硝酸盐 ≤ 后反馈设定值 - </span>
+                      <el-input-number v-model="adjustmentFormData.a20"></el-input-number>
+                    </div>
+
+                  </template>
+                </el-table-column>
+                <el-table-column prop="name1" label="控制系数" width="300">
+                  基准参数*(100-减幅)/100
+                </el-table-column>
+                <el-table-column prop="name1" label="减幅" width="175">
+                  <template #default="scope">
+                    <div v-if="scope.$index == 0">
+                      <el-input-number v-model="adjustmentFormData.a9"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 1">
+                      <el-input-number v-model="adjustmentFormData.a12"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 2">
+                      <el-input-number v-model="adjustmentFormData.a15"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 3">
+                      <el-input-number v-model="adjustmentFormData.a18"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 4">
+                      <el-input-number v-model="adjustmentFormData.a21"></el-input-number>
+                    </div>
+                  </template>
+                </el-table-column>
+              </el-table-column>
+            </el-table>
+
+            <el-table :data="[{}]" style="width: 100%">
+              <el-table-column label="后反馈档位2" align="center">
+                <el-table-column prop="name" label="控制区间">
+                  <template #default="scope">
+                    <div v-if="scope.$index == 0">
+                      <span>后反馈设定值 - </span>
+                      <el-input-number v-model="adjustmentFormData.a22"></el-input-number>
+                      <span> < 好氧池硝酸盐 ≤ 后反馈设定值</span>
+                    </div>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="name1" label="控制系数" width="300">
+                  <span class="text-[red]">基准参数</span>
+                </el-table-column>
+                <el-table-column prop="name1" label="默认基准系数" width="175">
+                  <template #default="scope">
+                    <div v-if="scope.$index == 0">
+                      <el-input-number v-model="adjustmentFormData.a23"></el-input-number>
+                    </div>
+                  </template>
+                </el-table-column>
+              </el-table-column>
+            </el-table>
+
+            <el-table :data="[{}, {}, {}, {}]" style="width: 100%">
+              <el-table-column label="后反馈档位3" align="center">
+                <el-table-column prop="name" label="控制区间">
+                  <template #default="scope">
+                    <div v-if="scope.$index == 0">
+                      <span>后反馈设定值 < 好氧池硝酸盐 ≤ 后反馈设定值+ </span>
+                      <el-input-number v-model="adjustmentFormData.a24"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 1">
+                      <span>后反馈设定值 + </span>
+                      <el-input-number v-model="adjustmentFormData.a26"></el-input-number>
+                      <span> < 好氧池硝酸盐 ≤ 后反馈设定值+ </span>27
+                      <el-input-number v-model="adjustmentFormData.a27"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 2">
+                      <span>后反馈设定值 + </span>
+                      <el-input-number v-model="adjustmentFormData.a29"></el-input-number>
+                      <span> < 好氧池硝酸盐 ≤ 后反馈设定值+ </span>
+                      <el-input-number v-model="adjustmentFormData.a30"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 3">
+                      <span>后反馈设定值 - </span>
+                      <el-input-number v-model="adjustmentFormData.a32"></el-input-number>
+                      <span> < 好氧池硝酸盐 </span>
+                    </div>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="name1" label="控制系数" width="300">
+                  基准参数*(100+增幅)/100
+                </el-table-column>
+                <el-table-column prop="name1" label="增幅" width="175">
+                  <template #default="scope">
+                    <div v-if="scope.$index == 0">
+                      <el-input-number v-model="adjustmentFormData.a25"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 1">
+                      <el-input-number v-model="adjustmentFormData.a28"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 2">
+                      <el-input-number v-model="adjustmentFormData.a31"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 3">
+                      <el-input-number v-model="adjustmentFormData.a33"></el-input-number>
+                    </div>
+                  </template>
+                </el-table-column>
+              </el-table-column>
+            </el-table>
+
+            <el-table :data="[{}, {}]" style="width: 100%">
+              <el-table-column label="前反馈基础调参表" align="center">
+                <el-table-column prop="name" label="控制区间">
+                  <template #default="scope">
+                    <div v-if="scope.$index == 0">
+                      <el-input-number v-model="adjustmentFormData.a34"></el-input-number>
+                      <span>< 缺氧区出水氨氮+缺氧区出水硝酸盐 ≤ </span>35
+                      <el-input-number v-model="adjustmentFormData.a35"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 1">
+                      <el-input-number v-model="adjustmentFormData.a37"></el-input-number>
+                      <span>< 缺氧区出水氨氮+缺氧区出水硝酸盐</span>
+                    </div>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="name1" label="控制系数" width="300">
+                  基准参数*(100+增幅)/100
+                </el-table-column>
+                <el-table-column prop="name1" label="增幅" width="175">
+                  <template #default="scope">
+                    <div v-if="scope.$index == 0">
+                      <el-input-number v-model="adjustmentFormData.a36"></el-input-number>
+                    </div>
+                    <div v-if="scope.$index == 1">
+                      <el-input-number v-model="adjustmentFormData.a38"></el-input-number>
+                    </div>
+                  </template>
+                </el-table-column>
+              </el-table-column>
+            </el-table>
+          </div>
+        </el-card>
+
+        <el-card>
+          <template #header>
+            <h4 class="title">控制系数限制</h4>
+          </template>
+          <div class="text-[#606266] text-[14px]">
+            控制系数最大值
+            <el-input-number v-model="adjustmentFormData.a39" style="width: 200px;"></el-input-number>
+            , 最小值
+            <el-input-number v-model="adjustmentFormData.a40" style="width: 200px;"></el-input-number>
+            ,每
+            <el-input-number v-model="adjustmentFormData.a41" style="width: 200px;"></el-input-number>
+            小时获取一次数据,进行升\降档调参。
+          </div>
+        </el-card>
+
+        <el-card>
+          <template #header>
+            <h4 class="title">后反馈调参规则参数设定</h4>
+          </template>
+
+          <div class="content space-y-[10px]">
+            <div class="space-y-[10px]">
+              <p>
+                实时监控,缺氧区出水氨氮+缺氧区出水硝酸盐 >
+                <el-input-number v-model="adjustmentFormData.a42" style="width: 200px;"></el-input-number>
+                , 连续
+                <el-input-number v-model="adjustmentFormData.a43" style="width: 200px;"></el-input-number>
+                小时, 切换至前反馈调参模式
+              </p>
+              <p>|| 档位1降档调参:</p>
+              <p>if (当前控制系数 < 最新一组数据的控制系数 ) {</p>
+              <p class="pl-[20px]">
+                控制系数 = 当前控制系数 调整 - <el-input-number v-model="adjustmentFormData.a44"
+                  style="width: 200px;"></el-input-number>%;
+              </p>
+              <p>
+                }else{
+              </p>
+              <p class="pl-[20px]">控制系数 = 最新一组数据的控制系数;</p>
+              <p>}</p>
+              <p>|| 档位1同档调参</p>
+              <p>
+                控制系数 = 当前控制系数 调整 - <el-input-number v-model="adjustmentFormData.a45"
+                  style="width: 200px;"></el-input-number>%。
+              </p>
+              <p>|| 档位2同档调参,控制系数不变, 控制系数在档位2并且连续 <el-input-number v-model="adjustmentFormData.a46"
+                  style="width: 200px;"></el-input-number>小时控制系数不变时,将基准参数调整至当前控制系数</p>
+              <p>|| 档位3 升档调参:</p>
+            </div>
+
+            <div class="space-y-[10px]">
+              <p>① 无有效控制系数</p>
+              <p>
+                条件1:当前控制系数 调整
+                <el-input-number v-model="adjustmentFormData.a47" style="width: 200px;"></el-input-number>
+                % 与 条件2:最新一组数据的控制系数 与 条件3: 最新一组数据上一层区间的控制系数 调整 -
+                <el-input-number v-model="adjustmentFormData.a48" style="width: 200px;"></el-input-number> %,三者比较
+              </p>
+              <p>
+                if (条件1 最大){
+              </p>
+              <p class="pl-[20px]">控制系数 = 条件1;</p>
+              <p> }elseif(条件2 最大){</p>
+              <p class="pl-[20px]">
+                控制系数 = 最新一组数据的控制系数 调整<el-input-number v-model="adjustmentFormData.a49"
+                  style="width: 200px;"></el-input-number>% ;
+              </p>
+              <p>
+                }else{
+              </p>
+              <p class="pl-[20px]">控制系数 = 条件3;</p>
+              <p>}</p>
+            </div>
+
+            <div class="space-y-[10px]">
+              <p>② 有有效控制系数</p>
+              <p>条件1:最新一组好氧池硝酸盐数据 与 条件2:有效控制系数硝酸盐 二者比较</p>
+              <p>if(条件1 最大){</p>
+              <p class="pl-[20px]">控制系数 = 有效控制系数 调整<el-input-number v-model="adjustmentFormData.a50"
+                  style="width: 200px;"></el-input-number>%;</p>
+              <p>}else{</p>
+              <p class="pl-[20px]">控制系数 = 有效控制系数 调整 - <el-input-number v-model="adjustmentFormData.a51"
+                  style="width: 200px;"></el-input-number>% ;</p>
+              <p>}</p>
+              <p>|| 档位3降至同档位调参:</p>
+              <p>① 无有效控制系数</p>
+              <p>条件1:当前控制系数 调整 - <el-input-number v-model="adjustmentFormData.a52" style="width: 200px;" />% 与
+                条件2:最新一组数据的控制系数
+                二者比较</p>
+              <p>if (条件1 最大){</p>
+              <p class="pl-[20px]">控制系数 = 条件1 ;</p>
+              <p>}else{</p>
+              <p class="pl-[20px]">控制系数 = 条件2;</p>
+              <p>}</p>
+              <p>② 有有效控制系数</p>
+              <p>条件1:最新一组好氧池硝酸盐数据 与 条件2:有效控制系数好氧硝酸 二者比较</p>
+              <p>if(条件1 最大){</p>
+              <p class="pl-[20px]">控制系数 = 有效控制系数调整 <el-input-number v-model="adjustmentFormData.a53" style="width: 200px;" /> % ;</p>
+              <p>}else{</p>
+              <p class="pl-[20px]">控制系数 = 有效控制系数调整 - <el-input-number v-model="adjustmentFormData.a54" style="width: 200px;" /> % ;</p>
+              <p>}</p>
+            </div>
+            <div class="space-y-[10px]">
+              <p>|| 档位3降至档位2调参:</p>
+              <p>条件1:当前控制*(100- <el-input-number v-model="adjustmentFormData.a55" style="width: 200px;" /> * X )/100 与
+                条件2:最新一组数据的控制系数 二者比较</p>
+              <p> if(条件1 大){</p>
+              <p class="pl-[20px]">控制系数 = 条件1 ;</p>
+              <p>}else{</p>
+              <p class="pl-[20px]">控制系数 = 条件2 ;</p>
+              <p>}</p>
+              <p>|| 档位3同档调参</p>
+              <p>控制系数 = 当前控制系数 调整 <el-input-number v-model="adjustmentFormData.a56" style="width: 200px;" />%。</p>
+            </div>
+          </div>
+        </el-card>
+
+
+        <el-card>
+          <template #header>
+            <h4 class="title">前反馈调参规则参数设定</h4>
+          </template>
+
+          <div class="content space-y-[10px] text-[14px]">
+            <div class="space-y-[10px]">
+              <p>
+                实时监控,缺氧区出水氨氮+缺氧区出水硝酸盐 < 
+                <el-input-number v-model="adjustmentFormData.a57" style="width: 200px;"></el-input-number>
+                , 连续 
+                <el-input-number v-model="adjustmentFormData.a58" style="width: 200px;"></el-input-number>
+                小时, 切换至后反馈调参模式
+              </p>
+              <p>|| 升档调参</p>
+              <p>条件1: 当前控制系数 调整 <el-input-number v-model="adjustmentFormData.a59"
+                  style="width: 200px;"></el-input-number>% 与
+                条件2:最新一组数据的控制系数 二者比较</p>
+              <p>if(条件1 大){</p>
+              <p class="pl-[20px]">控制系数 = 条件1 ;</p>
+              <p>}else{</p>
+              <p class="pl-[20px]">控制系数 = 条件2 ;</p>
+              <p>}</p>
+              <p>|| 同档调参</p>
+              <p>控制系数 = 当前控制系数 调整 <el-input-number v-model="adjustmentFormData.a60"
+                  style="width: 200px;"></el-input-number>%
+              </p>
+            </div>
+          </div>
+        </el-card>
+
+      </el-tab-pane>
+    </el-tabs>
+  </el-card>
+
+  <div class="flex items-center justify-center pt-[30px]">
+    <el-button type="primary" @click="onUpdateParamterConfig">更新配置</el-button>
+  </div>
+</template>
+
+<style lang="scss" scoped>
+:deep(.el-input-number__decrease) {
+  display: none;
+}
+:deep(.el-input-number__increase) {
+  display: none;
+}
+
+.tips {
+  font-size: 12px;
+  color: #999;
+}
+
+.title {
+  font-weight: bold;
+}
+
+p {
+  font-size: 14px;
+  color: #606266;
+}
+</style>

+ 7 - 49
src/views/result/index.vue

@@ -10,20 +10,8 @@ const tableData = ref([
     "no3Qyc1Jqr": "3",
     "nh31Jqr": "4"
   },
-  {
-    "test_hour": "2025/04/22 11",
-    "no3Hlj1Jqr": "5",
-    "no3Qyc1Jqr": "6",
-    "nh31Jqr": "7"
-  },
   {
     "test_hour": "2025/04/22 12",
-    "no3Hlj1Jqr": "2",
-    "no3Qyc1Jqr": "3",
-    "nh31Jqr": "4"
-  },
-  {
-    "test_hour": "2025/04/22 13",
     "no3Hlj1Jqr": "5",
     "no3Qyc1Jqr": "6",
     "nh31Jqr": "7"
@@ -34,41 +22,11 @@ const tableData = ref([
     "no3Qyc1Jqr": "3",
     "nh31Jqr": "4"
   },
-  {
-    "test_hour": "2025/04/22 15",
-    "no3Hlj1Jqr": "5",
-    "no3Qyc1Jqr": "6",
-    "nh31Jqr": "7"
-  },
   {
     "test_hour": "2025/04/22 16",
     "no3Hlj1Jqr": "5",
     "no3Qyc1Jqr": "6",
     "nh31Jqr": "7"
-  },
-  {
-    "test_hour": "2025/04/22 17",
-    "no3Hlj1Jqr": "5",
-    "no3Qyc1Jqr": "6",
-    "nh31Jqr": "7"
-  },
-  {
-    "test_hour": "2025/04/22 18",
-    "no3Hlj1Jqr": "5",
-    "no3Qyc1Jqr": "6",
-    "nh31Jqr": "7"
-  },
-  {
-    "test_hour": "2025/04/22 19",
-    "no3Hlj1Jqr": "5",
-    "no3Qyc1Jqr": "6",
-    "nh31Jqr": "7"
-  },
-  {
-    "test_hour": "2025/04/22 20",
-    "no3Hlj1Jqr": "5",
-    "no3Qyc1Jqr": "6",
-    "nh31Jqr": "7"
   }
 
 ]);
@@ -101,12 +59,12 @@ const onSubmit = async () => {
     })
   }
 
-  if (tableData.value.length < 6) {
-    return ElMessage({
-      message: '至少填写6条数据',
-      type: 'error',
-    })
-  }
+  // if (tableData.value.length < 6) {
+  //   return ElMessage({
+  //     message: '至少填写6条数据',
+  //     type: 'error',
+  //   })
+  // }
 
   const loading = ElLoading.service({
     lock: true,
@@ -139,7 +97,7 @@ const onSubmit = async () => {
     <div class="left">
       <el-table :data="tableData" style="width: 100%" border>
         <el-table-column type="index" label="序号" width="60" align="center" />
-        <el-table-column prop="test_hour" label="日期" align="center">
+        <el-table-column prop="test_hour" label="日期" align="center" width="200">
           <template #default="{ row }">
             <el-date-picker v-model="row.test_hour" type="datetime" format="YYYY/MM/DD HH" time-format="HH"
               value-format="YYYY/MM/DD HH" style="width: 100%;" />