From 37496dcec47bc98dc545d94287f39b33eb181bca Mon Sep 17 00:00:00 2001
From: xyc <jc_xiong@hotmail.com>
Date: 星期五, 28 八月 2026 17:36:48 +0800
Subject: [PATCH] docs: 关机交接——菜单布局修复(2bd663b)与实测结论、/import 主线程卡死新发现、sessionStorage 强制登录待办
---
traffic-audit-web/src/views/RuleManage.vue | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 112 insertions(+), 2 deletions(-)
diff --git a/traffic-audit-web/src/views/RuleManage.vue b/traffic-audit-web/src/views/RuleManage.vue
index 06ab9b4..ed091d7 100644
--- a/traffic-audit-web/src/views/RuleManage.vue
+++ b/traffic-audit-web/src/views/RuleManage.vue
@@ -1,2 +1,112 @@
-锘�<template><div>瑙勫垯绠$悊</div></template>
-<script>export default { name: 'RuleManage' }</script>
+<template>
+ <el-container direction="vertical">
+ <app-header title="浜ら�氱粺璁℃姤琛ㄥ鏍哥郴缁� - 瑙勫垯绠$悊"></app-header>
+ <el-container>
+ <el-aside width="200px">
+ <el-menu router default-active="/rules">
+ <el-menu-item index="/dashboard">宸ヤ綔鍙�</el-menu-item>
+ <el-menu-item index="/import">鏁版嵁瀵煎叆</el-menu-item>
+ <el-menu-item index="/data">鏁版嵁鏌ョ湅</el-menu-item>
+ <el-menu-item index="/explain">浼佷笟瑙i噴</el-menu-item>
+ <el-menu-item index="/audit">瀹℃牳缁撴灉</el-menu-item>
+ <el-menu-item index="/report">鎶ヨ〃鐢熸垚</el-menu-item>
+ <el-menu-item index="/rules">瑙勫垯绠$悊</el-menu-item>
+ <el-menu-item index="/users">鐢ㄦ埛绠$悊</el-menu-item>
+ </el-menu>
+ </el-aside>
+ <el-main>
+ <h3>瀹℃牳瑙勫垯绠$悊</h3>
+ <el-form :inline="true">
+ <el-form-item label="鎶ヨ〃绫诲瀷">
+ <el-radio-group v-model="reportType" @change="loadRules">
+ <el-radio label="H2032">璐ц繍鏈堟姤</el-radio>
+ <el-radio label="H2031">鏃呭鏈堟姤</el-radio>
+ <el-radio label="CITY_BUS">鍩庡競鍏氦鏈堟姤</el-radio>
+ <el-radio label="CITY_TAXI">宸℃父鍑虹鏈堟姤</el-radio>
+ <el-radio label="INVEST">鎶曡祫鏈堟姤</el-radio>
+ <el-radio label="H204">鑳借�楀鎶�</el-radio>
+
+
+
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary" @click="loadRules" :loading="loading">鍒锋柊</el-button>
+ </el-form-item>
+ </el-form>
+ <div class="table-area">
+ <el-table :data="rules" border v-loading="loading" size="small" style="width:100%" height="100%">
+ <el-table-column prop="ruleCode" label="瑙勫垯缂栫爜" width="120"></el-table-column>
+ <el-table-column prop="ruleName" label="瑙勫垯鍚嶇О" min-width="180"></el-table-column>
+ <el-table-column prop="description" label="瑙勫垯璇存槑" min-width="260" show-overflow-tooltip></el-table-column>
+ <el-table-column label="姣旇緝鏂瑰紡" width="130">
+ <template slot-scope="scope">{{ typeLabel(scope.row.compareType) }}</template>
+ </el-table-column>
+ <el-table-column label="闃堝��" width="130">
+ <template slot-scope="scope">
+ <el-input v-model="scope.row.threshold" size="mini" placeholder="闃堝��" @change="saveThreshold(scope.row)"></el-input>
+ </template>
+ </el-table-column>
+ <el-table-column label="绛夌骇" width="110">
+ <template slot-scope="scope">
+ <el-select v-model="scope.row.alertLevel" size="mini" @change="saveThreshold(scope.row)">
+ <el-option label="绾� (RED)" value="RED"></el-option>
+ <el-option label="榛� (YELLOW)" value="YELLOW"></el-option>
+ </el-select>
+ </template>
+ </el-table-column>
+ <el-table-column label="鍚敤" width="80">
+ <template slot-scope="scope">
+ <el-switch v-model="scope.row.isEnabled" :active-value="1" :inactive-value="0"
+ @change="toggleRule(scope.row)"></el-switch>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ </el-main>
+ </el-container>
+ </el-container>
+</template>
+<script>
+import api from '@/api'
+import AppHeader from '@/components/AppHeader.vue'
+const TYPE_CN = {
+ DIFF: '宸�煎姣�', RATIO: '姣斾緥瀵规瘮', MOM: '鐜瘮鏂板', NULL_CHECK: '蹇呭~/涓�鑷存��',
+ OUT_RANGE: '鑼冨洿妫�鏌�', MOM_EQ_ZERO: '鐜瘮涓�0', MOM_PCT: '鐜瘮鐧惧垎姣�',
+ MOM_EQ: '绛変簬涓婃湀', EXISTENCE: '瀛樺湪鎬�', CROSS_DIFF: '璺ㄨ〃瀵规瘮',
+ EXISTENCE_AUTH: '杩愭斂缂哄け', EXISTENCE_SYS: '绯荤粺缂哄け', CROSS_DIFF_PCT: '璺ㄨ〃鐧惧垎姣�',
+ TREND_CONSISTENCY: '瓒嬪娍涓�鑷�', RATIO_CHANGE: '鍗犳瘮鍙樺寲', AVG_DIST_CHANGE: '骞冲潎杩愯窛鍙樺寲',
+ PAX_PER_TRIP_CHANGE: '鍗曡溅娆¤浇瀹汉鏁板彉鍖�', LOADED_RATIO_DIFF: '杞借揣閲岀▼鍗犳瘮瀵规瘮',
+ FUEL_RANGE: '鍗曡�楄秴鑼冨洿', FUEL_MOM: '鍗曡�楃幆姣�', FREIGHT_VS_H2032: '涓庤揣杩愭湀鎶ュ姣�',
+ AVG_DIST_VS_H2032: '骞冲潎杩愯窛瀵规瘮', LOADED_TON_RATIO: '杞借揣鍚ㄤ綅姣斿��'
+}
+export default {
+ components: { AppHeader },
+ name: 'RuleManage',
+ data() {
+ return { reportType: 'H2032', rules: [], loading: false }
+ },
+ methods: {
+ typeLabel(t) { return TYPE_CN[t] || t },
+ loadRules() {
+ this.loading = true
+ api.get('/rules/list', { params: { reportType: this.reportType } })
+ .then(res => { this.rules = res.data || [] })
+ .catch(e => { if (e && e._toast) return; this.$message.error('瑙勫垯鍔犺浇澶辫触') })
+ .finally(() => { this.loading = false })
+ },
+ toggleRule(row) {
+ api.post('/rules/toggle', null, { params: { id: row.id, enabled: row.isEnabled } })
+ .then(() => { this.$message.success((row.isEnabled ? '宸插惎鐢細' : '宸插仠鐢細') + row.ruleCode) })
+ .catch(e => { if (e && e._toast) return; row.isEnabled = row.isEnabled ? 0 : 1; this.$message.error('鎿嶄綔澶辫触') })
+ },
+ saveThreshold(row) {
+ api.post('/rules/update', {
+ id: row.id, threshold: row.threshold, alertLevel: row.alertLevel
+ }).then(() => { this.$message.success('宸蹭繚瀛橈細' + row.ruleCode) })
+ .catch(e => { if (e && e._toast) return; this.$message.error('淇濆瓨澶辫触') })
+ }
+ },
+ mounted() { this.loadRules() }
+}
+</script>
--
Gitblit v1.9.1