¶Ô±ÈÐÂÎļþ |
| | |
| | | ## AVUE-CRUD è¡¨æ ¼é
ç½® |
| | | |
| | | ```javascript |
| | | <avue-crud :option="option" //è¡¨æ ¼é
ç½®å±æ§ |
| | | :table-loading="loading" //è¡¨æ ¼çå¾
æ¡çæ§å¶ï¼å è½½çæ¶å转ååï¼è®¾ç½®true/false |
| | | :search.sync="search" //æç´¢çåé(éè¦sync修饰符) |
| | | :visible.sync="changeInfo" //æ¯å¦æ¾ç¤ºï¼è®¾ç½®true/false |
| | | :data="data" //è¡¨æ ¼æ¾ç¤ºçæ°æ® |
| | | :page.sync="page" //è¡¨æ ¼å页é
ç½®é项(éè¦sync修饰符) |
| | | :permission="permissionList" //æéæ§å¶ |
| | | :before-open="beforeOpen" //æå¼åçåè°function(file,column) |
| | | v-model="form" //æ°æ®æ¨¡å ç¨æ¥åå页é¢å¼ç |
| | | ref="crud" //卿®éç DOM å
ç´ ä¸ä½¿ç¨ï¼å¼ç¨æåçå°±æ¯ DOM å
ç´ ï¼ |
| | | @cell-click="pageto" //è¡¨æ ¼ç¹å»è¿è¡æ¹æ³ onclickæ¹æ³å®ä¹ |
| | | @row-update="rowUpdate" //ä¿®æ¹æ°æ®åç¹å»ç¡®å®è§¦å该äºä»¶ |
| | | @row-save="rowSave" //æ°å¢æ°æ®åç¹å»ç¡®å®è§¦å该äºä»¶ |
| | | @row-del="rowDel" //è¡æ°æ®å 餿¶è§¦å该äºä»¶ |
| | | @row-click="handleRowClick" //åå»è¡è¿è¡çæ¹æ³ |
| | | @search-change="searchChange" //æç´¢æ ååäºä»¶ |
| | | @search-reset="searchReset" //æ¸
空æç´¢æ ååäºä»¶ |
| | | @selection-change="selectionChange"//éæ©æ¡ååååäºä»¶ |
| | | @current-change="currentChange" //ç¹å»é¡µç ä¼è°ç¨current-changeæ¹æ³åè°å½å页æ°ï¼è¿åå½å第å 页 |
| | | @size-change="sizeChange" //ç¹å»æ¯é¡µå¤å°æ¡ä¼è°size-changeæ¹æ³åè° |
| | | @refresh-change="refreshChange" //ç¹å»å·æ°æé®è§¦å该äºä»¶ |
| | | @on-load="onLoad"> //æå¼è¡¨æ ¼é¡µé¢çæ¹æ³ï¼ä¸è¬ç¨æ¥åå§åï¼è¿å页颿°æ® |
| | | </avue-crud> |
| | | |
| | | option: { |
| | | height:'auto', //è¡¨æ ¼é«åº¦ |
| | | emptyText: "ææ æ°æ®å¦~", //æ°æ®ä¸ºç©ºçæç¤º |
| | | calcHeight: 30, //è¡¨æ ¼é«åº¦å·®ï¼ä¸»è¦ç¨äºåå»å
¶ä»é¨åè®©è¡¨æ ¼é«åº¦èªéåºï¼ |
| | | tip: false, //æç¤ºä¿¡æ¯ |
| | | searchShow: true, //馿¬¡å è½½æ¯å¦æ¾ç¤ºæç´¢ |
| | | searchMenuSpan: 4, //æç´¢æé®é¿åº¦ |
| | | searchSpan:6, //æç´¢æ¡é¿åº¦ æå¤§é¿åº¦24 |
| | | border: true, //è¡¨æ ¼è¾¹æ¡æ¯å¦æ¾ç¤º |
| | | index: true, //æ¯å¦æ¾ç¤ºåºå· |
| | | viewBtn: true, //æ¯å¦æ¾ç¤ºæ¥çæé® |
| | | selection: true, //æç´¢æ¡æ¾ç¤º |
| | | addBtn:false, //æ¯å¦æ¾ç¤ºæ·»å æé® |
| | | editBtn:false, //æ¯å¦æ¾ç¤ºç¼è¾æé® |
| | | delBtn:false, //æ¯å¦æ¾ç¤ºå é¤æé® |
| | | excelBtn:false, //è¡¨æ ¼å¯¼åºæé®æ¯å¦æ¾ç¤º |
| | | labelWidth:120, //表ååé¢çæ é¢é¿åº¦ |
| | | refreshBtn: false, //è¡¨æ ¼ä¸é¢å°ç å·æ°æé® |
| | | columnBtn: false, //è¡¨æ ¼ä¸é¢å°ç å表æé® |
| | | searchBtn: false, //è¡¨æ ¼ä¸é¢å°ç æç´¢æé® |
| | | menu: true, //æ¯å¦æ¾ç¤ºæä½æ |
| | | defaultExpandAll:true, //æ é»è®¤å±å¼ |
| | | column:[ |
| | | { |
| | | label: "", //表å屿§åç§° |
| | | prop: "", //屿§å¯¹åºå®ä½ç±»å段 |
| | | type: "", //è¾å
¥æ¡ç±»å |
| | | addDisplay: false, //æ°å¢æ¶æ¯å¦æ¾ç¤º |
| | | editDisplay: false, //ç¼è¾æ¶æ¯å¦æ¾ç¤º |
| | | viewDisplay: true, //详æ
æ¶æ¯å¦æ¾ç¤º |
| | | hide: true, //è¡¨åæ¥è¯¢æ¶æ¯å¦æ¾ç¤º |
| | | display: true, //卿¥çï¼æ°å¢ï¼ç¼è¾é¡µé¢æ¯å¦æ¾ç¤º |
| | | labelWidth:'100', //æ é¢å称宽度 |
| | | span: 24, //24䏿¡æ°æ®å ä¸è¡ï¼8ä¸è¡3æ¡æ°æ® |
| | | gutter:20, //项é´è· |
| | | addDisabled: true, //æ·»å çæ¶åä¸è½ä¿®æ¹ |
| | | editDisabled: true, //ç¼è¾çæ¶åä¸è½ä¿®æ¹ |
| | | sortable:true, //æåºæ¹å¼åæ¢ï¼ååºãæ£åºåæ¢ |
| | | maxlength: 30, //åæ°éå¶ |
| | | showWordLimit:true, //æ¾ç¤ºåæ°éå¶ |
| | | defaultExpandAll:true, //æ é»è®¤å±å¼ |
| | | searchï¼true, //æ¥è¯¢æ¯å¦æ¾ç¤º |
| | | searchFilterable:true, //selectéæ©æ¡å¹é
|
| | | showColumn:false, //åæ¾é䏿¯å¦æ |
| | | addDisplay: false, // æ·»å å¼¹çªä¸æ¾ç¤º |
| | | editDisplay: false, // ç¼è¾å¼¹çªä¸æ¾ç¤º |
| | | viewDisplay: false // æ¥çå¼¹çªä¸æ¾ç¤º |
| | | disabled:true, //表åitemç¦ç¨ |
| | | row:'false/true', //æ¯å¦åç¬æè¡ |
| | | rules:Obj, //éªè¯è§å |
| | | dicData:[], //åå
¸ |
| | | dicUrl:'', //è¿ç¨åå
¸å°å |
| | | dicMethod:'get/post' //åå
¸è¯·æ±æ¹å¼ |
| | | dicQuery:obj, //åå
¸è¯·æ±æ¹å¼ |
| | | props:{ |
| | | lable:'åå
¸çåç§°å±æ§å¼', |
| | | value:'åå
¸çå¼å±æ§å¼', |
| | | children:'åå
¸çå屿§å¼' |
| | | }, |
| | | |
| | | } |
| | | ``` |
| | | |
| | |
| | | margin: 50px auto; |
| | | } |
| | | .avue-dialog .el-dialog{ |
| | | top:50%; |
| | | top:43%; |
| | | max-height: calc(100% - 100px); |
| | | -webkit-transform: translate(-50%, 0); |
| | | transform: translate(-50%, -50%); |
| | |
| | | } |
| | | |
| | | // æ°å¢æå |
| | | export function addUser(data) { |
| | | export function addUser(row) { |
| | | return request({ |
| | | url: "/api/roleQueryController/addUser", |
| | | url: "/api/userQueryController/addUser", |
| | | method: "post", |
| | | data:data |
| | | data:row |
| | | }); |
| | | } |
| | | |
| | | // ä¿®æ¹æå |
| | | export function updateUser(data) { |
| | | return request({ |
| | | url: "/api/roleQueryController/updateUser", |
| | | method: "post", |
| | | url: "/api/userQueryController/updateUser", |
| | | method: "put", |
| | | data:data |
| | | }); |
| | | } |
| | |
| | | // å 餿å |
| | | export function deleteUser(params) { |
| | | return request({ |
| | | url: "/api/roleQueryController/deleteUser", |
| | | url: "/api/userQueryController/deleteUser", |
| | | method: "delete", |
| | | params |
| | | }); |
| | | } |
| | | |
| | | //è·åå¯ç çç¥ |
| | | export function selectPwdStrategyMap(params) { |
| | | return request({ |
| | | url: "/api/passwordStrategyQueryController/selectPwdStrategyMap", |
| | | method: "get", |
| | | params |
| | | }); |
| | | } |
| | | |
| | | //ä¿åå¯ç çç¥ |
| | | export function saveUserPasswordStrateg(params) { |
| | | let formData = new FormData() |
| | | for (let key in params){ |
| | | formData.append(key,params[key]) |
| | | } |
| | | return request({ |
| | | url: "/api/passwordStrategyQueryController/saveUserPasswordStrateg", |
| | | method: "post", |
| | | data:formData |
| | | }); |
| | | } |
| | |
| | | @current-change="currentChange" |
| | | @selection-change="selectChange" |
| | | @row-click="rowClickHandler" |
| | | @row-save="rowSaveHandler" |
| | | @row-update="rowUpdateHandler" |
| | | @row-del="rowDelHandler" |
| | | > |
| | | <template slot="status" slot-scope="{row}"> |
| | | <el-tag v-if="row.status === 0" type="success">å¯ç¨</el-tag> |
| | |
| | | </template> |
| | | |
| | | <template slot="menuLeft" slot-scope="scope"> |
| | | <el-button icon="el-icon-delete" plain size="small" type="danger">å é¤</el-button> |
| | | <el-button icon="el-icon-delete" plain size="small" type="danger" @click="allDelHandler">å é¤</el-button> |
| | | <el-button icon="el-icon-user" plain size="small" type="primary" @click="roleHandler">åé
è§è²</el-button> |
| | | <el-button icon="el-icon-school" plain size="small" type="primary">åé
é¨é¨</el-button> |
| | | <el-button icon="el-icon-key" plain size="small" type="success">设置å¯ç çç¥</el-button> |
| | | <el-button icon="el-icon-key" plain size="small" type="success" @click="setPwsHandler">设置å¯ç çç¥</el-button> |
| | | <el-button icon="el-icon-upload2" plain size="small" type="primary">导å
¥äººå</el-button> |
| | | <el-button icon="el-icon-download" plain size="small" type="primary">ä¸è½½å¯¼å
¥æ¨¡æ¿</el-button> |
| | | </template> |
| | | </avue-crud> |
| | | <transfer ref="transfer" :left-role-data="leftRoleData" :right-role-data="rightRoleData" :transferTitle="transferTitle" title="åé
è§è²" |
| | | @transferSend="roleSendHandler"></transfer> |
| | | <!-- åé
è§è²ç©¿æ¢æ¡ --> |
| | | <transfer ref="transfer" :left-role-data="leftRoleData" :right-role-data="rightRoleData" |
| | | :transferTitle="transferTitle" title="åé
è§è²" |
| | | @transferSend="roleSendHandler"> |
| | | </transfer> |
| | | |
| | | <!-- 设置å¯ç çç¥å¯¹è¯æ¡ --> |
| | | <el-dialog |
| | | v-dialogDrag |
| | | v-loading="pwdLoading" |
| | | :destroy-on-close="true" |
| | | :visible.sync="pwdVisible" |
| | | append-to-body="true" |
| | | class="avue-dialog" |
| | | style="margin-top: -20vh !important;" |
| | | title="设置å¯ç çç¥" |
| | | width="30%" |
| | | > |
| | | |
| | | <div class="password-strategy-container"> |
| | | <div><i class="el-icon-setting"/>设置å¯ç çç¥ï¼</div> |
| | | <el-select v-model="pwdValue" placeholder="è¯·éæ©å¯ç çç¥"> |
| | | <el-option v-for="(item,index) in pwdList" :key="index" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </div> |
| | | |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button size="small" @click="pwdVisible = false">å æ¶</el-button> |
| | | <el-button size="small" type="primary" @click="savePwdHandler">ç¡® å®</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </basic-container> |
| | | </template> |
| | | |
| | | <script> |
| | | import basicOption from '@/util/basic-option' |
| | | import {getDataUsers, stopUser, gridRoles, listRoleByUserOid, saveRights, addUser, updateUser, deleteUser} from '@/api/system/user/api' |
| | | import { |
| | | getDataUsers, |
| | | stopUser, |
| | | gridRoles, |
| | | listRoleByUserOid, |
| | | saveRights, |
| | | addUser, |
| | | updateUser, |
| | | deleteUser, |
| | | selectPwdStrategyMap, |
| | | saveUserPasswordStrateg |
| | | } from '@/api/system/user/api' |
| | | import {column} from "./option" |
| | | import func from '@/util/func' |
| | | |
| | |
| | | name: "userManage", |
| | | data() { |
| | | return { |
| | | pwdVisible: false, |
| | | pwdLoading: false, |
| | | pwdValue: '', |
| | | pwdList: [], |
| | | tableLoading: false, |
| | | tableData: [], |
| | | option: { |
| | | ...basicOption, |
| | | dialogWidth: '50%', |
| | | calcHeight: -60, |
| | | column: column |
| | | }, |
| | |
| | | selectList: [], |
| | | leftRoleData: [], // åé
è§è²ç©¿æ¢æ¡å·¦ä¾§åå§æ°æ® |
| | | rightRoleData: [], // åé
è§è²ç©¿æ¢æ¡å³ä¾§åå§æ°æ® |
| | | transferTitle:['ç°æè§è²', 'æ¥æè§è²'] |
| | | transferTitle: ['ç°æè§è²', 'æ¥æè§è²'] |
| | | } |
| | | }, |
| | | created() { |
| | |
| | | // ç©¿æ¢æ¡ç»ä»¶åå¡« |
| | | roleSendHandler(row) { |
| | | let params = { |
| | | userOid: this.selectList[0].oid, |
| | | userOids: this.selectList[0].oid, |
| | | roleIds: row.join(',') |
| | | } |
| | | saveRights(params).then(res => { |
| | |
| | | }).catch(err => { |
| | | this.$message.error(err) |
| | | }) |
| | | }, |
| | | |
| | | // 设置å¯ç çç¥ |
| | | setPwsHandler() { |
| | | if (this.selectList.length <= 0) { |
| | | this.$message.warning('æ¸
å
éæ©äººååè¿è¡æä½ï¼') |
| | | return; |
| | | } |
| | | this.pwdLoading = false; |
| | | selectPwdStrategyMap().then(res => { |
| | | if (res.data.code === 200) { |
| | | this.pwdList = res.data.data; |
| | | this.pwdValue = res.data.data[0].id; |
| | | console.log(res.data) |
| | | this.pwdVisible = true; |
| | | this.pwdLoading = false; |
| | | } else { |
| | | this.$message.error(res.data.msg); |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // ä¿åå¯ç çç¥ |
| | | savePwdHandler() { |
| | | let params = { |
| | | userIds: this.selectList.map(item => item.oid).join(','), |
| | | passwordStrategId: this.pwdValue |
| | | } |
| | | saveUserPasswordStrateg(params).then(res => { |
| | | this.pwdVisible = false; |
| | | this.$message.success(res.data.obj) |
| | | }).catch(err => { |
| | | this.$message.error(err) |
| | | }) |
| | | }, |
| | | |
| | | // æ°å¢ |
| | | rowSaveHandler(row, done) { |
| | | if (row.password != row.confirmPassword) { |
| | | this.$message.error('è¯·æ£æ¥ä¸¤æ¬¡å¯ç æ¯å¦è¾å
¥ä¸è´ï¼') |
| | | return this.$refs.userCrud.$refs.dialogForm.$refs.tableForm.allDisabled = false; |
| | | } |
| | | addUser(row).then(res => { |
| | | if (res.data.code === 200) { |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | } |
| | | }).catch(err => { |
| | | console.log(err); |
| | | }) |
| | | done() |
| | | }, |
| | | |
| | | // ç¼è¾ |
| | | rowUpdateHandler(row, index, done) { |
| | | if (row.password != row.confirmPassword) { |
| | | this.$message.error('è¯·æ£æ¥ä¸¤æ¬¡å¯ç æ¯å¦è¾å
¥ä¸è´ï¼') |
| | | return this.$refs.userCrud.$refs.dialogForm.$refs.tableForm.allDisabled = false; |
| | | } |
| | | updateUser(row).then(res => { |
| | | if (res.data.code === 200) { |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | } |
| | | }).catch(err => { |
| | | console.log(err); |
| | | }); |
| | | done() |
| | | }, |
| | | |
| | | // å é¤ |
| | | rowDelHandler(row) { |
| | | let params = { |
| | | ids: row.oid |
| | | } |
| | | deleteUser(params).then(res => { |
| | | if (res.data.code === 200) { |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | } |
| | | }).catch(err => { |
| | | console.log(err); |
| | | }) |
| | | }, |
| | | |
| | | // å¤éå é¤ |
| | | allDelHandler() { |
| | | let params = { |
| | | ids: this.selectList.map(item => item.oid).join(',') |
| | | } |
| | | if (this.selectList.length <= 0) { |
| | | this.$message.warning('请è³å°éæ©ä¸æ¡æ°æ®è¿è¡å é¤ï¼') |
| | | return; |
| | | } |
| | | this.$confirm('æ¨ç¡®å®è¦å 餿鿩çæååï¼', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | deleteUser(params).then(res => { |
| | | if (res.data.code === 200) { |
| | | this.$message.success(res.data.obj); |
| | | this.getTableList(); |
| | | } |
| | | }); |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | } |
| | | } |
| | | |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | <style lang="scss" scoped> |
| | | .password-strategy-container { |
| | | padding-left: 20px; |
| | | display: flex; |
| | | //justify-content: center; |
| | | align-items: center; |
| | | gap: 10px; |
| | | } |
| | | |
| | | </style> |
| | |
| | | export const column = [ |
| | | export let column = [ |
| | | { |
| | | label: 'è´¦å·', |
| | | prop: 'id', |
| | | align:'center', |
| | | search:true, |
| | | sortable:true, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请è¾å
¥å§å', |
| | | trigger: 'blur' |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | label: 'å§å', |
| | | prop: 'name', |
| | | align:'center', |
| | | search:true, |
| | | sortable:true |
| | | }, { |
| | | label: 'è´¦å·', |
| | | prop: 'id', |
| | | align:'center', |
| | | search:true, |
| | | sortable:true |
| | | sortable:true, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请è¾å
¥å§å', |
| | | trigger: 'blur' |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | label: 'å¯ç ', |
| | | prop: 'password', |
| | | hide:true, |
| | | type:'password', |
| | | change: (val)=>{ |
| | | const confirmPasswordColumn = column.find(item => item.prop === 'confirmPassword'); |
| | | confirmPasswordColumn.disabled = val.value === ""; |
| | | }, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请è¾å
¥å¯ç ', |
| | | trigger: 'blur' |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | label: '确认å¯ç ', |
| | | prop: 'confirmPassword', |
| | | hide:true, |
| | | type:'password', |
| | | disabled:true, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: 'è¯·åæ¬¡ç¡®è®¤å¯ç ', |
| | | trigger: 'blur' |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | label: 'ç¶æ', |
| | |
| | | search:true, |
| | | sortable:true, |
| | | searchslot:true, |
| | | row:true, |
| | | }, |
| | | { |
| | | label: 'ä¸ä¸', |
| | |
| | | align:'center', |
| | | sortable:true, |
| | | display:false, |
| | | } |
| | | }, |
| | | ]; |