Commit 8d08d5939fd18fcab76ab2c49934a87581ccd12d
1 parent
cc6c3d27
品牌 crud
Showing
1 changed file
with
50 additions
and
13 deletions
yudao-ui-admin/src/views/mall/product/brand/index.vue
| @@ -3,9 +3,6 @@ | @@ -3,9 +3,6 @@ | ||
| 3 | 3 | ||
| 4 | <!-- 搜索工作栏 --> | 4 | <!-- 搜索工作栏 --> |
| 5 | <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> | 5 | <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> |
| 6 | - <el-form-item label="分类编号" prop="categoryId"> | ||
| 7 | - <el-input v-model="queryParams.categoryId" placeholder="请输入分类编号" clearable @keyup.enter.native="handleQuery"/> | ||
| 8 | - </el-form-item> | ||
| 9 | <el-form-item label="品牌名称" prop="name"> | 6 | <el-form-item label="品牌名称" prop="name"> |
| 10 | <el-input v-model="queryParams.name" placeholder="请输入品牌名称" clearable @keyup.enter.native="handleQuery"/> | 7 | <el-input v-model="queryParams.name" placeholder="请输入品牌名称" clearable @keyup.enter.native="handleQuery"/> |
| 11 | </el-form-item> | 8 | </el-form-item> |
| @@ -43,10 +40,13 @@ | @@ -43,10 +40,13 @@ | ||
| 43 | 40 | ||
| 44 | <!-- 列表 --> | 41 | <!-- 列表 --> |
| 45 | <el-table v-loading="loading" :data="list"> | 42 | <el-table v-loading="loading" :data="list"> |
| 46 | - <el-table-column label="品牌编号" align="center" prop="id"/> | ||
| 47 | - <el-table-column label="分类编号" align="center" prop="categoryId"/> | 43 | + <el-table-column label="商品分类" align="center" prop="categoryId"/> |
| 48 | <el-table-column label="品牌名称" align="center" prop="name"/> | 44 | <el-table-column label="品牌名称" align="center" prop="name"/> |
| 49 | - <el-table-column label="品牌图片" align="center" prop="bannerUrl"/> | 45 | + <el-table-column label="品牌图片" align="center" prop="bannerUrl"> |
| 46 | + <template slot-scope="scope"> | ||
| 47 | + <img v-if="scope.row.bannerUrl" :src="scope.row.bannerUrl" alt="分类图片" class="img-height"/> | ||
| 48 | + </template> | ||
| 49 | + </el-table-column> | ||
| 50 | <el-table-column label="品牌排序" align="center" prop="sort"/> | 50 | <el-table-column label="品牌排序" align="center" prop="sort"/> |
| 51 | <el-table-column label="品牌描述" align="center" prop="description"/> | 51 | <el-table-column label="品牌描述" align="center" prop="description"/> |
| 52 | <el-table-column label="状态" align="center" prop="status"> | 52 | <el-table-column label="状态" align="center" prop="status"> |
| @@ -77,8 +77,9 @@ | @@ -77,8 +77,9 @@ | ||
| 77 | <!-- 对话框(添加 / 修改) --> | 77 | <!-- 对话框(添加 / 修改) --> |
| 78 | <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> | 78 | <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> |
| 79 | <el-form ref="form" :model="form" :rules="rules" label-width="80px"> | 79 | <el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
| 80 | - <el-form-item label="分类编号" prop="categoryId"> | ||
| 81 | - <el-input v-model="form.categoryId" placeholder="请输入分类编号"/> | 80 | + <el-form-item label="商品分类" prop="categoryId"> |
| 81 | + <Treeselect v-model="form.categoryId" :options="categoryOptions" :normalizer="normalizer" :show-count="true" | ||
| 82 | + placeholder="请选择商品分类"/> | ||
| 82 | </el-form-item> | 83 | </el-form-item> |
| 83 | <el-form-item label="品牌名称" prop="name"> | 84 | <el-form-item label="品牌名称" prop="name"> |
| 84 | <el-input v-model="form.name" placeholder="请输入品牌名称"/> | 85 | <el-input v-model="form.name" placeholder="请输入品牌名称"/> |
| @@ -93,10 +94,11 @@ | @@ -93,10 +94,11 @@ | ||
| 93 | <el-input v-model="form.description" type="textarea" placeholder="请输入内容"/> | 94 | <el-input v-model="form.description" type="textarea" placeholder="请输入内容"/> |
| 94 | </el-form-item> | 95 | </el-form-item> |
| 95 | <el-form-item label="状态" prop="status"> | 96 | <el-form-item label="状态" prop="status"> |
| 96 | - <el-select v-model="form.status" placeholder="请选择状态"> | ||
| 97 | - <el-option v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)" | ||
| 98 | - :key="dict.value" :label="dict.label" :value="parseInt(dict.value)"/> | ||
| 99 | - </el-select> | 97 | + <el-radio-group v-model="form.status"> |
| 98 | + <el-radio v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)" | ||
| 99 | + :key="dict.value" :label="parseInt(dict.value)">{{ dict.label }} | ||
| 100 | + </el-radio> | ||
| 101 | + </el-radio-group> | ||
| 100 | </el-form-item> | 102 | </el-form-item> |
| 101 | </el-form> | 103 | </el-form> |
| 102 | <div slot="footer" class="dialog-footer"> | 104 | <div slot="footer" class="dialog-footer"> |
| @@ -116,12 +118,15 @@ import { | @@ -116,12 +118,15 @@ import { | ||
| 116 | getBrandPage, | 118 | getBrandPage, |
| 117 | updateBrand | 119 | updateBrand |
| 118 | } from "@/api/mall/product/brand"; | 120 | } from "@/api/mall/product/brand"; |
| 121 | +import {listCategory} from "@/api/mall/product/category"; | ||
| 119 | import ImageUpload from '@/components/ImageUpload'; | 122 | import ImageUpload from '@/components/ImageUpload'; |
| 123 | +import Treeselect from "@riophae/vue-treeselect"; | ||
| 124 | +import "@riophae/vue-treeselect/dist/vue-treeselect.css"; | ||
| 120 | 125 | ||
| 121 | export default { | 126 | export default { |
| 122 | name: "Brand", | 127 | name: "Brand", |
| 123 | components: { | 128 | components: { |
| 124 | - ImageUpload, | 129 | + ImageUpload, Treeselect, |
| 125 | }, | 130 | }, |
| 126 | data() { | 131 | data() { |
| 127 | return { | 132 | return { |
| @@ -148,6 +153,8 @@ export default { | @@ -148,6 +153,8 @@ export default { | ||
| 148 | name: null, | 153 | name: null, |
| 149 | status: null, | 154 | status: null, |
| 150 | }, | 155 | }, |
| 156 | + // 商品分类树选项 | ||
| 157 | + categoryOptions: [], | ||
| 151 | // 表单参数 | 158 | // 表单参数 |
| 152 | form: {}, | 159 | form: {}, |
| 153 | // 表单校验 | 160 | // 表单校验 |
| @@ -160,6 +167,7 @@ export default { | @@ -160,6 +167,7 @@ export default { | ||
| 160 | }; | 167 | }; |
| 161 | }, | 168 | }, |
| 162 | created() { | 169 | created() { |
| 170 | + this.getTreeselect(); | ||
| 163 | this.getList(); | 171 | this.getList(); |
| 164 | }, | 172 | }, |
| 165 | methods: { | 173 | methods: { |
| @@ -176,6 +184,26 @@ export default { | @@ -176,6 +184,26 @@ export default { | ||
| 176 | this.loading = false; | 184 | this.loading = false; |
| 177 | }); | 185 | }); |
| 178 | }, | 186 | }, |
| 187 | + /** 转换菜单数据结构 */ | ||
| 188 | + normalizer(node) { | ||
| 189 | + if (node.children && !node.children.length) { | ||
| 190 | + delete node.children; | ||
| 191 | + } | ||
| 192 | + return { | ||
| 193 | + id: node.id, | ||
| 194 | + label: node.name, | ||
| 195 | + children: node.children | ||
| 196 | + }; | ||
| 197 | + }, | ||
| 198 | + /** 查询分类下拉树结构 */ | ||
| 199 | + getTreeselect() { | ||
| 200 | + listCategory().then(response => { | ||
| 201 | + this.categoryOptions = []; | ||
| 202 | + const menu = {id: 0, name: '商品分类', children: []}; | ||
| 203 | + menu.children = this.handleTree(response.data, "id", "pid"); | ||
| 204 | + this.categoryOptions.push(menu); | ||
| 205 | + }); | ||
| 206 | + }, | ||
| 179 | /** 取消按钮 */ | 207 | /** 取消按钮 */ |
| 180 | cancel() { | 208 | cancel() { |
| 181 | this.open = false; | 209 | this.open = false; |
| @@ -208,12 +236,14 @@ export default { | @@ -208,12 +236,14 @@ export default { | ||
| 208 | /** 新增按钮操作 */ | 236 | /** 新增按钮操作 */ |
| 209 | handleAdd() { | 237 | handleAdd() { |
| 210 | this.reset(); | 238 | this.reset(); |
| 239 | + this.getTreeselect(); | ||
| 211 | this.open = true; | 240 | this.open = true; |
| 212 | this.title = "添加品牌"; | 241 | this.title = "添加品牌"; |
| 213 | }, | 242 | }, |
| 214 | /** 修改按钮操作 */ | 243 | /** 修改按钮操作 */ |
| 215 | handleUpdate(row) { | 244 | handleUpdate(row) { |
| 216 | this.reset(); | 245 | this.reset(); |
| 246 | + this.getTreeselect(); | ||
| 217 | const id = row.id; | 247 | const id = row.id; |
| 218 | getBrand(id).then(response => { | 248 | getBrand(id).then(response => { |
| 219 | this.form = response.data; | 249 | this.form = response.data; |
| @@ -275,3 +305,10 @@ export default { | @@ -275,3 +305,10 @@ export default { | ||
| 275 | } | 305 | } |
| 276 | }; | 306 | }; |
| 277 | </script> | 307 | </script> |
| 308 | + | ||
| 309 | +<style scoped lang="scss"> | ||
| 310 | +// | ||
| 311 | +.img-height { | ||
| 312 | + height: 150px; | ||
| 313 | +} | ||
| 314 | +</style> |