From c92b723d893bddd1cf9093e660806b226dc00921 Mon Sep 17 00:00:00 2001
From: seatonwan9
Date: 星期五, 15 八月 2025 19:01:56 +0800
Subject: [PATCH] 提交源码

---
 src/views/pointsManage/ruleList/index.vue |  252 +++++++++++++++++++++++++------------------------
 1 files changed, 128 insertions(+), 124 deletions(-)

diff --git a/src/views/pointsManage/ruleList/index.vue b/src/views/pointsManage/ruleList/index.vue
index 4dc8d79..6fab5c7 100644
--- a/src/views/pointsManage/ruleList/index.vue
+++ b/src/views/pointsManage/ruleList/index.vue
@@ -1,81 +1,100 @@
 <template>
   <div class="points-rule-list">
-    <!-- 椤甸潰鏍囬 -->
-    <div class="page-title">绉垎瑙勫垯绠$悊</div>
+    <!-- 鍒楄〃椤甸潰 -->
+    <div v-if="currentView === 'list'">
+      <!-- 椤甸潰鏍囬 -->
+      <div class="page-title">绉垎瑙勫垯绠$悊</div>
 
-    <!-- 瑙勫垯鍒楄〃鍗$墖 -->
-    <el-card shadow="never" class="rule-list-card">
-      <!-- 绛涢�夋潯浠� -->
-      <div class="filter-section">
-        <div class="filter-row">
-          <div class="filter-item">
-            <span class="filter-label">鐢熸晥鏃堕棿:</span>
-            <el-date-picker
-                v-model="queryParams.dateRange"
-                type="datetimerange"
-                range-separator="鑷�"
-                start-placeholder="寮�濮嬫棩鏈�"
-                end-placeholder="缁撴潫鏃ユ湡"
-                format="YYYY-MM-DD HH:mm:ss"
-                value-format="YYYY-MM-DD HH:mm:ss"
+      <!-- 瑙勫垯鍒楄〃鍗$墖 -->
+      <el-card shadow="never" class="rule-list-card">
+        <!-- 绛涢�夋潯浠� -->
+        <div class="filter-section">
+          <div class="filter-row">
+            <div class="filter-item">
+              <span class="filter-label">鐢熸晥鏃堕棿:</span>
+              <el-date-picker
+                  v-model="queryParams.dateRange"
+                  type="datetimerange"
+                  range-separator="鑷�"
+                  start-placeholder="寮�濮嬫棩鏈�"
+                  end-placeholder="缁撴潫鏃ユ湡"
+                  format="YYYY-MM-DD HH:mm:ss"
                   date-format="YYYY-MM-DD"
                   time-format="HH:mm:ss"
-                style="margin-left: 8px;"
-                @change="handleDateChange"
-              />
-          </div>
-          
-        </div>
-        <div class="filter-actions">
-          <el-button type="primary" @click="queryData">
-            <el-icon><Search /></el-icon>
-            鏌ヨ
-          </el-button>
-          <el-button @click="resetQuery">
-            <el-icon><Refresh /></el-icon>
-            閲嶇疆
-          </el-button>
-        </div>
-      </div>
+                  style="margin-left: 8px;"
+                  @change="handleDateChange"
+                />
+            </div>
 
-      <!-- 瑙勫垯琛ㄦ牸 -->
-      <div class="table-section">
-        <el-table :data="ruleList" stripe style="width: 100%">
-          <el-table-column prop="id" label="搴忓彿" width="80" align="center" />
-          <el-table-column prop="pointsName" label="鍚嶇О"  align="ceter">
-            <template #default="{ row }">
-                 {{ row.pointsName}}{{ row.updatedAt}}V{{ row.version }}
-            </template>
-          </el-table-column>
-      
-          <el-table-column prop="effectiveStart" label="寮�濮嬬敓鏁堟椂闂�"   align="center" />
-          <el-table-column prop="modifierName" label="淇敼浜�"  align="center" />
-        
-          <el-table-column label="鎿嶄綔"  align="center" fixed="right">
-            <template #default="{ row }">
-              <el-button type="primary" size="small" @click="editRule(row)">鏌ョ湅</el-button>
-              <el-button type="primary" size="small" @click="editRule(row)">缂栬緫</el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-
-        <!-- 鍒嗛〉 -->
-        <div class="pagination-section">
-          <div class="pagination-info">
-            鍏眥{ total }}鏉�
           </div>
-          <el-pagination
-            v-model:current-page="queryParams.pageNum"
-            v-model:page-size="queryParams.pageSize"
-            :page-sizes="[10, 20, 50, 100]"
-            :total="total"
-            layout="sizes, prev, pager, next, jumper"
-            @size-change="handleSizeChange"
-            @current-change="handleCurrentChange"
-          />
+          <div class="filter-actions">
+            <el-button type="primary" @click="queryData">
+              <el-icon><Search /></el-icon>
+              鏌ヨ
+            </el-button>
+            <el-button @click="resetQuery">
+              <el-icon><Refresh /></el-icon>
+              閲嶇疆
+            </el-button>
+          </div>
         </div>
-      </div>
-    </el-card>
+
+        <!-- 瑙勫垯琛ㄦ牸 -->
+        <div class="table-section">
+          <el-table :data="ruleList" stripe style="width: 100%">
+            <el-table-column type="index" label="搴忓彿" width="80" align="center" />
+            <el-table-column prop="pointsName" label="鍚嶇О"  align="ceter">
+              <template #default="{ row }">
+                   {{ row.pointsName}}{{ dayjs(row.updatedAt).format('YYYYMMDD')}}V{{ row.version }}
+              </template>
+            </el-table-column>
+
+            <el-table-column prop="effectiveStart" label="寮�濮嬬敓鏁堟椂闂�"   align="center" />
+            <el-table-column prop="modifierName" label="淇敼浜�"  align="center" />
+
+            <el-table-column label="鎿嶄綔"  align="center" fixed="right">
+              <template #default="{ row }">
+                <el-button type="primary" size="small" @click="viewRule(row)">鏌ョ湅</el-button>
+                <el-button type="primary" size="small" @click="editRule(row)">缂栬緫</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+
+          <!-- 鍒嗛〉 -->
+          <div class="pagination-section">
+            <div class="pagination-info">
+              鍏眥{ total }}鏉�
+            </div>
+            <el-pagination
+              v-model:current-page="queryParams.pageNum"
+              v-model:page-size="queryParams.pageSize"
+              :page-sizes="[10, 20, 50, 100]"
+              :total="total"
+              layout="sizes, prev, pager, next, jumper"
+              @size-change="handleSizeChange"
+              @current-change="handleCurrentChange"
+            />
+          </div>
+        </div>
+      </el-card>
+    </div>
+
+    <!-- 缂栬緫椤甸潰 -->
+    <div v-if="currentView === 'edit'" class="edit-container">
+      <SettingsComponent 
+        :ruleId="currentRuleId"
+        @goBack="goBackToList"
+        @saveSuccess="handleSaveSuccess"
+      />
+    </div>
+
+    <!-- 鏌ョ湅璇︽儏椤甸潰 -->
+    <div v-if="currentView === 'view'" class="view-container">
+      <RuleDetailComponent 
+        :ruleId="currentRuleId"
+        @goBack="goBackToList"
+      />
+    </div>
   </div>
 </template>
 
@@ -85,14 +104,14 @@
 import { Search, Refresh } from '@element-plus/icons-vue'
 import pointsApi from '@/api/pointsApi'
 import type { PointsRule, PointsQueryParams } from '@/types/points'
-// 瀵煎叆璺敱閽╁瓙
-import { useRouter } from 'vue-router'
+import SettingsComponent from '../settings/index.vue'
+import RuleDetailComponent from '../ruleDetail/index.vue'
+
+// 褰撳墠瑙嗗浘鐘舵�侊細'list' | 'edit' | 'view'
+const currentView = ref<'list' | 'edit' | 'view'>('list')
 
 // 鏌ヨ鍙傛暟
 const queryParams = reactive<PointsQueryParams>({
- // ruleType: '',
- // category: '',
- // status: '',
   dateRange: '',
   pageNum: 1,
   pageSize: 10,
@@ -103,6 +122,9 @@
 
 // 鎬绘暟
 const total = ref(0)
+
+// 褰撳墠閫変腑鐨勮鍒橧D
+const currentRuleId = ref<string>('')
 
 // 椤甸潰鍔犺浇鏃惰幏鍙栨暟鎹�
 onMounted(() => {
@@ -144,65 +166,41 @@
   queryData()
 }
 
-// 鑾峰彇瑙勫垯绫诲瀷鏍囩
-const getRuleTypeLabel = (type: string) => {
-  const typeMap: Record<string, string> = {
-    acquisition: '鑾峰彇',
-    consumption: '娑堣��',
-    conversion: '杞崲',
-  }
-  return typeMap[type] || type
-}
-
-// 鑾峰彇鍒嗙被鏍囩
-const getCategoryLabel = (category: string) => {
-  const categoryMap: Record<string, string> = {
-    resource_contribution: '璧勬簮璐$尞',
-    resource_transaction: '璧勬簮浜ゆ槗',
-    resource_dissemination: '璧勬簮浼犳挱',
-    user_participation: '鐢ㄦ埛鍙備笌',
-    other: '鍏朵粬',
-  }
-  return categoryMap[category] || category
-}
-
-// 澶勭悊鐘舵�佸彉鍖�
-const handleStatusChange = async (row: PointsRule) => {
-  try {
-    await pointsApi.savePointsRules({
-      id: row.id,
-      status: row.status
-    })
-    ElMessage.success('鐘舵�佹洿鏂版垚鍔�')
-  } catch (error) {
-    ElMessage.error('鐘舵�佹洿鏂板け璐�')
-    // 鎭㈠鍘熸潵鐨勭姸鎬�
-    row.status = row.status === 1 ? 0 : 1
-    console.error('鏇存柊瑙勫垯鐘舵�佸け璐�:', error)
-  }
-}
-
 // 澶勭悊鏃ユ湡鍙樺寲
 const handleDateChange = (dates: [string, string] | null) => {
   if (dates) {
-    queryParams.effectiveStartTime = dates[0]
-    queryParams.effectiveEndTime = dates[1]
+    queryParams.effectiveStartTime = dayjs(dates[0]).format('YYYY-MM-DD HH:mm:ss');
+    queryParams.effectiveEndTime = dayjs(dates[1]).format('YYYY-MM-DD HH:mm:ss');
   } else {
     queryParams.effectiveStartTime = ''
     queryParams.effectiveEndTime = ''
   }
 }
 
-// 鍒涘缓璺敱瀹炰緥
-const router = useRouter()
-
 // 缂栬緫瑙勫垯
 const editRule = (row: PointsRule) => {
-  // 璺宠浆鍒拌鍒欒缃晫闈紝骞朵紶鍏ヨ鍒檌d
-  router.push({
-    path: '/points/settings',
-    query: { ruleId: row.id }
-  })
+  currentRuleId.value = row.id?.toString() || ''
+  currentView.value = 'edit'
+}
+
+// 鏌ョ湅瑙勫垯
+const viewRule = (row: PointsRule) => {
+  currentRuleId.value = row.id?.toString() || ''
+  currentView.value = 'view'
+}
+
+// 杩斿洖鍒楄〃椤甸潰
+const goBackToList = () => {
+  currentView.value = 'list'
+  currentRuleId.value = ''
+}
+
+// 澶勭悊淇濆瓨鎴愬姛
+const handleSaveSuccess = () => {
+  ElMessage.success('淇濆瓨鎴愬姛')
+  goBackToList()
+  // 閲嶆柊鍔犺浇鍒楄〃鏁版嵁
+  queryData()
 }
 </script>
 
@@ -265,5 +263,11 @@
       }
     }
   }
+
+  .edit-container,
+  .view-container {
+    // 纭繚缁勪欢鑳藉姝g‘鏄剧ず
+    width: 100%;
+  }
 }
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.8.0