From df3902e7eae5dd38a2d47aa63e5f27131f701db9 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期一, 20 四月 2026 13:49:14 +0800
Subject: [PATCH] 绩效管理模块调整

---
 src/views/system/user/index.vue |   63 ++++++++++++++++++++++++++++++-
 1 files changed, 60 insertions(+), 3 deletions(-)

diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
index 3306ae7..f7f14d0 100644
--- a/src/views/system/user/index.vue
+++ b/src/views/system/user/index.vue
@@ -47,7 +47,7 @@
             </div>
           </div>
           <el-col>
-            <el-table v-loading="loading" :data="userList" :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border>
+            <el-table row-id="userId" ref="dragTable" v-loading="loading" :data="userList" :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border>
               <el-table-column label="搴忓彿" align="center" type="index" />
               <el-table-column label="濮撳悕" align="center" key="nickName" prop="nickName" :show-overflow-tooltip="true" />
               <el-table-column label="璐﹀彿" align="center" key="userName" prop="userName" :show-overflow-tooltip="true" />
@@ -75,6 +75,7 @@
               </el-table-column>
             </el-table>
             <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
+                        :page-sizes="[20,50,100,200,500]"
               :limit.sync="queryParams.pageSize" @pagination="getList" />
           </el-col>
         </pane>
@@ -299,7 +300,8 @@
   uploadFile,
   selectRoleList,
   selectCustomEnum,
-  addDepartment
+  addDepartment,
+  updateUserSort
 } from "@/api/system/user";
 import {optionSelect} from '@/api/system/post'
 import { getToken } from "@/utils/auth";
@@ -307,6 +309,7 @@
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 import { Splitpanes, Pane } from "splitpanes";
 import "splitpanes/dist/splitpanes.css";
+import Sortable from "sortablejs";
 
 export default {
   nickName: "User",
@@ -378,7 +381,7 @@
       // 鏌ヨ鍙傛暟
       queryParams: {
         pageNum: 1,
-        pageSize: 10,
+        pageSize: 20,
         nickName: undefined,
         phonenumber: undefined,
         status: undefined,
@@ -467,6 +470,7 @@
         fatherId: 10001,
         nickName: '',
       },
+      sortTable: null,
     };
   },
   watch: {
@@ -482,7 +486,52 @@
       this.initPassword = response.msg;
     });
   },
+  mounted(){
+    // 鎸傝浇鍚庡垵濮嬪寲鎷栨嫿
+    this.initDrag()
+  },
   methods: {
+    //琛ㄦ牸琛屾嫋鎷芥帓搴�
+    initDrag() {
+      // 鑾峰彇 el-table 鐨� tbody 鍏冪礌锛堟嫋鎷界殑鐩爣瀹瑰櫒锛�
+      const tbody = this.$refs.dragTable.$el.querySelector(
+        '.el-table__body-wrapper tbody'
+      )
+
+      // 鍒濆鍖� Sortable
+      this.sortable = Sortable.create(tbody, {
+        animation: 150, // 鎷栨嫿鍔ㄧ敾杩囨浮鏃堕暱
+        ghostClass: 'sortable-ghost', // 鎷栨嫿鍗犱綅绗︽牱寮�
+        chosenClass: 'sortable-chosen', // 閫変腑琛屾牱寮�
+        dragClass: 'sortable-drag', // 鎷栨嫿鍏冪礌鏍峰紡
+        // 鎷栨嫿缁撴潫瑙﹀彂锛堟牳蹇冮�昏緫锛�
+        onEnd: ({ oldIndex, newIndex }) => {
+          // oldIndex锛氬師绱㈠紩锛宯ewIndex锛氭柊绱㈠紩
+          const defNum = (this.queryParams.pageNum-1)*this.queryParams.pageSize
+          // const row = this.userList[oldIndex]
+          // let sort = newIndex+defNum;//鎺掑簭涓嬫爣
+          const row = this.userList.splice(oldIndex, 1)[0]
+          this.userList.splice(newIndex, 0, row)
+          const data = this.userList.map(item=>{return {userId:item.userId,userName:item.userName}})
+          console.log(data)
+          console.log(this.userList)
+          // 璋冪敤鎺ュ彛鏇存柊鎺掑簭
+          // let data = {
+          //   userId:row.userId,
+          //   sort: sort
+          // }
+          // updateUserSort(data).then(res=>{
+          //   if(res.code===200){
+          //     this.$message.success("鏇存柊鎴愬姛")
+          //     this.$nextTick(()=>{
+          //       this.getList()
+          //     })
+          //   }
+          // })
+
+        },
+      })
+    },
     /** 鏌ヨ鐢ㄦ埛鍒楄〃 */
     getList() {
       this.loading = true;
@@ -909,6 +958,14 @@
 </script>
 
 <style scoped lang="scss">
+:deep(.sortable-ghost) {
+  opacity: 0.8;
+  background: #f0f9eb;
+}
+:deep(.sortable-chosen) {
+  cursor: move;
+  background: #e1f3d8;
+}
 .search_form {
   display: flex;
   justify-content: space-between;

--
Gitblit v1.9.3