Skip to content

Commit

Permalink
添加、修改商品属性功能
Browse files Browse the repository at this point in the history
  • Loading branch information
zhh committed May 21, 2018
1 parent 49021d9 commit afb0ed0
Show file tree
Hide file tree
Showing 8 changed files with 249 additions and 11 deletions.
22 changes: 22 additions & 0 deletions src/api/productAttr.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,25 @@ export function deleteProductAttr(data) {
data:data
})
}

export function createProductAttr(data) {
return request({
url:'/productAttribute/create',
method:'post',
data:data
})
}

export function updateProductAttr(id,data) {
return request({
url:'/productAttribute/update/'+id,
method:'post',
data:data
})
}
export function getProductAttr(id) {
return request({
url:'/productAttribute/'+id,
method:'get'
})
}
9 changes: 8 additions & 1 deletion src/router/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,17 @@ export const constantRouterMap = [
{
path: 'addProductAttr',
name: 'addProductAttr',
component: () => import('@/views/pms/productAttr/index'),
component: () => import('@/views/pms/productAttr/addProductAttr'),
meta: {title: '添加商品属性'},
hidden:true
},
{
path: 'updateProductAttr',
name: 'updateProductAttr',
component: () => import('@/views/pms/productAttr/updateProductAttr'),
meta: {title: '修改商品属性'},
hidden:true
},
{
path: 'brand',
name: 'brand',
Expand Down
10 changes: 10 additions & 0 deletions src/styles/index.scss
Original file line number Diff line number Diff line change
Expand Up @@ -99,3 +99,13 @@ a:hover {
float: right;
margin-top: 20px;
}

//添加、更新表单样式
.form-container {
position: absolute;
left: 0;
right: 0;
width: 600px;
padding: 35px 35px 15px 35px;
margin: 20px auto;
}
8 changes: 0 additions & 8 deletions src/views/pms/brand/components/BrandDetail.vue
Original file line number Diff line number Diff line change
Expand Up @@ -140,14 +140,6 @@
}
</script>
<style>
.form-container {
position: absolute;
left: 0;
right: 0;
width: 520px;
padding: 35px 35px 15px 35px;
margin: 20px auto;
}
</style>


15 changes: 15 additions & 0 deletions src/views/pms/productAttr/addProductAttr.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<template>
<product-attr-detail :is-edit='false'></product-attr-detail>
</template>

<script>
import ProductAttrDetail from './components/ProductAttrDetail'
export default {
name: 'addProductAttr',
components: { ProductAttrDetail }
}
</script>

<style scoped>
</style>
177 changes: 177 additions & 0 deletions src/views/pms/productAttr/components/ProductAttrDetail.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
<template>
<div class="form-container container-frame">
<el-form :model="productAttr" :rules="rules" ref="productAttrFrom" label-width="150px">
<el-form-item label="属性名称:" prop="name">
<el-input v-model="productAttr.name"></el-input>
</el-form-item>
<el-form-item label="商品类型:">
<el-select v-model="productAttr.productAttributeCategoryId" placeholder="请选择">
<el-option
v-for="item in productAttrCateList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="分类筛选样式:">
<el-radio-group v-model="productAttr.filterType">
<el-radio :label="0">普通</el-radio>
<el-radio :label="1">颜色</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="能否进行检索:">
<el-radio-group v-model="productAttr.searchType">
<el-radio :label="0">不需要检索</el-radio>
<el-radio :label="1">关键字检索</el-radio>
<el-radio :label="2">范围检索</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="商品属性关联:">
<el-radio-group v-model="productAttr.relatedStatus">
<el-radio :label="1">是</el-radio>
<el-radio :label="0">否</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="属性是否可选:">
<el-radio-group v-model="productAttr.selectType">
<el-radio :label="0">唯一</el-radio>
<el-radio :label="1">单选</el-radio>
<el-radio :label="1">复选</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="属性值的录入方式:">
<el-radio-group v-model="productAttr.inputType">
<el-radio :label="0">手工录入</el-radio>
<el-radio :label="1">从下面列表中选择</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="属性值可选值列表:">
<el-input :autosize="true" type="textarea" v-model="productAttr.inputList"></el-input>
</el-form-item>
<el-form-item label="是否支持手动新增:">
<el-radio-group v-model="productAttr.handAddStatus">
<el-radio :label="1">是</el-radio>
<el-radio :label="0">否</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="排序属性:">
<el-input v-model="productAttr.sort"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit('productAttrFrom')">提交</el-button>
<el-button v-if="!isEdit" @click="resetForm('productAttrFrom')">重置</el-button>
</el-form-item>
</el-form>
</div>
</template>

<script>
import {fetchList} from '@/api/productAttrCate'
import {createProductAttr,getProductAttr,updateProductAttr} from '@/api/productAttr'
const defaultProductAttr = {
filterType: 0,
handAddStatus: 0,
inputList: '',
inputType: 0,
name: '',
productAttributeCategoryId: 0,
relatedStatus: 0,
searchType: 0,
selectType: 0,
sort: 0,
type: 0
};
export default {
name: "ProductAttrDetail",
props: {
isEdit: {
type: Boolean,
default: false
}
},
data() {
return {
productAttr: null,
rules: {
name: [
{required: true, message: '请输入属性名称', trigger: 'blur'},
{min: 2, max: 140, message: '长度在 2 到 140 个字符', trigger: 'blur'}
]
},
productAttrCateList: null
}
},
created() {
if(this.isEdit){
getProductAttr(this.$route.query.id).then(response => {
this.productAttr = response.data;
});
}else{
this.resetProductAttr();
}
this.getCateList();
},
methods: {
getCateList() {
let listQuery = {pageNum: 1, pageSize: 100};
fetchList(listQuery).then(response => {
this.productAttrCateList = response.data.list;
});
},
resetProductAttr() {
this.productAttr = Object.assign({}, defaultProductAttr);
this.productAttr.productAttributeCategoryId = Number(this.$route.query.cid);
this.productAttr.type = Number(this.$route.query.type);
},
onSubmit(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
this.$confirm('是否提交数据', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
if(this.isEdit){
updateProductAttr(this.$route.query.id,this.productAttr).then(response=>{
this.$message({
message: '修改成功',
type: 'success',
duration: 1000
});
this.$router.back();
});
}else{
createProductAttr(this.productAttr).then(response=>{
this.$message({
message: '提交成功',
type: 'success',
duration: 1000
});
this.resetForm('productAttrFrom');
});
}
});
} else {
this.$message({
message: '验证失败',
type: 'error',
duration: 1000
});
return false;
}
});
},
resetForm(formName) {
this.$refs[formName].resetFields();
this.resetProductAttr();
}
},
}
</script>

<style scoped>
</style>
4 changes: 2 additions & 2 deletions src/views/pms/productAttr/productAttrList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@
});
},
addProductAttr() {
console.log("addProductAttr");
this.$router.push({path:'/pms/addProductAttr',query:{cid:this.$route.query.cid,type:this.$route.query.type}});
},
handleSelectionChange(val) {
this.multipleSelection = val;
Expand Down Expand Up @@ -165,7 +165,7 @@
this.getList();
},
handleUpdate(index, row) {
console.log("handleUpdate");
this.$router.push({path:'/pms/updateProductAttr',query:{id:row.id}});
},
handleDeleteProductAttr(ids) {
this.$confirm('是否要删除该属性', '提示', {
Expand Down
15 changes: 15 additions & 0 deletions src/views/pms/productAttr/updateProductAttr.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<template>
<product-attr-detail :is-edit='true'></product-attr-detail>
</template>

<script>
import ProductAttrDetail from './components/ProductAttrDetail'
export default {
name: 'updateProductAttr',
components: { ProductAttrDetail }
}
</script>

<style scoped>
</style>

0 comments on commit afb0ed0

Please sign in to comment.