From 807436a80eb7a61d7417f864c8411d0525fc8953 Mon Sep 17 00:00:00 2001
From: 龚焕茏 <2842157468@qq.com>
Date: 星期二, 14 五月 2024 10:10:00 +0800
Subject: [PATCH] feat:部门调动

---
 src/api/departmentExamine.js              |    9 ++
 src/views/user/departmentExamine/list.vue |  165 +++++++++++++++++++++++++++++++++++++++++
 src/views/user/student/list.vue           |   58 ++++++++++++++
 src/router.js                             |    6 +
 4 files changed, 236 insertions(+), 2 deletions(-)

diff --git a/src/api/departmentExamine.js b/src/api/departmentExamine.js
new file mode 100644
index 0000000..f5d8c75
--- /dev/null
+++ b/src/api/departmentExamine.js
@@ -0,0 +1,9 @@
+import { get,post } from '@/utils/request'
+
+export default {
+  list: query => post('/api/admin/department/examine/list', query),
+  save: query => post('/api/admin/department/examine/save', query),
+  audit: query => post('/api/admin/department/examine/audit', query),
+  delete: id => post('/api/admin/department/examine/delete/' + id),
+  getDeptList: id => post('/api/admin/department/list'),
+}
diff --git a/src/router.js b/src/router.js
index 6fb3e17..039b408 100644
--- a/src/router.js
+++ b/src/router.js
@@ -72,6 +72,12 @@
         hidden: true
       },
       {
+        path: 'departmentExamine/list',
+        component: () => import('@/views/user/departmentExamine/list'),
+        name: 'departmentExamineList',
+        meta: { title: '璋冨姩瀹℃牳', noCache: true }
+      },
+      {
         path: 'tag/list',
         component: () => import('@/views/user/tag/list'),
         name: 'TagAdminPageList',
diff --git a/src/views/user/departmentExamine/list.vue b/src/views/user/departmentExamine/list.vue
new file mode 100644
index 0000000..0f2d1e8
--- /dev/null
+++ b/src/views/user/departmentExamine/list.vue
@@ -0,0 +1,165 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParam" ref="queryForm" :inline="true">
+      <el-form-item label="鐢ㄦ埛鍚嶏細">
+        <el-input v-model="queryParam.userName"></el-input>
+      </el-form-item>
+      <el-form-item>
+        <div style="display: flex">
+          <el-button type="primary" @click="search()">鏌ヨ</el-button>
+        </div>
+      </el-form-item>
+    </el-form>
+
+    <el-table v-loading="listLoading" :data="tableData" border fit highlight-current-row style="width: 100%">
+      <el-table-column prop="userName" label="鐢ㄦ埛鍚�" />
+      <el-table-column prop="departmentName" label="閮ㄩ棬鍚嶇О" />
+      <el-table-column prop="nowDepartmentName" label="鍘熼儴闂ㄥ悕绉�" />
+      <el-table-column prop="result" label="瀹℃牳缁撴灉">
+        <template slot-scope="{row}">
+          <el-tag :type="row.result === '瀹℃牳閫氳繃' ? 'success' : row.result === '瀹℃牳澶辫触' ? 'danger' : 'info'">{{row.result}}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column prop="createUserName" label="鍒涘缓浜�" />
+      <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" width="160px" />
+      <el-table-column label="鎿嶄綔" align="center">
+        <template slot-scope="{row}">
+          <el-button v-if="row.result === '寰呭鏍�'" type="primary" size="mini" @click="transposition(row)" class="link-left">瀹℃牳</el-button>
+          <el-popconfirm title="纭鍒犻櫎" @confirm="deleteUser(row)">
+            <el-button slot="reference" size="mini" type="danger" class="link-left">鍒犻櫎</el-button>
+          </el-popconfirm>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination v-show="total > 0" :total="total" :page.sync="queryParam.pageIndex" :limit.sync="queryParam.pageSize"
+      @pagination="search" />
+
+    <!-- 瀹℃牳寮圭獥 -->
+    <el-dialog :visible.sync="statusVisible" append-to-body :show-close="false" center width="400px">
+      <el-radio-group v-model="user.result">
+        <el-radio label="瀹℃牳閫氳繃">閫氳繃</el-radio>
+        <el-radio label="瀹℃牳椹冲洖">椹冲洖</el-radio>
+      </el-radio-group>
+      <el-input type="textarea" maxlength="100" show-word-limit :autosize="{ minRows: 4 }" :rows="2"
+        v-model="user.remark" placeholder="璇疯緭鍏ュ鏍告剰瑙�" style="margin-top: 30px;"></el-input>
+      <span slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="statusConfirm">纭� 瀹�</el-button>
+        <el-button @click="statusVisible = false">鍙� 娑�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import departmentExamineApi from '@/api/departmentExamine'
+import Pagination from '@/components/Pagination'
+import { mapGetters, mapState } from 'vuex'
+
+export default {
+  components: { Pagination },
+  data() {
+    return {
+      user: {},
+      statusVisible: false,
+      fileList: [],
+      queryParam: {
+        userName: '',
+        role: 1,
+        pageIndex: 1,
+        pageSize: 10
+      },
+      listLoading: true,
+      tableData: [],
+      total: 0,
+    }
+  },
+  created() {
+    this.search()
+  },
+  methods: {
+    transposition(user) {
+      this.statusVisible = true;
+      this.user = { ...user };
+    },
+    statusConfirm() {
+      if (this.user.result === null) {
+        this.$message.error("璇烽�夋嫨鐘舵��")
+        return
+      }
+      departmentExamineApi.audit(this.user).then(res => {
+        if (res.code === 1) {
+          this.$message.success("鎿嶄綔鎴愬姛")
+          this.statusVisible = false;
+          this.search()
+        } else {
+          this.$message.error("鎿嶄綔澶辫触")
+        }
+      })
+    },
+    search() {
+      this.listLoading = true
+      departmentExamineApi.list(this.queryParam).then(data => {
+        const re = data.response
+        this.tableData = re.list
+        this.total = re.total
+        this.queryParam.pageIndex = re.pageNum
+        this.listLoading = false
+      })
+    },
+    changeStatus(row) {
+      let _this = this
+      userApi.changeStatus(row.id).then(re => {
+        if (re.code === 1) {
+          row.status = re.response
+          _this.$message.success(re.message)
+        } else {
+          _this.$message.error(re.message)
+        }
+      })
+    },
+    deleteUser(row) {
+      let _this = this
+      departmentExamineApi.delete(row.id).then(re => {
+        if (re.code === 1) {
+          _this.search()
+          _this.$message.success(re.message)
+        } else {
+          _this.$message.error(re.message)
+        }
+      })
+    },
+    levelFormatter(row, column, cellValue, index) {
+      return this.enumFormat(this.levelEnum, cellValue)
+    },
+    sexFormatter(row, column, cellValue, index) {
+      return this.enumFormat(this.sexEnum, cellValue)
+    },
+    statusFormatter(status) {
+      return this.enumFormat(this.statusEnum, status)
+    },
+    statusTagFormatter(status) {
+      return this.enumFormat(this.statusTag, status)
+    },
+    statusBtnFormatter(status) {
+      return this.enumFormat(this.statusBtn, status)
+    }
+  },
+  computed: {
+    ...mapGetters('enumItem', [
+      'enumFormat'
+    ]),
+    ...mapState('enumItem', {
+      sexEnum: state => state.user.sexEnum,
+      statusEnum: state => state.user.statusEnum,
+      statusTag: state => state.user.statusTag,
+      statusBtn: state => state.user.statusBtn,
+      levelEnum: state => state.user.levelEnum
+    })
+  }
+}
+</script>
+<style lang="scss" scoped>
+.upload-demo {
+  margin-left: 5px;
+}
+</style>
diff --git a/src/views/user/student/list.vue b/src/views/user/student/list.vue
index 94b1815..ba02de0 100644
--- a/src/views/user/student/list.vue
+++ b/src/views/user/student/list.vue
@@ -63,7 +63,7 @@
             <el-button size="mini" >鏃ュ織</el-button>
           </router-link>
           <el-button  size="mini" @click="status(row)" class="link-left">鐘舵��</el-button>
-          <el-button type="primary" size="mini" @click="move(row)" class="link-left">璋冨姩</el-button>
+          <el-button type="primary" size="mini" @click="transposition(row)" class="link-left">璋冨姩</el-button>
           <el-button  size="mini" type="danger" @click="deleteUser(row)" class="link-left">鍒犻櫎</el-button>
         </template>
       </el-table-column>
@@ -85,6 +85,25 @@
         <el-button @click="statusVisible = false">鍙� 娑�</el-button>
       </span>
     </el-dialog>
+
+    <!-- 璋冨姩寮圭獥 -->
+    <el-dialog
+      :title="title"
+      :visible.sync="dialogVisible"
+      width="400px">
+      <el-select v-model="examine.departmentId" multiple filterable placeholder="璇烽�夋嫨閮ㄩ棬">
+        <el-option
+          v-for="item in deptList"
+          :key="item.id"
+          :label="item.name"
+          :value="item.id">
+        </el-option>
+      </el-select>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="submitExamine">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 
@@ -92,6 +111,7 @@
 import { mapGetters, mapState } from 'vuex'
 import Pagination from '@/components/Pagination'
 import userApi from '@/api/user'
+import departmentExamineApi from '@/api/departmentExamine'
 
 export default {
   components: { Pagination },
@@ -109,13 +129,47 @@
       },
       listLoading: true,
       tableData: [],
-      total: 0
+      total: 0,
+      examine: {
+        userId: '',
+        departmentId: [],
+        departmentIds: '',
+        nowDepartmentIds: '',
+      },
+      title: '閮ㄩ棬璋冨姩',
+      dialogVisible: false,
+      deptList: []
     }
   },
   created () {
     this.search()
   },
   methods: {
+    submitExamine() {
+      this.examine.departmentIds = this.examine.departmentId.join(',')
+      departmentExamineApi.save(this.examine).then(res => {
+        if (res.code === 1) {
+          this.$message.success("鎻愪氦鎴愬姛锛屽鏍稿悗鐢熸晥")
+          this.dialogVisible = false
+          this.search()
+        } else {
+          this.$message.error("鎿嶄綔澶辫触")
+        }
+      })
+    },
+    transposition(item) {
+      this.examine.userId = item.id
+      this.examine.departmentId = item.deptIdList
+      this.examine.nowDepartmentIds = item.deptIdList.join(',')
+      departmentExamineApi.getDeptList().then(res => {
+        if (res.code === 1) {
+          this.deptList = res.response
+          this.dialogVisible = true
+        } else {
+          this.$message.error(res.message)
+        }
+      })
+    },
     status(user) {
       this.statusVisible = true;
       this.user = { ...user };

--
Gitblit v1.8.0