提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔
文章目錄
- 1.組織架構-編輯部門-彈出層獲取數據
- 2.組織架構-編輯部門-編輯表單校驗
- 3.組織架構-編輯部門-確認取消
- 4.組織架構-刪除部門
- 5.角色管理-搭建頁面結構
- 6.角色管理-獲取數據
- 7.角色管理-表格自定義結構
- 8.角色管理-分頁功能
- 9.角色管理-新增
- 10.角色管理-表單數據校驗
- 11.角色管理-新增角色-確定取消
1.組織架構-編輯部門-彈出層獲取數據
- 🍕🍕🍕編輯部門和新增部門會共用一個組件,也就是add-dept組件要支持兩種場景-新增場景-編輯場景
- 獲取部門詳情的API-代碼位置(src/api/department.js)
//獲取部門詳情
export function getDepartmentDetail(id){return request({url:`/company/department/${id}`})
}
- 點擊編輯時,彈出層,通過ref獲取組件實例,調用獲取詳情的方法-代碼位置(src/views/department/index.vue)
<addDept ref="addDept" :current-node-id="currentNodeId" :show-dialog.sync="showDialog" @updateDepartment="getDepartment" />
- 調用子組件方法-代碼位置(src/views/department/index.vue)
//操作部門方法operateDept(type,id){// this.$message('click' + type)if(type === 'add'){//添加子部門this.showDialog = true;//顯式彈窗this.currentNodeId = id}else if(type === 'edit'){//編輯部門this.showDialog = true;this.currentNodeId = id;//記錄id 用它獲取數據//更新props-異步動作//直接調用了子組件的方法,同步的方法//要在子組件獲取數據 父組件調用子組件的方法來獲取數據this.$nextTick(()=>{this.$refs.addDept.getDepartmentDetail();//this.$refs.addDept等同于子組件的this})}}
- 子組件提供方法-位置(src/views/department/components/add-dept.vue)
async getDepartmentDetail(){this.formData = await getDepartmentDetail(this.currentNodeId)}
2.組織架構-編輯部門-編輯表單校驗
- 編輯部門表單校驗和新增部門表單校驗的區別就是編輯的數據已經在數據庫存在了,必然是存在重復的
- 編輯場景下排除自身
- 檢查部門編碼-代碼位置(src/views/department/components/add-dept.vue)
//部門編碼code:[{required:true,message:'部門編碼不能為空',trigger:'blur'},{min:2,max:10,message:'部門編碼的長度為2-10個字符',trigger:'blur',//自定義校驗模式validator:async(rule,value,callback)=>{//value是輸入的編碼let result =await getDepartment();console.log(result)//判斷是否是編輯模式if(this.formData.id){//編輯場景result = result.filter(item=>item.id !== this.formData.id)console.log(result)}//result數組中是否存在value值if(result.some(item=>item.code === value)){callback(new Error('部門中已經有該編碼了'))}else{callback()}}}],
- 部門名稱-位置(src/views/department/components/add-dept.vue)
//部門名稱name:[{required:true,message:'部門名稱不能為空',trigger:'blur',validator:async(rule,value,callback)=>{//value就是輸入的名稱let result = await getDepartment();if(this.formData.id){//編輯 排除自身 id不相等說明不是自身result = result.filter(item=>{return item.id !== this.formData.id})}//result 數組中是否存在value值if(result.some(item=>item.name === value)){callback(new Error('部門中已經有該名稱了'))}else{callback()}}}]
3.組織架構-編輯部門-確認取消
- 更新部門的API-代碼位置(src/api/department.js)
//更新部門
export function updateDepartment(data){return request({method:'put',url:`/company/department/${data.id}`,data})
}
- 確認時區分當前是編輯還是新增-代碼位置(src/views/department/components/add-dept.vue)
btnOk(){this.$refs.addDept.validate(async isOK=>{if(isOK){let msg = '新增'//通過formData中的idif(this.formData.id){//編輯msg = '更新'await updateDepartment(this.formData)}else{//新增await addDepartment({...this.formData,pid:this.currentNodeId})}//通知父組件更新this.$emit('updateDepartment')//提示消息this.$message.success(`${msg}部門成功`)this.close()}})},
- 使用計算屬性生成當前顯示的彈層標題-代碼位置(src/views/department/components/add-dept.vue)
<el-dialog :title="showTitle" :visible="showDialog" @close="close">
computed:{
showTitle(){return this.formData.id ?'編輯部門':'新增部門'}
}
4.組織架構-刪除部門
- 刪除部門的API-代碼位置(src/api/department.js)
//刪除部門
export function delDepartment(id){return request({method:'delete',url:`/company/department/${id}`})
}
- 在刪除場景下調用API刪除-代碼位置(src/views/department/index.vue)
operateDept(type,id){if(type === 'add'){//添加子部門this.showDialog = true;//顯式彈窗this.currentNodeId = id;}else if(type === 'edit'){//編輯部門場景this.showDialog = true;this.currentNodeId = id;//記錄id this.$nextTick(()=>{this.$refs.addDept.getDepartmentDetail();//this.$refs.addDept等同于子組件的this }) }else{//刪除部門this.$confirm('確認要刪除該部門嗎?').then(async()=>{await delDepartment(id)//提示信息this.$message.success('刪除部門成功')this.getDepartment()})}
}
5.角色管理-搭建頁面結構
- 角色管理對應的路由-位置(src/router/modules/role.js)
import layout from '@/layout'
export default{path:'/role',component:layout,children:[{path:'',name:'role',component:()=>import('@/views/role'),meta:{title:'角色',icon:'tree'}}]
}
- 根路由文件(src/router/index.js)
import roleRouter from '@/router/modules/role'
export const constantRoutes = [departmentRouter,roleRouter,
]
- 搭建角色管理的頁面結構-代碼位置(src/views/role/index.vue)
<template><div class="container"><div class="app-container"><!-- 角色管理內容 --><div class="role-operate"><el-button size="mini" type="primary">添加角色</el-button></div><!-- 放置table組件 --><el-table><!-- 列 --><el-table-column align="center" width="200" label="角色" /><el-table-column align="center" width="200" label="啟用" /><el-table-column align="center" label="描述" /><el-table-column align="center" label="操作" /></el-table><!-- 放置分頁組件 --><el-row type="flex" style="height:60px;" align="middle" justify="end"><!-- 放置分頁組件 --><el-pagination layout="prev,pager,next" /></el-row></div></div>
</template>
<style scoped>.role-operate{padding:10px;}
</style>
6.角色管理-獲取數據
- 封裝獲取角色API-代碼位置(src/api/role.js)
import request from '@/utils/request'
export function getRoleList(params){return request({url:'/sys/role',params//查詢參數})
}
- 在初始化時調用API-賦值給數據-代碼位置(src/views/role/index.vue)
import {getRoleList} from '@/api/role'
data() {return {list:[]}},components: {},created(){this.getRoleList()},methods:{async getRoleList(){const {rows} = await getRoleList()this.list = rows;//賦值}}
- 綁定表格屬性-代碼位置(src/views/role/index.vue)
<!-- 放置table組件 --><el-table :data="list"><!-- 列 --><el-table-column prop="name" align="center" width="200" label="角色" /><el-table-column prop="state" align="center" width="200" label="啟用" /><el-table-column prop="description" align="center" label="描述" /><el-table-column align="center" label="操作" /></el-table>
7.角色管理-表格自定義結構
- 自定義啟用列和操作列的結構-代碼位置(src/views/role/index.vue)
<el-table-column prop="state" align="center" width="200" label="啟用" ><template v-slot="{row}"><span>{{ row.state === 1 ?'已啟用':row.state === 0 ?"未啟用":'無' }}</span></template></el-table-column>
- 自定義操作列結構-代碼位置(src/views/role/index.vue)
<el-table-column align="center" label="操作" ><!-- 操作按鈕 --><template><el-button size="mini" type="text">分配權限</el-button><el-button size="mini" type="text">編輯</el-button><el-button size="mini" type="text">刪除</el-button></template></el-table-column>
8.角色管理-分頁功能
- 分頁
- 展示頁面
- 切換分頁獲取數據
- 分頁組件屬性
- 當前頁碼
- 每頁條數
- 總數
- 定義分頁信息-代碼位置(src/views/role/index.vue)
pageParams:{page:1,//第幾頁pagesize:5,//每頁多少條total:0}
- 綁定分頁信息-(src/views/role/index.vue)
<el-pagination :page-size="pageParams.pagesize" :current-page="pageParams.page" :total="pageParams.total" @current-change="changePage" layout="prev,pager,next" /></el-row>
- 初始化時將總數賦值-(src/views/role/index.vue)
async getRoleList(){const {rows,total} = await getRoleList(this.pageParams);this.list = rows;//賦值this.pageParams.total = total
}
- 切換分頁時,獲取對應頁碼的數據-代碼位置(src/views/role/index.vue)
//切換分頁時,請求新的數據
changePage(newPage){this.pageParams.page = newPage;this.getRoleList()
}
9.角色管理-新增
- 放置彈層組件-代碼位置(src/views/role/index.vue)
<el-dialog width="500px" title="新增角色" :visible.sync="showDialog"><!-- 表單 --><el-form label-width="120px"><el-form-item label="角色名稱"><el-input style="width:300px" size="mini"></el-input></el-form-item><el-form-item label="啟用"><el-switch size="mini"></el-switch></el-form-item>><el-form-item label="角色描述"><el-input type="textarea" :rows="3" style="width:300px;" size="mini"></el-input></el-form-item><el-form-item><el-row type="flex" justify="center"><el-col :span="12"><el-button type="primary" size="mini">確定</el-button><el-button size="mini">取消</el-button></el-col></el-row></el-form-item></el-form></el-dialog>
- 變量控制彈窗
showDialog:false
10.角色管理-表單數據校驗
- 聲明數據和規則(src/views/role/index.vue)
export default{data(){roleForm:{name:'',description:'',state:0 //默認未啟用 1 關閉0},rules:{name:[{required:true,message:'角色名稱不能為空',trigger:'blur' } ],description:[{required:true,message:'角色描述不能為空',trigger:'blur' } ]}}
}
- 綁定表單校驗和數據
<el-form ref="roleForm" :model="roleForm" :rules="rules" label-width="120px"><el-form-item prop="name" label="角色名稱"><el-input v-model="roleForm.name" style="width:300px" size="mini"></el-input></el-form-item><el-form-item prop="" label="啟用"><!-- 如果不需要校驗 就不需要寫prop屬性 --><el-switch v-model="roleForm.state" :active-value="1" :inactive-value="0" size="mini"></el-switch></el-form-item>><el-form-item prop="description" label="角色描述"><el-input type="textarea" v-model="roleForm.description" :rows="3" style="width:300px;" size="mini"></el-input></el-form-item><el-form-item><el-row type="flex" justify="center"><el-col :span="12"><el-button type="primary" size="mini">確定</el-button><el-button size="mini">取消</el-button></el-col></el-row></el-form-item></el-form>
11.角色管理-新增角色-確定取消
- 新增角色的api-(src/api/role.js)
export function addRole{data}{return request({url:'/sys/role',method:'post',data })
}
- 確定和取消
btnOK(){this.$refs.roleForm.validate(async valid=>{if(valid){await addRole(this.roleForm) this.$message.success('新增角色成功')this.getRoleList()this.btnCancel()}})
},
btnCancel(){this.$refs.roleForm.resetFields();this.showDialog = false;
}