From d01c0e038ffd93c7a569899ca0342967774385a3 Mon Sep 17 00:00:00 2001
From: 龚焕茏 <2842157468@qq.com>
Date: 星期五, 12 七月 2024 17:37:08 +0800
Subject: [PATCH] feat:下拉全选
---
src/views/user/student/list.vue | 242 ++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 223 insertions(+), 19 deletions(-)
diff --git a/src/views/user/student/list.vue b/src/views/user/student/list.vue
index 85005d9..8060c00 100644
--- a/src/views/user/student/list.vue
+++ b/src/views/user/student/list.vue
@@ -1,24 +1,54 @@
<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 label="鐪熷疄濮撳悕锛�">
+ <el-input v-model="queryParam.userName" size="small" clearable></el-input>
</el-form-item>
- <el-form-item>
- <el-button type="primary" @click="submitForm">鏌ヨ</el-button>
- <router-link :to="{path:'/user/student/edit'}" class="link-left">
- <el-button type="primary">娣诲姞</el-button>
- </router-link>
+ <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>
+ <router-link :to="{path:'/user/student/edit'}" class="link-left">
+ <el-button type="primary">娣诲姞</el-button>
+ </router-link>
+ <el-upload
+ class="upload-demo"
+ :action="upLoadUrl"
+ :with-credentials="true"
+ :on-success="handlePreview"
+ multiple
+ :show-file-list="false"
+ :file-list="fileList"
+ :before-upload="beforeAvatarUpload">
+ <el-button type="primary">瀵煎叆</el-button>
+ </el-upload>
+ </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="id" label="Id" />
<el-table-column prop="userName" label="鐢ㄦ埛鍚�"/>
- <el-table-column prop="realName" label="鐪熷疄濮撳悕" />
- <el-table-column prop="userLevel" label="瀛︾骇" :formatter="levelFormatter"/>
- <el-table-column prop="sex" label="鎬у埆" width="60px;" :formatter="sexFormatter"/>
- <el-table-column prop="phone" label="鎵嬫満鍙�"/>
+ <el-table-column prop="realName" label="鐪熷疄濮撳悕" width="150"/>
+ <el-table-column prop="deptNames" label="閮ㄩ棬" />
+ <el-table-column label="鏍囩" prop="tagNames" align="center">
+ <template slot-scope="{row}">
+ <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">
+ <template slot-scope="{row}">
+ <el-tag :type="row.condition == '姝e父' || row.condition == null ? 'success' : 'warning'">{{ row.condition ? row.condition : '姝e父' }}</el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column prop="sex" label="鎬у埆" width="60px;" :formatter="sexFormatter" align="center"/>
+ <el-table-column prop="phone" label="鎵嬫満鍙�" width="120"/>
<el-table-column prop="createTime" label="鍒涘缓鏃堕棿" width="160px"/>
<el-table-column label="鐘舵��" prop="status" width="70px">
<template slot-scope="{row}">
@@ -27,9 +57,9 @@
</el-tag>
</template>
</el-table-column>
- <el-table-column width="270px" label="鎿嶄綔" align="center">
+ <el-table-column :width="deptAdmin() ? '310px' : '400px'" label="鎿嶄綔" fixed="right" align="center">
<template slot-scope="{row}">
- <el-button size="mini" @click="changeStatus(row)" class="link-left">
+ <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">
@@ -38,12 +68,52 @@
<router-link :to="{path:'/log/user/list', query:{userId:row.id}}" class="link-left">
<el-button size="mini" >鏃ュ織</el-button>
</router-link>
- <el-button size="mini" type="danger" @click="deleteUser(row)" class="link-left">鍒犻櫎</el-button>
+ <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)">
+ <el-button v-if="!deptAdmin()" 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="conditionExamine.targetCondition">
+ <el-radio label="姝e父">姝e父</el-radio>
+ <el-radio label="鐥呭亣">鐥呭亣</el-radio>
+ <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="conditionExamine.reason" placeholder="璇疯緭鍏ヨ缁嗘儏鍐�" style="margin-top: 30px;"></el-input>
+ <upload :fileUrl="conditionExamine.contentUrl" :fileSizeLimitM="1024" :uploadNum="1" @getUploadUrl="getConditionUploadAttachmentUrl" @removeFile="removeConditionAttachmentFile" style="margin-top: 30px;"/>
+ <span slot="footer" class="dialog-footer">
+ <el-button type="primary" @click="statusConfirm">纭� 瀹�</el-button>
+ <el-button @click="statusVisible = false">鍙� 娑�</el-button>
+ </span>
+ </el-dialog>
+
+ <!-- 璋冨姩寮圭獥 -->
+ <el-dialog
+ :title="title"
+ :visible.sync="dialogVisible"
+ width="400px">
+ <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">
+ <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="submitExamine">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
</div>
</template>
@@ -51,26 +121,155 @@
import { mapGetters, mapState } from 'vuex'
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 {
- components: { Pagination },
+ components: { Pagination, Upload },
+ computed: {
+ fileContentUrl: () => {
+ return this.form ? this.form.contentUrl ? [this.form.contentUrl] : [] : [];
+ }
+ },
data () {
return {
+ depts: [],
+ user:{},
+ statusVisible: false,
+ upLoadUrl:'/api/admin/user/import',
+ fileList:[],
queryParam: {
userName: '',
- role: 1,
+ departmentId: [],
+ roles: [1],
pageIndex: 1,
pageSize: 10
},
listLoading: true,
tableData: [],
- total: 0
+ total: 0,
+ examine: {
+ userId: '',
+ departmentId: [],
+ departmentIds: '',
+ nowDepartmentIds: '',
+ contentUrl: [],
+ attachment: ''
+ },
+ conditionExamine: {
+ userId: '',
+ targetCondition: '',
+ sourceCondition: '',
+ reason: '',
+ result: 0,
+ contentUrl: [],
+ attachment: ''
+ },
+ title: '閮ㄩ棬璋冨姩',
+ dialogVisible: false,
+ deptList: []
}
},
created () {
- this.search()
+ this.search();
+ department.getDeptAdmins().then(res => {
+ this.depts = res.response;
+ })
},
methods: {
+ deptAdmin() {
+ return sessionStorage.getItem('deptAdmin') === '1'
+ },
+ removeAttachmentFile(fileList, fileName) {
+ this.examine.attachment = JSON.stringify(fileList.filter(item => item.name !== fileName));
+ this.examine.contentUrl = fileList.filter(item => item.name !== fileName);
+ },
+ getUploadAttachmentUrl(uploadData) {
+ this.examine.attachment = JSON.stringify(uploadData);
+ this.examine.contentUrl = uploadData;
+ },
+ removeConditionAttachmentFile(fileList, fileName) {
+ this.conditionExamine.attachment = JSON.stringify(fileList.filter(item => item.name !== fileName));
+ this.conditionExamine.contentUrl = fileList.filter(item => item.name !== fileName);
+ },
+ getConditionUploadAttachmentUrl(uploadData) {
+ this.conditionExamine.attachment = JSON.stringify(uploadData);
+ this.conditionExamine.contentUrl = uploadData;
+ },
+ 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) {
+ if (item.departmentExamineResult) {
+ this.$message.warning("璇ョ敤鎴疯皟鍔ㄥ緟瀹℃牳");
+ return
+ }
+ this.examine.userId = item.id
+ this.examine.departmentId = item.deptIdList
+ this.examine.nowDepartmentIds = item.deptIdList.join(',')
+ department.getDeptAdmins().then(res => {
+ if (res.code === 1) {
+ this.deptList = res.response
+ this.dialogVisible = true
+ } else {
+ this.$message.error(res.message)
+ }
+ })
+ },
+ status(user) {
+ if (user.conditionExamineResult) {
+ this.$message.warning("璇ョ敤鎴风姸鎬佸緟瀹℃牳");
+ return
+ }
+ this.statusVisible = true;
+ this.conditionExamine.sourceCondition = user.condition ? user.condition : '0';
+ this.conditionExamine.userId = user.id
+ },
+ statusConfirm() {
+ if (this.conditionExamine.targetCondition === null) {
+ this.$message.error("璇烽�夋嫨鐘舵��")
+ return
+ }
+ userApi.setStatus(this.conditionExamine).then(res => {
+ if (res.code === 1) {
+ this.$message.success("鎿嶄綔鎴愬姛")
+ this.statusVisible = false;
+ this.search()
+ } else {
+ this.$message.error("鎿嶄綔澶辫触")
+ }
+ })
+ },
+ handlePreview(e){
+ console.log(e)
+ if (e.code==1){
+ this.search()
+ this.$message.success(e.message)
+ }else {
+ this.$message.error(e.message)
+ }
+ },
+ beforeAvatarUpload(file) {
+ let legalName = ['xlsx', 'xls']
+ // 鎷垮埌鍚庣紑鍚�
+ let name = file.name.substring(file.name.lastIndexOf('.') + 1, file.name.length)
+ if (legalName.includes(name)) {
+ // console.log(legalName.includes(name));
+ } else {
+ this.$message.warning('鏂囦欢鏍煎紡涓嶅锛屼粎闄恱ls鍜寈lsx')
+ return false
+ }
+ },
search () {
this.listLoading = true
userApi.getUserPageList(this.queryParam).then(data => {
@@ -137,3 +336,8 @@
}
}
</script>
+<style lang="scss" scoped>
+.upload-demo{
+ margin-left: 5px;
+}
+</style>
--
Gitblit v1.8.0