| | |
| | | <el-form-item label="商品名称" prop="name"> |
| | | <el-input v-model="form.name" placeholder="请输入商品名称" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item v-if="form.type==2" label="商品标签" prop="labels"> |
| | | <el-input v-model="form.labels" placeholder="请输入标签,多个用“,”隔开,不超过5个" v-trim/> |
| | | <el-form-item label="商品分类" prop="categoryId"> |
| | | <el-select v-model="form.categoryId" placeholder="请选择所属分类" clearable filterable > |
| | | <el-option |
| | | v-for="item in labels()" |
| | | :key="item.id" |
| | | :value="item.id" |
| | | :label="item.name" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <template v-else> |
| | | <el-form-item label="商品分类" prop="categoryId"> |
| | | <el-select |
| | | v-model="form.categoryId" |
| | | placeholder="请选择所属分类" |
| | | > |
| | | <el-option |
| | | v-for="item in labels()" |
| | | :key="item.id" |
| | | :value="item.id" |
| | | :label="item.name" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="商品品牌" prop="brandId"> |
| | | <el-select |
| | | v-model="form.brandId" |
| | | placeholder="请选择商品品牌" |
| | | > |
| | | <el-option |
| | | v-for="item in brands()" |
| | | :key="item.id" |
| | | :value="item.id" |
| | | :label="item.name" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </template> |
| | | <el-form-item label="商品品牌" prop="brandId"> |
| | | <el-select v-model="form.brandId" placeholder="请选择商品品牌" clearable filterable > |
| | | <el-option |
| | | v-for="item in brands()" |
| | | :key="item.id" |
| | | :value="item.id" |
| | | :label="item.name" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="商品主图" prop="imgurl"> |
| | | <UploadAvatarImage |
| | | :file="{ 'imgurlfull': form.imgurlfull, 'imgurl': form.imgurl }" |
| | | @uploadSuccess="uploadAvatarSuccess" |
| | | @uploadEnd="isUploading = false" |
| | | @uploadBegin="isUploading = true" |
| | | /> |
| | | <div style="display: flex; align-items: center;justify-content: center; height: 100%; width: 100%"> |
| | | <UploadAvatarImage |
| | | :file="{ 'imgurlfull': form.imgurlfull, 'imgurl': form.imgurl}" |
| | | :uploadData="{folder:'goods'}" |
| | | @uploadSuccess="uploadAvatarSuccess" |
| | | @uploadEnd="isUploading = false" |
| | | @uploadBegin="isUploading = true" |
| | | style=" width: 120px;" |
| | | /> |
| | | <div class="tip-warn" style=" margin-left: 20px; margin-top: 30px;"> |
| | | 建议尺寸:100px X 100px |
| | | 支持png、jpg、jpeg格式,大小不超过2M,上传图片不允许涉及政治敏感与色情 |
| | | </div> |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item v-if="form.type==2" label="咖豆风味" prop="fileList"> |
| | | <UploadAvatarImage |
| | | :file="{ 'imgurlfull': form.imgurlfull, 'imgurl': form.imgurl }" |
| | | @uploadSuccess="uploadAvatarSuccess" |
| | | @uploadEnd="isUploading = false" |
| | | @uploadBegin="isUploading = true" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item v-else label="商品轮播图" prop="fileList"> |
| | | <el-form-item label="商品轮播图" prop="fileList"> |
| | | <UploadImage |
| | | :fileList="form.fileList" |
| | | :uploadData="{folder:'goods'}" |
| | | @beginUpload="isUploading=true" |
| | | @endUpload="isUploading=false"/> |
| | | <p class="tip-warn"> |
| | | 建议尺寸:750px X 750px,上限6张 |
| | | 支持png、jpg、jpeg格式,大小不超过2M,上传图片不允许涉及政治敏感与色情, |
| | | </p> |
| | | </el-form-item> |
| | | <el-form-item label="展示价格" prop="price"> |
| | | <el-input v-model="form.price" placeholder="请输入展示价格" v-trim> |
| | | <template slot="append">{{ form.type != 1 ? '元' : '咖豆' }}</template> |
| | | <el-form-item label="出厂价(元)" prop="price"> |
| | | <el-input type="number" v-model="form.price" placeholder="请输入出厂价" v-trim> <template slot="append"> 元</template> </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="销售价(元)" prop="skuPrice"> |
| | | <el-input type="number" v-model="form.skuPrice" placeholder="请输入销售价" v-trim> <template slot="append"> 元</template> </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="划线价(元)" prop="showPrice"> |
| | | <el-input type="number" v-model="form.showPrice" placeholder="请输入线价" v-trim> <template slot="append"> 元</template> </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="积分抵扣额度" prop="deductRata"> |
| | | <el-input type="number" v-model="form.deductRata" placeholder="请输入积分抵扣额度" v-trim> |
| | | <template slot="append">%</template> |
| | | </el-input> |
| | | <p class="tip-warn" style="margin-bottom: 1px;"><i class="el-icon-warning"></i>提醒:积分可抵扣金额占商品零售价的百分比,0.1%~100%之间 </p> |
| | | </el-form-item> |
| | | <el-form-item label="库存量" prop="stockNum"> |
| | | <el-input type="number" v-model="form.stockNum" placeholder="请输入商品库存量" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="商品单位" prop="unitName"> |
| | | <el-input v-model="form.unitName" placeholder="请输入商品单位" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="初始销量" prop="salenum"> |
| | | <el-input type="number" v-model="form.salenum" placeholder="请输入初始销量" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="商品重量" prop="weight"> |
| | | <el-input type="number" v-model="form.weight" placeholder="请输入商品重量" v-trim> |
| | | <template slot="append">kg</template> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item v-if="form.type!=2" label="初始销量" prop="salenum"> |
| | | <el-input v-model="form.salenum" placeholder="请输入初始销量" v-trim/> |
| | | <el-form-item label="是否上架" prop="status"> |
| | | <el-radio-group v-model="form.status"> |
| | | <el-radio :value="1" :label="1" >上架</el-radio> |
| | | <el-radio :value="0" :label="0" >下架</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="使用商品品牌" prop="brandIdList"> |
| | | <el-select v-model="form.brandIdList" placeholder="请选择商品品牌" clearable multiple @change="changeBrand"> |
| | | <el-option |
| | | v-for="item in applyBrands" |
| | | :key="item.id" |
| | | :value="item.id" |
| | | :label="item.name" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <div v-if="form.brandIdList && form.brandIdList.length" style="border:1px solid #f2f2f2; margin-left: 150px;width: 700px;padding: 20px 0 0px 0;margin-bottom: 20px;" class="el-form-item__content"> |
| | | <!-- |
| | | <span style="line-height: 32px;font-size: 14px;"><b style="color: #F56C6C;margin-right: 4px;font-size: 11px;">*</b>{{'【'+(item.name)+'】系列:'}}</span> |
| | | --> |
| | | <el-form-item v-for="(item,index) in applyBrands" v-if="item.show" :key="'warning_'+index" style="display: block;width: 100%;" :label="'【'+(item.name)+'】系列'" > |
| | | <el-select v-model="item.childIdList" filterable multiple style=" width: 500px;" clearable placeholder="请选择品牌系列" > |
| | | <el-option v-for="item in item.childList" :label="item.name" :value="item.id" :key="'brand_'+index+item.id"> </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <!-- |
| | | <el-button type="danger" style="margin-left: 10px;height: 32px; " @click="delDo(index)" v-if="index>0 || form.detailList.length>1">删除</el-button> |
| | | --> |
| | | </div> |
| | | <el-form-item label="商品详情" prop="content"> |
| | | <RichEditor :content="{ content : form.content}" @edit="form.content=$event" /> |
| | | <RichEditor :richData="form.content" :styleEditor="'border: 1px solid #ccc;display: inline-block;height:500px;'" @getWangedditor="getWangedditor" :readonly="false"/> |
| | | </el-form-item> |
| | | </el-form> |
| | | </GlobalWindow> |
| | |
| | | import UploadImage from '@/components/common/UploadImage' |
| | | import UploadAvatarImage from '@/components/common/UploadAvatarImage' |
| | | import RichEditor from '@/components/common/RichEditor' |
| | | import { findAll as labelList } from '@/api/business/labels' |
| | | export default { |
| | | name: 'OperaGoodsWindow', |
| | | extends: BaseOpera, |
| | |
| | | imgurlfull: '', |
| | | salenum: '', |
| | | type: 0, |
| | | creator: '', |
| | | createDate: '', |
| | | editor: '', |
| | | editDate: '', |
| | | isdeleted: '', |
| | | remark: '', |
| | | info: '', |
| | | content: '', |
| | | sortnum: '', |
| | | looknum: '', |
| | | type: '', |
| | | status: '', |
| | | isrec: '', |
| | | styleImg: '', |
| | | labels: '' |
| | | skuPrice: null, |
| | | status: 1, |
| | | showPrice: null, |
| | | deductRata: null, |
| | | weight: null, |
| | | unitName: '', |
| | | stockNum: null, |
| | | brandIdList: [], |
| | | brandList: [] |
| | | }, |
| | | applyBrands: [], |
| | | // 验证规则 |
| | | rules: { |
| | | name: [{ required: true, message: '请输入商品名称', tigger: 'blur' }], |
| | | categoryId: [{ required: true, message: '请选择所属分类' }], |
| | | brandIdList: [{ required: true, message: '请录入适用品牌和系列信息' }], |
| | | weight: [{ required: true, message: '请输入商品重量' }], |
| | | price: [{ required: true, message: '请输入商品出厂价' }], |
| | | skuPrice: [{ required: true, message: '请输入商品零售价' }], |
| | | deductRata: [{ required: true, message: '请输入积分抵扣比例' }], |
| | | status: [{ required: true, message: '请选择是否上架' }] |
| | | } |
| | | } |
| | | }, |
| | |
| | | api: '/business/goods', |
| | | 'field.id': 'id' |
| | | }) |
| | | this.loadBrandList() |
| | | }, |
| | | methods: { |
| | | isSeletedBrand (val) { |
| | | var r = false |
| | | if (!this.form.brandIdList || !this.form.brandIdList.length) { |
| | | return false |
| | | } |
| | | this.form.brandIdList.forEach(item => { |
| | | if (item === val.id) { |
| | | r = true |
| | | } |
| | | }) |
| | | return r |
| | | }, |
| | | changeBrand () { |
| | | this.applyBrands.forEach(item => { |
| | | item.show = this.isSeletedBrand(item) |
| | | }) |
| | | console.log(this.form.brandIdList, this.applyBrands) |
| | | }, |
| | | loadBrandList () { |
| | | labelList({ |
| | | type: 14 // 适应商品品牌 |
| | | }) |
| | | .then(res => { |
| | | this.applyBrands = res |
| | | this.applyBrands.forEach(item => { |
| | | item.show = this.isSeletedBrand(item) |
| | | }) |
| | | }) |
| | | }, |
| | | getWangedditor (val) { |
| | | this.form.content = val |
| | | }, |
| | | open (title, target, type) { |
| | | this.title = title |
| | | this.visible = true |
| | | this.form.brandIdList = [] |
| | | this.form.fileList = [] |
| | | this.form.imgurl='' |
| | | this.form.imgurlfull='' |
| | | // debugger |
| | | // 新建 |
| | | if (target == null) { |
| | |
| | | this.form[this.configData['field.id']] = null |
| | | this.form.type = type |
| | | }) |
| | | this.loadBrandList() |
| | | return |
| | | } |
| | | // 编辑 |
| | | this.$nextTick(() => { |
| | | this.$nextTick(async () => { |
| | | for (const key in this.form) { |
| | | this.form[key] = target[key] |
| | | } |
| | | this.form.type = type |
| | | await this.loadInfo(this.form.id) |
| | | if (this.form.imgurl) { |
| | | this.form.imgurlfull = target.resourcePath + target.imgurl |
| | | } |
| | | }) |
| | | }, |
| | | uploadAvatarSuccess(file) { |
| | | loadInfo () { |
| | | this.form.brandIdList =[] |
| | | this.form.fileList =[] |
| | | this.api.detail(this.form.id).then(res => { |
| | | if (res && res.brandList) { |
| | | this.form.brandList = res.brandList |
| | | res.brandList.forEach(item => { |
| | | this.form.brandIdList.push(item.id) |
| | | }) |
| | | } |
| | | if (res.fileList && res.fileList.length) { |
| | | res.fileList.forEach(item => { |
| | | this.form.fileList.push( |
| | | { |
| | | fileurl: item.fileurl, |
| | | name: item.fileName, |
| | | url: res.resourcePath + item.fileurl |
| | | } |
| | | ) |
| | | }) |
| | | console.log(this.form.fileList) |
| | | } |
| | | this.loadBrandList() |
| | | }) |
| | | }, |
| | | uploadAvatarSuccess (file) { |
| | | this.form.imgurlfull = file.imgurlfull |
| | | this.form.imgurl = file.imgurl |
| | | }, |
| | | confirm () { |
| | | this.form.brandList = [] |
| | | this.applyBrands.forEach(item => { |
| | | if (item.show) { |
| | | this.form.brandList.push(item) |
| | | } |
| | | }) |
| | | if (this.form.id == null || this.form.id === '') { |
| | | this.__confirmCreate() |
| | | return |
| | | } |
| | | this.__confirmEdit() |
| | | } |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | |
| | | width: 100%; |
| | | } |
| | | } |
| | | ::v-deep .el-form-item__label{ |
| | | width: 150px !important; |
| | | } |
| | | </style> |