Преглед на файлове

feat(覆盖规则): 支持配置命中后的响应字段覆写

编辑弹窗新增响应结果 success(成功/失败)、message、reason/sub_message 配置,留空沿用默认值;列表输出列展示覆写配置。分页支持切换条数并显示总数。
dodo hold преди 1 седмица
родител
ревизия
d1eea6f78a
променени са 2 файла, в които са добавени 57 реда и са изтрити 1 реда
  1. 8 1
      src/api/overrideRules.ts
  2. 49 0
      src/views/settings/overrideRules.vue

+ 8 - 1
src/api/overrideRules.ts

@@ -17,11 +17,18 @@ export interface OverrideRuleRecord {
     use_risk_control: number;
     current_daily_calls?: number;
     current_hourly_calls?: number;
+    /** 命中规则后覆写的响应结果 success */
+    response_success: boolean;
+    /** 命中规则后覆写的 message,为空沿用默认值 */
+    response_message: string;
+    /** 命中规则后覆写的 reason(同时作为 sub_message 输出),为空沿用默认值 */
+    response_reason: string;
     create_time: Date;
     last_time: Date;
 }
 
-export interface OverrideRuleParams extends Partial<OverrideRuleRecord> {
+export interface OverrideRuleParams
+    extends Omit<Partial<OverrideRuleRecord>, 'sort'> {
     current: number;
     pageSize: number;
     sort?: string;

+ 49 - 0
src/views/settings/overrideRules.vue

@@ -127,6 +127,17 @@
                             {{ record.output_text }}
                         </a-typography-text>
                     </a-typography-paragraph>
+                    <div>
+                        <a-tag :color="record.response_success ? 'green' : 'red'" size="small">
+                            success: {{ record.response_success ? '成功' : '失败' }}
+                        </a-tag>
+                    </div>
+                    <a-typography-text v-if="record.response_message || record.response_reason" type="secondary"
+                        style="font-size: 12px;">
+                        <span v-if="record.response_message">message: {{ record.response_message }}</span>
+                        <span v-if="record.response_message && record.response_reason">;</span>
+                        <span v-if="record.response_reason">reason: {{ record.response_reason }}</span>
+                    </a-typography-text>
                 </template>
                 <template #status="{ record }">
                     <a-tag v-if="record.status" bordered color="green">
@@ -221,6 +232,34 @@
                                 :auto-size="{ minRows: 2, maxRows: 4 }" />
                         </a-form-item>
                     </a-col>
+                    <a-col :span="24">
+                        <a-divider orientation="left" style="margin-top: 0;">响应字段覆写</a-divider>
+                    </a-col>
+                    <a-col :span="8">
+                        <a-form-item label="响应结果 success" required>
+                            <a-radio-group v-model="editForm.response_success" type="button">
+                                <a-radio :value="true">成功</a-radio>
+                                <a-radio :value="false">失败</a-radio>
+                            </a-radio-group>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="8">
+                        <a-form-item label="message">
+                            <a-input v-model="editForm.response_message" placeholder="留空沿用默认值" allow-clear
+                                :max-length="255" />
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="8">
+                        <a-form-item label="reason / sub_message">
+                            <a-input v-model="editForm.response_reason" placeholder="留空沿用默认值" allow-clear
+                                :max-length="255" />
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="24">
+                        <div style="font-size: 12px; color: #999; margin: -12px 0 16px;">
+                            命中本规则后,API 响应及转链日志(后续统计)中的 success/message/reason 将使用此处配置;reason 同时作为 sub_message 输出
+                        </div>
+                    </a-col>
                     <a-col :span="24">
                         <a-form-item label="备注">
                             <a-textarea v-model="editForm.description" placeholder="请输入备注说明"
@@ -312,6 +351,9 @@ const size = ref<SizeProps>('small');
 const basePagination: Pagination = {
     current: 1,
     pageSize: 50,
+    showPageSize: true,
+    showTotal: true,
+    pageSizeOptions: [20, 50, 100],
 };
 const pagination = reactive({
     ...basePagination,
@@ -470,6 +512,9 @@ const editForm = ref<Partial<OverrideRuleRecord>>({
     hourly_calls_limit: 0,
     use_special_text: 0,
     use_risk_control: 0,
+    response_success: true,
+    response_message: '',
+    response_reason: '',
 });
 
 const onEdit = (current: OverrideRuleRecord) => {
@@ -477,6 +522,7 @@ const onEdit = (current: OverrideRuleRecord) => {
     editForm.value = {
         ...current,
         status: Boolean(current.status),
+        response_success: Boolean(current.response_success ?? true),
     };
     visible.value = true;
 };
@@ -496,6 +542,9 @@ const onAdd = () => {
         hourly_calls_limit: 0,
         use_special_text: 0,
         use_risk_control: 0,
+        response_success: true,
+        response_message: '',
+        response_reason: '',
     };
     visible.value = true;
 };