Kaynağa Gözat

新增内盘大小球方案

flyzto 13 saat önce
ebeveyn
işleme
13ee1df877

+ 1 - 0
server/init.js

@@ -8,6 +8,7 @@ const Logs = require('./libs/logs');
     // minProfitAmount: 0,
     minShowAmount: 0,
     innerRebateRatio: 0,
+    innerOuMinValue: 0,
     obRebateRatio: 0,
     obRebateType: 0,
     obMaxDiff: 0,

+ 23 - 10
server/models/GamesPs.js

@@ -24,19 +24,23 @@ const PS_IOR_KEYS = [
   ['-1', 'ior_rh_15', 'ior_wmh_1', 'ior_rac_05'],
   ['-2', 'ior_rh_25', 'ior_wmh_2', 'ior_rac_15'],
   ['-3', 'ior_rh_35', 'ior_wmh_3', 'ior_rac_25'],
-  ['-4', 'ior_rh_45', 'ior_wmh_4', 'ior_rac_35'],
-  ['-5', 'ior_rh_55', 'ior_wmh_5', 'ior_rac_45'],
+  // ['-4', 'ior_rh_45', 'ior_wmh_4', 'ior_rac_35'],
+  // ['-5', 'ior_rh_55', 'ior_wmh_5', 'ior_rac_45'],
   ['+1', 'ior_rah_05', 'ior_wmc_1', 'ior_rc_15'],
   ['+2', 'ior_rah_15', 'ior_wmc_2', 'ior_rc_25'],
   ['+3', 'ior_rah_25', 'ior_wmc_3', 'ior_rc_35'],
-  ['+4', 'ior_rah_35', 'ior_wmc_4', 'ior_rc_45'],
-  ['+5', 'ior_rah_45', 'ior_wmc_5', 'ior_rc_55'],
-  ['jqs', 'ior_ot_1', 'ior_ot_2', 'ior_ot_3', 'ior_ot_4', 'ior_ot_5', 'ior_ot_6', 'ior_ot_7'],
+  // ['+4', 'ior_rah_35', 'ior_wmc_4', 'ior_rc_45'],
+  // ['+5', 'ior_rah_45', 'ior_wmc_5', 'ior_rc_55'],
+  ['ou_05', 'ior_ouc_05', '-', 'ior_ouh_05'],
+  ['ou_15', 'ior_ouc_15', '-', 'ior_ouh_15'],
+  ['ou_25', 'ior_ouc_25', '-', 'ior_ouh_25'],
+  ['ou_35', 'ior_ouc_35', '-', 'ior_ouh_35'],
+  ['jqs', 'ior_ot_1', 'ior_ot_2', 'ior_ot_3', 'ior_ot_4', 'ior_ot_5', /*'ior_ot_6', 'ior_ot_7'*/],
 ];
 
 const IOR_KEYS_TYPE = {
   A: 1, L: 1, R: 1,
-  D: 2, K: 2,
+  D: 2, K: 2, P: 2,
 }
 
 // 测试环境
@@ -291,7 +295,8 @@ const syncBaseEvents = ({ mk, games, outrights }) => {
   const {
     expireTimeEvents, expireTimeSpecial,
     subsidyTime, subsidyAmount,
-    subsidyRbWmAmount, subsidyRbOtAmount
+    subsidyRbWmAmount, subsidyRbOtAmount,
+    innerOuMinValue,
   } = getSetting();
   const nowTime = Date.now();
 
@@ -397,9 +402,12 @@ const syncBaseEvents = ({ mk, games, outrights }) => {
       }
       const matches = PS_IOR_KEYS.map(([label, ...keys]) => {
         let match = keys.map(key => {
+          let value = odds[key]?.v ?? 0;
+          if (key.startsWith('ior_ou') && value < innerOuMinValue) {
+            value = 0;
+          }
           return {
-            key,
-            value: odds[key]?.v ?? 0,
+            key, value,
             origin: odds[key]?.r,
             source: odds[key]?.s,
           }
@@ -416,7 +424,12 @@ const syncBaseEvents = ({ mk, games, outrights }) => {
           return item.match.length;
         }
         else {
-          return item.match.every(entry => entry.value !== 0);
+          return item.match.every(entry => {
+            if (entry.key == '-' || entry.key.startsWith('ior_ou')) {
+              return true;
+            }
+            return entry.value !== 0;
+          });
         }
       });
 

+ 5 - 0
server/models/Setting.js

@@ -26,6 +26,11 @@ const systemSettingSchema = new Schema({
     required: true,
     default: 0
   },
+  innerOuMinValue: {
+    type: Number,
+    required: true,
+    default: 0,
+  },
   obRebateRatio: {
     type: Number,
     required: true,

+ 74 - 68
server/triangle/iorKeys.js

@@ -118,69 +118,69 @@ module.exports = {
     ['ior_rh_325', 'ior_rac_275', 'ior_wmh_3', 'lh_lh_wa'],
     ['ior_rc_325', 'ior_rah_275', 'ior_wmc_3', 'lh_lh_wa'],
   ],
-  'A:4': [
+  // 'A:4': [
 
-    ['ior_rh_45', 'ior_rac_425', 'ior_wmh_4', 'la_wh_wa'],
-    ['ior_rc_45', 'ior_rah_425', 'ior_wmc_4', 'la_wh_wa'],
+  //   ['ior_rh_45', 'ior_rac_425', 'ior_wmh_4', 'la_wh_wa'],
+  //   ['ior_rc_45', 'ior_rah_425', 'ior_wmc_4', 'la_wh_wa'],
 
-    ['ior_rh_45', 'ior_rac_4', 'ior_wmh_4', 'la_dr_wa'],
-    ['ior_rc_45', 'ior_rah_4', 'ior_wmc_4', 'la_dr_wa'],
+  //   ['ior_rh_45', 'ior_rac_4', 'ior_wmh_4', 'la_dr_wa'],
+  //   ['ior_rc_45', 'ior_rah_4', 'ior_wmc_4', 'la_dr_wa'],
 
-    ['ior_rh_45', 'ior_rac_375', 'ior_wmh_4', 'la_lh_wa'],
-    ['ior_rc_45', 'ior_rah_375', 'ior_wmc_4', 'la_lh_wa'],
+  //   ['ior_rh_45', 'ior_rac_375', 'ior_wmh_4', 'la_lh_wa'],
+  //   ['ior_rc_45', 'ior_rah_375', 'ior_wmc_4', 'la_lh_wa'],
 
-    ['ior_rh_45', 'ior_rac_35', 'ior_wmh_4', 'la_la_wa'],
-    ['ior_rc_45', 'ior_rah_35', 'ior_wmc_4', 'la_la_wa'],
+  //   ['ior_rh_45', 'ior_rac_35', 'ior_wmh_4', 'la_la_wa'],
+  //   ['ior_rc_45', 'ior_rah_35', 'ior_wmc_4', 'la_la_wa'],
 
-    ['ior_rah_35', 'ior_rc_375', 'ior_wmc_4', 'la_wh_wa'],
-    ['ior_rac_35', 'ior_rh_375', 'ior_wmh_4', 'la_wh_wa'],
+  //   ['ior_rah_35', 'ior_rc_375', 'ior_wmc_4', 'la_wh_wa'],
+  //   ['ior_rac_35', 'ior_rh_375', 'ior_wmh_4', 'la_wh_wa'],
 
-    ['ior_rah_35', 'ior_rc_4', 'ior_wmc_4', 'la_dr_wa'],
-    ['ior_rac_35', 'ior_rh_4', 'ior_wmh_4', 'la_dr_wa'],
+  //   ['ior_rah_35', 'ior_rc_4', 'ior_wmc_4', 'la_dr_wa'],
+  //   ['ior_rac_35', 'ior_rh_4', 'ior_wmh_4', 'la_dr_wa'],
 
-    ['ior_rah_35', 'ior_rc_425', 'ior_wmc_4', 'la_lh_wa'],
-    ['ior_rac_35', 'ior_rh_425', 'ior_wmh_4', 'la_lh_wa'],
+  //   ['ior_rah_35', 'ior_rc_425', 'ior_wmc_4', 'la_lh_wa'],
+  //   ['ior_rac_35', 'ior_rh_425', 'ior_wmh_4', 'la_lh_wa'],
 
-    ['ior_rah_375', 'ior_rc_4', 'ior_wmc_4', 'lh_dr_wa'],
-    ['ior_rac_375', 'ior_rh_4', 'ior_wmh_4', 'lh_dr_wa'],
+  //   ['ior_rah_375', 'ior_rc_4', 'ior_wmc_4', 'lh_dr_wa'],
+  //   ['ior_rac_375', 'ior_rh_4', 'ior_wmh_4', 'lh_dr_wa'],
 
-    ['ior_rh_425', 'ior_rac_4', 'ior_wmh_4', 'lh_dr_wa'],
-    ['ior_rc_425', 'ior_rah_4', 'ior_wmc_4', 'lh_dr_wa'],
+  //   ['ior_rh_425', 'ior_rac_4', 'ior_wmh_4', 'lh_dr_wa'],
+  //   ['ior_rc_425', 'ior_rah_4', 'ior_wmc_4', 'lh_dr_wa'],
 
-    ['ior_rh_425', 'ior_rac_375', 'ior_wmh_4', 'lh_lh_wa'],
-    ['ior_rc_425', 'ior_rah_375', 'ior_wmc_4', 'lh_lh_wa'],
-  ],
-  'A:5': [
-    ['ior_rh_55', 'ior_rac_525', 'ior_wmh_5', 'la_wh_wa'],
-    ['ior_rc_55', 'ior_rah_525', 'ior_wmc_5', 'la_wh_wa'],
+  //   ['ior_rh_425', 'ior_rac_375', 'ior_wmh_4', 'lh_lh_wa'],
+  //   ['ior_rc_425', 'ior_rah_375', 'ior_wmc_4', 'lh_lh_wa'],
+  // ],
+  // 'A:5': [
+  //   ['ior_rh_55', 'ior_rac_525', 'ior_wmh_5', 'la_wh_wa'],
+  //   ['ior_rc_55', 'ior_rah_525', 'ior_wmc_5', 'la_wh_wa'],
 
-    ['ior_rh_55', 'ior_rac_5', 'ior_wmh_5', 'la_dr_wa'],
-    ['ior_rc_55', 'ior_rah_5', 'ior_wmc_5', 'la_dr_wa'],
+  //   ['ior_rh_55', 'ior_rac_5', 'ior_wmh_5', 'la_dr_wa'],
+  //   ['ior_rc_55', 'ior_rah_5', 'ior_wmc_5', 'la_dr_wa'],
 
-    ['ior_rh_55', 'ior_rac_475', 'ior_wmh_5', 'la_lh_wa'],
-    ['ior_rc_55', 'ior_rah_475', 'ior_wmc_5', 'la_lh_wa'],
+  //   ['ior_rh_55', 'ior_rac_475', 'ior_wmh_5', 'la_lh_wa'],
+  //   ['ior_rc_55', 'ior_rah_475', 'ior_wmc_5', 'la_lh_wa'],
 
-    ['ior_rh_55', 'ior_rac_45', 'ior_wmh_5', 'la_la_wa'],
-    ['ior_rc_55', 'ior_rah_45', 'ior_wmc_5', 'la_la_wa'],
+  //   ['ior_rh_55', 'ior_rac_45', 'ior_wmh_5', 'la_la_wa'],
+  //   ['ior_rc_55', 'ior_rah_45', 'ior_wmc_5', 'la_la_wa'],
 
-    ['ior_rah_45', 'ior_rc_475', 'ior_wmc_5', 'la_wh_wa'],
-    ['ior_rac_45', 'ior_rh_475', 'ior_wmh_5', 'la_wh_wa'],
+  //   ['ior_rah_45', 'ior_rc_475', 'ior_wmc_5', 'la_wh_wa'],
+  //   ['ior_rac_45', 'ior_rh_475', 'ior_wmh_5', 'la_wh_wa'],
 
-    ['ior_rah_45', 'ior_rc_5', 'ior_wmc_5', 'la_dr_wa'],
-    ['ior_rac_45', 'ior_rh_5', 'ior_wmh_5', 'la_dr_wa'],
+  //   ['ior_rah_45', 'ior_rc_5', 'ior_wmc_5', 'la_dr_wa'],
+  //   ['ior_rac_45', 'ior_rh_5', 'ior_wmh_5', 'la_dr_wa'],
 
-    ['ior_rah_45', 'ior_rc_525', 'ior_wmc_5', 'la_lh_wa'],
-    ['ior_rac_45', 'ior_rh_525', 'ior_wmh_5', 'la_lh_wa'],
+  //   ['ior_rah_45', 'ior_rc_525', 'ior_wmc_5', 'la_lh_wa'],
+  //   ['ior_rac_45', 'ior_rh_525', 'ior_wmh_5', 'la_lh_wa'],
 
-    ['ior_rah_475', 'ior_rc_5', 'ior_wmc_5', 'lh_dr_wa'],
-    ['ior_rac_475', 'ior_rh_5', 'ior_wmh_5', 'lh_dr_wa'],
+  //   ['ior_rah_475', 'ior_rc_5', 'ior_wmc_5', 'lh_dr_wa'],
+  //   ['ior_rac_475', 'ior_rh_5', 'ior_wmh_5', 'lh_dr_wa'],
 
-    ['ior_rh_525', 'ior_rac_5', 'ior_wmh_5', 'lh_dr_wa'],
-    ['ior_rc_525', 'ior_rah_5', 'ior_wmc_5', 'lh_dr_wa'],
+  //   ['ior_rh_525', 'ior_rac_5', 'ior_wmh_5', 'lh_dr_wa'],
+  //   ['ior_rc_525', 'ior_rah_5', 'ior_wmc_5', 'lh_dr_wa'],
 
-    ['ior_rh_525', 'ior_rac_475', 'ior_wmh_5', 'lh_lh_wa'],
-    ['ior_rc_525', 'ior_rah_475', 'ior_wmc_5', 'lh_lh_wa'],
-  ],
+  //   ['ior_rh_525', 'ior_rac_475', 'ior_wmh_5', 'lh_lh_wa'],
+  //   ['ior_rc_525', 'ior_rah_475', 'ior_wmc_5', 'lh_lh_wa'],
+  // ],
 
 
   'D:1': [
@@ -288,48 +288,48 @@ module.exports = {
 
     ['ior_ouc_55', 'ior_ouh_45', 'ior_ot_5', 'la_la_wa'],
   ],
-  'D:6': [
-    ['ior_ouh_55', 'ior_ouc_575', 'ior_ot_6', 'la_wh_wa'],
+  // 'D:6': [
+  //   ['ior_ouh_55', 'ior_ouc_575', 'ior_ot_6', 'la_wh_wa'],
 
-    ['ior_ouh_575', 'ior_ouc_6', 'ior_ot_6', 'lh_dr_wa'],
+  //   ['ior_ouh_575', 'ior_ouc_6', 'ior_ot_6', 'lh_dr_wa'],
 
-    ['ior_ouc_625', 'ior_ouh_6', 'ior_ot_6', 'lh_dr_wa'],
+  //   ['ior_ouc_625', 'ior_ouh_6', 'ior_ot_6', 'lh_dr_wa'],
 
-    ['ior_ouc_65', 'ior_ouh_625', 'ior_ot_6', 'la_wh_wa'],
+  //   ['ior_ouc_65', 'ior_ouh_625', 'ior_ot_6', 'la_wh_wa'],
 
-    ['ior_ouh_55', 'ior_ouc_6', 'ior_ot_6', 'la_dr_wa'],
+  //   ['ior_ouh_55', 'ior_ouc_6', 'ior_ot_6', 'la_dr_wa'],
 
-    ['ior_ouc_625', 'ior_ouh_575', 'ior_ot_6', 'lh_lh_wa'],
+  //   ['ior_ouc_625', 'ior_ouh_575', 'ior_ot_6', 'lh_lh_wa'],
 
-    ['ior_ouc_65', 'ior_ouh_6', 'ior_ot_6', 'la_dr_wa'],
+  //   ['ior_ouc_65', 'ior_ouh_6', 'ior_ot_6', 'la_dr_wa'],
 
-    ['ior_ouh_55', 'ior_ouc_625', 'ior_ot_6', 'la_lh_wa'],
+  //   ['ior_ouh_55', 'ior_ouc_625', 'ior_ot_6', 'la_lh_wa'],
 
-    ['ior_ouc_65', 'ior_ouh_575', 'ior_ot_6', 'la_lh_wa'],
+  //   ['ior_ouc_65', 'ior_ouh_575', 'ior_ot_6', 'la_lh_wa'],
 
-    ['ior_ouc_65', 'ior_ouh_55', 'ior_ot_6', 'la_la_wa'],
-  ],
-  'D:7': [
-    ['ior_ouh_65', 'ior_ouc_675', 'ior_ot_7', 'la_wh_wa'],
+  //   ['ior_ouc_65', 'ior_ouh_55', 'ior_ot_6', 'la_la_wa'],
+  // ],
+  // 'D:7': [
+  //   ['ior_ouh_65', 'ior_ouc_675', 'ior_ot_7', 'la_wh_wa'],
 
-    ['ior_ouh_675', 'ior_ouc_7', 'ior_ot_7', 'lh_dr_wa'],
+  //   ['ior_ouh_675', 'ior_ouc_7', 'ior_ot_7', 'lh_dr_wa'],
 
-    ['ior_ouc_725', 'ior_ouh_7', 'ior_ot_7', 'lh_dr_wa'],
+  //   ['ior_ouc_725', 'ior_ouh_7', 'ior_ot_7', 'lh_dr_wa'],
 
-    ['ior_ouc_75', 'ior_ouh_725', 'ior_ot_7', 'la_wh_wa'],
+  //   ['ior_ouc_75', 'ior_ouh_725', 'ior_ot_7', 'la_wh_wa'],
 
-    ['ior_ouh_65', 'ior_ouc_7', 'ior_ot_7', 'la_dr_wa'],
+  //   ['ior_ouh_65', 'ior_ouc_7', 'ior_ot_7', 'la_dr_wa'],
 
-    ['ior_ouc_725', 'ior_ouh_675', 'ior_ot_7', 'lh_lh_wa'],
+  //   ['ior_ouc_725', 'ior_ouh_675', 'ior_ot_7', 'lh_lh_wa'],
 
-    ['ior_ouc_75', 'ior_ouh_7', 'ior_ot_7', 'la_dr_wa'],
+  //   ['ior_ouc_75', 'ior_ouh_7', 'ior_ot_7', 'la_dr_wa'],
 
-    ['ior_ouh_65', 'ior_ouc_725', 'ior_ot_7', 'la_lh_wa'],
+  //   ['ior_ouh_65', 'ior_ouc_725', 'ior_ot_7', 'la_lh_wa'],
 
-    ['ior_ouc_75', 'ior_ouh_675', 'ior_ot_7', 'la_lh_wa'],
+  //   ['ior_ouc_75', 'ior_ouh_675', 'ior_ot_7', 'la_lh_wa'],
 
-    ['ior_ouc_75', 'ior_ouh_65', 'ior_ot_7', 'la_la_wa'],
-  ],
+  //   ['ior_ouc_75', 'ior_ouh_65', 'ior_ot_7', 'la_la_wa'],
+  // ],
   // 'G:0': [
   //   ['ior_os_0-1', 'ior_ouc_35', 'ior_os_2-3', 'la_la_wa'],
 
@@ -350,5 +350,11 @@ module.exports = {
 
     ['ior_rh_25', 'ior_rac_25', '-', 'la_wa_rv'],
     ['ior_rc_25', 'ior_rah_25', '-', 'la_wa_rv'],
+  ],
+  'P:0': [
+    ['ior_ouc_05', 'ior_ouh_05', '-', 'la_wa_rv'],
+    ['ior_ouc_15', 'ior_ouh_15', '-', 'la_wa_rv'],
+    ['ior_ouc_25', 'ior_ouh_25', '-', 'la_wa_rv'],
+    ['ior_ouc_35', 'ior_ouh_35', '-', 'la_wa_rv'],
   ]
 }

+ 1 - 0
server/triangle/settings.js

@@ -5,6 +5,7 @@ const SETTING = {
   // minProfitAmount: 0,
   minShowAmount: 0,
   innerRebateRatio: 0,
+  innerOuMinValue: 0,
   obRebateRatio: 0,
   obRebateType: 0,
   obMaxDiff: 0,

+ 32 - 29
web/apps/web-antd/src/views/match/components/match_card.vue

@@ -34,10 +34,10 @@ defineProps({
     type: Array,
     required: true
   },
-  matchNumStr: {
-    type: String,
-    required: false
-  },
+  // matchNumStr: {
+  //   type: String,
+  //   required: false
+  // },
   selected: {
     type: Array,
     required: false
@@ -47,31 +47,34 @@ defineProps({
 
 <template>
   <div class="match-card">
-    <div class="team-name">
-      <span class="home-name">{{ teamHomeName }}</span>
-      <em>VS</em>
-      <span class="away-name">{{ teamAwayName }}</span>
-    </div>
-    <div class="events-list" v-if="events.length">
-      <table>
-        <tr v-for="item in events">
-          <th>{{ parseEventKey(item[0]) }}</th>
-          <td>
-            <span :class="{'selected': selected.includes(item[1]?.key), 'strikethrough': item[1]?.qualified === 0}">{{ item[1]?.value ? item[1].value : '-' }}</span>
-            <em v-if="item[1]?.origin">{{ item[1].origin }}</em>
-          </td>
-          <td>
-            <span :class="{'selected': selected.includes(item[2]?.key), 'strikethrough': item[2]?.qualified === 0}">{{ item[2]?.value ? item[2].value : '-' }}</span>
-            <em v-if="item[2]?.origin">{{ item[2].origin }}</em>
-          </td>
-          <td>
-            <span :class="{'selected': selected.includes(item[3]?.key), 'strikethrough': item[3]?.qualified === 0}">{{ item[3]?.value ? item[3].value : '-' }}</span>
-            <em v-if="item[3]?.origin">{{ item[3].origin }}</em>
-          </td>
-        </tr>
-      </table>
-    </div>
-    <div class="events-empty" v-else>暂无数据</div>
+    <template v-if="eventId">
+      <div class="team-name">
+        <span class="home-name">{{ teamHomeName }}</span>
+        <em>VS</em>
+        <span class="away-name">{{ teamAwayName }}</span>
+      </div>
+      <div class="events-list" v-if="events.length">
+        <table>
+          <tr v-for="item in events">
+            <th>{{ parseEventKey(item[0]) }}</th>
+            <td>
+              <span :class="{'selected': selected.includes(item[1]?.key), 'strikethrough': item[1]?.qualified === 0}">{{ item[1]?.value ? item[1].value : '-' }}</span>
+              <em v-if="item[1]?.origin">{{ item[1].origin }}</em>
+            </td>
+            <td>
+              <span :class="{'selected': selected.includes(item[2]?.key), 'strikethrough': item[2]?.qualified === 0}">{{ item[2]?.value ? item[2].value : '-' }}</span>
+              <em v-if="item[2]?.origin">{{ item[2].origin }}</em>
+            </td>
+            <td>
+              <span :class="{'selected': selected.includes(item[3]?.key), 'strikethrough': item[3]?.qualified === 0}">{{ item[3]?.value ? item[3].value : '-' }}</span>
+              <em v-if="item[3]?.origin">{{ item[3].origin }}</em>
+            </td>
+          </tr>
+        </table>
+      </div>
+      <div class="events-empty" v-else>无盘口数据</div>
+    </template>
+    <div class="events-empty" v-else>无关联比赛</div>
   </div>
 </template>
 

+ 46 - 27
web/apps/web-antd/src/views/match/components/solution_item.vue

@@ -35,6 +35,35 @@ const emit = defineEmits(['toggle']);
 
 const selectedIndex = ref(0);
 
+const PS_IOR_KEYS = [
+  ['0', 'ior_mh', 'ior_mn', 'ior_mc'],
+  ['-1', 'ior_rh_15', 'ior_wmh_1', 'ior_rac_05'],
+  ['-2', 'ior_rh_25', 'ior_wmh_2', 'ior_rac_15'],
+  ['-3', 'ior_rh_35', 'ior_wmh_3', 'ior_rac_25'],
+  // ['-4', 'ior_rh_45', 'ior_wmh_4', 'ior_rac_35'],
+  // ['-5', 'ior_rh_55', 'ior_wmh_5', 'ior_rac_45'],
+  ['+1', 'ior_rah_05', 'ior_wmc_1', 'ior_rc_15'],
+  ['+2', 'ior_rah_15', 'ior_wmc_2', 'ior_rc_25'],
+  ['+3', 'ior_rah_25', 'ior_wmc_3', 'ior_rc_35'],
+  // ['+4', 'ior_rah_35', 'ior_wmc_4', 'ior_rc_45'],
+  // ['+5', 'ior_rah_45', 'ior_wmc_5', 'ior_rc_55'],
+  ['ou_05', 'ior_ouc_05', '-', 'ior_ouh_05'],
+  ['ou_15', 'ior_ouc_15', '-', 'ior_ouh_15'],
+  ['ou_25', 'ior_ouc_25', '-', 'ior_ouh_25'],
+  ['ou_35', 'ior_ouc_35', '-', 'ior_ouh_35'],
+  ['ot_1', '-', 'ior_ot_1', '-'],
+  ['ot_2', '-', 'ior_ot_2', '-'],
+  ['ot_3', '-', 'ior_ot_3', '-'],
+  ['ot_4', '-', 'ior_ot_4', '-'],
+  ['ot_5', '-', 'ior_ot_5', '-'],
+  // ['ot_6', '-', 'ior_ot_6', '-'],
+  // ['ot_7', '-', 'ior_ot_7', '-'],
+];
+
+const parseRatio = (ratioString) => {
+  return parseFloat(`${ratioString[0]}.${ratioString.slice(1)}`);
+}
+
 const parseIorKey = (iorKey) => {
   const iorKeyMatch = iorKey.match(/^ior_(r|ou|m|wm|ot|os)(a?)(h|c|n)?(_([\d-]+))?$/);
   if (!iorKeyMatch) {
@@ -47,38 +76,23 @@ const parseIorKey = (iorKey) => {
     ratio = ratioString;
   }
   else if (ratioString) {
-    ratio = `${ratioString[0]}.${ratioString.slice(1)}` * (accept ? 1 : -1);
+    ratio = parseRatio(ratioString) * (accept ? 1 : -1);
   }
   return { type, side, ratio };
 }
 
-const PS_IOR_KEYS = [
-  ['0', 'ior_mh', 'ior_mn', 'ior_mc'],
-  ['-1', 'ior_rh_15', 'ior_wmh_1', 'ior_rac_05'],
-  ['-2', 'ior_rh_25', 'ior_wmh_2', 'ior_rac_15'],
-  ['-3', 'ior_rh_35', 'ior_wmh_3', 'ior_rac_25'],
-  ['-4', 'ior_rh_45', 'ior_wmh_4', 'ior_rac_35'],
-  ['-5', 'ior_rh_55', 'ior_wmh_5', 'ior_rac_45'],
-  ['+1', 'ior_rah_05', 'ior_wmc_1', 'ior_rc_15'],
-  ['+2', 'ior_rah_15', 'ior_wmc_2', 'ior_rc_25'],
-  ['+3', 'ior_rah_25', 'ior_wmc_3', 'ior_rc_35'],
-  ['+4', 'ior_rah_35', 'ior_wmc_4', 'ior_rc_45'],
-  ['+5', 'ior_rah_45', 'ior_wmc_5', 'ior_rc_55'],
-  ['ot_1', '-', 'ior_ot_1', '-'],
-  ['ot_2', '-', 'ior_ot_2', '-'],
-  ['ot_3', '-', 'ior_ot_3', '-'],
-  ['ot_4', '-', 'ior_ot_4', '-'],
-  ['ot_5', '-', 'ior_ot_5', '-'],
-  ['ot_6', '-', 'ior_ot_6', '-'],
-  ['ot_7', '-', 'ior_ot_7', '-'],
-];
-
 const fixFloat = (number, x = 2) => {
   return parseFloat(number.toFixed(x));
 }
 
 const formatPsEvents = (events) => {
   return PS_IOR_KEYS.map(([label, ...keys]) => {
+    const labelParts = label.split('_');
+    const labelType = labelParts[0];
+    if (labelType === 'ou') {
+      const labelRatio = parseRatio(labelParts[1]);
+      label = `ou_${labelRatio}`;
+    }
     const match = keys.map(key => ({
       key,
       value: events[key]?.v ?? 0,
@@ -215,7 +229,12 @@ const currentRelation = computed(() => {
     }
     const mergedEvents = { ...events, ...special };
     const formattedEvents = platform === 'ps' ? formatPsEvents(mergedEvents) : formatEvents(mergedEvents);
-    relation.rel[platform] = { eventId, teamHomeName, teamAwayName, events: formattedEvents };
+    relation.rel[platform] = {
+      eventId: eventId ?? 0,
+      teamHomeName: teamHomeName ?? '主队',
+      teamAwayName: teamAwayName ?? '客队',
+      events: formattedEvents ?? []
+    };
   });
   cpr.forEach(item => {
     const { k, p } = item;
@@ -268,19 +287,19 @@ const im = computed(() => {
   </div>
   <div class="solution-content">
     <MatchCard platform="ps" :eventId="ps.eventId" :teamHomeName="ps.teamHomeName"
-    :teamAwayName="ps.teamAwayName" :dateTime="ps.dateTime" :events="ps.events ?? []"
+    :teamAwayName="ps.teamAwayName" :events="ps.events ?? []"
     :selected="ps.selected ?? []" />
 
     <MatchCard platform="ob" :eventId="ob.eventId" :teamHomeName="ob.teamHomeName"
-      :teamAwayName="ob.teamAwayName" :dateTime="ob.dateTime" :events="ob.events ?? []"
+      :teamAwayName="ob.teamAwayName" :events="ob.events ?? []"
       :selected="ob.selected ?? []" />
 
     <MatchCard platform="hg" :eventId="hg.eventId" :teamHomeName="hg.teamHomeName"
-      :teamAwayName="hg.teamAwayName" :dateTime="hg.dateTime" :events="hg.events ?? []"
+      :teamAwayName="hg.teamAwayName" :events="hg.events ?? []"
       :selected="hg.selected ?? []" />
 
     <MatchCard platform="im" :eventId="im.eventId" :teamHomeName="im.teamHomeName"
-      :teamAwayName="im.teamAwayName" :dateTime="im.dateTime" :events="im.events ?? []"
+      :teamAwayName="im.teamAwayName" :events="im.events ?? []"
       :selected="im.selected ?? []" />
 
     <!-- <div class="solution-profit" @click="toggleSolution()">

+ 14 - 0
web/apps/web-antd/src/views/system/parameter/index.vue

@@ -10,6 +10,7 @@ const initialFormState = {
   minShowAmount: 0,
   innerRebateRatio: 0,
   obRebateRatio: 0,
+  innerOuMinValue: 0,
   obRebateType: 0,
   obMaxDiff: 0,
   imRebateRatio: 0,
@@ -146,6 +147,19 @@ onUnmounted(() => {
         />
       </Form.Item>
 
+      <Form.Item
+        label="内盘大/小最低赔率"
+        name="innerOuMinValue"
+      >
+        <InputNumber
+
+          v-model:value="formState.innerOuMinValue"
+          :min="0"
+          :step="0.01"
+          style="width: 200px"
+        />
+      </Form.Item>
+
       <Form.Item
         label="OB返点比例(%)"
         name="obRebateRatio"