From 87e331767b3ce416c957b7336e94b9ba208f0efb Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期四, 16 四月 2026 18:08:31 +0800
Subject: [PATCH] 维护

---
 src/views/OfficeRelated/engage/index.vue |  440 ++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 288 insertions(+), 152 deletions(-)

diff --git a/src/views/OfficeRelated/engage/index.vue b/src/views/OfficeRelated/engage/index.vue
index 21c2dd2..566998f 100644
--- a/src/views/OfficeRelated/engage/index.vue
+++ b/src/views/OfficeRelated/engage/index.vue
@@ -2,7 +2,6 @@
   <div class="training-management">
     <!-- 椤甸潰澶撮儴 -->
     <div class="page-header">
-      <h2>杩涗慨绠$悊</h2>
       <div class="header-actions">
         <el-button type="primary" icon="el-icon-plus" @click="handleAdd">
           鏂板杩涗慨璁板綍
@@ -69,15 +68,15 @@
         <el-table-column prop="id" label="ID" width="80" fixed />
         <el-table-column prop="name" label="濮撳悕" width="100" fixed>
           <template #default="scope">
-            <el-button type="text" @click="handleView(scope.row)">
+            <el-button type="text" @click="handleView(scope.row.id)">
               {{ scope.row.name }}
             </el-button>
           </template>
         </el-table-column>
-        <el-table-column prop="gender" label="鎬у埆" width="80">
+        <el-table-column prop="sex" label="鎬у埆" width="80">
           <template #default="scope">
-            <el-tag :type="scope.row.gender === '鐢�' ? 'primary' : 'danger'" size="small">
-              {{ scope.row.gender }}
+            <el-tag :type="scope.row.sex === '鐢�' ? 'primary' : 'danger'" size="small">
+              {{ scope.row.sex }}
             </el-tag>
           </template>
         </el-table-column>
@@ -90,37 +89,54 @@
             </el-tag>
           </template>
         </el-table-column>
-        <el-table-column prop="idCard" label="韬唤璇佸彿" width="180" show-overflow-tooltip />
-        <el-table-column prop="graduateSchool" label="姣曚笟闄㈡牎" width="150" show-overflow-tooltip />
-        <el-table-column prop="workUnit" label="鎵�鍦ㄥ崟浣�" width="150" show-overflow-tooltip />
-        <el-table-column prop="technicalTitle" label="鎶�鏈亴绉�" width="120" />
-        <el-table-column prop="professionalField" label="浠庝簨涓撲笟" width="120" />
-        <el-table-column prop="workYears" label="宸ヤ綔骞撮檺" width="100" sortable />
-        <el-table-column prop="trainingStartDate" label="杩涗慨寮�濮嬫椂闂�" width="120" />
-        <el-table-column prop="trainingEndDate" label="杩涗慨缁撴潫鏃堕棿" width="120" />
-        <el-table-column prop="trainingMajor" label="杩涗慨涓撲笟" width="120" />
-        <el-table-column prop="status" label="鐘舵��" width="100" fixed="right">
+        <el-table-column prop="trainingStartDate" label="杩涗慨寮�濮嬫椂闂�" width="120">
           <template #default="scope">
-            <el-tag :type="getStatusTag(scope.row.status)">
-              {{ scope.row.status }}
+            {{ formatDate(scope.row.trainingStartDate) }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="trainingEndDate" label="杩涗慨缁撴潫鏃堕棿" width="120">
+          <template #default="scope">
+            {{ formatDate(scope.row.trainingEndDate) }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="trainingMajor" label="杩涗慨涓撲笟" width="120" />
+        <el-table-column prop="idCard" label="韬唤璇佸彿" width="180" show-overflow-tooltip />
+        <el-table-column prop="technicalTitle" label="鎶�鏈亴绉�" width="120" />
+        <el-table-column prop="profession" label="浠庝簨涓撲笟" width="120" />
+        <el-table-column prop="workYears" label="宸ヤ綔骞撮檺" width="100" sortable />
+        <el-table-column prop="graduationSchool" label="姣曚笟闄㈡牎" width="150" show-overflow-tooltip />
+        <el-table-column prop="workUnit" label="鎵�鍦ㄥ崟浣�" width="150" show-overflow-tooltip />
+
+        <el-table-column prop="recordStatus" label="鐘舵��" width="100" fixed="right">
+          <template #default="scope">
+            <el-tag :type="getStatusTag(scope.row.recordStatus)">
+              {{ scope.row.recordStatus || '杩涜涓�' }}
             </el-tag>
           </template>
         </el-table-column>
         <el-table-column label="鎿嶄綔" width="180" fixed="right">
           <template #default="scope">
-            <el-button size="mini" type="text" @click="handleView(scope.row)">
+            <el-button size="mini" type="text" @click="handleView(scope.row.id)">
               鏌ョ湅
             </el-button>
-            <el-button size="mini" type="text" @click="handleEdit(scope.row)">
+            <el-button size="mini" type="text" @click="handleEdit(scope.row.id)">
               缂栬緫
             </el-button>
             <el-button
               size="mini"
               type="text"
-              @click="handleCopy(scope.row)"
+              @click="handleCopy(scope.row.id)"
               style="color: #67C23A;"
             >
               澶嶅埗
+            </el-button>
+            <el-button
+              size="mini"
+              type="text"
+              @click="handleDelete(scope.row)"
+              style="color: #F56C6C;"
+            >
+              鍒犻櫎
             </el-button>
           </template>
         </el-table-column>
@@ -129,10 +145,11 @@
       <!-- 鍒嗛〉 -->
       <div class="pagination-container">
         <el-pagination
-          :current-page="pagination.currentPage"
+          :current-page="pagination.pageNum"
           :page-size="pagination.pageSize"
           :total="pagination.total"
           layout="total, sizes, prev, pager, next, jumper"
+          :page-sizes="[10, 20, 50, 100]"
           @size-change="handleSizeChange"
           @current-change="handleCurrentChange"
         />
@@ -146,9 +163,9 @@
       width="900px"
       :before-close="handleDetailClose"
     >
-      <el-descriptions :column="2" border v-if="currentRecord">
+      <el-descriptions :column="2" border v-if="currentRecord.id">
         <el-descriptions-item label="濮撳悕">{{ currentRecord.name }}</el-descriptions-item>
-        <el-descriptions-item label="鎬у埆">{{ currentRecord.gender }}</el-descriptions-item>
+        <el-descriptions-item label="鎬у埆">{{ currentRecord.sex }}</el-descriptions-item>
         <el-descriptions-item label="骞撮緞">{{ currentRecord.age }}</el-descriptions-item>
         <el-descriptions-item label="瀛﹀巻">{{ currentRecord.education }}</el-descriptions-item>
         <el-descriptions-item label="杩涗慨绫诲瀷">
@@ -157,31 +174,37 @@
           </el-tag>
         </el-descriptions-item>
         <el-descriptions-item label="韬唤璇佸彿">{{ currentRecord.idCard }}</el-descriptions-item>
-        <el-descriptions-item label="姣曚笟闄㈡牎">{{ currentRecord.graduateSchool }}</el-descriptions-item>
+        <el-descriptions-item label="姣曚笟闄㈡牎">{{ currentRecord.graduationSchool }}</el-descriptions-item>
         <el-descriptions-item label="鎵�鍦ㄥ崟浣�">{{ currentRecord.workUnit }}</el-descriptions-item>
         <el-descriptions-item label="鎶�鏈亴绉�">{{ currentRecord.technicalTitle }}</el-descriptions-item>
-        <el-descriptions-item label="浠庝簨涓撲笟">{{ currentRecord.professionalField }}</el-descriptions-item>
+        <el-descriptions-item label="浠庝簨涓撲笟">{{ currentRecord.profession }}</el-descriptions-item>
         <el-descriptions-item label="宸ヤ綔骞撮檺">{{ currentRecord.workYears }}骞�</el-descriptions-item>
-        <el-descriptions-item label="杩涗慨鐩爣">{{ currentRecord.trainingObjective }}</el-descriptions-item>
-        <el-descriptions-item label="杩涗慨寮�濮嬫椂闂�">{{ currentRecord.trainingStartDate }}</el-descriptions-item>
-        <el-descriptions-item label="杩涗慨缁撴潫鏃堕棿">{{ currentRecord.trainingEndDate }}</el-descriptions-item>
+        <el-descriptions-item label="杩涗慨鐩爣">{{ currentRecord.trainingGoal }}</el-descriptions-item>
+        <el-descriptions-item label="杩涗慨寮�濮嬫椂闂�">{{ formatDate(currentRecord.trainingStartDate) }}</el-descriptions-item>
+        <el-descriptions-item label="杩涗慨缁撴潫鏃堕棿">{{ formatDate(currentRecord.trainingEndDate) }}</el-descriptions-item>
         <el-descriptions-item label="杩涗慨涓撲笟">{{ currentRecord.trainingMajor }}</el-descriptions-item>
         <el-descriptions-item label="浠庝簨宸ヤ綔鎯呭喌" :span="2">
           {{ currentRecord.workSituation }}
         </el-descriptions-item>
-        <el-descriptions-item label="杩涗慨绉戠洰鍙婄洰鐨�" :span="2">
-          {{ currentRecord.trainingSubject }}
+        <el-descriptions-item label="杩涗慨绉戠洰" :span="2">
+          {{ currentRecord.applySubject }}
+        </el-descriptions-item>
+        <el-descriptions-item label="杩涗慨鐩殑" :span="2">
+          {{ currentRecord.applyPurpose }}
         </el-descriptions-item>
         <el-descriptions-item label="涓昏瀛﹀巻" :span="2">
           <div style="white-space: pre-line;">{{ currentRecord.mainEducation }}</div>
         </el-descriptions-item>
         <el-descriptions-item label="涓昏宸ヤ綔缁忓巻" :span="2">
-          <div style="white-space: pre-line;">{{ currentRecord.workExperience }}</div>
+          <div style="white-space: pre-line;">{{ currentRecord.mainExperience }}</div>
         </el-descriptions-item>
+        <el-descriptions-item label="鍒涘缓鏃堕棿">{{ formatDateTime(currentRecord.createTime) }}</el-descriptions-item>
+        <el-descriptions-item label="鏇存柊鏃堕棿">{{ formatDateTime(currentRecord.updateTime) }}</el-descriptions-item>
+        <!-- <el-descriptions-item label="澶囨敞" :span="2">{{ currentRecord.remark }}</el-descriptions-item> -->
       </el-descriptions>
       <span slot="footer">
         <el-button @click="detailDialogVisible = false">鍏抽棴</el-button>
-        <el-button type="primary" @click="handleEdit(currentRecord)">缂栬緫</el-button>
+        <el-button type="primary" @click="handleEdit(currentRecord.id)">缂栬緫</el-button>
       </span>
     </el-dialog>
 
@@ -206,8 +229,8 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="鎬у埆" prop="gender">
-              <el-radio-group v-model="editForm.gender">
+            <el-form-item label="鎬у埆" prop="sex">
+              <el-radio-group v-model="editForm.sex">
                 <el-radio label="鐢�">鐢�</el-radio>
                 <el-radio label="濂�">濂�</el-radio>
               </el-radio-group>
@@ -254,8 +277,8 @@
           <el-input v-model="editForm.idCard" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�" />
         </el-form-item>
 
-        <el-form-item label="姣曚笟闄㈡牎" prop="graduateSchool">
-          <el-input v-model="editForm.graduateSchool" placeholder="璇疯緭鍏ユ瘯涓氶櫌鏍�" />
+        <el-form-item label="姣曚笟闄㈡牎" prop="graduationSchool">
+          <el-input v-model="editForm.graduationSchool" placeholder="璇疯緭鍏ユ瘯涓氶櫌鏍�" />
         </el-form-item>
 
         <el-form-item label="鎵�鍦ㄥ崟浣�" prop="workUnit">
@@ -269,8 +292,8 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="浠庝簨涓撲笟" prop="professionalField">
-              <el-input v-model="editForm.professionalField" placeholder="璇疯緭鍏ヤ粠浜嬩笓涓�" />
+            <el-form-item label="浠庝簨涓撲笟" prop="profession">
+              <el-input v-model="editForm.profession" placeholder="璇疯緭鍏ヤ粠浜嬩笓涓�" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -280,14 +303,16 @@
             v-model="editForm.workYears"
             :min="0"
             :max="50"
+            :precision="1"
+            :step="0.5"
             controls-position="right"
             style="width: 100%"
           />
         </el-form-item>
 
-        <el-form-item label="杩涗慨鐩爣" prop="trainingObjective">
+        <el-form-item label="杩涗慨鐩爣" prop="trainingGoal">
           <el-input
-            v-model="editForm.trainingObjective"
+            v-model="editForm.trainingGoal"
             type="textarea"
             :rows="2"
             placeholder="璇疯緭鍏ヨ繘淇洰鏍�"
@@ -301,7 +326,7 @@
                 v-model="editForm.trainingStartDate"
                 type="date"
                 placeholder="閫夋嫨寮�濮嬫棩鏈�"
-                value-format="yyyy-MM-dd"
+                value-format="yyyy-MM-dd HH:mm:ss"
                 style="width: 100%"
               />
             </el-form-item>
@@ -312,7 +337,7 @@
                 v-model="editForm.trainingEndDate"
                 type="date"
                 placeholder="閫夋嫨缁撴潫鏃ユ湡"
-                value-format="yyyy-MM-dd"
+                value-format="yyyy-MM-dd HH:mm:ss"
                 style="width: 100%"
               />
             </el-form-item>
@@ -323,21 +348,30 @@
           <el-input v-model="editForm.trainingMajor" placeholder="璇疯緭鍏ヨ繘淇笓涓�" />
         </el-form-item>
 
+        <el-form-item label="杩涗慨绉戠洰" prop="applySubject">
+          <el-input
+            v-model="editForm.applySubject"
+            type="textarea"
+            :rows="2"
+            placeholder="璇疯緭鍏ユ湰娆$敵璇疯繘淇鐩�"
+          />
+        </el-form-item>
+
+        <el-form-item label="杩涗慨鐩殑" prop="applyPurpose">
+          <el-input
+            v-model="editForm.applyPurpose"
+            type="textarea"
+            :rows="2"
+            placeholder="璇疯緭鍏ヨ繘淇洰鐨勮姹�"
+          />
+        </el-form-item>
+
         <el-form-item label="浠庝簨宸ヤ綔鎯呭喌" prop="workSituation">
           <el-input
             v-model="editForm.workSituation"
             type="textarea"
             :rows="3"
             placeholder="璇疯緭鍏ヤ粠浜嬪伐浣滄儏鍐�"
-          />
-        </el-form-item>
-
-        <el-form-item label="杩涗慨绉戠洰鍙婄洰鐨�" prop="trainingSubject">
-          <el-input
-            v-model="editForm.trainingSubject"
-            type="textarea"
-            :rows="3"
-            placeholder="璇疯緭鍏ユ湰娆$敵璇疯繘淇綍绉嶇鐩強鐩殑瑕佹眰"
           />
         </el-form-item>
 
@@ -350,14 +384,23 @@
           />
         </el-form-item>
 
-        <el-form-item label="涓昏宸ヤ綔缁忓巻" prop="workExperience">
+        <el-form-item label="涓昏宸ヤ綔缁忓巻" prop="mainExperience">
           <el-input
-            v-model="editForm.workExperience"
+            v-model="editForm.mainExperience"
             type="textarea"
             :rows="3"
             placeholder="璇疯緭鍏ヤ富瑕佸伐浣滅粡鍘嗭紙姣忚涓�鏉★級"
           />
         </el-form-item>
+
+        <!-- <el-form-item label="澶囨敞" prop="remark">
+          <el-input
+            v-model="editForm.remark"
+            type="textarea"
+            :rows="2"
+            placeholder="璇疯緭鍏ュ娉ㄤ俊鎭�"
+          />
+        </el-form-item> -->
       </el-form>
 
       <span slot="footer">
@@ -371,6 +414,8 @@
 </template>
 
 <script>
+import { recordslist, recordsedit, recordsadd, recordsInfo, recordsDel,exporrecords } from "@/api/officeManagementApi";
+
 export default {
   name: 'TrainingManagement',
   data() {
@@ -384,7 +429,7 @@
       },
       // 鍒嗛〉鍙傛暟
       pagination: {
-        currentPage: 1,
+        pageNum: 1,
         pageSize: 10,
         total: 0
       },
@@ -401,35 +446,20 @@
       // 琛ㄦ牸鏁版嵁
       tableData: [],
       // 缂栬緫琛ㄥ崟鏁版嵁
-      editForm: {
-        name: '',
-        gender: '鐢�',
-        age: 25,
-        education: '',
-        trainingType: '',
-        idCard: '',
-        graduateSchool: '',
-        workUnit: '',
-        technicalTitle: '',
-        professionalField: '',
-        workYears: 0,
-        trainingObjective: '',
-        trainingStartDate: '',
-        trainingEndDate: '',
-        trainingMajor: '',
-        workSituation: '',
-        trainingSubject: '',
-        mainEducation: '',
-        workExperience: ''
-      },
+      editForm: this.getDefaultFormData(),
       // 琛ㄥ崟楠岃瘉瑙勫垯
       editRules: {
         name: [{ required: true, message: '璇疯緭鍏ュ鍚�', trigger: 'blur' }],
-        gender: [{ required: true, message: '璇烽�夋嫨鎬у埆', trigger: 'change' }],
+        sex: [{ required: true, message: '璇烽�夋嫨鎬у埆', trigger: 'change' }],
         age: [{ required: true, message: '璇疯緭鍏ュ勾榫�', trigger: 'blur' }],
         education: [{ required: true, message: '璇烽�夋嫨瀛﹀巻', trigger: 'change' }],
         trainingType: [{ required: true, message: '璇烽�夋嫨杩涗慨绫诲瀷', trigger: 'change' }],
-        idCard: [{ required: true, message: '璇疯緭鍏ヨ韩浠借瘉鍙�', trigger: 'blur' }]
+        idCard: [
+          { required: true, message: '璇疯緭鍏ヨ韩浠借瘉鍙�', trigger: 'blur' },
+          { pattern: /^\d{17}[\dXx]$/, message: '璇疯緭鍏ユ纭殑韬唤璇佸彿', trigger: 'blur' }
+        ],
+        trainingStartDate: [{ required: true, message: '璇烽�夋嫨杩涗慨寮�濮嬫椂闂�', trigger: 'change' }],
+        trainingEndDate: [{ required: true, message: '璇烽�夋嫨杩涗慨缁撴潫鏃堕棿', trigger: 'change' }]
       }
     }
   },
@@ -441,12 +471,26 @@
     async loadData() {
       this.loading = true
       try {
-        // 妯℃嫙API璋冪敤
-        await new Promise(resolve => setTimeout(resolve, 500))
+        const params = {
+          pageNum: this.pagination.pageNum,
+          pageSize: this.pagination.pageSize,
+          ...this.queryParams
+        }
 
-        // 鐢熸垚妯℃嫙鏁版嵁
-        this.tableData = this.generateMockData()
-        this.pagination.total = this.tableData.length
+        // 澶勭悊鏃堕棿鑼冨洿鏌ヨ
+        if (this.queryParams.dateRange && this.queryParams.dateRange.length === 2) {
+          params.startDate = this.queryParams.dateRange[0]
+          params.endDate = this.queryParams.dateRange[1]
+        }
+
+        const response = await recordslist(params)
+
+        if (response.code === 200) {
+          this.tableData = response.rows || []
+          this.pagination.total = response.total || 0
+        } else {
+          this.$message.error(response.msg || '鑾峰彇鏁版嵁澶辫触')
+        }
       } catch (error) {
         console.error('鍔犺浇鏁版嵁澶辫触:', error)
         this.$message.error('鏁版嵁鍔犺浇澶辫触')
@@ -454,36 +498,7 @@
         this.loading = false
       }
     },
-    // 鐢熸垚妯℃嫙鏁版嵁
-    generateMockData() {
-      const names = ['寮犱笁', '鏉庡洓', '鐜嬩簲', '璧靛叚', '閽变竷', '瀛欏叓', '鍛ㄤ節', '鍚村崄']
-      const trainingTypes = ['professional', 'management', 'education', 'skill']
-      const statuses = ['杩涜涓�', '宸插畬鎴�', '寰呭鏍�', '宸插彇娑�']
 
-      return Array.from({ length: 10 }, (_, index) => ({
-        id: index + 1,
-        name: names[Math.floor(Math.random() * names.length)],
-        gender: Math.random() > 0.5 ? '鐢�' : '濂�',
-        age: 25 + Math.floor(Math.random() * 20),
-        education: ['鍗氬+', '纭曞+', '鏈', '澶т笓'][Math.floor(Math.random() * 4)],
-        trainingType: trainingTypes[Math.floor(Math.random() * trainingTypes.length)],
-        idCard: '11010119900101' + (1000 + index).toString().slice(-4),
-        graduateSchool: ['鍖椾含澶у', '娓呭崕澶у', '澶嶆棪澶у', '涓婃捣浜ら�氬ぇ瀛�'][Math.floor(Math.random() * 4)],
-        workUnit: ['鍖椾含鍗忓拰鍖婚櫌', '涓婃捣鐟為噾鍖婚櫌', '骞垮窞涓北鍖婚櫌', '姝︽眽鍚屾祹鍖婚櫌'][Math.floor(Math.random() * 4)],
-        technicalTitle: ['涓讳换鍖诲笀', '鍓富浠诲尰甯�', '涓绘不鍖诲笀', '浣忛櫌鍖诲笀'][Math.floor(Math.random() * 4)],
-        professionalField: ['蹇冭绠″唴绉�', '绁炵粡澶栫', '鍎跨', '濡囦骇绉�'][Math.floor(Math.random() * 4)],
-        workYears: 5 + Math.floor(Math.random() * 20),
-        trainingObjective: '鎻愬崌涓撲笟鎶�鏈拰涓村簥鑳藉姏',
-        trainingStartDate: '2024-' + (Math.floor(Math.random() * 12) + 1).toString().padStart(2, '0') + '-01',
-        trainingEndDate: '2024-' + (Math.floor(Math.random() * 12) + 1).toString().padStart(2, '0') + '-28',
-        trainingMajor: '涓村簥鍖诲',
-        workSituation: '鍦ㄤ复搴婁竴绾垮伐浣滐紝璐熻矗鎮h�呰瘖鐤�',
-        trainingSubject: '楂樼骇蹇冭绠′粙鍏ユ不鐤楁妧鏈�',
-        mainEducation: '2005-2009 鍖椾含澶у鍖诲閮� 涓村簥鍖诲鏈\n2009-2012 鍖椾含澶у鍖诲閮� 纭曞+',
-        workExperience: '2012-2015 鍖椾含鍗忓拰鍖婚櫌 浣忛櫌鍖诲笀\n2015-2020 鍖椾含鍗忓拰鍖婚櫌 涓绘不鍖诲笀',
-        status: statuses[Math.floor(Math.random() * statuses.length)]
-      }))
-    },
     // 鑾峰彇杩涗慨绫诲瀷鏍囩鏍峰紡
     getTrainingTypeTag(type) {
       const typeMap = {
@@ -494,6 +509,7 @@
       }
       return typeMap[type] || 'info'
     },
+
     // 鑾峰彇杩涗慨绫诲瀷鏂囨湰
     getTrainingTypeText(type) {
       const textMap = {
@@ -504,21 +520,38 @@
       }
       return textMap[type] || type
     },
+
     // 鑾峰彇鐘舵�佹爣绛炬牱寮�
     getStatusTag(status) {
       const statusMap = {
         '杩涜涓�': 'primary',
         '宸插畬鎴�': 'success',
         '寰呭鏍�': 'warning',
-        '宸插彇娑�': 'danger'
+        '宸插彇娑�': 'danger',
+        '姝e父': 'success',
+        '鍒犻櫎': 'danger'
       }
       return statusMap[status] || 'info'
     },
+
+    // 鏍煎紡鍖栨棩鏈�
+    formatDate(date) {
+      if (!date) return ''
+      return date.split(' ')[0]
+    },
+
+    // 鏍煎紡鍖栨棩鏈熸椂闂�
+    formatDateTime(dateTime) {
+      if (!dateTime) return ''
+      return dateTime.replace('T', ' ')
+    },
+
     // 鏌ヨ澶勭悊
     handleQuery() {
-      this.pagination.currentPage = 1
+      this.pagination.pageNum = 1
       this.loadData()
     },
+
     // 閲嶇疆鏌ヨ
     handleReset() {
       this.queryParams = {
@@ -527,14 +560,26 @@
         technicalTitle: '',
         dateRange: []
       }
-      this.pagination.currentPage = 1
+      this.pagination.pageNum = 1
       this.loadData()
     },
+
     // 鏌ョ湅璇︽儏
-    handleView(record) {
-      this.currentRecord = { ...record }
-      this.detailDialogVisible = true
+    async handleView(id) {
+      try {
+        const response = await recordsInfo(id)
+        if (response.code === 200) {
+          this.currentRecord = response.data || {}
+          this.detailDialogVisible = true
+        } else {
+          this.$message.error(response.msg || '鑾峰彇璇︽儏澶辫触')
+        }
+      } catch (error) {
+        console.error('鑾峰彇璇︽儏澶辫触:', error)
+        this.$message.error('鑾峰彇璇︽儏澶辫触')
+      }
     },
+
     // 鏂板璁板綍
     handleAdd() {
       this.isEditing = false
@@ -544,29 +589,54 @@
         this.$refs.editForm && this.$refs.editForm.clearValidate()
       })
     },
+
     // 缂栬緫璁板綍
-    handleEdit(record) {
-      this.isEditing = true
-      this.currentRecord = record
-      this.editForm = { ...record }
-      this.editDialogVisible = true
-      this.detailDialogVisible = false
-      this.$nextTick(() => {
-        this.$refs.editForm && this.$refs.editForm.clearValidate()
-      })
+    async handleEdit(id) {
+      try {
+        const response = await recordsInfo(id)
+        if (response.code === 200) {
+          this.isEditing = true
+          this.currentRecord = response.data || {}
+          this.editForm = { ...response.data }
+          this.editDialogVisible = true
+          this.detailDialogVisible = false
+          this.$nextTick(() => {
+            this.$refs.editForm && this.$refs.editForm.clearValidate()
+          })
+        } else {
+          this.$message.error(response.msg || '鑾峰彇璁板綍澶辫触')
+        }
+      } catch (error) {
+        console.error('鑾峰彇璁板綍澶辫触:', error)
+        this.$message.error('鑾峰彇璁板綍澶辫触')
+      }
     },
+
     // 澶嶅埗璁板綍
-    handleCopy(record) {
-      this.isEditing = false
-      const copiedRecord = { ...record }
-      delete copiedRecord.id
-      copiedRecord.name = copiedRecord.name + '锛堝鍒讹級'
-      this.editForm = copiedRecord
-      this.editDialogVisible = true
-      this.$nextTick(() => {
-        this.$refs.editForm && this.$refs.editForm.clearValidate()
-      })
+    async handleCopy(id) {
+      try {
+        const response = await recordsInfo(id)
+        if (response.code === 200) {
+          this.isEditing = false
+          const copiedRecord = { ...response.data }
+          delete copiedRecord.id
+          copiedRecord.name = copiedRecord.name + '锛堝鍒讹級'
+          copiedRecord.isCopy = 1
+          copiedRecord.originalId = id
+          this.editForm = copiedRecord
+          this.editDialogVisible = true
+          this.$nextTick(() => {
+            this.$refs.editForm && this.$refs.editForm.clearValidate()
+          })
+        } else {
+          this.$message.error(response.msg || '鑾峰彇璁板綍澶辫触')
+        }
+      } catch (error) {
+        console.error('鑾峰彇璁板綍澶辫触:', error)
+        this.$message.error('鑾峰彇璁板綍澶辫触')
+      }
     },
+
     // 淇濆瓨璁板綍
     async handleSave() {
       try {
@@ -574,74 +644,140 @@
         if (!valid) return
 
         this.saveLoading = true
-        // 妯℃嫙API璋冪敤
-        await new Promise(resolve => setTimeout(resolve, 1000))
 
-        this.$message.success(this.isEditing ? '淇濆瓨鎴愬姛' : '鏂板鎴愬姛')
-        this.editDialogVisible = false
-        this.loadData()
+        // 楠岃瘉缁撴潫鏃堕棿涓嶈兘鏃╀簬寮�濮嬫椂闂�
+        if (this.editForm.trainingStartDate && this.editForm.trainingEndDate) {
+          if (this.editForm.trainingEndDate < this.editForm.trainingStartDate) {
+            this.$message.error('缁撴潫鏃堕棿涓嶈兘鏃╀簬寮�濮嬫椂闂�')
+            this.saveLoading = false
+            return
+          }
+        }
+
+        let response
+        if (this.isEditing) {
+          // 缂栬緫
+          response = await recordsedit(this.editForm)
+        } else {
+          // 鏂板
+          response = await recordsadd(this.editForm)
+        }
+
+        if (response.code === 200) {
+          this.$message.success(this.isEditing ? '淇濆瓨鎴愬姛' : '鏂板鎴愬姛')
+          this.editDialogVisible = false
+          this.loadData()
+        } else {
+          this.$message.error(response.msg || (this.isEditing ? '淇濆瓨澶辫触' : '鏂板澶辫触'))
+        }
       } catch (error) {
         console.error('淇濆瓨澶辫触:', error)
-        this.$message.error('鎿嶄綔澶辫触')
+        this.$message.error(this.isEditing ? '淇濆瓨澶辫触' : '鏂板澶辫触')
       } finally {
         this.saveLoading = false
       }
     },
+
+    // 鍒犻櫎璁板綍
+    async handleDelete(row) {
+      try {
+        await this.$confirm('纭畾瑕佸垹闄よ繖鏉¤褰曞悧锛�', '鎻愮ず', {
+          type: 'warning',
+          confirmButtonText: '纭畾',
+          cancelButtonText: '鍙栨秷'
+        })
+
+        const response = await recordsDel(row.id)
+        if (response.code === 200) {
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.loadData()
+        } else {
+          this.$message.error(response.msg || '鍒犻櫎澶辫触')
+        }
+      } catch (error) {
+        if (error !== 'cancel') {
+          console.error('鍒犻櫎澶辫触:', error)
+          this.$message.error('鍒犻櫎澶辫触')
+        }
+      }
+    },
+
     // 鍏抽棴璇︽儏瀵硅瘽妗�
     handleDetailClose() {
       this.detailDialogVisible = false
       this.currentRecord = {}
     },
+
     // 鍏抽棴缂栬緫瀵硅瘽妗�
     handleEditClose() {
       this.editDialogVisible = false
       this.currentRecord = {}
+      this.editForm = this.getDefaultFormData()
       this.$nextTick(() => {
         this.$refs.editForm && this.$refs.editForm.clearValidate()
       })
     },
+
     // 瀵煎嚭鏁版嵁
     exportData() {
-      this.$message.success('瀵煎嚭鍔熻兘寮�鍙戜腑')
+       const queryParams = this.queryParams;
+      this.$modal
+        .confirm("鏄惁纭瀵煎嚭鎵�鏈夎繘淇鐞嗘暟鎹」锛�")
+        .then(() => {
+          return exporrecords(queryParams);
+        })
+        .then((response) => {
+          this.$download.name(response.msg);
+        })
+        .catch(() => { });
     },
+
     // 鍒嗛〉澶у皬鍙樺寲
     handleSizeChange(size) {
       this.pagination.pageSize = size
-      this.pagination.currentPage = 1
+      this.pagination.pageNum = 1
       this.loadData()
     },
+
     // 褰撳墠椤靛彉鍖�
     handleCurrentChange(page) {
-      this.pagination.currentPage = page
+      this.pagination.pageNum = page
       this.loadData()
     },
+
     // 鎺掑簭鍙樺寲
     handleSortChange(sort) {
       console.log('鎺掑簭鍙樺寲:', sort)
-      // 杩欓噷鍙互娣诲姞鎺掑簭閫昏緫
+      // 杩欓噷鍙互娣诲姞鎺掑簭閫昏緫锛屽鏋滈渶瑕佺殑璇�
     },
+
     // 鑾峰彇榛樿琛ㄥ崟鏁版嵁
     getDefaultFormData() {
       return {
+        id: null,
         name: '',
-        gender: '鐢�',
+        sex: '鐢�',
         age: 25,
         education: '',
         trainingType: '',
         idCard: '',
-        graduateSchool: '',
+        graduationSchool: '',
         workUnit: '',
         technicalTitle: '',
-        professionalField: '',
+        profession: '',
         workYears: 0,
-        trainingObjective: '',
+        trainingGoal: '',
         trainingStartDate: '',
         trainingEndDate: '',
         trainingMajor: '',
         workSituation: '',
-        trainingSubject: '',
+        applySubject: '',
+        applyPurpose: '',
         mainEducation: '',
-        workExperience: ''
+        mainExperience: '',
+        remark: '',
+        isCopy: 0,
+        originalId: null
       }
     }
   }

--
Gitblit v1.9.3