VUE項目-次日html
01-反饋vue
姓名 意見或建議
*** 1.從諫如流而不是在每次看到反饋意見以後先推脫,再勉強接受,你們寫出來的建議只是爲了更方便快速的學習,別無他意(更不涉及怪不怪誰的問); 2.保證筆記的完整性和條理性應該算是最基本要完成的工做,在互動性比較高的工做中應該多考慮怎麼利他; 3.待續 *** 單頁面應用開發能夠移動端嗎???單頁面主要作些什麼項目啊??
*** 剛哥
*** 老師,爲何會出現莫名其妙丟包的狀況呢
*** 老師, 愛你 麼麼噠
*** 但願老師註釋可以更詳細些~mysql
02-回顧ios
03-首頁-動態導航菜單git
視圖區:vue-router
<!--一級菜單-->
<!-- 注意: 一級菜單 index 和 二級菜單 index 是有從屬關係的 -->
<!-- 一級菜單的索引 id 二級菜單的索引 item.id-lastItem.id -->
<el-submenu :index="item.id" v-for="(item,i) in menus" :key="item.id">
<template slot="title">
<i class="el-icon-location"></i>
<span>{{item.authName}}</span>
</template>
<!--二級菜單-->
<el-menu-item :index="item.id+'-'+lastItem.id" v-for="lastItem in item.children" :key="lastItem.id">
{{lastItem.authName}}
</el-menu-item>
</el-submenu>
複製代碼
js區域:sql
async getData () {
// 獲取數據
const {data: {data, meta}} = await this.$http.get('menus')
// 判斷獲取是否成功 注意:添加操做 201 其餘操做 200
if (meta.status !== 200) return this.$message.error('獲取菜單失敗')
// 已經成功 修改data中的菜單數據
this.menus = data
// 更新視圖 前提是視圖用了該數據
// 去視圖 用戶指令 渲染出來
}
複製代碼
04-首頁-導航菜單細節express
<i class="el-icon-menu"></i>
<span>{{lastItem.authName}}</span>
複製代碼
<span class="iconfont icon-user-fill"></span>
<span class="iconfont icon-cog"></span>
<span class="iconfont icon-shoppingcart"></span>
<span class="iconfont icon-file"></span>
<span class="iconfont icon-chart-area"></span>
複製代碼
05-首頁-歡迎組件element-ui
路由:axios
// 二級路由配置 將會在home組件下使用
children: [
{path: '/welcome', name: 'welcome', component: Welcome}
]
複製代碼
組件:
<template>
<div class="welcome_container">
<h3>歡迎來到品優購後臺關係系統</h3>
<img src="../assets/images/welcome.jpg" alt="">
</div>
</template>
<script>
export default {
name: 'Welcome'
}
</script>
<style scoped>
.welcome_container{
text-align: center;
}
</style>
複製代碼
指定視圖顯示的位置:
<el-main class="home_main">
<router-view></router-view>
</el-main>
複製代碼
當你到首頁時 默認顯示的是歡迎組件
redirect: '/welcome',
複製代碼
爲了演示 實現退出
// Home.vue
logout () {
// 思考: 清除token 就是退出 可是跳轉登陸頁
sessionStorage.removeItem('token')
this.$router.push('/login')
}
複製代碼
06-用戶管理-路由和組件骨架
配置路由:
{path: '/users', name: 'users', component: Users}
複製代碼
組件骨架:
<template>
<div class="users_container">
用戶列表
</div>
</template>
<script>
export default {
name: 'Users'
}
</script>
<style scoped>
</style>
複製代碼
新建分支切切換: git checkout -b users
07-用戶管理-用戶列表
08-用戶管理-用戶添加
分析dialog組件的結構,修改爲咱們須要的結構
點擊添加 顯示對話框
<el-button type="primary" @click="dialogFormVisible = true" plain>添加用戶
指定數據
// 標識當前對話框是否顯示 dialogFormVisible: false, // 添加用戶表單對象數據 addForm: { username: '', password: '', email: '', mobile: '' }
校驗表單
提交數據 addSubmit () { // 輸入的時候進行數據的驗證 // 請求前點擊提交的時候 還要驗證一次 this.http.post('users', this.addForm) if (meta.status !== 201) return this.$message.error('添加失敗') // 添加成功後 this.dialogFormVisible = false // 更新列表 this.getData() } }) },
添加表單的細節
showDialogForm () { // 注意: 只有先渲染 找到dom // 顯示添加對話框 this.dialogFormVisible = true // 重置表單 內容 驗證 this.$refs.addForm.resetFields() }
09-用戶管理-用戶刪除
改列表的按鈕這一列 改爲能夠傳數據的
<template slot-scope="scope">
<el-button-group>
<el-button icon="el-icon-edit" round></el-button>
<el-button icon="el-icon-delete" @click="delUsers(scope.row.id)" round></el-button>
<el-button icon="el-icon-setting" round></el-button>
</el-button-group>
</template>
複製代碼
定義一個刪除函數
delUsers (id) {
// 刪除用戶 ID
this.$confirm('是否刪除該數據?', '舒適提示', {
confirmButtonText: '肯定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
// 點擊了確認 發請求
const {data: {meta}} = await this.$http.delete(`users/${id}`)
if (meta.status !== 200) return this.$message.error('刪除失敗')
this.$message.success('刪除成功')
this.getData()
}).catch(() => {})
}
複製代碼
10-用戶管理-用戶編輯
11-用戶管理-修改狀態
綁定值修改事件 change
<el-switch
@change="updateState(scope.row.id,scope.row.mg_state)"
v-model="scope.row.mg_state"
active-color="#13ce66"
inactive-color="#ccc">
</el-switch>
複製代碼
請求後臺
async updateState (id, newState) {
// id 用戶的ID newState 已改變的狀態
// console.log(id, newState)
const {data: {meta}} = await this.$http.put(`users/${id}/state/${newState}`)
if (meta.status !== 200) return this.$message.error('修改狀態失敗')
this.$message.success('修改狀態成功')
this.getData()
}
複製代碼
12-用戶管理-分配角色
第一步:畫分配角色的對話框
<!--分配角色-->
<el-dialog width="400px" title="分配角色" :visible.sync="roleDialogFormVisible">
<el-form label-width="100px" autocomplete="off">
<el-form-item label="當前用戶:">
admin
</el-form-item>
<el-form-item label="當前用戶:">
超級管理員
</el-form-item>
<el-form-item label="分配角色:">
<el-select v-model="roleValue" placeholder="請選擇">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false">取 消</el-button>
<el-button type="primary" @click="addSubmit()">確 定</el-button>
</div>
</el-dialog>
複製代碼
第二步:動態渲染下拉框 角色
<el-select v-model="roleValue" placeholder="請選擇">
<el-option
v-for="item in options"
:key="item.id"
:label="item.roleName"
:value="item.id">
</el-option>
</el-select>
複製代碼
數據:
async showRoleDialogFormVisible () {
// 打開對話框
this.roleDialogFormVisible = true
// 渲染下拉菜單
const {data: {data, meta}} = await this.$http.get('roles')
if (meta.status !== 200) return this.$message.error('獲取角色失敗')
this.options = data
console.log(data)
}
複製代碼
第三步:獲取當前用戶的信息在對話框顯示
<el-form-item label="當前用戶:">
{{roleUserName}}
</el-form-item>
<el-form-item label="當前用戶:">
{{roleUserRoleName}}
// 當前用戶的 用戶名
roleUserName: '',
// 當前用戶的 角色
roleUserRoleName: '',
this.roleUserName = row.username
this.roleUserRoleName = row.role_name
複製代碼
第四步:提交角色
<el-button type="primary" @click="changeRole()">確 定</el-button>
async changeRole () {
const {data: {meta}} = await this.$http.put(`users/${this.roleUserId}/role`, {
rid: this.roleValue
})
if (meta.status !== 200) return this.$message.error('分配角色失敗')
this.$message.success('分配角色成功')
this.roleDialogFormVisible = false
this.getData()
}
複製代碼