###今日目标
1.完成参数管理
2.推送代码到码云
3.制作商品列表页面
4.制作商品添加页面
###1.参数管理
####A.展示动态参数可选项
动态参数可选项展示及操作
在获取动态参数的方法中进行处理。
//将获取到的数据中的attr_vals字符串转换为数组
res.data.forEach(item => {
item.attr_vals = item.attr_vals ? item.attr_vals.split(' ') : []
//添加一个bool值控制文本框的显示或者隐藏
item.inputVisible = false
//添加一个inputValue保存文本框值
item.inputValue = ''
})
//然后再修改展开行中的代码,生成el-tag和文本框以及添加按钮
<!-- 展开行 -->
<el-table-column type="expand">
<template slot-scope="scope">
<!-- 循环生成的el-tag -->
<el-tag v-for="(item,i) in scope.row.attr_vals" :key="i" closable>{
{item}}</el-tag>
<!-- 输入框 -->
<el-input class="input-new-tag" v-if="scope.row.inputVisible" v-model="scope.row.inputValue" ref="saveTagInput" size="small" @keyup.enter.native="handleInputConfirm(scope.row)" @blur="handleInputConfirm(scope.row)">
</el-input>
<!-- 添加按钮 -->
<el-button v-else class="button-new-tag" size="small" @click="showInput(scope.row)">+ New Tag</el-button>
</template>
</el-table-column>
//最后对应文本框的事件和按钮的事件添加处理函数
handleInputConfirm(row){
//当用户在文本框中按下enter键或者焦点离开时都会触发执行
//判断用户在文本框中输入的内容是否合法
if(row.inputValue.trim().length===0){
row.inputValue = ''
row.inputVisible = false
return
}
// row.inputVisible = false
//如果用户输入了真实合法的数据,需要保存起来
},
showInput(row){
//用户点击添加按钮时触发
row.inputVisible = true
//$nextTick:在页面上元素被重新渲染之后,调用回调函数的代码
this.$nextTick(_=>{
//让文本框自动获得焦点
this.$refs.saveTagInput.$refs.input.focus()
})
}
####B.添加/删除可选项
添加/删除动态参数可选项
给el-tag添加删除事件
<el-tag v-for="(item,i) in scope.row.attr_vals" :key="i" closable @close="handleClose(i,scope.row)">{
{item}}</el-tag>
在methods中添加新增,删除事件处理函数
handleInputConfirm(row){
//当用户在文本框中按下enter键或者焦点离开时都会触发执行
//判断用户在文本框中输入的内容是否合法
if(row.inputValue.trim().length===0){
row.inputValue = ''
row.inputVisible = false
return
}
// row.inputVisible = false
//如果用户输入了真实合法的数据,需要保存起来
row.attr_vals.push(row.inputValue.trim())
row.inputValue = ''
row.inputVisible = false
this.saveAttrVals(row)
},
handleClose(index,row){
//删除对应索引的参数可选项
row.attr_vals.splice(index,1)
//调用函数,完成保存可选项的操作
this.saveAttrVals(row)
},
async saveAttrVals(row){
//封装函数,完成保存可选项的操作
//发起请求,保存参数细项
const {data:res} = await this.$http.put(`categories/${this.cateId}/attributes/${row.attr_id}`,
{attr_name:row.attr_name,attr_sel:row.attr_sel,attr_vals:row.attr_vals.join(' ')})
if (res.meta.status !== 200) {
return this.$message.error('修改参数项失败')
}
this.$message.success('修改参数项成功')
}
补充:当用户在级联选择框中选中了非三级分类时,需要清空表格中数据
async handleChange() {
//如果用户选择的不是三级分类
if(this.selectedCateKeys.length !== 3){
this.selectedCateKeys = []
this.manyTableData = []
this.onlyTableData = []
return
}
......
补充2:当完成了动态参数可选项的功能之后,我们也需要一样的方式完成静态属性可选项的功能。
此时我们只需要将动态参数可选项中的展开行复制到静态属性的表格中即可
###2.推送代码到码云
添加到暂存求: git add .
提交到本地仓库: git commit -m ‘完成了分类参数开发’
推送到码云: git push
切换到master : git checkout master
合并到master : git merge goods_params
创建子分支
git checkout -b goods_list
推送至码云 git push -u origin goods_list
###3.商品列表
####A.制作商品列表基本结构
添加子级路由组件以及对应的规则,并设置组件的基本机构
打开router.js,添加下面的代码
import GoodList from './components/goods/List.vue'
path: '/home', component: Home, redirect: '/welcome', children: [
{ path: "/welcome", component: Welcome },
{ path: "/users", component: Users },
{ path: "/rights", component: Rights },
{ path: "/roles", component: Roles },
{ path: "/categories", component: Cate },
{ path: "/params", component: Params