From 62c740e91951c0c4782165ce667eb8017fe76f38 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期三, 16 十月 2024 13:51:07 +0800
Subject: [PATCH] 部门管理员没有标签菜单

---
 src/views/user/student/list.vue |  196 ++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 176 insertions(+), 20 deletions(-)

diff --git a/src/views/user/student/list.vue b/src/views/user/student/list.vue
index 736da4c..346d738 100644
--- a/src/views/user/student/list.vue
+++ b/src/views/user/student/list.vue
@@ -4,6 +4,14 @@
       <el-form-item label="鐪熷疄濮撳悕锛�">
         <el-input v-model="queryParam.userName" size="small" clearable></el-input>
       </el-form-item>
+      <el-form-item label="閮ㄩ棬锛�">
+        <el-cascader
+          clearable
+          v-model="queryParam.departmentId"
+          :options="depts"
+          :props="{ emitPath: false, value: 'id', label: 'name',  checkStrictly: true, multiple: true }"
+          ></el-cascader>
+      </el-form-item>
       <el-form-item >
        <div style="display: flex">
          <el-button type="primary" @click="submitForm" size="small">鏌ヨ</el-button>
@@ -29,9 +37,9 @@
       <el-table-column prop="userName" label="鐢ㄦ埛鍚�"/>
       <el-table-column prop="realName" label="鐪熷疄濮撳悕" width="150"/>
       <el-table-column prop="deptNames" label="閮ㄩ棬" />
-      <el-table-column label="鏍囩" prop="tagNames" width="80px">
+      <el-table-column label="鏍囩" prop="tagNames" align="center">
         <template slot-scope="{row}">
-          <el-tag style="margin: 5px;" v-for="(item,index) in row.tagNames" :key="index">{{ item }}</el-tag>
+          <el-tag v-for="(item, index) in row.tagNames" :key="index">{{ item }}</el-tag>
         </template>
       </el-table-column>
       <el-table-column label="浜哄憳鐘舵��" prop="condition" align="center" width="100px">
@@ -49,17 +57,15 @@
           </el-tag>
         </template>
       </el-table-column>
-      <el-table-column :width="deptAdmin() ? '310px' : '400px'" label="鎿嶄綔" fixed="right" align="center">
+      <el-table-column :width="deptAdmin() ? '310px' : '350px'" label="鎿嶄綔" fixed="right" align="center">
         <template slot-scope="{row}">
           <el-button size="mini" v-if="!deptAdmin()" @click="changeStatus(row)" class="link-left">
             {{ statusBtnFormatter(row.status) }}
           </el-button>
-          <router-link :to="{path:'/user/student/edit', query:{id:row.id}}" class="link-left">
-            <el-button size="mini" >缂栬緫</el-button>
-          </router-link>
-          <router-link :to="{path:'/log/user/list', query:{userId:row.id}}" class="link-left">
+          <el-button size="mini" @click="handleEdit(row.id)">缂栬緫</el-button>
+          <!-- <router-link :to="{path:'/log/user/list', query:{userId:row.id}}" class="link-left">
             <el-button size="mini" >鏃ュ織</el-button>
-          </router-link>
+          </router-link> -->
           <el-button type="primary" size="mini" @click="status(row)" class="link-left">鐘舵��</el-button>
           <el-button type="primary" size="mini" @click="transposition(row)" class="link-left">璋冨姩</el-button>
           <el-popconfirm title="纭鍒犻櫎鍚�" @confirm="deleteUser(row)">
@@ -87,19 +93,76 @@
       </span>
     </el-dialog>
 
+    <el-dialog
+      title="缂栬緫"
+      :visible.sync="editShow"
+      width="800px"
+      :before-close="handleClose">
+      <el-form :model="form" ref="form" label-width="100px" v-loading="formLoading" :rules="rules">
+        <el-form-item label="鐢ㄦ埛鍚嶏細"  prop="userName" required>
+          <el-input v-model="form.userName"></el-input>
+        </el-form-item>
+        <el-form-item label="瀵嗙爜锛�"  required>
+          <el-input v-model="form.password" type="password"></el-input>
+        </el-form-item>
+        <el-form-item label="鐪熷疄濮撳悕锛�" prop="realName" required>
+          <el-input v-model="form.realName"></el-input>
+        </el-form-item>
+        <el-form-item label="骞撮緞锛�">
+          <el-input v-model="form.age"></el-input>
+        </el-form-item>
+        <el-form-item label="鎬у埆锛�">
+          <el-select v-model="form.sex" placeholder="鎬у埆" clearable>
+            <el-option v-for="item in sexEnum" :key="item.key" :value="item.key" :label="item.value"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="鍑虹敓鏃ユ湡锛�" prop="birthDay">
+          <el-date-picker v-model="form.birthDay" required type="date" value-format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" />
+        </el-form-item>
+        <el-form-item label="鎵嬫満锛�">
+          <el-input v-model="form.phone"></el-input>
+        </el-form-item>
+        <el-form-item label="閮ㄩ棬锛�" prop="deptIds" required>
+          <!-- <el-select v-model="form.deptIds" multiple collapse-tags placeholder="閮ㄩ棬" :disabled="this.$route.query.id">
+            <el-option v-for="item in depts" :key="item.id" :value="item.id" :label="item.name"></el-option>
+          </el-select> -->
+          <el-cascader
+            clearable
+            :disabled="this.$route.query.id"
+            v-model="form.deptIds"
+            :options="depts"
+            :props="{ emitPath: false, multiple: true, value: 'id', label: 'name',  checkStrictly: true }"
+          ></el-cascader>
+        </el-form-item>
+        <el-form-item label="鏍囩锛�" prop="tagIds">
+          <el-select v-model="form.tagIds" multiple  collapse-tags placeholder="鏍囩">
+            <el-option v-for="item in tags" :key="item.id" :value="item.id" :label="item.name"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="鐘舵�侊細" required>
+          <el-select v-model="form.status" placeholder="鐘舵��">
+            <el-option v-for="item in statusEnum" :key="item.key" :value="item.key" :label="item.value"></el-option>
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="handleClose">鍙� 娑�</el-button>
+        <el-button type="primary" @click="submitEdit">鎻� 浜�</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>
+      <el-cascader
+        clearable
+        :disabled="this.$route.query.id"
+        v-model="examine.departmentId"
+        :options="deptList"
+        :props="{ emitPath: false, multiple: true, value: 'id', label: 'name',  checkStrictly: true }"
+      ></el-cascader>
       <el-input type="textarea" maxlength="100" show-word-limit :autosize="{ minRows: 4}" :rows="2" v-model="examine.reason" placeholder="璇疯緭鍏ユ儏鍐佃鏄�" style="margin-top: 30px;"></el-input>
       <upload :fileUrl="examine.contentUrl" :fileSizeLimitM="1024" :uploadNum="1" @getUploadUrl="getUploadAttachmentUrl" @removeFile="removeAttachmentFile" style="margin-top: 30px;"/>
       <span slot="footer" class="dialog-footer">
@@ -115,6 +178,7 @@
 import Pagination from '@/components/Pagination'
 import userApi from '@/api/user'
 import departmentExamineApi from '@/api/departmentExamine'
+import department from '@/api/department'
 import Upload from '@/components/UploadC'
 
 export default {
@@ -126,12 +190,43 @@
   },
   data () {
     return {
+      editShow: false,
+      depts: [],
+      tags: [],
+      value2:[],
+      form: {
+        id: null,
+        userName: '',
+        password: '',
+        realName: '',
+        role: 1,
+        status: 1,
+        age: '',
+        sex: '',
+        birthDay: null,
+        phone: null,
+        deptIds: [],
+        tagIds: []
+      },
+      formLoading: false,
+      rules: {
+        userName: [
+          { required: true, message: '璇疯緭鍏ョ敤鎴峰悕', trigger: 'blur' }
+        ],
+        realName: [
+          { required: true, message: '璇疯緭鍏ョ湡瀹炲鍚�', trigger: 'blur' }
+        ],
+        deptIds: [
+          { required: true, message: '璇烽�夋嫨閮ㄩ棬', trigger: 'change' }
+        ]
+      },
       user:{},
       statusVisible: false,
       upLoadUrl:'/api/admin/user/import',
       fileList:[],
       queryParam: {
         userName: '',
+        departmentId: [],
         roles: [1],
         pageIndex: 1,
         pageSize: 10
@@ -162,9 +257,36 @@
     }
   },
   created () {
-    this.search()
+    this.search();
+    this.getTags();
+    department.getDeptAdmins().then(res => {
+      this.depts = res.response;
+    })
   },
   methods: {
+    handleClose() {
+      this.form = {
+        id: null,
+        userName: '',
+        password: '',
+        realName: '',
+        role: 1,
+        status: 1,
+        age: '',
+        sex: '',
+        birthDay: null,
+        phone: null,
+        deptIds: [],
+        tagIds: []
+      }
+      this.editShow = false
+      this.search()
+    },
+    getTags () {
+      userApi.tagList(null).then(data => {
+        this.tags = data.response
+      })
+    },
     deptAdmin() {
       return sessionStorage.getItem('deptAdmin') === '1'
     },
@@ -197,14 +319,14 @@
       })
     },
     transposition(item) {
-      if (item.conditionExamineResult) {
-        this.$message.warning("璇ョ敤鎴风姸鎬佸緟瀹℃牳");
+      if (item.departmentExamineResult) {
+        this.$message.warning("璇ョ敤鎴疯皟鍔ㄥ緟瀹℃牳");
         return
       }
       this.examine.userId = item.id
       this.examine.departmentId = item.deptIdList
       this.examine.nowDepartmentIds = item.deptIdList.join(',')
-      departmentExamineApi.getDeptList().then(res => {
+      department.getDeptAdmins().then(res => {
         if (res.code === 1) {
           this.deptList = res.response
           this.dialogVisible = true
@@ -267,6 +389,20 @@
         this.listLoading = false
       })
     },
+    handleEdit(id) {
+      this.formLoading = true
+      userApi.selectUser(id).then(re => {
+        this.form = re.response
+        this.formLoading = false
+        const isEmpty = re.response.deptIds.trim().length === 0;
+        if (isEmpty){
+          this.form.deptIds = []
+        }else {
+          this.form.deptIds = re.response.deptIds.split(',').map(Number)
+        }
+        this.editShow = true
+      })
+    },
     changeStatus (row) {
       let _this = this
       userApi.changeStatus(row.id).then(re => {
@@ -289,6 +425,26 @@
         }
       })
     },
+    submitEdit () {
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          this.formLoading = true
+          userApi.createUser(this.form).then(data => {
+            if (data.code === 1) {
+              this.$message.success(data.message)
+              this.handleClose()
+            } else {
+              this.$message.error(data.message)
+              this.formLoading = false
+            }
+          }).catch(e => {
+            this.formLoading = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
     submitForm () {
       this.queryParam.pageIndex = 1
       this.search()

--
Gitblit v1.8.0