| | |
| | | <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-input v-model="queryParam.userName" size="small" clearable></el-input> |
| | | </el-form-item> |
| | | <el-form-item > |
| | | <div style="display: flex"> |
| | | <el-button type="primary" @click="submitForm">查询</el-button> |
| | | <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> |
| | |
| | | :file-list="fileList" |
| | | :before-upload="beforeAvatarUpload"> |
| | | <el-button type="primary">导入</el-button> |
| | | <!-- <div slot="tip" class="el-upload__tip">只能上传Excel文件</div>--> |
| | | </el-upload> |
| | | </div> |
| | | </el-form-item> |
| | |
| | | |
| | | <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="realName" label="真实姓名" /> |
| | | <el-table-column prop="realName" label="真实姓名" width="150"/> |
| | | <el-table-column prop="deptNames" label="部门" /> |
| | | <el-table-column label="标签" prop="tagNames" width="80px"> |
| | | <template slot-scope="{row}"> |
| | |
| | | <el-tag :type="row.condition == '正常' || row.condition == null ? 'success' : 'warning'">{{ row.condition ? row.condition : '正常' }}</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="conditionDetail" label="具体情况" show-overflow-tooltip="true"/> |
| | | <el-table-column prop="sex" label="性别" width="60px;" :formatter="sexFormatter"/> |
| | | <el-table-column prop="phone" label="手机号"/> |
| | | <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}"> |
| | |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column width="400px" 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"> |
| | |
| | | <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" @click="status(row)" class="link-left">状态</el-button> |
| | | <el-button type="primary" size="mini" @click="move(row)" class="link-left">调动</el-button> |
| | | <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="search"/> |
| | | |
| | | <!-- 状态弹窗 --> |
| | | <el-dialog :visible.sync="statusVisible" append-to-body :close-on-click-modal="false" :show-close="false" center width="400px"> |
| | | <el-radio-group v-model="user.condition"> |
| | | <el-dialog :visible.sync="statusVisible" append-to-body :show-close="false" center width="400px"> |
| | | <el-radio-group v-model="conditionExamine.targetCondition"> |
| | | <el-radio label="正常">正常</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="user.conditionDetail" placeholder="请输入详细情况" style="margin-top: 30px;"></el-input> |
| | | <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-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-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> |
| | |
| | | import { mapGetters, mapState } from 'vuex' |
| | | import Pagination from '@/components/Pagination' |
| | | import userApi from '@/api/user' |
| | | import departmentExamineApi from '@/api/departmentExamine' |
| | | 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 { |
| | | user:{}, |
| | |
| | | fileList:[], |
| | | queryParam: { |
| | | userName: '', |
| | | role: 1, |
| | | 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() |
| | | }, |
| | | 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(',') |
| | | departmentExamineApi.getDeptList().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.user = { ...user }; |
| | | this.conditionExamine.sourceCondition = user.condition ? user.condition : '0'; |
| | | this.conditionExamine.userId = user.id |
| | | }, |
| | | statusConfirm() { |
| | | if (this.user.condition === null) { |
| | | if (this.conditionExamine.targetCondition === null) { |
| | | this.$message.error("请选择状态") |
| | | return |
| | | } |
| | | userApi.setStatus(this.user).then(res => { |
| | | userApi.setStatus(this.conditionExamine).then(res => { |
| | | if (res.code === 1) { |
| | | this.$message.success("操作成功") |
| | | this.statusVisible = false; |
| | |
| | | this.$message.warning('文件格式不对,仅限xls和xlsx') |
| | | return false |
| | | } |
| | | // console.log(file) |
| | | // const isJPG = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; |
| | | // // const isLt2M = file.size / 1024 / 1024 < 2; |
| | | // |
| | | // if (!isJPG) { |
| | | // this.$message.error('上传文件只能是Excel!'); |
| | | // } |
| | | // // if (!isLt2M) { |
| | | // // this.$message.error('上传头像图片大小不能超过 2MB!'); |
| | | // // } |
| | | // return isJPG ; |
| | | }, |
| | | search () { |
| | | this.listLoading = true |