Commit 89bb9f2b58e667e7b1bc81a97a5c37f15bfe7980
1 parent
ffe3ff46
1
Showing
15 changed files
with
4871 additions
and
1989 deletions
admin-web-master/src/utils/request.js
| @@ -17,11 +17,11 @@ let baseURL = '' | @@ -17,11 +17,11 @@ let baseURL = '' | ||
| 17 | if(host === 'localhost:8080' || host === 'localhost:8081' || host === 'localhost:9528'|| host === '192.168.31.45:9528'|| host === 'localhost:9529' ) { | 17 | if(host === 'localhost:8080' || host === 'localhost:8081' || host === 'localhost:9528'|| host === '192.168.31.45:9528'|| host === 'localhost:9529' ) { |
| 18 | 18 | ||
| 19 | // baseURL = 'https://jy.scjysm.asia:18086/cdwlMall/meserver/admin-server'; | 19 | // baseURL = 'https://jy.scjysm.asia:18086/cdwlMall/meserver/admin-server'; |
| 20 | - // baseURL = 'https://zhgw-uat.028wlkj.com/cdwlMall/meserver/admin-server'; | 20 | + baseURL = 'https://zhgw-uat.028wlkj.com/cdwlMall/meserver/admin-server'; |
| 21 | 21 | ||
| 22 | // baseURL = process.env.VUE_APP_DOMAIN_PREFIX_1; | 22 | // baseURL = process.env.VUE_APP_DOMAIN_PREFIX_1; |
| 23 | 23 | ||
| 24 | - baseURL = 'http://128.10.249.13:9003'; | 24 | + // baseURL = 'http://128.10.249.13:9003'; |
| 25 | 25 | ||
| 26 | } else { | 26 | } else { |
| 27 | console.error('---------------------') | 27 | console.error('---------------------') |
admin-web-master/src/views/shopRental/manage/index.vue
| @@ -170,9 +170,9 @@ | @@ -170,9 +170,9 @@ | ||
| 170 | 170 | ||
| 171 | </el-form> | 171 | </el-form> |
| 172 | <div style="display: flex; justify-content: flex-end; align-items: center;padding: 20px 50px;"> | 172 | <div style="display: flex; justify-content: flex-end; align-items: center;padding: 20px 50px;"> |
| 173 | - <el-button @click="OA" style="background-color: #3F9B6A;color: #fff;">确定</el-button> | ||
| 174 | <el-button @click="openoa =false" class="buttonHover" | 173 | <el-button @click="openoa =false" class="buttonHover" |
| 175 | style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;">取消</el-button> | 174 | style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;">取消</el-button> |
| 175 | + <el-button @click="OA" style="background-color: #3F9B6A;color: #fff;">确定</el-button> | ||
| 176 | </div> | 176 | </div> |
| 177 | </el-dialog> | 177 | </el-dialog> |
| 178 | </div> | 178 | </div> |
merchant-web-master/src/utils/request.js
| @@ -19,8 +19,9 @@ let PREFIX; | @@ -19,8 +19,9 @@ let PREFIX; | ||
| 19 | if( host == 'localhost:9528' || host == '8.130.38.56:8027' || host == 'localhost:9529'|| host == 'localhost:9530'){ | 19 | if( host == 'localhost:9528' || host == '8.130.38.56:8027' || host == 'localhost:9529'|| host == 'localhost:9530'){ |
| 20 | // 其他情况的默认值 | 20 | // 其他情况的默认值 |
| 21 | // PREFIX = 'http://8.130.38.56:8027/business-server'; | 21 | // PREFIX = 'http://8.130.38.56:8027/business-server'; |
| 22 | - PREFIX = 'https://jy.scjysm.asia:18086/cdwlMall/business-server'; | ||
| 23 | - // PREFIX = 'http://128.10.249.48:9004'; | 22 | + // PREFIX = 'https://jy.scjysm.asia:18086/cdwlMall/business-server'; |
| 23 | + // PREFIX = 'https://zhgw-uat.028wlkj.com/cdwlMall/business-server' | ||
| 24 | + PREFIX = 'http://128.10.249.23:9004'; | ||
| 24 | }else{ | 25 | }else{ |
| 25 | // PREFIX = '/merchant-business'; | 26 | // PREFIX = '/merchant-business'; |
| 26 | // PREFIX = 'http://8.130.38.56:9004'; | 27 | // PREFIX = 'http://8.130.38.56:9004'; |
merchant-web-master/src/views/commodity/commoditySystem/addCommodity copy.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div> | ||
| 3 | + <el-card class="box-card"> | ||
| 4 | + <div slot="header" style="display:flex;align-items: center; justify-content: space-between;"> | ||
| 5 | + <div> | ||
| 6 | + <span v-if="!productId" class="addTitle">新增商品</span> | ||
| 7 | + <span v-else class="addTitle">编辑商品</span> | ||
| 8 | + </div> | ||
| 9 | + <div> | ||
| 10 | + <el-button v-if="active" class="buttonHover" | ||
| 11 | + style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;" @click="back">取消</el-button> | ||
| 12 | + <el-button v-if="active" style="background-color: #3F9B6A;color: #fff" @click="next">下一步</el-button> | ||
| 13 | + <el-button v-if="!active" style="background-color: #3F9B6A;color: #fff" @click="save">保存</el-button> | ||
| 14 | + <el-button v-if="!active" style="background-color: #3F9B6A;color: #fff" @click="last">上一步</el-button> | ||
| 15 | + </div> | ||
| 16 | + </div> | ||
| 17 | + <!-- 步骤条 --> | ||
| 18 | + <div class="stepsColor common"> | ||
| 19 | + <div class="stepsOne common"> | ||
| 20 | + <div :class="active ? 'one_class common' : 't_class common'">1</div> | ||
| 21 | + <div :class="active ? 'two_class' : 'w_class'">基本属性&商品描述</div> | ||
| 22 | + </div> | ||
| 23 | + <div class="line" /> | ||
| 24 | + <div class="stepsTwo common"> | ||
| 25 | + <div :class="active ? 't_class common' : 'one_class common'">2</div> | ||
| 26 | + <div :class="active ? 'w_class' : 'two_class' ">基本属性&商品描述</div> | ||
| 27 | + </div> | ||
| 28 | + </div> | ||
| 29 | + </el-card> | ||
| 30 | + <!-- 商品 --> | ||
| 31 | + <div class="addCom common"> | ||
| 32 | + <div v-if="active"> | ||
| 33 | + <el-form ref="form" :model="form" :rules="rules" label-width="120px" style="padding:10px 20px;"> | ||
| 34 | + <div class="leftCom"> | ||
| 35 | + <el-form-item label="商品名称" prop="productName"> | ||
| 36 | + <el-input v-model="form.productName" maxlength="50" show-word-limit /> | ||
| 37 | + </el-form-item> | ||
| 38 | + <el-form-item label="卖点简介"> | ||
| 39 | + <el-input v-model="form.productBrief" maxlength="50" show-word-limit /> | ||
| 40 | + </el-form-item> | ||
| 41 | + <el-form-item> | ||
| 42 | + <Tinymce v-if="showTinymce" ref="content" v-model="form.productText" class="tinymce-wrap" :height="200" /> | ||
| 43 | + </el-form-item> | ||
| 44 | + </div> | ||
| 45 | + <div class="rightCom"> | ||
| 46 | + <el-form-item label="官方分类" prop="classifyId"> | ||
| 47 | + <el-cascader | ||
| 48 | + v-model="form.classifyId" | ||
| 49 | + :options="classifyList" | ||
| 50 | + clearable | ||
| 51 | + :props="{ | ||
| 52 | + checkStrictly: false, | ||
| 53 | + label:'categoryName', | ||
| 54 | + value:'id', | ||
| 55 | + children:'childs' | ||
| 56 | + }" | ||
| 57 | + @change="handleChangeCascader" | ||
| 58 | + /> | ||
| 59 | + </el-form-item> | ||
| 60 | + | ||
| 61 | + <el-form-item label="商品分组" prop="shopGroupId"> | ||
| 62 | + <el-select v-model="form.shopGroupId" placeholder="请选择商品分组" clearable> | ||
| 63 | + <el-option | ||
| 64 | + v-for="(item,index) in groupList" | ||
| 65 | + :key="index" | ||
| 66 | + :label="item.groupName" | ||
| 67 | + :value="item.shopGroupId" | ||
| 68 | + /> | ||
| 69 | + </el-select> | ||
| 70 | + </el-form-item> | ||
| 71 | + <el-form-item label="品牌"> | ||
| 72 | + <el-select | ||
| 73 | + v-model="form.brandId" | ||
| 74 | + clearable | ||
| 75 | + placeholder="请选择品牌" | ||
| 76 | + > | ||
| 77 | + <el-option | ||
| 78 | + v-for="item in brandList" | ||
| 79 | + :key="item.id" | ||
| 80 | + :label="item.brandName" | ||
| 81 | + :value="item.id" | ||
| 82 | + /> | ||
| 83 | + </el-select> | ||
| 84 | + </el-form-item> | ||
| 85 | + <el-form-item class="form-item-long" label="供应商"> | ||
| 86 | + <el-input v-model="form.supplierName" maxlength="30" show-word-limit placeholder="请输入供应商名称" /> | ||
| 87 | + </el-form-item> | ||
| 88 | + <el-form-item class="form-item-long" label="成本价(/元)" prop="cost"> | ||
| 89 | + <el-input v-model.number="form.cost" type="number" maxlength="10" show-word-limit placeholder="请输入成本价" /> | ||
| 90 | + </el-form-item> | ||
| 91 | + <el-form-item label="需要物流" prop="ifLogistics"> | ||
| 92 | + <el-radio-group v-model="form.ifLogistics"> | ||
| 93 | + <el-radio :label="1">是</el-radio> | ||
| 94 | + <el-radio :label="0">否</el-radio> | ||
| 95 | + </el-radio-group> | ||
| 96 | + </el-form-item> | ||
| 97 | + <el-form-item label="上架状态" prop="shelveState"> | ||
| 98 | + <el-radio-group v-model="form.shelveState"> | ||
| 99 | + <el-radio :label="1">上架</el-radio> | ||
| 100 | + <el-radio :label="0">下架</el-radio> | ||
| 101 | + </el-radio-group> | ||
| 102 | + </el-form-item> | ||
| 103 | + <el-form-item label="允许超卖" prop="ifOversold"> | ||
| 104 | + <el-radio-group v-model="form.ifOversold"> | ||
| 105 | + <el-radio :label="1">允许</el-radio> | ||
| 106 | + <el-radio :label="0">不允许</el-radio> | ||
| 107 | + </el-radio-group> | ||
| 108 | + </el-form-item> | ||
| 109 | + <el-form-item label="积分兑换" prop="ifCredit"> | ||
| 110 | + <el-radio-group v-model="form.ifCredit"> | ||
| 111 | + <el-radio :label="1">允许</el-radio> | ||
| 112 | + <el-radio :label="0">不允许</el-radio> | ||
| 113 | + </el-radio-group> | ||
| 114 | + <p style="color: #cf0f0f">开启积分兑换后,积分所抵扣的金额由商户承担</p> | ||
| 115 | + </el-form-item> | ||
| 116 | + <el-form-item v-if="form.ifCredit" class="form-item-long" label="单笔最大抵扣" prop="creditLimit"> | ||
| 117 | + <!-- <el-input v-model="form.creditLimit" type="number" placeholder="请输入单笔最大抵扣" /> --> | ||
| 118 | + <el-input-number v-model="form.creditLimit" :controls="false" :min="0" :precision="0" placeholder="请输入单笔最大抵扣" /> | ||
| 119 | + <p style="color: #cf0f0f; height: 25px; line-height: 25px;margin-top: 10px">限制一笔订单中该商品最多抵扣多少积分</p> | ||
| 120 | + <p style="color: #cf0f0f; height: 25px; line-height: 25px">( 注:1积分 = {{ integralProportion }}元 请输入整数 )</p> | ||
| 121 | + </el-form-item> | ||
| 122 | + <!-- <el-form-item label="花呗分期">--> | ||
| 123 | + <!-- <el-radio-group v-model="form.ifHuabei">--> | ||
| 124 | + <!-- <el-radio :label="1">支持</el-radio>--> | ||
| 125 | + <!-- <el-radio :label="0">不支持</el-radio>--> | ||
| 126 | + <!-- </el-radio-group>--> | ||
| 127 | + <!-- </el-form-item>--> | ||
| 128 | + </div> | ||
| 129 | + </el-form> | ||
| 130 | + </div> | ||
| 131 | + <div v-if="!active" class="centerCom"> | ||
| 132 | + <el-form ref="form" :model="params" label-width="80px"> | ||
| 133 | + <StyleInformation :form="params" /> | ||
| 134 | + </el-form> | ||
| 135 | + </div> | ||
| 136 | + </div> | ||
| 137 | + | ||
| 138 | + <!-- 弹窗 --> | ||
| 139 | + <el-dialog | ||
| 140 | + :visible.sync="dialogVisible" | ||
| 141 | + class="check-image-dialog" | ||
| 142 | + title="查看图片" | ||
| 143 | + center="center" | ||
| 144 | + > | ||
| 145 | + <img width="100%" :src="dialogImageUrl" alt> | ||
| 146 | + </el-dialog> | ||
| 147 | + </div> | ||
| 148 | +</template> | ||
| 149 | + | ||
| 150 | +<script> | ||
| 151 | +import Tinymce from '@/components/Tinymce' | ||
| 152 | +import { | ||
| 153 | + getGroupSelect, | ||
| 154 | + getClassify, | ||
| 155 | + getClassifyAdd, | ||
| 156 | + getClassifyGetById, | ||
| 157 | + getClassifyUpdate, | ||
| 158 | + getBrandList | ||
| 159 | +} from '@/api/commodity' | ||
| 160 | +import { | ||
| 161 | + getSelect | ||
| 162 | +} from '@/api/account'; | ||
| 163 | +import { uploadUrl } from '@/utils/request' | ||
| 164 | +import StyleInformation from './addComponent' | ||
| 165 | +export default { | ||
| 166 | + components: { | ||
| 167 | + Tinymce, | ||
| 168 | + StyleInformation | ||
| 169 | + }, | ||
| 170 | + props: { | ||
| 171 | + productId: { | ||
| 172 | + type: Number, | ||
| 173 | + default: 0 | ||
| 174 | + }, | ||
| 175 | + showTinymce: { | ||
| 176 | + type: Boolean | ||
| 177 | + } | ||
| 178 | + }, | ||
| 179 | + watch: { | ||
| 180 | + | ||
| 181 | + }, | ||
| 182 | + data() { | ||
| 183 | + // const checkCreditLimit = (rule, value, callback) => { | ||
| 184 | + // console.log(this.form.ifCredit) | ||
| 185 | + // if (this.form.ifCredit) { | ||
| 186 | + // callback(new Error('当选择允许积分兑换时,必须填写该值')) | ||
| 187 | + // } | ||
| 188 | + // const reg = /^[1-9]\d*$/ | ||
| 189 | + // if (value === '' || value === undefined || value === null) { | ||
| 190 | + // callback(); | ||
| 191 | + // } else { | ||
| 192 | + // if ((!reg.test(value)) && value !== '') { | ||
| 193 | + // callback(new Error('请输入正确的价格')); | ||
| 194 | + // } else { | ||
| 195 | + // callback(); | ||
| 196 | + // } | ||
| 197 | + // } | ||
| 198 | + // callback() | ||
| 199 | + // } | ||
| 200 | + return { | ||
| 201 | + brandList: [], | ||
| 202 | + active: 1, | ||
| 203 | + action: uploadUrl, | ||
| 204 | + form: { | ||
| 205 | + brandId: null, // 品牌ID | ||
| 206 | + productName: '', // 商品名称 | ||
| 207 | + productBrief: '', // 商品简介 | ||
| 208 | + shopGroupId: '', // 商品分组id | ||
| 209 | + classifyId: '', // 分类id | ||
| 210 | + supplierName: '', // 供应商名称 | ||
| 211 | + cost:null,//成本价 | ||
| 212 | + ifLogistics: '', // 是否需要物流 1-是 0-否 | ||
| 213 | + shelveState: '', // 是否上架 1-上架 0-不上架 | ||
| 214 | + ifOversold: '', // 是否允许超卖 1-是 0-否 | ||
| 215 | + ifCredit: '', // 是否支持积分兑换 1-是 0-否 | ||
| 216 | + creditLimit: '', // 单笔订单限制使用多少积分 | ||
| 217 | + ifHuabei: 1, // 是否支持花呗分期 1-是 0-否 | ||
| 218 | + productText: '', // 商品描述(富文本) | ||
| 219 | + images: [], // "图片地址" | ||
| 220 | + deletes: [], // 删除的规格id数组 | ||
| 221 | + names: [ | ||
| 222 | + { | ||
| 223 | + code: '', // 级别 | ||
| 224 | + skuName: '', // 规格名 | ||
| 225 | + values: [ | ||
| 226 | + { | ||
| 227 | + valueCode: '', // 级别 | ||
| 228 | + skuValue: '', // 规格值 | ||
| 229 | + image: '' // 图片 | ||
| 230 | + } | ||
| 231 | + ] | ||
| 232 | + } | ||
| 233 | + ], | ||
| 234 | + skus: [ | ||
| 235 | + { | ||
| 236 | + skuName: '', // 规格名称 | ||
| 237 | + skuValue: '', // 规格值 | ||
| 238 | + price: '', // 售价 | ||
| 239 | + originalPrice: '', // 原价 | ||
| 240 | + stockNumber: '', // 库存数量 | ||
| 241 | + weight: '', // 重量 | ||
| 242 | + skuImage: '', // 配图地址 | ||
| 243 | + style: '' // 款式 1-单款式 2-多款式 | ||
| 244 | + } | ||
| 245 | + ] | ||
| 246 | + }, | ||
| 247 | + params: { | ||
| 248 | + applyPrice: 0, | ||
| 249 | + attrStyle: 0, | ||
| 250 | + categoryId: '', | ||
| 251 | + oversold: 1, | ||
| 252 | + collects: 0, | ||
| 253 | + groupId: '', | ||
| 254 | + imgs: [], | ||
| 255 | + deletes: [], // 删除规格数据 | ||
| 256 | + isDelete: 0, | ||
| 257 | + limitCount: 0, | ||
| 258 | + minusStock: '', | ||
| 259 | + needLogistics: 1, | ||
| 260 | + platform: '', | ||
| 261 | + price: 0, | ||
| 262 | + productCode: '', | ||
| 263 | + productName: '', | ||
| 264 | + sellCount: 0, | ||
| 265 | + sellDesc: '', | ||
| 266 | + sellType: '', | ||
| 267 | + shortName: '', | ||
| 268 | + skuAttrList: [ | ||
| 269 | + { | ||
| 270 | + code: '', | ||
| 271 | + skuName: '', | ||
| 272 | + needImg: false, | ||
| 273 | + values: [ | ||
| 274 | + { | ||
| 275 | + skuValue: '', | ||
| 276 | + valueCode: '', | ||
| 277 | + image: '' | ||
| 278 | + } | ||
| 279 | + ] | ||
| 280 | + } | ||
| 281 | + ], | ||
| 282 | + skuList: [ | ||
| 283 | + { | ||
| 284 | + isDelete: '', | ||
| 285 | + skuAttrCodeDTOList: [ | ||
| 286 | + { | ||
| 287 | + code: '', | ||
| 288 | + valueCode: '' | ||
| 289 | + } | ||
| 290 | + ], | ||
| 291 | + skuAttrList: [], | ||
| 292 | + sku: '', | ||
| 293 | + skuImg: '', | ||
| 294 | + price: 0, | ||
| 295 | + originalPrice: 0, | ||
| 296 | + stockNumber: 0, | ||
| 297 | + weight: 0 | ||
| 298 | + } | ||
| 299 | + ], | ||
| 300 | + sortOrder: '', | ||
| 301 | + status: '', | ||
| 302 | + stock: '', | ||
| 303 | + supplierName: '', | ||
| 304 | + cost:null, | ||
| 305 | + views: '', | ||
| 306 | + weight: '' | ||
| 307 | + }, | ||
| 308 | + imgList: [], | ||
| 309 | + groupList: [], | ||
| 310 | + classifyList: [], | ||
| 311 | + dialogImageUrl: '', | ||
| 312 | + dialogVisible: false, | ||
| 313 | + rules: { | ||
| 314 | + productName: [{ required: true, message: '请输入商品名称', trigger: 'blur' }], | ||
| 315 | + shopGroupId: [{ required: true, message: '请选择商品分组', trigger: 'change' }], | ||
| 316 | + classifyId: [{ required: true, message: '请选择商品分类', trigger: 'change' }], | ||
| 317 | + cost:[{ required: true, message: '请输入成本价', trigger: 'change' }], | ||
| 318 | + ifLogistics: [{ required: true, message: '请选择是否需要物流', trigger: 'change' }], | ||
| 319 | + shelveState: [{ required: true, message: '请选择是否上架', trigger: 'change' }], | ||
| 320 | + ifOversold: [{ required: true, message: '请选择是否允许超卖', trigger: 'change' }], | ||
| 321 | + ifCredit: [{ required: true, message: '请选择是否支持积分兑换', trigger: 'change' }], | ||
| 322 | + creditLimit: [{ required: true, message: '请输入单笔最大抵扣', trigger: 'blur' }] | ||
| 323 | + }, | ||
| 324 | + integralList: [], | ||
| 325 | + integralProportion: '' // 积分兑换金额比例 | ||
| 326 | + } | ||
| 327 | + }, | ||
| 328 | + watch: { | ||
| 329 | + productId: { | ||
| 330 | + handler(nVal, oVal) { | ||
| 331 | + if (nVal) { | ||
| 332 | + // this.details() | ||
| 333 | + } | ||
| 334 | + } | ||
| 335 | + }, | ||
| 336 | + }, | ||
| 337 | + mounted() { | ||
| 338 | + this.groups() | ||
| 339 | + this.selectList() | ||
| 340 | + this.getBrandList() | ||
| 341 | + // if (this.productId) { | ||
| 342 | + // this.details() | ||
| 343 | + // } | ||
| 344 | + this.getCredit() | ||
| 345 | + }, | ||
| 346 | + methods: { | ||
| 347 | + handleChangeCascader() { | ||
| 348 | + console.log(this.form.classifyId) | ||
| 349 | + }, | ||
| 350 | + async getBrandList() { | ||
| 351 | + const { data } = await getBrandList() | ||
| 352 | + this.brandList = data | ||
| 353 | + }, | ||
| 354 | + async getCredit() { | ||
| 355 | + const res = await getSelect({ dictName: 'CREDIT_CONFIG' }) | ||
| 356 | + this.integralList = res.data | ||
| 357 | + this.integralList.forEach((item) => { | ||
| 358 | + if (item.dictName === 'credit_exchange_rate') { | ||
| 359 | + this.integralProportion = item.dictDescribe | ||
| 360 | + } | ||
| 361 | + }) | ||
| 362 | + }, | ||
| 363 | + handleImageSuccess(response) { | ||
| 364 | + const { url } = response.data | ||
| 365 | + this.imgList.push(url) | ||
| 366 | + }, | ||
| 367 | + handlePictureCardPreview(file) { | ||
| 368 | + this.dialogImageUrl = file.imgPath | ||
| 369 | + this.dialogVisible = true | ||
| 370 | + }, | ||
| 371 | + // 移除图片 | ||
| 372 | + handleRemove(file) { | ||
| 373 | + const { imgPath } = file | ||
| 374 | + this.form.imgs = this.form.imgs.filter(item => { | ||
| 375 | + return item.imgPath !== imgPath | ||
| 376 | + }) | ||
| 377 | + }, | ||
| 378 | + // 下一步 | ||
| 379 | + next() { | ||
| 380 | + this.$refs['form'].validate((valid) => { | ||
| 381 | + console.log('val', valid) | ||
| 382 | + if (valid) { | ||
| 383 | + if (this.active === 1) { | ||
| 384 | + this.active = 0 | ||
| 385 | + // console.log(this.form); | ||
| 386 | + sessionStorage.setItem('form', JSON.stringify(this.form.skus)) | ||
| 387 | + } | ||
| 388 | + } else { | ||
| 389 | + this.$message({ | ||
| 390 | + message: '请填写正确的信息', | ||
| 391 | + type: 'warning' | ||
| 392 | + }) | ||
| 393 | + return false | ||
| 394 | + } | ||
| 395 | + }) | ||
| 396 | + }, | ||
| 397 | + // 点击新增商品时表单数据重置 | ||
| 398 | + reset() { | ||
| 399 | + // this.form.productText = '' | ||
| 400 | + this.form = { | ||
| 401 | + productName: '', | ||
| 402 | + productBrief: '', | ||
| 403 | + shopGroupId: '', | ||
| 404 | + classifyId: '', | ||
| 405 | + supplierName: '', | ||
| 406 | + ifLogistics: '', | ||
| 407 | + shelveState: ' ', | ||
| 408 | + ifOversold: '', | ||
| 409 | + ifCredit: '', | ||
| 410 | + creditLimit: '', | ||
| 411 | + ifHuabei: 1, | ||
| 412 | + cost:null, | ||
| 413 | + productText: '', | ||
| 414 | + images: [], | ||
| 415 | + deletes: [], | ||
| 416 | + names: [ | ||
| 417 | + { | ||
| 418 | + code: '', | ||
| 419 | + skuName: '', | ||
| 420 | + values: [ | ||
| 421 | + { | ||
| 422 | + valueCode: '', | ||
| 423 | + skuValue: '', | ||
| 424 | + image: '' | ||
| 425 | + } | ||
| 426 | + ] | ||
| 427 | + } | ||
| 428 | + ], | ||
| 429 | + skus: [ | ||
| 430 | + { | ||
| 431 | + skuName: '', | ||
| 432 | + skuValue: '', | ||
| 433 | + price: '', | ||
| 434 | + originalPrice: '', | ||
| 435 | + stockNumber: '', | ||
| 436 | + weight: '', | ||
| 437 | + skuImage: '', | ||
| 438 | + style: '' | ||
| 439 | + } | ||
| 440 | + ] | ||
| 441 | + } | ||
| 442 | + this.params = { | ||
| 443 | + applyPrice: 0, | ||
| 444 | + attrStyle: 0, | ||
| 445 | + categoryId: '', | ||
| 446 | + oversold: 1, | ||
| 447 | + collects: 0, | ||
| 448 | + groupId: '', | ||
| 449 | + imgs: [], | ||
| 450 | + cost:null, | ||
| 451 | + deletes: [], | ||
| 452 | + isDelete: 0, | ||
| 453 | + limitCount: 0, | ||
| 454 | + minusStock: '', | ||
| 455 | + needLogistics: 1, | ||
| 456 | + platform: '', | ||
| 457 | + price: 0, | ||
| 458 | + productCode: '', | ||
| 459 | + productName: '', | ||
| 460 | + sellCount: 0, | ||
| 461 | + sellDesc: '', | ||
| 462 | + sellType: '', | ||
| 463 | + shortName: '', | ||
| 464 | + skuAttrList: [ | ||
| 465 | + { | ||
| 466 | + code: '', | ||
| 467 | + skuName: '', | ||
| 468 | + needImg: false, | ||
| 469 | + values: [ | ||
| 470 | + { | ||
| 471 | + skuValue: '', | ||
| 472 | + valueCode: '', | ||
| 473 | + image: '' | ||
| 474 | + } | ||
| 475 | + ] | ||
| 476 | + } | ||
| 477 | + ], | ||
| 478 | + skuList: [ | ||
| 479 | + { | ||
| 480 | + isDelete: '', | ||
| 481 | + skuAttrCodeDTOList: [ | ||
| 482 | + { | ||
| 483 | + code: '', | ||
| 484 | + valueCode: '' | ||
| 485 | + } | ||
| 486 | + ], | ||
| 487 | + skuAttrList: [], | ||
| 488 | + sku: '', | ||
| 489 | + skuImg: '', | ||
| 490 | + price: 0, | ||
| 491 | + originalPrice: 0, | ||
| 492 | + stockNumber: 0, | ||
| 493 | + weight: 0 | ||
| 494 | + } | ||
| 495 | + ], | ||
| 496 | + sortOrder: '', | ||
| 497 | + status: '', | ||
| 498 | + stock: '', | ||
| 499 | + supplierName: '', | ||
| 500 | + views: '', | ||
| 501 | + weight: '' | ||
| 502 | + } | ||
| 503 | + this.imgList = [] | ||
| 504 | + this.dialogImageUrl = '' | ||
| 505 | + this.dialogVisible = false | ||
| 506 | + this.active = 1 | ||
| 507 | + }, | ||
| 508 | + // 返回 | ||
| 509 | + back() { | ||
| 510 | + this.active = 1 | ||
| 511 | + this.$emit('cancel') | ||
| 512 | + }, | ||
| 513 | + // 上一步 | ||
| 514 | + last() { | ||
| 515 | + if (this.active !== 1) { | ||
| 516 | + this.active = 1 | ||
| 517 | + } | ||
| 518 | + }, | ||
| 519 | + // 保存 | ||
| 520 | + async save() { | ||
| 521 | + console.log(this.params.skuAttrList) | ||
| 522 | + if (this.params.attrStyle === 1) { | ||
| 523 | + for (let i = 0; i < this.params.skuAttrList.length; i++) { | ||
| 524 | + if (this.params.skuAttrList[i].skuName === '') { | ||
| 525 | + this.$message({ | ||
| 526 | + message: '规格名不能为空', | ||
| 527 | + type: 'warning' | ||
| 528 | + }) | ||
| 529 | + return false | ||
| 530 | + } | ||
| 531 | + } | ||
| 532 | + } | ||
| 533 | + this.form.names = this.params.skuAttrList | ||
| 534 | + this.params.skuList.forEach(element => { | ||
| 535 | + element.style = this.params.attrStyle | ||
| 536 | + }) | ||
| 537 | + this.form.skus = this.params.skuList | ||
| 538 | + this.form.images = this.params.imgs | ||
| 539 | + this.form.deletes = this.params.deletes | ||
| 540 | + this.form.classifyId = Array.isArray(this.form.classifyId) ? this.form.classifyId[this.form.classifyId.length - 1] : this.form.classifyId | ||
| 541 | + if (this.productId) { | ||
| 542 | + this.form.productId = this.productId | ||
| 543 | + const sku = JSON.parse(sessionStorage.getItem('form')) | ||
| 544 | + sku.forEach((element, i) => { | ||
| 545 | + for (let index = 0; index < this.form.skus.length; index++) { | ||
| 546 | + if (i === index) { | ||
| 547 | + this.form.skus[index].skuId = element.skuId | ||
| 548 | + } | ||
| 549 | + } | ||
| 550 | + }) | ||
| 551 | + console.log(this.form, 'this.form') | ||
| 552 | + | ||
| 553 | + const res = await getClassifyUpdate(this.form) | ||
| 554 | + if (res.code === '') { | ||
| 555 | + this.$message({ | ||
| 556 | + type: 'success', | ||
| 557 | + message: '成功!' | ||
| 558 | + }) | ||
| 559 | + this.back() | ||
| 560 | + } | ||
| 561 | + } else { | ||
| 562 | + | ||
| 563 | + const res = await getClassifyAdd(this.form) | ||
| 564 | + if (res.code === '') { | ||
| 565 | + this.$message({ | ||
| 566 | + type: 'success', | ||
| 567 | + message: '成功!' | ||
| 568 | + }) | ||
| 569 | + this.reset() | ||
| 570 | + this.back() | ||
| 571 | + } | ||
| 572 | + } | ||
| 573 | + }, | ||
| 574 | + // 获取商品分组 | ||
| 575 | + async groups() { | ||
| 576 | + const res = await getGroupSelect({ | ||
| 577 | + }) | ||
| 578 | + this.groupList = res.data | ||
| 579 | + }, | ||
| 580 | + // 获取详情 | ||
| 581 | + async details() { | ||
| 582 | + const res = await getClassifyGetById({ productId: this.productId }) | ||
| 583 | + this.form = res.data | ||
| 584 | + this.$set(this.form, 'productText', res.data.productText) | ||
| 585 | + // this.form.productText = res.data.productText | ||
| 586 | + // console.log(this.form.productText, 'productText') | ||
| 587 | + if (res.data.names.length !== 0) { | ||
| 588 | + this.params.skuAttrList = res.data.names | ||
| 589 | + } | ||
| 590 | + // this.params.skuAttrList.forEach((item) => { | ||
| 591 | + // var data = {} | ||
| 592 | + // var arr = Object.keys(res.data) | ||
| 593 | + // if (arr.length === 0) { | ||
| 594 | + // item.needImg = false | ||
| 595 | + // } | ||
| 596 | + // }) | ||
| 597 | + this.params.skuList = this.form.skus | ||
| 598 | + this.params.attrStyle = res.data.skus[0].style | ||
| 599 | + this.params.imgs = res.data.images | ||
| 600 | + }, | ||
| 601 | + async selectList() { | ||
| 602 | + const res = await getClassify() | ||
| 603 | + this.classifyList = this.filterList(res.data) | ||
| 604 | + }, | ||
| 605 | + filterList(data) { | ||
| 606 | + data.forEach(i => { | ||
| 607 | + if (i.childs.length) { | ||
| 608 | + this.filterList(i.childs) | ||
| 609 | + } else { | ||
| 610 | + i.childs = null | ||
| 611 | + } | ||
| 612 | + }) | ||
| 613 | + return data | ||
| 614 | + } | ||
| 615 | + } | ||
| 616 | +} | ||
| 617 | +</script> | ||
| 618 | + | ||
| 619 | +<style scoped lang='scss'> | ||
| 620 | +@import url("../../../styles/elDialog.scss"); | ||
| 621 | +.btnList { | ||
| 622 | + float: right; | ||
| 623 | + padding: 3px 0; | ||
| 624 | + width: 100px; | ||
| 625 | + height: 40px; | ||
| 626 | + border-radius: 4px; | ||
| 627 | + margin-right: 30px; | ||
| 628 | +} | ||
| 629 | +.addTitle { | ||
| 630 | + font-size: 14px; | ||
| 631 | + color: #333333; | ||
| 632 | + line-height: 50px; | ||
| 633 | +} | ||
| 634 | +.stepsColor{ | ||
| 635 | + font-size: 20px; | ||
| 636 | + line-height: 40px; | ||
| 637 | + .one_class { | ||
| 638 | + width: 40px; | ||
| 639 | + background: #3F9B6A; | ||
| 640 | + border-radius: 50%; | ||
| 641 | + color: #ffffff; | ||
| 642 | + margin: 0 10px; | ||
| 643 | + } | ||
| 644 | + .two_class { | ||
| 645 | + color: #3F9B6A; | ||
| 646 | + } | ||
| 647 | + .line { | ||
| 648 | + width: 230px; | ||
| 649 | + height: 2px; | ||
| 650 | + background: #e0e5eb; | ||
| 651 | + margin: 0 20px; | ||
| 652 | + } | ||
| 653 | + .t_class { | ||
| 654 | + width: 40px; | ||
| 655 | + background: #dddddd; | ||
| 656 | + border-radius: 50%; | ||
| 657 | + color: #333333; | ||
| 658 | + margin: 0 10px; | ||
| 659 | + } | ||
| 660 | + .w_class { | ||
| 661 | + color: #666666; | ||
| 662 | + } | ||
| 663 | +} | ||
| 664 | +.common { | ||
| 665 | + display: flex; | ||
| 666 | + justify-content: center; | ||
| 667 | + align-items: center; | ||
| 668 | +} | ||
| 669 | + | ||
| 670 | +.addCom { | ||
| 671 | + margin: 10px 0; | ||
| 672 | + justify-content: space-around; | ||
| 673 | + align-items: unset; | ||
| 674 | + width: 100%; | ||
| 675 | + .el-form{ | ||
| 676 | + display: flex; | ||
| 677 | + padding: 0px 10px 10px; | ||
| 678 | + } | ||
| 679 | + .leftCom { | ||
| 680 | + width: 65%; | ||
| 681 | + background: #ffffff; | ||
| 682 | + } | ||
| 683 | + .rightCom { | ||
| 684 | + width: 35%; | ||
| 685 | + background: #ffffff; | ||
| 686 | + margin-left: 80px; | ||
| 687 | + } | ||
| 688 | +} | ||
| 689 | +.centerCom { | ||
| 690 | + width: 1660px; | ||
| 691 | + background: #ffffff; | ||
| 692 | + box-shadow: 0px 5px 20px 0px rgba(51, 51, 51, 0.15); | ||
| 693 | + border-radius: 4px; | ||
| 694 | +} | ||
| 695 | +</style> | ||
| 696 | +<style scoped> | ||
| 697 | +.form-item-long >>> .el-input { | ||
| 698 | + width: 100%; | ||
| 699 | +} | ||
| 700 | +</style> |
merchant-web-master/src/views/commodity/commoditySystem/addCommodity.vue
| 1 | <template> | 1 | <template> |
| 2 | <div> | 2 | <div> |
| 3 | - <el-card class="box-card"> | ||
| 4 | - <div slot="header" style="display:flex;align-items: center; justify-content: space-between;"> | ||
| 5 | - <div> | ||
| 6 | - <span v-if="!productId" class="addTitle">新增商品</span> | ||
| 7 | - <span v-else class="addTitle">编辑商品</span> | ||
| 8 | - </div> | ||
| 9 | - <div> | ||
| 10 | - <el-button v-if="active" class="buttonHover" | ||
| 11 | - style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;" @click="back">取消</el-button> | ||
| 12 | - <el-button v-if="active" style="background-color: #3F9B6A;color: #fff" @click="next">下一步</el-button> | ||
| 13 | - <el-button v-if="!active" style="background-color: #3F9B6A;color: #fff" @click="save">保存</el-button> | ||
| 14 | - <el-button v-if="!active" style="background-color: #3F9B6A;color: #fff" @click="last">上一步</el-button> | ||
| 15 | - </div> | 3 | + <!-- 步骤条 --> |
| 4 | + <div class="stepsColor common"> | ||
| 5 | + <div class="stepsOne common"> | ||
| 6 | + <div :class="active ? 'one_class common' : 't_class common'">1</div> | ||
| 7 | + <div :class="active ? 'two_class' : 'w_class'">基本属性</div> | ||
| 16 | </div> | 8 | </div> |
| 17 | - <!-- 步骤条 --> | ||
| 18 | - <div class="stepsColor common"> | ||
| 19 | - <div class="stepsOne common"> | ||
| 20 | - <div :class="active ? 'one_class common' : 't_class common'">1</div> | ||
| 21 | - <div :class="active ? 'two_class' : 'w_class'">基本属性&商品描述</div> | ||
| 22 | - </div> | ||
| 23 | - <div class="line" /> | ||
| 24 | - <div class="stepsTwo common"> | ||
| 25 | - <div :class="active ? 't_class common' : 'one_class common'">2</div> | ||
| 26 | - <div :class="active ? 'w_class' : 'two_class' ">基本属性&商品描述</div> | ||
| 27 | - </div> | 9 | + <div class="line" /> |
| 10 | + <div class="stepsTwo common"> | ||
| 11 | + <div :class="active ? 't_class common' : 'one_class common'">2</div> | ||
| 12 | + <div :class="active ? 'w_class' : 'two_class' ">商品描述</div> | ||
| 28 | </div> | 13 | </div> |
| 29 | - </el-card> | 14 | + </div> |
| 30 | <!-- 商品 --> | 15 | <!-- 商品 --> |
| 31 | <div class="addCom common"> | 16 | <div class="addCom common"> |
| 32 | <div v-if="active"> | 17 | <div v-if="active"> |
| 33 | <el-form ref="form" :model="form" :rules="rules" label-width="120px" style="padding:10px 20px;"> | 18 | <el-form ref="form" :model="form" :rules="rules" label-width="120px" style="padding:10px 20px;"> |
| 34 | - <div class="leftCom"> | ||
| 35 | - <el-form-item label="商品名称" prop="productName"> | ||
| 36 | - <el-input v-model="form.productName" maxlength="50" show-word-limit /> | ||
| 37 | - </el-form-item> | ||
| 38 | - <el-form-item label="卖点简介"> | ||
| 39 | - <el-input v-model="form.productBrief" maxlength="50" show-word-limit /> | ||
| 40 | - </el-form-item> | ||
| 41 | - <el-form-item> | ||
| 42 | - <Tinymce v-if="showTinymce" ref="content" v-model="form.productText" class="tinymce-wrap" :height="200" /> | ||
| 43 | - </el-form-item> | ||
| 44 | - </div> | ||
| 45 | - <div class="rightCom"> | ||
| 46 | - <el-form-item label="官方分类" prop="classifyId"> | ||
| 47 | - <el-cascader | ||
| 48 | - v-model="form.classifyId" | ||
| 49 | - :options="classifyList" | ||
| 50 | - clearable | ||
| 51 | - :props="{ | ||
| 52 | - checkStrictly: false, | ||
| 53 | - label:'categoryName', | ||
| 54 | - value:'id', | ||
| 55 | - children:'childs' | ||
| 56 | - }" | ||
| 57 | - @change="handleChangeCascader" | ||
| 58 | - /> | ||
| 59 | - </el-form-item> | ||
| 60 | - | ||
| 61 | - <el-form-item label="商品分组" prop="shopGroupId"> | ||
| 62 | - <el-select v-model="form.shopGroupId" placeholder="请选择商品分组" clearable> | ||
| 63 | - <el-option | ||
| 64 | - v-for="(item,index) in groupList" | ||
| 65 | - :key="index" | ||
| 66 | - :label="item.groupName" | ||
| 67 | - :value="item.shopGroupId" | ||
| 68 | - /> | ||
| 69 | - </el-select> | ||
| 70 | - </el-form-item> | ||
| 71 | - <el-form-item label="品牌"> | ||
| 72 | - <el-select | ||
| 73 | - v-model="form.brandId" | ||
| 74 | - clearable | ||
| 75 | - placeholder="请选择品牌" | ||
| 76 | - > | ||
| 77 | - <el-option | ||
| 78 | - v-for="item in brandList" | ||
| 79 | - :key="item.id" | ||
| 80 | - :label="item.brandName" | ||
| 81 | - :value="item.id" | 19 | + <el-form-item label="商品名称" prop="productName"> |
| 20 | + <el-input v-model="form.productName" maxlength="50" show-word-limit /> | ||
| 21 | + </el-form-item> | ||
| 22 | + <el-row :gutter="20"> | ||
| 23 | + <el-col :span="12"> | ||
| 24 | + <el-form-item label="官方分类" prop="classifyId"> | ||
| 25 | + <el-cascader | ||
| 26 | + v-model="form.classifyId" | ||
| 27 | + :options="classifyList" | ||
| 28 | + clearable | ||
| 29 | + :props="{ | ||
| 30 | + checkStrictly: false, | ||
| 31 | + label:'categoryName', | ||
| 32 | + value:'id', | ||
| 33 | + children:'childs' | ||
| 34 | + }" | ||
| 35 | + style="width: 100%" | ||
| 36 | + @change="handleChangeCascader" | ||
| 82 | /> | 37 | /> |
| 83 | - </el-select> | ||
| 84 | - </el-form-item> | ||
| 85 | - <el-form-item class="form-item-long" label="供应商"> | ||
| 86 | - <el-input v-model="form.supplierName" maxlength="30" show-word-limit placeholder="请输入供应商名称" /> | ||
| 87 | - </el-form-item> | ||
| 88 | - <el-form-item class="form-item-long" label="成本价(/元)" prop="cost"> | ||
| 89 | - <el-input v-model.number="form.cost" type="number" maxlength="10" show-word-limit placeholder="请输入成本价" /> | ||
| 90 | - </el-form-item> | ||
| 91 | - <el-form-item label="需要物流" prop="ifLogistics"> | ||
| 92 | - <el-radio-group v-model="form.ifLogistics"> | ||
| 93 | - <el-radio :label="1">是</el-radio> | ||
| 94 | - <el-radio :label="0">否</el-radio> | ||
| 95 | - </el-radio-group> | ||
| 96 | - </el-form-item> | ||
| 97 | - <el-form-item label="上架状态" prop="shelveState"> | ||
| 98 | - <el-radio-group v-model="form.shelveState"> | ||
| 99 | - <el-radio :label="1">上架</el-radio> | ||
| 100 | - <el-radio :label="0">下架</el-radio> | ||
| 101 | - </el-radio-group> | ||
| 102 | - </el-form-item> | ||
| 103 | - <el-form-item label="允许超卖" prop="ifOversold"> | ||
| 104 | - <el-radio-group v-model="form.ifOversold"> | ||
| 105 | - <el-radio :label="1">允许</el-radio> | ||
| 106 | - <el-radio :label="0">不允许</el-radio> | ||
| 107 | - </el-radio-group> | ||
| 108 | - </el-form-item> | ||
| 109 | - <el-form-item label="积分兑换" prop="ifCredit"> | ||
| 110 | - <el-radio-group v-model="form.ifCredit"> | ||
| 111 | - <el-radio :label="1">允许</el-radio> | ||
| 112 | - <el-radio :label="0">不允许</el-radio> | ||
| 113 | - </el-radio-group> | ||
| 114 | - <p style="color: #cf0f0f">开启积分兑换后,积分所抵扣的金额由商户承担</p> | ||
| 115 | - </el-form-item> | ||
| 116 | - <el-form-item v-if="form.ifCredit" class="form-item-long" label="单笔最大抵扣" prop="creditLimit"> | ||
| 117 | - <!-- <el-input v-model="form.creditLimit" type="number" placeholder="请输入单笔最大抵扣" /> --> | ||
| 118 | - <el-input-number v-model="form.creditLimit" :controls="false" :min="0" :precision="0" placeholder="请输入单笔最大抵扣" /> | ||
| 119 | - <p style="color: #cf0f0f; height: 25px; line-height: 25px;margin-top: 10px">限制一笔订单中该商品最多抵扣多少积分</p> | ||
| 120 | - <p style="color: #cf0f0f; height: 25px; line-height: 25px">( 注:1积分 = {{ integralProportion }}元 请输入整数 )</p> | ||
| 121 | - </el-form-item> | ||
| 122 | - <!-- <el-form-item label="花呗分期">--> | ||
| 123 | - <!-- <el-radio-group v-model="form.ifHuabei">--> | ||
| 124 | - <!-- <el-radio :label="1">支持</el-radio>--> | ||
| 125 | - <!-- <el-radio :label="0">不支持</el-radio>--> | ||
| 126 | - <!-- </el-radio-group>--> | ||
| 127 | - <!-- </el-form-item>--> | ||
| 128 | - </div> | 38 | + </el-form-item> |
| 39 | + </el-col> | ||
| 40 | + <el-col :span="12"> | ||
| 41 | + <el-form-item label="商品分组" prop="shopGroupId"> | ||
| 42 | + <el-select v-model="form.shopGroupId" placeholder="请选择商品分组" clearable style="width: 100%"> | ||
| 43 | + <el-option | ||
| 44 | + v-for="(item,index) in groupList" | ||
| 45 | + :key="index" | ||
| 46 | + :label="item.groupName" | ||
| 47 | + :value="item.shopGroupId" | ||
| 48 | + /> | ||
| 49 | + </el-select> | ||
| 50 | + </el-form-item> | ||
| 51 | + </el-col> | ||
| 52 | + <el-col :span="12"> | ||
| 53 | + <el-form-item label="品牌"> | ||
| 54 | + <el-select | ||
| 55 | + v-model="form.brandId" | ||
| 56 | + clearable | ||
| 57 | + placeholder="请选择品牌" | ||
| 58 | + style="width: 100%" | ||
| 59 | + > | ||
| 60 | + <el-option | ||
| 61 | + v-for="item in brandList" | ||
| 62 | + :key="item.id" | ||
| 63 | + :label="item.brandName" | ||
| 64 | + :value="item.id" | ||
| 65 | + /> | ||
| 66 | + </el-select> | ||
| 67 | + </el-form-item> | ||
| 68 | + </el-col> | ||
| 69 | + <el-col :span="12"> | ||
| 70 | + <el-form-item class="form-item-long" label="供应商"> | ||
| 71 | + <el-input v-model="form.supplierName" maxlength="30" show-word-limit placeholder="请输入供应商名称" /> | ||
| 72 | + </el-form-item> | ||
| 73 | + </el-col> | ||
| 74 | + <el-col :span="12"> | ||
| 75 | + <el-form-item class="form-item-long" label="成本价(/元)" prop="cost"> | ||
| 76 | + <el-input v-model.number="form.cost" type="number" maxlength="10" show-word-limit placeholder="请输入成本价" /> | ||
| 77 | + </el-form-item> | ||
| 78 | + </el-col> | ||
| 79 | + <el-col :span="12"> | ||
| 80 | + <el-form-item label="需要物流" prop="ifLogistics"> | ||
| 81 | + <el-radio-group v-model="form.ifLogistics"> | ||
| 82 | + <el-radio :label="1">是</el-radio> | ||
| 83 | + <el-radio :label="0">否</el-radio> | ||
| 84 | + </el-radio-group> | ||
| 85 | + </el-form-item> | ||
| 86 | + </el-col> | ||
| 87 | + <el-col :span="12"> | ||
| 88 | + <el-form-item label="上架状态" prop="shelveState"> | ||
| 89 | + <el-radio-group v-model="form.shelveState"> | ||
| 90 | + <el-radio :label="1">上架</el-radio> | ||
| 91 | + <el-radio :label="0">下架</el-radio> | ||
| 92 | + </el-radio-group> | ||
| 93 | + </el-form-item> | ||
| 94 | + </el-col> | ||
| 95 | + <el-col :span="12"> | ||
| 96 | + <el-form-item label="允许超卖" prop="ifOversold"> | ||
| 97 | + <el-radio-group v-model="form.ifOversold"> | ||
| 98 | + <el-radio :label="1">允许</el-radio> | ||
| 99 | + <el-radio :label="0">不允许</el-radio> | ||
| 100 | + </el-radio-group> | ||
| 101 | + </el-form-item> | ||
| 102 | + </el-col> | ||
| 103 | + | ||
| 104 | + </el-row> | ||
| 105 | + <el-form-item label="卖点简介"> | ||
| 106 | + <el-input v-model="form.productBrief" maxlength="50" show-word-limit /> | ||
| 107 | + </el-form-item> | ||
| 108 | + <el-form-item> | ||
| 109 | + <Tinymce v-if="showTinymce" ref="content" v-model="form.productText" class="tinymce-wrap" :height="200" /> | ||
| 110 | + </el-form-item> | ||
| 111 | + <el-row :gutter="20"> | ||
| 112 | + <el-col :span="12"> | ||
| 113 | + <el-form-item label="积分兑换" prop="ifCredit"> | ||
| 114 | + <el-radio-group v-model="form.ifCredit"> | ||
| 115 | + <el-radio :label="1">允许</el-radio> | ||
| 116 | + <el-radio :label="0">不允许</el-radio> | ||
| 117 | + </el-radio-group> | ||
| 118 | + <p style="color: #cf0f0f">开启积分兑换后,积分所抵扣的金额由商户承担</p> | ||
| 119 | + </el-form-item> | ||
| 120 | + </el-col> | ||
| 121 | + <el-col :span="12" v-if="form.ifCredit"> | ||
| 122 | + <el-form-item class="form-item-long" label="单笔最大抵扣" prop="creditLimit"> | ||
| 123 | + <el-input-number v-model="form.creditLimit" :controls="false" :min="0" :precision="0" placeholder="请输入单笔最大抵扣" /> | ||
| 124 | + <p style="color: #cf0f0f; height: 25px; line-height: 25px;margin-top: 10px">限制一笔订单中该商品最多抵扣多少积分</p> | ||
| 125 | + <p style="color: #cf0f0f; height: 25px; line-height: 25px">( 注:1积分 = {{ integralProportion }}元 请输入整数 )</p> | ||
| 126 | + </el-form-item> | ||
| 127 | + </el-col> | ||
| 128 | + </el-row> | ||
| 129 | + | ||
| 129 | </el-form> | 130 | </el-form> |
| 130 | </div> | 131 | </div> |
| 131 | - <div v-if="!active" class="centerCom"> | 132 | + <div v-if="!active" style="width: 100%;"> |
| 132 | <el-form ref="form" :model="params" label-width="80px"> | 133 | <el-form ref="form" :model="params" label-width="80px"> |
| 133 | <StyleInformation :form="params" /> | 134 | <StyleInformation :form="params" /> |
| 134 | </el-form> | 135 | </el-form> |
| @@ -144,6 +145,12 @@ | @@ -144,6 +145,12 @@ | ||
| 144 | > | 145 | > |
| 145 | <img width="100%" :src="dialogImageUrl" alt> | 146 | <img width="100%" :src="dialogImageUrl" alt> |
| 146 | </el-dialog> | 147 | </el-dialog> |
| 148 | + <div style="padding: 20px;"> | ||
| 149 | + <el-button v-if="active" class="buttonHover" style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;" @click="back">取消</el-button> | ||
| 150 | + <el-button v-if="active" style="background-color: #3F9B6A;color: #fff" @click="next">下一步</el-button> | ||
| 151 | + <el-button v-if="!active" style="background-color: #3F9B6A;color: #fff" @click="save">保存</el-button> | ||
| 152 | + <el-button v-if="!active" style="background-color: #3F9B6A;color: #fff" @click="last">上一步</el-button> | ||
| 153 | + </div> | ||
| 147 | </div> | 154 | </div> |
| 148 | </template> | 155 | </template> |
| 149 | 156 | ||
| @@ -161,7 +168,7 @@ import { | @@ -161,7 +168,7 @@ import { | ||
| 161 | getSelect | 168 | getSelect |
| 162 | } from '@/api/account'; | 169 | } from '@/api/account'; |
| 163 | import { uploadUrl } from '@/utils/request' | 170 | import { uploadUrl } from '@/utils/request' |
| 164 | -import StyleInformation from './addComponent' | 171 | +import StyleInformation from '@/views/commodity/commoditySystem/addComponent' |
| 165 | export default { | 172 | export default { |
| 166 | components: { | 173 | components: { |
| 167 | Tinymce, | 174 | Tinymce, |
| @@ -634,6 +641,9 @@ export default { | @@ -634,6 +641,9 @@ export default { | ||
| 634 | .stepsColor{ | 641 | .stepsColor{ |
| 635 | font-size: 20px; | 642 | font-size: 20px; |
| 636 | line-height: 40px; | 643 | line-height: 40px; |
| 644 | + width: 50%; | ||
| 645 | + margin: 0 auto; | ||
| 646 | + padding: 15px 0; | ||
| 637 | .one_class { | 647 | .one_class { |
| 638 | width: 40px; | 648 | width: 40px; |
| 639 | background: #3F9B6A; | 649 | background: #3F9B6A; |
| @@ -671,9 +681,11 @@ export default { | @@ -671,9 +681,11 @@ export default { | ||
| 671 | margin: 10px 0; | 681 | margin: 10px 0; |
| 672 | justify-content: space-around; | 682 | justify-content: space-around; |
| 673 | align-items: unset; | 683 | align-items: unset; |
| 674 | - width: 100%; | 684 | + // width: 100%; |
| 685 | + padding:0 20px; | ||
| 686 | + | ||
| 675 | .el-form{ | 687 | .el-form{ |
| 676 | - display: flex; | 688 | + // display: flex; |
| 677 | padding: 0px 10px 10px; | 689 | padding: 0px 10px 10px; |
| 678 | } | 690 | } |
| 679 | .leftCom { | 691 | .leftCom { |
merchant-web-master/src/views/commodity/commoditySystem/addComponent.vue
| 1 | <template> | 1 | <template> |
| 2 | <div class="style-information-component"> | 2 | <div class="style-information-component"> |
| 3 | - <el-form-item label="商品图片" /> | ||
| 4 | - <div class="upload-wrap"> | ||
| 5 | - <upimg filePath="bueniss" :value="imgsGeshi(form.imgs)" inputtype="coverImage" :limit="5" | ||
| 6 | - @changimg="e=>changimg(e,'imgs')"></upimg> | ||
| 7 | - <!-- <el-upload | ||
| 8 | - list-type="picture-card" | ||
| 9 | - :on-preview="handlePictureCardPreview" | ||
| 10 | - :on-remove="handleRemove" | ||
| 11 | - :headers="headers" | ||
| 12 | - :data="dataObj" | ||
| 13 | - :file-list="form.imgs" | ||
| 14 | - :limit="20" | ||
| 15 | - :on-success="handleImageSuccess" | ||
| 16 | - :action="action" | ||
| 17 | - > | ||
| 18 | - <i slot="default" class="el-icon-plus" /> | ||
| 19 | - <div slot="file" slot-scope="{ file }"> | ||
| 20 | - <img class="el-upload-list__item-thumbnail" :src="file.imgPath"> | ||
| 21 | - <span class="el-upload-list__item-actions"> | ||
| 22 | - <span class="el-upload-list__item-preview" @click="handlePictureCardPreview(file)"> | ||
| 23 | - <i class="el-icon-zoom-in" /> | ||
| 24 | - </span> | ||
| 25 | - <span class="el-upload-list__item-delete" @click="handleRemove(file)"> | ||
| 26 | - <i class="el-icon-delete" /> | 3 | + <el-form-item label="商品图片" > |
| 4 | + <div class="upload-wrap"> | ||
| 5 | + <upimg filePath="bueniss" :value="imgsGeshi(form.imgs)" inputtype="coverImage" :limit="5" | ||
| 6 | + @changimg="e=>changimg(e,'imgs')"></upimg> | ||
| 7 | + <!-- <el-upload | ||
| 8 | + list-type="picture-card" | ||
| 9 | + :on-preview="handlePictureCardPreview" | ||
| 10 | + :on-remove="handleRemove" | ||
| 11 | + :headers="headers" | ||
| 12 | + :data="dataObj" | ||
| 13 | + :file-list="form.imgs" | ||
| 14 | + :limit="20" | ||
| 15 | + :on-success="handleImageSuccess" | ||
| 16 | + :action="action" | ||
| 17 | + > | ||
| 18 | + <i slot="default" class="el-icon-plus" /> | ||
| 19 | + <div slot="file" slot-scope="{ file }"> | ||
| 20 | + <img class="el-upload-list__item-thumbnail" :src="file.imgPath"> | ||
| 21 | + <span class="el-upload-list__item-actions"> | ||
| 22 | + <span class="el-upload-list__item-preview" @click="handlePictureCardPreview(file)"> | ||
| 23 | + <i class="el-icon-zoom-in" /> | ||
| 24 | + </span> | ||
| 25 | + <span class="el-upload-list__item-delete" @click="handleRemove(file)"> | ||
| 26 | + <i class="el-icon-delete" /> | ||
| 27 | + </span> | ||
| 27 | </span> | 28 | </span> |
| 28 | - </span> | ||
| 29 | - </div> | ||
| 30 | - </el-upload> --> | ||
| 31 | - </div> | ||
| 32 | - <el-form-item label="款式设置"> | ||
| 33 | - <el-radio-group v-model="form.attrStyle" @change="changeAttrStyle"> | ||
| 34 | - <el-radio :label="0">单款式</el-radio> | ||
| 35 | - <el-radio :label="1">多款式</el-radio> | ||
| 36 | - </el-radio-group> | 29 | + </div> |
| 30 | + </el-upload> --> | ||
| 31 | + </div> | ||
| 37 | </el-form-item> | 32 | </el-form-item> |
| 38 | - <div class="style-container"> | 33 | + <el-form-item label="规格设置"> |
| 34 | + <div class="style-container" > | ||
| 39 | <div v-if="form.attrStyle === 0" class="single-style"> | 35 | <div v-if="form.attrStyle === 0" class="single-style"> |
| 40 | <el-table | 36 | <el-table |
| 41 | :data="skuList" | 37 | :data="skuList" |
| @@ -137,61 +133,17 @@ | @@ -137,61 +133,17 @@ | ||
| 137 | </el-form-item> | 133 | </el-form-item> |
| 138 | </div> | 134 | </div> |
| 139 | <el-button class="add-attr-btn" type="primary" @click="addSkuAttrList">添加规格</el-button> | 135 | <el-button class="add-attr-btn" type="primary" @click="addSkuAttrList">添加规格</el-button> |
| 140 | - <el-table | ||
| 141 | - :data="skuList" | ||
| 142 | - style="width: 100%" | ||
| 143 | - :header-cell-style="{fontSize: '14px',color:'#0009',fontWeight: 'normal',backgroundColor:'#F2F3F5'}" | ||
| 144 | - > | ||
| 145 | - <el-table-column | ||
| 146 | - v-for="(skuAttr, index) in skuAttrName" | ||
| 147 | - :key="index" | ||
| 148 | - :label="skuAttr.skuName" | ||
| 149 | - > | ||
| 150 | - <template slot-scope="scope"> | ||
| 151 | - {{ | ||
| 152 | - scope.row.skuAttrCodeDTOList && | ||
| 153 | - scope.row.skuAttrCodeDTOList[index] | ||
| 154 | - | attrValueFilter(form.skuAttrList) | ||
| 155 | - }} | ||
| 156 | - </template> | ||
| 157 | - </el-table-column> | ||
| 158 | - <el-table-column label="售价"> | ||
| 159 | - <template slot-scope="scope"> | ||
| 160 | - <!-- <el-input v-model="scope.row.price" type="number" oninput="value=value.replace(/-/, '')" /> --> | ||
| 161 | - <el-input-number v-model="scope.row.price" :controls="false" :min="0" :precision="2" :step="0.01" /> | ||
| 162 | - </template> | ||
| 163 | - </el-table-column> | ||
| 164 | - <el-table-column label="原价"> | ||
| 165 | - <template slot-scope="scope"> | ||
| 166 | - <!-- <el-input v-model="scope.row.originalPrice" type="number" oninput="value=value.replace(/-/, '')" /> --> | ||
| 167 | - <el-input-number v-model="scope.row.originalPrice" :controls="false" :min="0" :precision="2" :step="0.01" /> | ||
| 168 | - </template> | ||
| 169 | - </el-table-column> | ||
| 170 | - <el-table-column label="库存"> | ||
| 171 | - <template slot-scope="scope"> | ||
| 172 | - <!-- <el-input v-model="scope.row.stockNumber" type="number" oninput="value=value.replace(/[^\d]/g,'')" /> --> | ||
| 173 | - <el-input-number v-model="scope.row.stockNumber" :controls="false" :min="0" :precision="0" /> | ||
| 174 | - </template> | ||
| 175 | - </el-table-column> | ||
| 176 | - <el-table-column label="重量(KG)"> | ||
| 177 | - <template slot-scope="scope"> | ||
| 178 | - <!-- <el-input v-model="scope.row.weight" type="number" oninput="value=value.replace(/-/, '')" /> --> | ||
| 179 | - <el-input-number v-model="scope.row.weight" :controls="false" :min="0" :precision="6" :step="0.01" /> | ||
| 180 | - </template> | ||
| 181 | - </el-table-column> | ||
| 182 | - <el-table-column label="国际条码"> | ||
| 183 | - <template slot-scope="scope"> | ||
| 184 | - <el-input v-model="scope.row.sku" /> | ||
| 185 | - </template> | ||
| 186 | - </el-table-column> | ||
| 187 | - <!-- <el-table-column label="操作"> | ||
| 188 | - <template slot-scope="scope"> | ||
| 189 | - <el-button type="text" @click="delAttrValue(scope.row,scope.$index,scope.row,scope)">删除</el-button> | ||
| 190 | - </template> | ||
| 191 | - </el-table-column> --> | ||
| 192 | - </el-table> | 136 | + |
| 193 | </div> | 137 | </div> |
| 194 | </div> | 138 | </div> |
| 139 | + </el-form-item> | ||
| 140 | + <!-- <el-form-item label="款式设置" > | ||
| 141 | + <el-radio-group v-model="form.attrStyle" @change="changeAttrStyle"> | ||
| 142 | + <el-radio :label="0">单款式</el-radio> | ||
| 143 | + <el-radio :label="1">多款式</el-radio> | ||
| 144 | + </el-radio-group> | ||
| 145 | + </el-form-item> --> | ||
| 146 | + | ||
| 195 | <el-dialog | 147 | <el-dialog |
| 196 | :append-to-body="true" | 148 | :append-to-body="true" |
| 197 | :visible.sync="dialogVisible" | 149 | :visible.sync="dialogVisible" |
merchant-web-master/src/views/commodity/commoditySystem/index copy.vue
0 → 100644
| 1 | +<!-- --> | ||
| 2 | +<template> | ||
| 3 | + <div style="padding: 0 10px;background-color:#f7f7f7;"> | ||
| 4 | + <div class="tab_show"> | ||
| 5 | + <!-- 搜索 --> | ||
| 6 | + <div class="formSearch"> | ||
| 7 | + <el-form :inline="true" :model="formInline" class="demo-form-inline"> | ||
| 8 | + <el-form-item label="商品名称"> | ||
| 9 | + <el-input v-model="formInline.search" placeholder="请输入商品名称" style="width:168px"/> | ||
| 10 | + </el-form-item> | ||
| 11 | + <el-form-item label="上架状态"> | ||
| 12 | + <el-select v-model="formInline.shelveState" placeholder="请选择上架状态" style="width:168px"> | ||
| 13 | + <el-option label="全部" :value="null" /> | ||
| 14 | + <el-option label="上架" value="1" /> | ||
| 15 | + <el-option label="下架" value="0" /> | ||
| 16 | + </el-select> | ||
| 17 | + </el-form-item> | ||
| 18 | + <el-form-item label="官方分类"> | ||
| 19 | + <el-cascader | ||
| 20 | + v-model="formInline.classifyId" | ||
| 21 | + :options="categoryList" | ||
| 22 | + clearable | ||
| 23 | + :props="{ | ||
| 24 | + checkStrictly: true, | ||
| 25 | + expandTrigger: 'hover', | ||
| 26 | + label:'categoryName', | ||
| 27 | + value:'id', | ||
| 28 | + children:'childs' | ||
| 29 | + }" | ||
| 30 | + /> | ||
| 31 | + </el-form-item> | ||
| 32 | + | ||
| 33 | + </el-form> | ||
| 34 | + <div style="width:20%"> | ||
| 35 | + <el-button @click="search" style="background-color: #3F9B6A;color: #fff;">查询</el-button> | ||
| 36 | + <el-button @click="clear" class="buttonHover" | ||
| 37 | + style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;">重置</el-button> | ||
| 38 | + | ||
| 39 | + </div> | ||
| 40 | + </div> | ||
| 41 | + <div style="margin-bottom:20px;"> | ||
| 42 | + <el-button @click="add" style="background-color: #3F9B6A;color: #fff;">新增商品</el-button> | ||
| 43 | + <el-button @click="sends" style="background-color: #3F9B6A;color: #fff;">批量导入</el-button> | ||
| 44 | + <el-button @click="productDataExport" style="background-color: #3F9B6A;color: #fff;">导出商品</el-button> | ||
| 45 | + </div> | ||
| 46 | + <!-- 表格 --> | ||
| 47 | + <div class="tableBox"> | ||
| 48 | + <el-table | ||
| 49 | + ref="multipleTable" | ||
| 50 | + :data="tableData" | ||
| 51 | + | ||
| 52 | + tooltip-effect="dark" | ||
| 53 | + @selection-change="handleSelectionChange" | ||
| 54 | + :header-cell-style="{fontSize: '14px',color:'#0009',fontWeight: 'normal',backgroundColor:'#F2F3F5'}" | ||
| 55 | + > | ||
| 56 | + <!-- <el-table-column | ||
| 57 | + type="selection" | ||
| 58 | + v-if="teble_sel" | ||
| 59 | + min-width="4%"> | ||
| 60 | + </el-table-column> --> | ||
| 61 | + <el-table-column prop="productId" label="商品id" show-overflow-tooltip /> | ||
| 62 | + <el-table-column label="商品主图" width="150" align="center"> | ||
| 63 | + <template slot-scope="scope"> | ||
| 64 | + <img height="80" width="80" :src="$baseURL+msgList(scope.row.productImage)" alt srcset> | ||
| 65 | + </template> | ||
| 66 | + </el-table-column> | ||
| 67 | + <el-table-column prop="productName" label="商品名称" width="220" /> | ||
| 68 | + <el-table-column prop="section" label="售价区间" show-overflow-tooltip /> | ||
| 69 | + <el-table-column prop="memberSection" label="会员价" show-overflow-tooltip /> | ||
| 70 | + <el-table-column prop="ifCredit" label="积分兑换" show-overflow-tooltip> | ||
| 71 | + <template slot-scope="scope"> | ||
| 72 | + <span v-if="scope.row.ifCredit == 1">允许</span> | ||
| 73 | + <span v-if="scope.row.ifCredit == 0">不允许</span> | ||
| 74 | + </template> | ||
| 75 | + </el-table-column> | ||
| 76 | + <el-table-column prop="stockNumber" label="库存" show-overflow-tooltip /> | ||
| 77 | + <el-table-column prop="volume" label="销量" show-overflow-tooltip /> | ||
| 78 | + <el-table-column prop="volume" label="上架状态" show-overflow-tooltip> | ||
| 79 | + <template slot-scope="scope"> | ||
| 80 | + <span v-if="scope.row.shelveState==0">未上架</span> | ||
| 81 | + <span v-if="scope.row.shelveState==1">已上架</span> | ||
| 82 | + <span v-if="scope.row.shelveState==2">待审核</span> | ||
| 83 | + <span v-if="scope.row.shelveState==3">审核失败</span> | ||
| 84 | + </template> | ||
| 85 | + </el-table-column> | ||
| 86 | + <el-table-column prop="reject" label="驳回原因" show-overflow-tooltip /> | ||
| 87 | + <el-table-column :formatter="row=>getBrandName(row)" label="品牌" show-overflow-tooltip /> | ||
| 88 | + <el-table-column prop="createTime" label="创建时间" width="180" /> | ||
| 89 | + <el-table-column label="操作" width="180" fixed="right"> | ||
| 90 | + <template slot-scope="scope"> | ||
| 91 | + <div class="btnList"> | ||
| 92 | + <div @click="edit(scope.row)" class="tableBtn greens" >编辑</div> | ||
| 93 | + <div @click="down(scope.row)" v-if="scope.row.shelveState==0" class="tableBtn greens" >上架</div> | ||
| 94 | + <div @click="down(scope.row)" v-if="scope.row.shelveState==1" class="tableBtn greens" >下架</div> | ||
| 95 | + <div @click="setVipPrice(scope.row)" v-if="scope.row.shelveState==1" class="tableBtn greens" >设置会员价</div> | ||
| 96 | + <div @click="del(scope.row)" v-if="scope.row.shelveState!=1" class="tableBtn greens" >删除</div> | ||
| 97 | + | ||
| 98 | + <!-- <el-button type="text" @click="edit(scope.row)">编辑</el-button> | ||
| 99 | + <el-button v-if="scope.row.shelveState==0" type="text" @click="down(scope.row)">上架</el-button> | ||
| 100 | + <el-button v-if="scope.row.shelveState==1" type="text" @click="down(scope.row)">下架</el-button> | ||
| 101 | + <el-button v-if="scope.row.shelveState==1" type="text" @click="setVipPrice(scope.row)">设置会员价</el-button> | ||
| 102 | + <el-button v-if="scope.row.shelveState!=1" type="text" @click="del(scope.row)">删除</el-button> --> | ||
| 103 | + </div> | ||
| 104 | + </template> | ||
| 105 | + </el-table-column> | ||
| 106 | + </el-table> | ||
| 107 | + <div class="fenye"> | ||
| 108 | + <el-pagination | ||
| 109 | + :current-page="formInline.page" | ||
| 110 | + :page-sizes="[10, 20, 50, 100]" | ||
| 111 | + :page-size="10" | ||
| 112 | + background | ||
| 113 | + layout="prev, pager, next,total" | ||
| 114 | + :total="total" | ||
| 115 | + @size-change="handleSizeChange" | ||
| 116 | + @current-change="handleCurrentChange" | ||
| 117 | + /> | ||
| 118 | + </div> | ||
| 119 | + | ||
| 120 | + </div> | ||
| 121 | + </div> | ||
| 122 | + <!-- 批量导入 --> | ||
| 123 | + <el-dialog | ||
| 124 | + title="批量导入商品" | ||
| 125 | + :visible.sync="batchAdd" | ||
| 126 | + :close-on-click-modal="false" | ||
| 127 | + center | ||
| 128 | + width="400px" | ||
| 129 | + > | ||
| 130 | + <div class="uploadDialog"> | ||
| 131 | + <el-upload | ||
| 132 | + drag | ||
| 133 | + :limit="1" | ||
| 134 | + :auto-upload="false" | ||
| 135 | + accept=".xlsx" | ||
| 136 | + :headers="headers" | ||
| 137 | + :action="UploadUrl" | ||
| 138 | + :before-upload="beforeUploadFile" | ||
| 139 | + :on-change="fileChange" | ||
| 140 | + :on-remove="batchRemove" | ||
| 141 | + :on-exceed="exceedFile" | ||
| 142 | + :on-success="handleSuccess" | ||
| 143 | + :on-error="handleError" | ||
| 144 | + :file-list="batchFileList" | ||
| 145 | + > | ||
| 146 | + <i class="el-icon-upload" /> | ||
| 147 | + <div class="el-upload__text"> | ||
| 148 | + <em style="color:#3F9B6A;">点击上传</em> | ||
| 149 | + </div> | ||
| 150 | + <div slot="tip" class="el-upload__tip">只能上传xlsx文件,且不超过10M</div> | ||
| 151 | + <div slot="tip" class="el-upload__tip"> | ||
| 152 | + 上传前不知道excel模板的,请点击 | ||
| 153 | + <span class="clickMe" @click="poDownload">点我下载模板</span> 去下载 | ||
| 154 | + </div> | ||
| 155 | + </el-upload> | ||
| 156 | + <br> | ||
| 157 | + <el-button size="small" type="primary" @click="uploadFile">立即上传</el-button> | ||
| 158 | + </div> | ||
| 159 | + </el-dialog> | ||
| 160 | + <!-- 设置会员价弹窗 --> | ||
| 161 | + <el-dialog | ||
| 162 | + title="设置会员价" | ||
| 163 | + :visible.sync="vipPriceVisible" | ||
| 164 | + width="50%" | ||
| 165 | + class="vipDialog" | ||
| 166 | + > | ||
| 167 | + <el-form ref="form" label-width="80px"> | ||
| 168 | + <el-form-item label="优惠方式"> | ||
| 169 | + <el-radio-group v-model="mode" @change="modeChange"> | ||
| 170 | + <el-radio :label="1">折扣</el-radio> | ||
| 171 | + <!-- <el-radio :label="2">指定价格</el-radio> --> | ||
| 172 | + </el-radio-group> | ||
| 173 | + </el-form-item> | ||
| 174 | + <div class="priceTable"> | ||
| 175 | + <table> | ||
| 176 | + <tr> | ||
| 177 | + <th>规格</th> | ||
| 178 | + <th>售价</th> | ||
| 179 | + <th v-for="(item,index) in gradeList" :key="index"> | ||
| 180 | + {{ item }} | ||
| 181 | + </th> | ||
| 182 | + </tr> | ||
| 183 | + <tr v-for="(item,index) in productData" :key="index"> | ||
| 184 | + <td> | ||
| 185 | + {{ item.value }} | ||
| 186 | + </td> | ||
| 187 | + <td> | ||
| 188 | + {{ item.price }} | ||
| 189 | + </td> | ||
| 190 | + <td v-for="(itemJ,indexJ) in item.memberPrices" :key="indexJ" class="td-input"> | ||
| 191 | + <el-input v-model="itemJ.price" oninput="value=value.replace(/([^\d|\.])/g, '')" /> {{ mode==1?'折':'元' }} | ||
| 192 | + </td> | ||
| 193 | + </tr> | ||
| 194 | + </table> | ||
| 195 | + </div> | ||
| 196 | + <el-button style="background-color: #3F9B6A;color: #fff;" class="clearBtn" @click="clearProductMember">清除所有旧会员价</el-button> | ||
| 197 | + </el-form> | ||
| 198 | + <span slot="footer" class="dialog-footer"> | ||
| 199 | + <el-button @click="vipPriceVisible = false" class="buttonHover" | ||
| 200 | + style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;">取 消</el-button> | ||
| 201 | + <el-button type="primary" @click="vipPriceSubmit">确 定</el-button> | ||
| 202 | + </span> | ||
| 203 | + </el-dialog> | ||
| 204 | + <!-- 新增/修改商品弹窗 --> | ||
| 205 | + <el-dialog | ||
| 206 | + :title="!commId ? '新增商品' : '编辑商品'" | ||
| 207 | + :visible.sync="commidyVisible" | ||
| 208 | + custom-class="bian_css" width="70%" | ||
| 209 | + center | ||
| 210 | + top="6vh" | ||
| 211 | + :close-on-click-modal="false" | ||
| 212 | + @before-close="closeModal" | ||
| 213 | + @close="closeModal" | ||
| 214 | + > | ||
| 215 | + <CommAdd | ||
| 216 | + ref="child" | ||
| 217 | + :show-tinymce="showTinymce" | ||
| 218 | + :product-id="commId" | ||
| 219 | + @cancel="cancelForm" | ||
| 220 | + /> | ||
| 221 | + </el-dialog> | ||
| 222 | + </div> | ||
| 223 | +</template> | ||
| 224 | + | ||
| 225 | +<script> | ||
| 226 | +import CommAdd from '@/views/commodity/commoditySystem/addCommodity.vue' | ||
| 227 | +import { getBtnList, getToken } from '@/utils/auth' | ||
| 228 | +import { uploadUrl } from '@/utils/request' | ||
| 229 | +import { | ||
| 230 | + getClassifyGetAll, | ||
| 231 | + getClassifyDelete, | ||
| 232 | + getClassifyStart, | ||
| 233 | + downloadTemplate, | ||
| 234 | + importProduct, | ||
| 235 | + getClassify, | ||
| 236 | + getProductMembers, | ||
| 237 | + setProductMember, | ||
| 238 | + clearProductMember, | ||
| 239 | + productExport, | ||
| 240 | + getBrandList | ||
| 241 | +} from '@/api/commodity' | ||
| 242 | +export default { | ||
| 243 | + components: { | ||
| 244 | + CommAdd | ||
| 245 | + }, | ||
| 246 | + data() { | ||
| 247 | + // 这里存放数据 | ||
| 248 | + return { | ||
| 249 | + showTinymce: false, | ||
| 250 | + btnList: '', | ||
| 251 | + activeName: 'first', | ||
| 252 | + formInline: { | ||
| 253 | + search: '', // 搜索字段 | ||
| 254 | + shelveState: '', // 上架状态 1-上架 0-不上架 null-全部 | ||
| 255 | + stock: '', // 库存状态 1-有库存 0-无库存 null-全部 | ||
| 256 | + classifyId: '', // 最下级分类id | ||
| 257 | + page: 1, // 当前页 | ||
| 258 | + pageSize: 10 | ||
| 259 | + }, | ||
| 260 | + batchAdd: false, | ||
| 261 | + batchFileList: [], | ||
| 262 | + total: 1, | ||
| 263 | + tableData: [], | ||
| 264 | + categoryList: [], | ||
| 265 | + UploadUrl: uploadUrl, | ||
| 266 | + headers: { | ||
| 267 | + 'Authorization-business': getToken() | ||
| 268 | + }, | ||
| 269 | + vipPriceVisible: false, | ||
| 270 | + productId: 0, | ||
| 271 | + mode: 1, | ||
| 272 | + productData: [], | ||
| 273 | + gradeList: [], | ||
| 274 | + commidyVisible: false, | ||
| 275 | + commId: 0, | ||
| 276 | + brandList: [], | ||
| 277 | + teble_sel:false, | ||
| 278 | + canst:'' //组合商品ID | ||
| 279 | + } | ||
| 280 | + }, | ||
| 281 | + computed: { | ||
| 282 | + getBrandName() { | ||
| 283 | + return (row) => { | ||
| 284 | + const find = this.brandList.find(item => item.id === row.brandId); | ||
| 285 | + if (find) return find.brandName | ||
| 286 | + return '-' | ||
| 287 | + } | ||
| 288 | + } | ||
| 289 | + }, | ||
| 290 | + mounted() { | ||
| 291 | + this.getBrandList() | ||
| 292 | + this.getAll(this.formInline) | ||
| 293 | + this.queryAllCategory() | ||
| 294 | + this.btnList = getBtnList() | ||
| 295 | + }, | ||
| 296 | + // 方法集合 | ||
| 297 | + methods: { | ||
| 298 | + msgList(list){ | ||
| 299 | + if(list && list!=''){ | ||
| 300 | + let strin = list.split(',') | ||
| 301 | + return strin[0] | ||
| 302 | + } | ||
| 303 | + }, | ||
| 304 | + async getBrandList() { | ||
| 305 | + const { data } = await getBrandList() | ||
| 306 | + this.brandList = data | ||
| 307 | + }, | ||
| 308 | + cancelForm() { | ||
| 309 | + this.commidyVisible = false | ||
| 310 | + this.formInline = { | ||
| 311 | + search: '', | ||
| 312 | + shelveState: '', | ||
| 313 | + stock: '', | ||
| 314 | + classifyId: '', | ||
| 315 | + page: 1, | ||
| 316 | + pageSize: 10 | ||
| 317 | + } | ||
| 318 | + this.getAll(this.formInline) | ||
| 319 | + this.closeModal() | ||
| 320 | + }, | ||
| 321 | + closeModal() { | ||
| 322 | + this.showTinymce = false | ||
| 323 | + this.$refs.child.last() | ||
| 324 | + this.$refs.child.reset() | ||
| 325 | + }, | ||
| 326 | + btnClick(id) { | ||
| 327 | + if (id.permissionName === '批量导入') { | ||
| 328 | + this.sends() | ||
| 329 | + } else if (id.permissionName === '新增商品') { | ||
| 330 | + this.add() | ||
| 331 | + } | ||
| 332 | + }, | ||
| 333 | + handleSizeChange(val) { | ||
| 334 | + this.formInline.pageSize = val | ||
| 335 | + this.getAll(this.formInline) | ||
| 336 | + }, | ||
| 337 | + handleCurrentChange(val) { | ||
| 338 | + this.formInline.page = val | ||
| 339 | + this.getAll(this.formInline) | ||
| 340 | + }, | ||
| 341 | + // 查询 | ||
| 342 | + search() { | ||
| 343 | + this.total = 1 | ||
| 344 | + this.formInline.page = 1 | ||
| 345 | + this.getAll(this.formInline) | ||
| 346 | + }, | ||
| 347 | + // 重置 | ||
| 348 | + clear() { | ||
| 349 | + this.formInline = { | ||
| 350 | + search: '', // 搜索字段 | ||
| 351 | + shelveState: '', // 上架状态 1-上架 0-不上架 null-全部 | ||
| 352 | + stock: '', // 库存状态 1-有库存 0-无库存 null-全部 | ||
| 353 | + classifyId: '', // 最下级分类id | ||
| 354 | + page: 1, // 当前页 | ||
| 355 | + pageSize: 10 | ||
| 356 | + } | ||
| 357 | + }, | ||
| 358 | + // 新增商品 | ||
| 359 | + add() { | ||
| 360 | + this.showTinymce = true | ||
| 361 | + if (this.commId) { | ||
| 362 | + this.$refs.child.reset() | ||
| 363 | + } | ||
| 364 | + this.commidyVisible = true | ||
| 365 | + this.commId = 0 | ||
| 366 | + // this.$router.push({ name: 'addCommodity', params: { id: '1' }}) | ||
| 367 | + }, | ||
| 368 | + // 导出商品 | ||
| 369 | + async productDataExport() { | ||
| 370 | + this.$message({ | ||
| 371 | + message: '数据导出中,请勿重复操作!', | ||
| 372 | + type: 'success' | ||
| 373 | + }) | ||
| 374 | + const res = await productExport(this.formInline) | ||
| 375 | + if (!res) { return } | ||
| 376 | + const blob = new Blob([res], { type: 'application/vnd.ms-excel' }) | ||
| 377 | + const fileName = '商品数据明细表.xls' | ||
| 378 | + if ('download' in document.createElement('a')) { | ||
| 379 | + // 非IE下载 | ||
| 380 | + const elink = document.createElement('a') | ||
| 381 | + elink.download = fileName | ||
| 382 | + elink.href = URL.createObjectURL(blob) | ||
| 383 | + elink.style.display = 'none' | ||
| 384 | + document.body.appendChild(elink) | ||
| 385 | + elink.click() | ||
| 386 | + URL.revokeObjectURL(elink.href) // 释放URL 对象 | ||
| 387 | + document.body.removeChild(elink) | ||
| 388 | + } else { | ||
| 389 | + // IE10+下载 | ||
| 390 | + navigator.msSaveBlob(blob, fileName) | ||
| 391 | + } | ||
| 392 | + }, | ||
| 393 | + // 批量导入 | ||
| 394 | + sends() { | ||
| 395 | + this.batchAdd = true | ||
| 396 | + this.batchFileList = [] | ||
| 397 | + }, | ||
| 398 | + // 编辑商品 | ||
| 399 | + edit(row) { | ||
| 400 | + this.showTinymce = true | ||
| 401 | + this.commidyVisible = true | ||
| 402 | + this.commId = row.productId | ||
| 403 | + this.$nextTick(() => { | ||
| 404 | + this.$refs.child?.details() | ||
| 405 | + }) | ||
| 406 | + // this.$router.push({ | ||
| 407 | + // name: 'addCommodity', | ||
| 408 | + // params: { productId: row.productId } | ||
| 409 | + // }) | ||
| 410 | + // let res = await getClassifyGetById({ productId: row.productId }); | ||
| 411 | + // console.log(res); | ||
| 412 | + }, | ||
| 413 | + // 设置会员价 | ||
| 414 | + setVipPrice(row) { | ||
| 415 | + var _ = this | ||
| 416 | + this.productId = row.productId | ||
| 417 | + getProductMembers({ productId: row.productId }).then(res => { | ||
| 418 | + console.log(res,'11231312312312') | ||
| 419 | + if (res.code === '') { | ||
| 420 | + _.productData = res.data | ||
| 421 | + if (_.productData && _.productData.length > 0) { | ||
| 422 | + _.gradeList = [] | ||
| 423 | + const _memberPrices = _.productData[0].memberPrices | ||
| 424 | + _memberPrices.forEach(function(item, i) { | ||
| 425 | + _.gradeList.push(item.memberLevelName) | ||
| 426 | + }) | ||
| 427 | + _.mode = _.productData[0].mode ? _.productData[0].mode : 1 | ||
| 428 | + _.vipPriceVisible = true | ||
| 429 | + } | ||
| 430 | + } | ||
| 431 | + }) | ||
| 432 | + }, | ||
| 433 | + // 设置会员价提交 | ||
| 434 | + vipPriceSubmit() { | ||
| 435 | + for (let i = 0; i < this.productData.length; i++) { | ||
| 436 | + this.productData[i].mode = this.mode | ||
| 437 | + for (let j = 0; j < this.productData[i].memberPrices.length; j++) { | ||
| 438 | + this.productData[i].memberPrices[j].mode = this.mode | ||
| 439 | + var _price = this.productData[i].memberPrices[j].price | ||
| 440 | + if (!_price) { | ||
| 441 | + this.$message({ | ||
| 442 | + type: 'warning', | ||
| 443 | + message: '会员价格不能为空!' | ||
| 444 | + }) | ||
| 445 | + return false | ||
| 446 | + } else if (this.productData[i].mode === 1) { | ||
| 447 | + if (_price <= 0 || _price >= 10) { | ||
| 448 | + this.$message({ | ||
| 449 | + type: 'warning', | ||
| 450 | + message: '会员折数必须大于0小于10!' | ||
| 451 | + }) | ||
| 452 | + return false | ||
| 453 | + } | ||
| 454 | + } else if (this.productData[i].mode === 2) { | ||
| 455 | + if (_price > this.productData[i].price) { | ||
| 456 | + this.$message({ | ||
| 457 | + type: 'warning', | ||
| 458 | + message: '会员价格不能大于原价!' | ||
| 459 | + }) | ||
| 460 | + return false | ||
| 461 | + } | ||
| 462 | + } | ||
| 463 | + } | ||
| 464 | + } | ||
| 465 | + setProductMember({ productId: this.productId, members: this.productData }).then(res => { | ||
| 466 | + if (res.code === '') { | ||
| 467 | + this.$message({ | ||
| 468 | + type: 'success', | ||
| 469 | + message: '设置成功!' | ||
| 470 | + }) | ||
| 471 | + this.getAll(this.formInline) | ||
| 472 | + this.vipPriceVisible = false | ||
| 473 | + } | ||
| 474 | + }) | ||
| 475 | + }, | ||
| 476 | + // 清空会员价 | ||
| 477 | + clearProductMember() { | ||
| 478 | + console.log(this.productData, 'this.productData') | ||
| 479 | + this.$confirm('该商品所有旧设置的会员价将被清除, 是否继续?', '提示', { | ||
| 480 | + confirmButtonText: '确定', | ||
| 481 | + cancelButtonText: '取消', | ||
| 482 | + type: 'warning' | ||
| 483 | + }).then(() => { | ||
| 484 | + clearProductMember({ productId: this.productId }).then(res => { | ||
| 485 | + if (res.code === '') { | ||
| 486 | + this.productData.map(item => { | ||
| 487 | + item.memberPrices.map(itemChild => { | ||
| 488 | + itemChild.price = null | ||
| 489 | + }) | ||
| 490 | + }) | ||
| 491 | + this.$message.success('清除成功') | ||
| 492 | + // this.vipPriceVisible = false | ||
| 493 | + } | ||
| 494 | + }) | ||
| 495 | + }) | ||
| 496 | + }, | ||
| 497 | + // 删除商品 | ||
| 498 | + del(row) { | ||
| 499 | + this.$confirm('选中数据将被永久删除, 是否继续?', '提示', { | ||
| 500 | + confirmButtonText: '确定', | ||
| 501 | + cancelButtonText: '取消', | ||
| 502 | + type: 'warning' | ||
| 503 | + }) | ||
| 504 | + .then(() => { | ||
| 505 | + getClassifyDelete({ productId: row.productId }).then(res => { | ||
| 506 | + if (res.code === '') { | ||
| 507 | + this.$message({ | ||
| 508 | + type: 'success', | ||
| 509 | + message: '删除成功!' | ||
| 510 | + }) | ||
| 511 | + this.getAll(this.formInline) | ||
| 512 | + } | ||
| 513 | + }) | ||
| 514 | + }) | ||
| 515 | + .catch(() => {}) | ||
| 516 | + }, | ||
| 517 | + // 商品上下架 | ||
| 518 | + async down(row) { | ||
| 519 | + console.log(row.shelveState) | ||
| 520 | + if (row.shelveState) { | ||
| 521 | + console.log(111) | ||
| 522 | + const res = await getClassifyStart({ | ||
| 523 | + productId: row.productId, | ||
| 524 | + shelveState: 0 | ||
| 525 | + }) | ||
| 526 | + if (res.code === '') { | ||
| 527 | + this.$message({ | ||
| 528 | + type: 'success', | ||
| 529 | + message: '下架成功!' | ||
| 530 | + }) | ||
| 531 | + this.getAll(this.formInline) | ||
| 532 | + } | ||
| 533 | + } else { | ||
| 534 | + const res = await getClassifyStart({ | ||
| 535 | + productId: row.productId, | ||
| 536 | + shelveState: 1 | ||
| 537 | + }) | ||
| 538 | + if (res.code === '') { | ||
| 539 | + this.$message({ | ||
| 540 | + type: 'success', | ||
| 541 | + message: '上架成功!' | ||
| 542 | + }) | ||
| 543 | + this.getAll(this.formInline) | ||
| 544 | + } | ||
| 545 | + } | ||
| 546 | + }, | ||
| 547 | + // 初始化查询所有数据 | ||
| 548 | + async getAll(formInline) { | ||
| 549 | + this.formInline.classifyId = | ||
| 550 | + this.formInline.classifyId[2] || | ||
| 551 | + this.formInline.classifyId[1] || | ||
| 552 | + this.formInline.classifyId[0] || | ||
| 553 | + this.formInline.classifyId | ||
| 554 | + const res = await getClassifyGetAll(formInline) | ||
| 555 | + this.total = res.data.total | ||
| 556 | + this.tableData = res.data.list | ||
| 557 | + console.log(this.tableData) | ||
| 558 | + }, | ||
| 559 | + // 初始化查询所有分类 | ||
| 560 | + async queryAllCategory() { | ||
| 561 | + const res = await getClassify() | ||
| 562 | + this.categoryList = res.data | ||
| 563 | + this.handleRemoveEmptyChild(this.categoryList) | ||
| 564 | + }, | ||
| 565 | + handleRemoveEmptyChild(arr) { | ||
| 566 | + for (let i = 0; i < arr.length; i++) { | ||
| 567 | + if (arr[i].childs && Array.isArray(arr[i].childs)) { | ||
| 568 | + this.handleRemoveEmptyChild(arr[i].childs) | ||
| 569 | + } | ||
| 570 | + if (arr[i].childs && Array.isArray(arr[i].childs) && arr[i].childs.length === 0) { | ||
| 571 | + delete arr[i].childs | ||
| 572 | + } | ||
| 573 | + } | ||
| 574 | + }, | ||
| 575 | + // *********************导入部分 | ||
| 576 | + UploadUrls: function() { | ||
| 577 | + // 因为action参数是必填项,我们使用二次确认进行文件上传时,直接填上传文件的url会因为没有参数导致api报404,所以这里将action设置为一个返回为空的方法就行,避免抛错 | ||
| 578 | + return '' | ||
| 579 | + }, | ||
| 580 | + // 下载模板 | ||
| 581 | + poDownload() { | ||
| 582 | + downloadTemplate().then(res => { | ||
| 583 | + console.log(res, 1111) | ||
| 584 | + // const content = res | ||
| 585 | + const blob = new Blob([res]) | ||
| 586 | + const fileName = '批量导入商品模板.xlsx' | ||
| 587 | + if ('download' in document.createElement('a')) { | ||
| 588 | + // 非IE下载 | ||
| 589 | + const elink = document.createElement('a') | ||
| 590 | + elink.download = fileName | ||
| 591 | + elink.style.display = 'none' | ||
| 592 | + elink.href = URL.createObjectURL(blob) | ||
| 593 | + document.body.appendChild(elink) | ||
| 594 | + elink.click() | ||
| 595 | + URL.revokeObjectURL(elink.href) // 释放URL 对象 | ||
| 596 | + document.body.removeChild(elink) | ||
| 597 | + } else { | ||
| 598 | + // IE10+下载 | ||
| 599 | + navigator.msSaveBlob(blob, fileName) | ||
| 600 | + } | ||
| 601 | + }) | ||
| 602 | + }, | ||
| 603 | + // 导入 | ||
| 604 | + uploadFile() { | ||
| 605 | + if (this.batchFileList.length === 0) { | ||
| 606 | + this.$message.warning('请上传文件') | ||
| 607 | + } else { | ||
| 608 | + const formDate = new FormData() | ||
| 609 | + formDate.append('file', this.batchFileList[0]) | ||
| 610 | + console.log(formDate.get('file')) | ||
| 611 | + importProduct(formDate).then(res => { | ||
| 612 | + console.log(res) | ||
| 613 | + if (res.code === '') { | ||
| 614 | + this.$message.success('导入成功') | ||
| 615 | + this.batchAdd = false | ||
| 616 | + this.batchFileList = [] | ||
| 617 | + this.getAll(this.formInline) | ||
| 618 | + } | ||
| 619 | + }) | ||
| 620 | + } | ||
| 621 | + }, | ||
| 622 | + // 上传文件之前的钩子, 参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传 | ||
| 623 | + beforeUploadFile(file) { | ||
| 624 | + console.log('before upload') | ||
| 625 | + console.log(file) | ||
| 626 | + const extension = file.name.substring(file.name.lastIndexOf('.') + 1) | ||
| 627 | + const size = file.size / 1024 / 1024 | ||
| 628 | + if (extension !== 'xlsx') { | ||
| 629 | + this.$message.warning('只能上传后缀是.xlsx的文件') | ||
| 630 | + } | ||
| 631 | + if (size > 10) { | ||
| 632 | + this.$message.warning('文件大小不得超过10M') | ||
| 633 | + } | ||
| 634 | + }, | ||
| 635 | + // 文件状态改变时的钩子 | ||
| 636 | + fileChange(file, batchFileList) { | ||
| 637 | + console.log(file.raw) | ||
| 638 | + this.batchFileList.push(file.raw) | ||
| 639 | + console.log(this.batchFileList) | ||
| 640 | + }, | ||
| 641 | + batchRemove(file, batchFileList) { | ||
| 642 | + this.batchFileList = [] | ||
| 643 | + }, | ||
| 644 | + // 文件超出个数限制时的钩子 | ||
| 645 | + exceedFile(files, batchFileList) { | ||
| 646 | + this.$message.warning(`只能选择1个文件`) | ||
| 647 | + }, | ||
| 648 | + // 文件上传成功时的钩子 | ||
| 649 | + handleSuccess(res, file, batchFileList) { | ||
| 650 | + this.$message.success('文件上传成功') | ||
| 651 | + }, | ||
| 652 | + // 文件上传失败时的钩子 | ||
| 653 | + handleError() { | ||
| 654 | + this.$message.error('文件上传失败') | ||
| 655 | + }, | ||
| 656 | + // 切换优惠方式清除内容 | ||
| 657 | + modeChange() { | ||
| 658 | + this.productData.forEach(item => { | ||
| 659 | + item.memberPrices.forEach(itemJ => { | ||
| 660 | + itemJ.price = '' | ||
| 661 | + }) | ||
| 662 | + }) | ||
| 663 | + }, | ||
| 664 | + handleSelectionChange(val) { | ||
| 665 | + console.log(val) | ||
| 666 | + let zuheId = '' | ||
| 667 | + for(let i=0;i<val.length;i++){ | ||
| 668 | + zuheId += val[i].productId + ',' | ||
| 669 | + } | ||
| 670 | + this.canst = zuheId | ||
| 671 | + } | ||
| 672 | + } | ||
| 673 | +} | ||
| 674 | +</script> | ||
| 675 | +<style lang='scss' scoped> | ||
| 676 | +//@import url(); 引入公共css类 | ||
| 677 | +@import url("../../../styles/elDialog.scss"); | ||
| 678 | +::v-deep .bian_css{ | ||
| 679 | + margin:auto; | ||
| 680 | + max-height:840px; | ||
| 681 | + overflow-y: auto; | ||
| 682 | + .el-dialog__body { | ||
| 683 | + padding: 0px; | ||
| 684 | + background-color: #fff; | ||
| 685 | + } | ||
| 686 | + .el-dialog__header { | ||
| 687 | + background-color: #fff; | ||
| 688 | + padding:10px 20px 10px 20px; | ||
| 689 | + border-bottom: 1px solid #EFEFEF; | ||
| 690 | + } | ||
| 691 | + .el-dialog__title { | ||
| 692 | + font-size: 14px; | ||
| 693 | + color: #000000e6; | ||
| 694 | + } | ||
| 695 | + .el-date-table td.available:hover{ | ||
| 696 | + background-color:#3F9B6A; | ||
| 697 | + } | ||
| 698 | + .el-date-table td.start-date span{ | ||
| 699 | + background-color:#3F9B6A; | ||
| 700 | + } | ||
| 701 | + } | ||
| 702 | +.tab_show { | ||
| 703 | + padding: 0 20px 20px 20px; | ||
| 704 | + background-color:#fff; | ||
| 705 | +} | ||
| 706 | +.fenye { | ||
| 707 | + margin-top: 20px; | ||
| 708 | + display: flex; | ||
| 709 | + justify-content: flex-end; | ||
| 710 | + position: relative; | ||
| 711 | +} | ||
| 712 | + ::v-deep .el-pagination__total { | ||
| 713 | + position: absolute; | ||
| 714 | + left: 10px; | ||
| 715 | + } | ||
| 716 | + .formSearch { | ||
| 717 | + display: flex; | ||
| 718 | + width: 100%; | ||
| 719 | + font-size: 14px; | ||
| 720 | + justify-content: space-between; | ||
| 721 | + } | ||
| 722 | + | ||
| 723 | +.uploadDialog{ | ||
| 724 | + // display: flex; | ||
| 725 | + // flex-direction: column; | ||
| 726 | + // justify-content: center; | ||
| 727 | + >>>.el-upload__tip{ | ||
| 728 | + display: inline-block; | ||
| 729 | + width: 360px; | ||
| 730 | + margin: auto; | ||
| 731 | + } | ||
| 732 | +} | ||
| 733 | +.vipDialog{ | ||
| 734 | + .priceTable{ | ||
| 735 | + table{ | ||
| 736 | + width: 100%; | ||
| 737 | + text-align: center; | ||
| 738 | + border-left: 1px solid #EBEEF5; | ||
| 739 | + border-bottom: 1px solid #EBEEF5; | ||
| 740 | + font-size: 14px; | ||
| 741 | + color: #606266; | ||
| 742 | + border-collapse: collapse; | ||
| 743 | + tr{ | ||
| 744 | + border-top: 1px solid #EBEEF5; | ||
| 745 | + th{ | ||
| 746 | + padding: 12px 0; | ||
| 747 | + background: #F2F3F5; | ||
| 748 | + color: #0009; | ||
| 749 | + border-right: 1px solid #F2F3F5; | ||
| 750 | + } | ||
| 751 | + td{ | ||
| 752 | + padding: 12px 0; | ||
| 753 | + border-right: 1px solid #EBEEF5; | ||
| 754 | + &.td-input{ | ||
| 755 | + .el-input{ | ||
| 756 | + width: 80px; | ||
| 757 | + margin-right: 0; | ||
| 758 | + } | ||
| 759 | + } | ||
| 760 | + &:nth-child(1),&:nth-child(2){ | ||
| 761 | + width: 80px; | ||
| 762 | + } | ||
| 763 | + .el-input{ | ||
| 764 | + width: 100px; | ||
| 765 | + margin-right: 10px; | ||
| 766 | + } | ||
| 767 | + } | ||
| 768 | + } | ||
| 769 | + } | ||
| 770 | + } | ||
| 771 | + .clearBtn{ | ||
| 772 | + margin-top: 20px; | ||
| 773 | + } | ||
| 774 | +} | ||
| 775 | + | ||
| 776 | +</style> |
merchant-web-master/src/views/commodity/commoditySystem/index.vue
| 1 | <!-- --> | 1 | <!-- --> |
| 2 | <template> | 2 | <template> |
| 3 | <div style="padding: 0 10px;background-color:#f7f7f7;"> | 3 | <div style="padding: 0 10px;background-color:#f7f7f7;"> |
| 4 | - <div class="tab_show"> | 4 | + <div class="tab_show" v-if ="ontype == '1'"> |
| 5 | <!-- 搜索 --> | 5 | <!-- 搜索 --> |
| 6 | <div class="formSearch"> | 6 | <div class="formSearch"> |
| 7 | <el-form :inline="true" :model="formInline" class="demo-form-inline"> | 7 | <el-form :inline="true" :model="formInline" class="demo-form-inline"> |
| 8 | <el-form-item label="商品名称"> | 8 | <el-form-item label="商品名称"> |
| 9 | - <el-input v-model="formInline.search" placeholder="请输入商品名称" style="width:168px"/> | 9 | + <el-input v-model="formInline.search" placeholder="请输入商品名称" style="width:168px" /> |
| 10 | </el-form-item> | 10 | </el-form-item> |
| 11 | <el-form-item label="上架状态"> | 11 | <el-form-item label="上架状态"> |
| 12 | <el-select v-model="formInline.shelveState" placeholder="请选择上架状态" style="width:168px"> | 12 | <el-select v-model="formInline.shelveState" placeholder="请选择上架状态" style="width:168px"> |
| @@ -16,44 +16,33 @@ | @@ -16,44 +16,33 @@ | ||
| 16 | </el-select> | 16 | </el-select> |
| 17 | </el-form-item> | 17 | </el-form-item> |
| 18 | <el-form-item label="官方分类"> | 18 | <el-form-item label="官方分类"> |
| 19 | - <el-cascader | ||
| 20 | - v-model="formInline.classifyId" | ||
| 21 | - :options="categoryList" | ||
| 22 | - clearable | ||
| 23 | - :props="{ | 19 | + <el-cascader v-model="formInline.classifyId" :options="categoryList" clearable :props="{ |
| 24 | checkStrictly: true, | 20 | checkStrictly: true, |
| 25 | expandTrigger: 'hover', | 21 | expandTrigger: 'hover', |
| 26 | label:'categoryName', | 22 | label:'categoryName', |
| 27 | value:'id', | 23 | value:'id', |
| 28 | children:'childs' | 24 | children:'childs' |
| 29 | - }" | ||
| 30 | - /> | 25 | + }" /> |
| 31 | </el-form-item> | 26 | </el-form-item> |
| 32 | 27 | ||
| 33 | </el-form> | 28 | </el-form> |
| 34 | <div style="width:20%"> | 29 | <div style="width:20%"> |
| 35 | - <el-button @click="search" style="background-color: #3F9B6A;color: #fff;">查询</el-button> | ||
| 36 | - <el-button @click="clear" class="buttonHover" | ||
| 37 | - style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;">重置</el-button> | 30 | + <el-button @click="search" style="background-color: #3F9B6A;color: #fff;">查询</el-button> |
| 31 | + <el-button @click="clear" class="buttonHover" | ||
| 32 | + style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;">重置</el-button> | ||
| 38 | 33 | ||
| 39 | </div> | 34 | </div> |
| 40 | </div> | 35 | </div> |
| 41 | <div style="margin-bottom:20px;"> | 36 | <div style="margin-bottom:20px;"> |
| 42 | - <el-button @click="add" style="background-color: #3F9B6A;color: #fff;">新增商品</el-button> | ||
| 43 | - <el-button @click="sends" style="background-color: #3F9B6A;color: #fff;">批量导入</el-button> | ||
| 44 | - <el-button @click="productDataExport" style="background-color: #3F9B6A;color: #fff;">导出商品</el-button> | 37 | + <el-button @click="add" style="background-color: #3F9B6A;color: #fff;">新增商品</el-button> |
| 38 | + <el-button @click="sends" style="background-color: #3F9B6A;color: #fff;">批量导入</el-button> | ||
| 39 | + <el-button @click="productDataExport" style="background-color: #3F9B6A;color: #fff;">导出商品</el-button> | ||
| 45 | </div> | 40 | </div> |
| 46 | <!-- 表格 --> | 41 | <!-- 表格 --> |
| 47 | <div class="tableBox"> | 42 | <div class="tableBox"> |
| 48 | - <el-table | ||
| 49 | - ref="multipleTable" | ||
| 50 | - :data="tableData" | ||
| 51 | - | ||
| 52 | - tooltip-effect="dark" | ||
| 53 | - @selection-change="handleSelectionChange" | ||
| 54 | - :header-cell-style="{fontSize: '14px',color:'#0009',fontWeight: 'normal',backgroundColor:'#F2F3F5'}" | ||
| 55 | - > | ||
| 56 | - <!-- <el-table-column | 43 | + <el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" @selection-change="handleSelectionChange" |
| 44 | + :header-cell-style="{fontSize: '14px',color:'#0009',fontWeight: 'normal',backgroundColor:'#F2F3F5'}"> | ||
| 45 | + <!-- <el-table-column | ||
| 57 | type="selection" | 46 | type="selection" |
| 58 | v-if="teble_sel" | 47 | v-if="teble_sel" |
| 59 | min-width="4%"> | 48 | min-width="4%"> |
| @@ -89,13 +78,13 @@ | @@ -89,13 +78,13 @@ | ||
| 89 | <el-table-column label="操作" width="180" fixed="right"> | 78 | <el-table-column label="操作" width="180" fixed="right"> |
| 90 | <template slot-scope="scope"> | 79 | <template slot-scope="scope"> |
| 91 | <div class="btnList"> | 80 | <div class="btnList"> |
| 92 | - <div @click="edit(scope.row)" class="tableBtn greens" >编辑</div> | ||
| 93 | - <div @click="down(scope.row)" v-if="scope.row.shelveState==0" class="tableBtn greens" >上架</div> | ||
| 94 | - <div @click="down(scope.row)" v-if="scope.row.shelveState==1" class="tableBtn greens" >下架</div> | ||
| 95 | - <div @click="setVipPrice(scope.row)" v-if="scope.row.shelveState==1" class="tableBtn greens" >设置会员价</div> | ||
| 96 | - <div @click="del(scope.row)" v-if="scope.row.shelveState!=1" class="tableBtn greens" >删除</div> | 81 | + <div @click="edit(scope.row)" class="tableBtn greens">编辑</div> |
| 82 | + <div @click="down(scope.row)" v-if="scope.row.shelveState==0" class="tableBtn greens">上架</div> | ||
| 83 | + <div @click="down(scope.row)" v-if="scope.row.shelveState==1" class="tableBtn greens">下架</div> | ||
| 84 | + <div @click="setVipPrice(scope.row)" v-if="scope.row.shelveState==1" class="tableBtn greens">设置会员价</div> | ||
| 85 | + <div @click="del(scope.row)" v-if="scope.row.shelveState!=1" class="tableBtn greens">删除</div> | ||
| 97 | 86 | ||
| 98 | - <!-- <el-button type="text" @click="edit(scope.row)">编辑</el-button> | 87 | + <!-- <el-button type="text" @click="edit(scope.row)">编辑</el-button> |
| 99 | <el-button v-if="scope.row.shelveState==0" type="text" @click="down(scope.row)">上架</el-button> | 88 | <el-button v-if="scope.row.shelveState==0" type="text" @click="down(scope.row)">上架</el-button> |
| 100 | <el-button v-if="scope.row.shelveState==1" type="text" @click="down(scope.row)">下架</el-button> | 89 | <el-button v-if="scope.row.shelveState==1" type="text" @click="down(scope.row)">下架</el-button> |
| 101 | <el-button v-if="scope.row.shelveState==1" type="text" @click="setVipPrice(scope.row)">设置会员价</el-button> | 90 | <el-button v-if="scope.row.shelveState==1" type="text" @click="setVipPrice(scope.row)">设置会员价</el-button> |
| @@ -105,44 +94,19 @@ | @@ -105,44 +94,19 @@ | ||
| 105 | </el-table-column> | 94 | </el-table-column> |
| 106 | </el-table> | 95 | </el-table> |
| 107 | <div class="fenye"> | 96 | <div class="fenye"> |
| 108 | - <el-pagination | ||
| 109 | - :current-page="formInline.page" | ||
| 110 | - :page-sizes="[10, 20, 50, 100]" | ||
| 111 | - :page-size="10" | ||
| 112 | - background | ||
| 113 | - layout="prev, pager, next,total" | ||
| 114 | - :total="total" | ||
| 115 | - @size-change="handleSizeChange" | ||
| 116 | - @current-change="handleCurrentChange" | ||
| 117 | - /> | 97 | + <el-pagination :current-page="formInline.page" :page-sizes="[10, 20, 50, 100]" :page-size="10" background |
| 98 | + layout="prev, pager, next,total" :total="total" @size-change="handleSizeChange" | ||
| 99 | + @current-change="handleCurrentChange" /> | ||
| 118 | </div> | 100 | </div> |
| 119 | 101 | ||
| 120 | </div> | 102 | </div> |
| 121 | </div> | 103 | </div> |
| 122 | <!-- 批量导入 --> | 104 | <!-- 批量导入 --> |
| 123 | - <el-dialog | ||
| 124 | - title="批量导入商品" | ||
| 125 | - :visible.sync="batchAdd" | ||
| 126 | - :close-on-click-modal="false" | ||
| 127 | - center | ||
| 128 | - width="400px" | ||
| 129 | - > | 105 | + <el-dialog title="批量导入商品" :visible.sync="batchAdd" :close-on-click-modal="false" center width="400px"> |
| 130 | <div class="uploadDialog"> | 106 | <div class="uploadDialog"> |
| 131 | - <el-upload | ||
| 132 | - drag | ||
| 133 | - :limit="1" | ||
| 134 | - :auto-upload="false" | ||
| 135 | - accept=".xlsx" | ||
| 136 | - :headers="headers" | ||
| 137 | - :action="UploadUrl" | ||
| 138 | - :before-upload="beforeUploadFile" | ||
| 139 | - :on-change="fileChange" | ||
| 140 | - :on-remove="batchRemove" | ||
| 141 | - :on-exceed="exceedFile" | ||
| 142 | - :on-success="handleSuccess" | ||
| 143 | - :on-error="handleError" | ||
| 144 | - :file-list="batchFileList" | ||
| 145 | - > | 107 | + <el-upload drag :limit="1" :auto-upload="false" accept=".xlsx" :headers="headers" :action="UploadUrl" |
| 108 | + :before-upload="beforeUploadFile" :on-change="fileChange" :on-remove="batchRemove" :on-exceed="exceedFile" | ||
| 109 | + :on-success="handleSuccess" :on-error="handleError" :file-list="batchFileList"> | ||
| 146 | <i class="el-icon-upload" /> | 110 | <i class="el-icon-upload" /> |
| 147 | <div class="el-upload__text"> | 111 | <div class="el-upload__text"> |
| 148 | <em style="color:#3F9B6A;">点击上传</em> | 112 | <em style="color:#3F9B6A;">点击上传</em> |
| @@ -158,12 +122,7 @@ | @@ -158,12 +122,7 @@ | ||
| 158 | </div> | 122 | </div> |
| 159 | </el-dialog> | 123 | </el-dialog> |
| 160 | <!-- 设置会员价弹窗 --> | 124 | <!-- 设置会员价弹窗 --> |
| 161 | - <el-dialog | ||
| 162 | - title="设置会员价" | ||
| 163 | - :visible.sync="vipPriceVisible" | ||
| 164 | - width="50%" | ||
| 165 | - class="vipDialog" | ||
| 166 | - > | 125 | + <el-dialog title="设置会员价" :visible.sync="vipPriceVisible" width="50%" class="vipDialog"> |
| 167 | <el-form ref="form" label-width="80px"> | 126 | <el-form ref="form" label-width="80px"> |
| 168 | <el-form-item label="优惠方式"> | 127 | <el-form-item label="优惠方式"> |
| 169 | <el-radio-group v-model="mode" @change="modeChange"> | 128 | <el-radio-group v-model="mode" @change="modeChange"> |
| @@ -188,589 +147,625 @@ | @@ -188,589 +147,625 @@ | ||
| 188 | {{ item.price }} | 147 | {{ item.price }} |
| 189 | </td> | 148 | </td> |
| 190 | <td v-for="(itemJ,indexJ) in item.memberPrices" :key="indexJ" class="td-input"> | 149 | <td v-for="(itemJ,indexJ) in item.memberPrices" :key="indexJ" class="td-input"> |
| 191 | - <el-input v-model="itemJ.price" oninput="value=value.replace(/([^\d|\.])/g, '')" /> {{ mode==1?'折':'元' }} | 150 | + <el-input v-model="itemJ.price" oninput="value=value.replace(/([^\d|\.])/g, '')" /> |
| 151 | + {{ mode==1?'折':'元' }} | ||
| 192 | </td> | 152 | </td> |
| 193 | </tr> | 153 | </tr> |
| 194 | </table> | 154 | </table> |
| 195 | </div> | 155 | </div> |
| 196 | - <el-button style="background-color: #3F9B6A;color: #fff;" class="clearBtn" @click="clearProductMember">清除所有旧会员价</el-button> | 156 | + <el-button style="background-color: #3F9B6A;color: #fff;" class="clearBtn" |
| 157 | + @click="clearProductMember">清除所有旧会员价</el-button> | ||
| 197 | </el-form> | 158 | </el-form> |
| 198 | <span slot="footer" class="dialog-footer"> | 159 | <span slot="footer" class="dialog-footer"> |
| 199 | <el-button @click="vipPriceVisible = false" class="buttonHover" | 160 | <el-button @click="vipPriceVisible = false" class="buttonHover" |
| 200 | - style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;">取 消</el-button> | 161 | + style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;">取 消</el-button> |
| 201 | <el-button type="primary" @click="vipPriceSubmit">确 定</el-button> | 162 | <el-button type="primary" @click="vipPriceSubmit">确 定</el-button> |
| 202 | </span> | 163 | </span> |
| 203 | </el-dialog> | 164 | </el-dialog> |
| 204 | <!-- 新增/修改商品弹窗 --> | 165 | <!-- 新增/修改商品弹窗 --> |
| 205 | - <el-dialog | ||
| 206 | - :title="!commId ? '新增商品' : '编辑商品'" | ||
| 207 | - :visible.sync="commidyVisible" | ||
| 208 | - custom-class="bian_css" width="70%" | ||
| 209 | - center | ||
| 210 | - top="6vh" | ||
| 211 | - :close-on-click-modal="false" | ||
| 212 | - @before-close="closeModal" | ||
| 213 | - @close="closeModal" | ||
| 214 | - > | ||
| 215 | - <CommAdd | ||
| 216 | - ref="child" | ||
| 217 | - :show-tinymce="showTinymce" | ||
| 218 | - :product-id="commId" | ||
| 219 | - @cancel="cancelForm" | ||
| 220 | - /> | ||
| 221 | - </el-dialog> | 166 | + <!-- <el-dialog :title="!commId ? '新增商品' : '编辑商品'" :visible.sync="commidyVisible" custom-class="bian_css" width="70%" |
| 167 | + center top="6vh" :close-on-click-modal="false" @before-close="closeModal" @close="closeModal"> | ||
| 168 | + <CommAdd ref="child" :show-tinymce="showTinymce" :product-id="commId" @cancel="cancelForm" /> | ||
| 169 | + </el-dialog> --> | ||
| 170 | + <div v-if ="ontype == '2'" class="tab_show"> | ||
| 171 | + | ||
| 172 | + <CommAdd v-if ="ontype == '2'" ref="child" :show-tinymce="showTinymce" :product-id="commId" @cancel="cancelForm" /> | ||
| 173 | + </div> | ||
| 222 | </div> | 174 | </div> |
| 223 | </template> | 175 | </template> |
| 224 | 176 | ||
| 225 | <script> | 177 | <script> |
| 226 | -import CommAdd from '@/views/commodity/commoditySystem/addCommodity.vue' | ||
| 227 | -import { getBtnList, getToken } from '@/utils/auth' | ||
| 228 | -import { uploadUrl } from '@/utils/request' | ||
| 229 | -import { | ||
| 230 | - getClassifyGetAll, | ||
| 231 | - getClassifyDelete, | ||
| 232 | - getClassifyStart, | ||
| 233 | - downloadTemplate, | ||
| 234 | - importProduct, | ||
| 235 | - getClassify, | ||
| 236 | - getProductMembers, | ||
| 237 | - setProductMember, | ||
| 238 | - clearProductMember, | ||
| 239 | - productExport, | ||
| 240 | - getBrandList | ||
| 241 | -} from '@/api/commodity' | ||
| 242 | -export default { | ||
| 243 | - components: { | ||
| 244 | - CommAdd | ||
| 245 | - }, | ||
| 246 | - data() { | ||
| 247 | - // 这里存放数据 | ||
| 248 | - return { | ||
| 249 | - showTinymce: false, | ||
| 250 | - btnList: '', | ||
| 251 | - activeName: 'first', | ||
| 252 | - formInline: { | ||
| 253 | - search: '', // 搜索字段 | ||
| 254 | - shelveState: '', // 上架状态 1-上架 0-不上架 null-全部 | ||
| 255 | - stock: '', // 库存状态 1-有库存 0-无库存 null-全部 | ||
| 256 | - classifyId: '', // 最下级分类id | ||
| 257 | - page: 1, // 当前页 | ||
| 258 | - pageSize: 10 | ||
| 259 | - }, | ||
| 260 | - batchAdd: false, | ||
| 261 | - batchFileList: [], | ||
| 262 | - total: 1, | ||
| 263 | - tableData: [], | ||
| 264 | - categoryList: [], | ||
| 265 | - UploadUrl: uploadUrl, | ||
| 266 | - headers: { | ||
| 267 | - 'Authorization-business': getToken() | ||
| 268 | - }, | ||
| 269 | - vipPriceVisible: false, | ||
| 270 | - productId: 0, | ||
| 271 | - mode: 1, | ||
| 272 | - productData: [], | ||
| 273 | - gradeList: [], | ||
| 274 | - commidyVisible: false, | ||
| 275 | - commId: 0, | ||
| 276 | - brandList: [], | ||
| 277 | - teble_sel:false, | ||
| 278 | - canst:'' //组合商品ID | ||
| 279 | - } | ||
| 280 | - }, | ||
| 281 | - computed: { | ||
| 282 | - getBrandName() { | ||
| 283 | - return (row) => { | ||
| 284 | - const find = this.brandList.find(item => item.id === row.brandId); | ||
| 285 | - if (find) return find.brandName | ||
| 286 | - return '-' | ||
| 287 | - } | ||
| 288 | - } | ||
| 289 | - }, | ||
| 290 | - mounted() { | ||
| 291 | - this.getBrandList() | ||
| 292 | - this.getAll(this.formInline) | ||
| 293 | - this.queryAllCategory() | ||
| 294 | - this.btnList = getBtnList() | ||
| 295 | - }, | ||
| 296 | - // 方法集合 | ||
| 297 | - methods: { | ||
| 298 | - msgList(list){ | ||
| 299 | - if(list && list!=''){ | ||
| 300 | - let strin = list.split(',') | ||
| 301 | - return strin[0] | ||
| 302 | - } | 178 | + import CommAdd from '@/views/commodity/commoditySystem/addCommodity.vue' |
| 179 | + import { | ||
| 180 | + getBtnList, | ||
| 181 | + getToken | ||
| 182 | + } from '@/utils/auth' | ||
| 183 | + import { | ||
| 184 | + uploadUrl | ||
| 185 | + } from '@/utils/request' | ||
| 186 | + import { | ||
| 187 | + getClassifyGetAll, | ||
| 188 | + getClassifyDelete, | ||
| 189 | + getClassifyStart, | ||
| 190 | + downloadTemplate, | ||
| 191 | + importProduct, | ||
| 192 | + getClassify, | ||
| 193 | + getProductMembers, | ||
| 194 | + setProductMember, | ||
| 195 | + clearProductMember, | ||
| 196 | + productExport, | ||
| 197 | + getBrandList | ||
| 198 | + } from '@/api/commodity' | ||
| 199 | + export default { | ||
| 200 | + components: { | ||
| 201 | + CommAdd | ||
| 303 | }, | 202 | }, |
| 304 | - async getBrandList() { | ||
| 305 | - const { data } = await getBrandList() | ||
| 306 | - this.brandList = data | ||
| 307 | - }, | ||
| 308 | - cancelForm() { | ||
| 309 | - this.commidyVisible = false | ||
| 310 | - this.formInline = { | ||
| 311 | - search: '', | ||
| 312 | - shelveState: '', | ||
| 313 | - stock: '', | ||
| 314 | - classifyId: '', | ||
| 315 | - page: 1, | ||
| 316 | - pageSize: 10 | 203 | + data() { |
| 204 | + // 这里存放数据 | ||
| 205 | + return { | ||
| 206 | + ontype:'1', | ||
| 207 | + showTinymce: false, | ||
| 208 | + btnList: '', | ||
| 209 | + activeName: 'first', | ||
| 210 | + formInline: { | ||
| 211 | + search: '', // 搜索字段 | ||
| 212 | + shelveState: '', // 上架状态 1-上架 0-不上架 null-全部 | ||
| 213 | + stock: '', // 库存状态 1-有库存 0-无库存 null-全部 | ||
| 214 | + classifyId: '', // 最下级分类id | ||
| 215 | + page: 1, // 当前页 | ||
| 216 | + pageSize: 10 | ||
| 217 | + }, | ||
| 218 | + batchAdd: false, | ||
| 219 | + batchFileList: [], | ||
| 220 | + total: 1, | ||
| 221 | + tableData: [], | ||
| 222 | + categoryList: [], | ||
| 223 | + UploadUrl: uploadUrl, | ||
| 224 | + headers: { | ||
| 225 | + 'Authorization-business': getToken() | ||
| 226 | + }, | ||
| 227 | + vipPriceVisible: false, | ||
| 228 | + productId: 0, | ||
| 229 | + mode: 1, | ||
| 230 | + productData: [], | ||
| 231 | + gradeList: [], | ||
| 232 | + commidyVisible: false, | ||
| 233 | + commId: 0, | ||
| 234 | + brandList: [], | ||
| 235 | + teble_sel: false, | ||
| 236 | + canst: '' //组合商品ID | ||
| 317 | } | 237 | } |
| 318 | - this.getAll(this.formInline) | ||
| 319 | - this.closeModal() | ||
| 320 | }, | 238 | }, |
| 321 | - closeModal() { | ||
| 322 | - this.showTinymce = false | ||
| 323 | - this.$refs.child.last() | ||
| 324 | - this.$refs.child.reset() | ||
| 325 | - }, | ||
| 326 | - btnClick(id) { | ||
| 327 | - if (id.permissionName === '批量导入') { | ||
| 328 | - this.sends() | ||
| 329 | - } else if (id.permissionName === '新增商品') { | ||
| 330 | - this.add() | 239 | + computed: { |
| 240 | + getBrandName() { | ||
| 241 | + return (row) => { | ||
| 242 | + const find = this.brandList.find(item => item.id === row.brandId); | ||
| 243 | + if (find) return find.brandName | ||
| 244 | + return '-' | ||
| 245 | + } | ||
| 331 | } | 246 | } |
| 332 | }, | 247 | }, |
| 333 | - handleSizeChange(val) { | ||
| 334 | - this.formInline.pageSize = val | 248 | + mounted() { |
| 249 | + this.getBrandList() | ||
| 335 | this.getAll(this.formInline) | 250 | this.getAll(this.formInline) |
| 251 | + this.queryAllCategory() | ||
| 252 | + this.btnList = getBtnList() | ||
| 336 | }, | 253 | }, |
| 337 | - handleCurrentChange(val) { | ||
| 338 | - this.formInline.page = val | ||
| 339 | - this.getAll(this.formInline) | ||
| 340 | - }, | ||
| 341 | - // 查询 | ||
| 342 | - search() { | ||
| 343 | - this.total = 1 | ||
| 344 | - this.formInline.page = 1 | ||
| 345 | - this.getAll(this.formInline) | ||
| 346 | - }, | ||
| 347 | - // 重置 | ||
| 348 | - clear() { | ||
| 349 | - this.formInline = { | ||
| 350 | - search: '', // 搜索字段 | ||
| 351 | - shelveState: '', // 上架状态 1-上架 0-不上架 null-全部 | ||
| 352 | - stock: '', // 库存状态 1-有库存 0-无库存 null-全部 | ||
| 353 | - classifyId: '', // 最下级分类id | ||
| 354 | - page: 1, // 当前页 | ||
| 355 | - pageSize: 10 | ||
| 356 | - } | ||
| 357 | - }, | ||
| 358 | - // 新增商品 | ||
| 359 | - add() { | ||
| 360 | - this.showTinymce = true | ||
| 361 | - if (this.commId) { | 254 | + // 方法集合 |
| 255 | + methods: { | ||
| 256 | + msgList(list) { | ||
| 257 | + if (list && list != '') { | ||
| 258 | + let strin = list.split(',') | ||
| 259 | + return strin[0] | ||
| 260 | + } | ||
| 261 | + }, | ||
| 262 | + async getBrandList() { | ||
| 263 | + const { | ||
| 264 | + data | ||
| 265 | + } = await getBrandList() | ||
| 266 | + this.brandList = data | ||
| 267 | + }, | ||
| 268 | + cancelForm() { | ||
| 269 | + this.commidyVisible = false | ||
| 270 | + this.ontype = '1' | ||
| 271 | + this.formInline = { | ||
| 272 | + search: '', | ||
| 273 | + shelveState: '', | ||
| 274 | + stock: '', | ||
| 275 | + classifyId: '', | ||
| 276 | + page: 1, | ||
| 277 | + pageSize: 10 | ||
| 278 | + } | ||
| 279 | + this.getAll(this.formInline) | ||
| 280 | + this.closeModal() | ||
| 281 | + }, | ||
| 282 | + closeModal() { | ||
| 283 | + this.showTinymce = false | ||
| 284 | + this.$refs.child.last() | ||
| 362 | this.$refs.child.reset() | 285 | this.$refs.child.reset() |
| 363 | - } | ||
| 364 | - this.commidyVisible = true | ||
| 365 | - this.commId = 0 | ||
| 366 | - // this.$router.push({ name: 'addCommodity', params: { id: '1' }}) | ||
| 367 | - }, | ||
| 368 | - // 导出商品 | ||
| 369 | - async productDataExport() { | ||
| 370 | - this.$message({ | ||
| 371 | - message: '数据导出中,请勿重复操作!', | ||
| 372 | - type: 'success' | ||
| 373 | - }) | ||
| 374 | - const res = await productExport(this.formInline) | ||
| 375 | - if (!res) { return } | ||
| 376 | - const blob = new Blob([res], { type: 'application/vnd.ms-excel' }) | ||
| 377 | - const fileName = '商品数据明细表.xls' | ||
| 378 | - if ('download' in document.createElement('a')) { | ||
| 379 | - // 非IE下载 | ||
| 380 | - const elink = document.createElement('a') | ||
| 381 | - elink.download = fileName | ||
| 382 | - elink.href = URL.createObjectURL(blob) | ||
| 383 | - elink.style.display = 'none' | ||
| 384 | - document.body.appendChild(elink) | ||
| 385 | - elink.click() | ||
| 386 | - URL.revokeObjectURL(elink.href) // 释放URL 对象 | ||
| 387 | - document.body.removeChild(elink) | ||
| 388 | - } else { | ||
| 389 | - // IE10+下载 | ||
| 390 | - navigator.msSaveBlob(blob, fileName) | ||
| 391 | - } | ||
| 392 | - }, | ||
| 393 | - // 批量导入 | ||
| 394 | - sends() { | ||
| 395 | - this.batchAdd = true | ||
| 396 | - this.batchFileList = [] | ||
| 397 | - }, | ||
| 398 | - // 编辑商品 | ||
| 399 | - edit(row) { | ||
| 400 | - this.showTinymce = true | ||
| 401 | - this.commidyVisible = true | ||
| 402 | - this.commId = row.productId | ||
| 403 | - this.$nextTick(() => { | ||
| 404 | - this.$refs.child?.details() | ||
| 405 | - }) | ||
| 406 | - // this.$router.push({ | ||
| 407 | - // name: 'addCommodity', | ||
| 408 | - // params: { productId: row.productId } | ||
| 409 | - // }) | ||
| 410 | - // let res = await getClassifyGetById({ productId: row.productId }); | ||
| 411 | - // console.log(res); | ||
| 412 | - }, | ||
| 413 | - // 设置会员价 | ||
| 414 | - setVipPrice(row) { | ||
| 415 | - var _ = this | ||
| 416 | - this.productId = row.productId | ||
| 417 | - getProductMembers({ productId: row.productId }).then(res => { | ||
| 418 | - console.log(res,'11231312312312') | ||
| 419 | - if (res.code === '') { | ||
| 420 | - _.productData = res.data | ||
| 421 | - if (_.productData && _.productData.length > 0) { | ||
| 422 | - _.gradeList = [] | ||
| 423 | - const _memberPrices = _.productData[0].memberPrices | ||
| 424 | - _memberPrices.forEach(function(item, i) { | ||
| 425 | - _.gradeList.push(item.memberLevelName) | ||
| 426 | - }) | ||
| 427 | - _.mode = _.productData[0].mode ? _.productData[0].mode : 1 | ||
| 428 | - _.vipPriceVisible = true | ||
| 429 | - } | 286 | + }, |
| 287 | + btnClick(id) { | ||
| 288 | + if (id.permissionName === '批量导入') { | ||
| 289 | + this.sends() | ||
| 290 | + } else if (id.permissionName === '新增商品') { | ||
| 291 | + this.add() | ||
| 430 | } | 292 | } |
| 431 | - }) | ||
| 432 | - }, | ||
| 433 | - // 设置会员价提交 | ||
| 434 | - vipPriceSubmit() { | ||
| 435 | - for (let i = 0; i < this.productData.length; i++) { | ||
| 436 | - this.productData[i].mode = this.mode | ||
| 437 | - for (let j = 0; j < this.productData[i].memberPrices.length; j++) { | ||
| 438 | - this.productData[i].memberPrices[j].mode = this.mode | ||
| 439 | - var _price = this.productData[i].memberPrices[j].price | ||
| 440 | - if (!_price) { | ||
| 441 | - this.$message({ | ||
| 442 | - type: 'warning', | ||
| 443 | - message: '会员价格不能为空!' | ||
| 444 | - }) | ||
| 445 | - return false | ||
| 446 | - } else if (this.productData[i].mode === 1) { | ||
| 447 | - if (_price <= 0 || _price >= 10) { | ||
| 448 | - this.$message({ | ||
| 449 | - type: 'warning', | ||
| 450 | - message: '会员折数必须大于0小于10!' | 293 | + }, |
| 294 | + handleSizeChange(val) { | ||
| 295 | + this.formInline.pageSize = val | ||
| 296 | + this.getAll(this.formInline) | ||
| 297 | + }, | ||
| 298 | + handleCurrentChange(val) { | ||
| 299 | + this.formInline.page = val | ||
| 300 | + this.getAll(this.formInline) | ||
| 301 | + }, | ||
| 302 | + // 查询 | ||
| 303 | + search() { | ||
| 304 | + this.total = 1 | ||
| 305 | + this.formInline.page = 1 | ||
| 306 | + this.getAll(this.formInline) | ||
| 307 | + }, | ||
| 308 | + // 重置 | ||
| 309 | + clear() { | ||
| 310 | + this.formInline = { | ||
| 311 | + search: '', // 搜索字段 | ||
| 312 | + shelveState: '', // 上架状态 1-上架 0-不上架 null-全部 | ||
| 313 | + stock: '', // 库存状态 1-有库存 0-无库存 null-全部 | ||
| 314 | + classifyId: '', // 最下级分类id | ||
| 315 | + page: 1, // 当前页 | ||
| 316 | + pageSize: 10 | ||
| 317 | + } | ||
| 318 | + }, | ||
| 319 | + // 新增商品 | ||
| 320 | + add() { | ||
| 321 | + this.showTinymce = true | ||
| 322 | + // if (this.commId) { | ||
| 323 | + // this.$refs.child.reset() | ||
| 324 | + // } | ||
| 325 | + this.commidyVisible = true | ||
| 326 | + this.commId = null | ||
| 327 | + this.ontype = '2' | ||
| 328 | + // this.$router.push({ name: 'addCommodity', params: { id: '1' }}) | ||
| 329 | + }, | ||
| 330 | + // 导出商品 | ||
| 331 | + async productDataExport() { | ||
| 332 | + this.$message({ | ||
| 333 | + message: '数据导出中,请勿重复操作!', | ||
| 334 | + type: 'success' | ||
| 335 | + }) | ||
| 336 | + const res = await productExport(this.formInline) | ||
| 337 | + if (!res) { | ||
| 338 | + return | ||
| 339 | + } | ||
| 340 | + const blob = new Blob([res], { | ||
| 341 | + type: 'application/vnd.ms-excel' | ||
| 342 | + }) | ||
| 343 | + const fileName = '商品数据明细表.xls' | ||
| 344 | + if ('download' in document.createElement('a')) { | ||
| 345 | + // 非IE下载 | ||
| 346 | + const elink = document.createElement('a') | ||
| 347 | + elink.download = fileName | ||
| 348 | + elink.href = URL.createObjectURL(blob) | ||
| 349 | + elink.style.display = 'none' | ||
| 350 | + document.body.appendChild(elink) | ||
| 351 | + elink.click() | ||
| 352 | + URL.revokeObjectURL(elink.href) // 释放URL 对象 | ||
| 353 | + document.body.removeChild(elink) | ||
| 354 | + } else { | ||
| 355 | + // IE10+下载 | ||
| 356 | + navigator.msSaveBlob(blob, fileName) | ||
| 357 | + } | ||
| 358 | + }, | ||
| 359 | + // 批量导入 | ||
| 360 | + sends() { | ||
| 361 | + this.batchAdd = true | ||
| 362 | + this.batchFileList = [] | ||
| 363 | + }, | ||
| 364 | + // 编辑商品 | ||
| 365 | + edit(row) { | ||
| 366 | + this.showTinymce = true | ||
| 367 | + this.commidyVisible = true | ||
| 368 | + this.ontype = '2' | ||
| 369 | + this.commId = row.productId | ||
| 370 | + this.$nextTick(() => { | ||
| 371 | + this.$refs.child?.details() | ||
| 372 | + }) | ||
| 373 | + // this.$router.push({ | ||
| 374 | + // name: 'addCommodity', | ||
| 375 | + // params: { productId: row.productId } | ||
| 376 | + // }) | ||
| 377 | + // let res = await getClassifyGetById({ productId: row.productId }); | ||
| 378 | + // console.log(res); | ||
| 379 | + }, | ||
| 380 | + // 设置会员价 | ||
| 381 | + setVipPrice(row) { | ||
| 382 | + var _ = this | ||
| 383 | + this.productId = row.productId | ||
| 384 | + getProductMembers({ | ||
| 385 | + productId: row.productId | ||
| 386 | + }).then(res => { | ||
| 387 | + console.log(res, '11231312312312') | ||
| 388 | + if (res.code === '') { | ||
| 389 | + _.productData = res.data | ||
| 390 | + if (_.productData && _.productData.length > 0) { | ||
| 391 | + _.gradeList = [] | ||
| 392 | + const _memberPrices = _.productData[0].memberPrices | ||
| 393 | + _memberPrices.forEach(function(item, i) { | ||
| 394 | + _.gradeList.push(item.memberLevelName) | ||
| 451 | }) | 395 | }) |
| 452 | - return false | 396 | + _.mode = _.productData[0].mode ? _.productData[0].mode : 1 |
| 397 | + _.vipPriceVisible = true | ||
| 453 | } | 398 | } |
| 454 | - } else if (this.productData[i].mode === 2) { | ||
| 455 | - if (_price > this.productData[i].price) { | 399 | + } |
| 400 | + }) | ||
| 401 | + }, | ||
| 402 | + // 设置会员价提交 | ||
| 403 | + vipPriceSubmit() { | ||
| 404 | + for (let i = 0; i < this.productData.length; i++) { | ||
| 405 | + this.productData[i].mode = this.mode | ||
| 406 | + for (let j = 0; j < this.productData[i].memberPrices.length; j++) { | ||
| 407 | + this.productData[i].memberPrices[j].mode = this.mode | ||
| 408 | + var _price = this.productData[i].memberPrices[j].price | ||
| 409 | + if (!_price) { | ||
| 456 | this.$message({ | 410 | this.$message({ |
| 457 | type: 'warning', | 411 | type: 'warning', |
| 458 | - message: '会员价格不能大于原价!' | 412 | + message: '会员价格不能为空!' |
| 459 | }) | 413 | }) |
| 460 | return false | 414 | return false |
| 415 | + } else if (this.productData[i].mode === 1) { | ||
| 416 | + if (_price <= 0 || _price >= 10) { | ||
| 417 | + this.$message({ | ||
| 418 | + type: 'warning', | ||
| 419 | + message: '会员折数必须大于0小于10!' | ||
| 420 | + }) | ||
| 421 | + return false | ||
| 422 | + } | ||
| 423 | + } else if (this.productData[i].mode === 2) { | ||
| 424 | + if (_price > this.productData[i].price) { | ||
| 425 | + this.$message({ | ||
| 426 | + type: 'warning', | ||
| 427 | + message: '会员价格不能大于原价!' | ||
| 428 | + }) | ||
| 429 | + return false | ||
| 430 | + } | ||
| 461 | } | 431 | } |
| 462 | } | 432 | } |
| 463 | } | 433 | } |
| 464 | - } | ||
| 465 | - setProductMember({ productId: this.productId, members: this.productData }).then(res => { | ||
| 466 | - if (res.code === '') { | ||
| 467 | - this.$message({ | ||
| 468 | - type: 'success', | ||
| 469 | - message: '设置成功!' | ||
| 470 | - }) | ||
| 471 | - this.getAll(this.formInline) | ||
| 472 | - this.vipPriceVisible = false | ||
| 473 | - } | ||
| 474 | - }) | ||
| 475 | - }, | ||
| 476 | - // 清空会员价 | ||
| 477 | - clearProductMember() { | ||
| 478 | - console.log(this.productData, 'this.productData') | ||
| 479 | - this.$confirm('该商品所有旧设置的会员价将被清除, 是否继续?', '提示', { | ||
| 480 | - confirmButtonText: '确定', | ||
| 481 | - cancelButtonText: '取消', | ||
| 482 | - type: 'warning' | ||
| 483 | - }).then(() => { | ||
| 484 | - clearProductMember({ productId: this.productId }).then(res => { | 434 | + setProductMember({ |
| 435 | + productId: this.productId, | ||
| 436 | + members: this.productData | ||
| 437 | + }).then(res => { | ||
| 485 | if (res.code === '') { | 438 | if (res.code === '') { |
| 486 | - this.productData.map(item => { | ||
| 487 | - item.memberPrices.map(itemChild => { | ||
| 488 | - itemChild.price = null | ||
| 489 | - }) | 439 | + this.$message({ |
| 440 | + type: 'success', | ||
| 441 | + message: '设置成功!' | ||
| 490 | }) | 442 | }) |
| 491 | - this.$message.success('清除成功') | ||
| 492 | - // this.vipPriceVisible = false | 443 | + this.getAll(this.formInline) |
| 444 | + this.vipPriceVisible = false | ||
| 493 | } | 445 | } |
| 494 | }) | 446 | }) |
| 495 | - }) | ||
| 496 | - }, | ||
| 497 | - // 删除商品 | ||
| 498 | - del(row) { | ||
| 499 | - this.$confirm('选中数据将被永久删除, 是否继续?', '提示', { | ||
| 500 | - confirmButtonText: '确定', | ||
| 501 | - cancelButtonText: '取消', | ||
| 502 | - type: 'warning' | ||
| 503 | - }) | ||
| 504 | - .then(() => { | ||
| 505 | - getClassifyDelete({ productId: row.productId }).then(res => { | 447 | + }, |
| 448 | + // 清空会员价 | ||
| 449 | + clearProductMember() { | ||
| 450 | + console.log(this.productData, 'this.productData') | ||
| 451 | + this.$confirm('该商品所有旧设置的会员价将被清除, 是否继续?', '提示', { | ||
| 452 | + confirmButtonText: '确定', | ||
| 453 | + cancelButtonText: '取消', | ||
| 454 | + type: 'warning' | ||
| 455 | + }).then(() => { | ||
| 456 | + clearProductMember({ | ||
| 457 | + productId: this.productId | ||
| 458 | + }).then(res => { | ||
| 506 | if (res.code === '') { | 459 | if (res.code === '') { |
| 507 | - this.$message({ | ||
| 508 | - type: 'success', | ||
| 509 | - message: '删除成功!' | 460 | + this.productData.map(item => { |
| 461 | + item.memberPrices.map(itemChild => { | ||
| 462 | + itemChild.price = null | ||
| 463 | + }) | ||
| 510 | }) | 464 | }) |
| 511 | - this.getAll(this.formInline) | 465 | + this.$message.success('清除成功') |
| 466 | + // this.vipPriceVisible = false | ||
| 512 | } | 467 | } |
| 513 | }) | 468 | }) |
| 514 | }) | 469 | }) |
| 515 | - .catch(() => {}) | ||
| 516 | - }, | ||
| 517 | - // 商品上下架 | ||
| 518 | - async down(row) { | ||
| 519 | - console.log(row.shelveState) | ||
| 520 | - if (row.shelveState) { | ||
| 521 | - console.log(111) | ||
| 522 | - const res = await getClassifyStart({ | ||
| 523 | - productId: row.productId, | ||
| 524 | - shelveState: 0 | ||
| 525 | - }) | ||
| 526 | - if (res.code === '') { | ||
| 527 | - this.$message({ | ||
| 528 | - type: 'success', | ||
| 529 | - message: '下架成功!' | 470 | + }, |
| 471 | + // 删除商品 | ||
| 472 | + del(row) { | ||
| 473 | + this.$confirm('选中数据将被永久删除, 是否继续?', '提示', { | ||
| 474 | + confirmButtonText: '确定', | ||
| 475 | + cancelButtonText: '取消', | ||
| 476 | + type: 'warning' | ||
| 530 | }) | 477 | }) |
| 531 | - this.getAll(this.formInline) | ||
| 532 | - } | ||
| 533 | - } else { | ||
| 534 | - const res = await getClassifyStart({ | ||
| 535 | - productId: row.productId, | ||
| 536 | - shelveState: 1 | ||
| 537 | - }) | ||
| 538 | - if (res.code === '') { | ||
| 539 | - this.$message({ | ||
| 540 | - type: 'success', | ||
| 541 | - message: '上架成功!' | 478 | + .then(() => { |
| 479 | + getClassifyDelete({ | ||
| 480 | + productId: row.productId | ||
| 481 | + }).then(res => { | ||
| 482 | + if (res.code === '') { | ||
| 483 | + this.$message({ | ||
| 484 | + type: 'success', | ||
| 485 | + message: '删除成功!' | ||
| 486 | + }) | ||
| 487 | + this.getAll(this.formInline) | ||
| 488 | + } | ||
| 489 | + }) | ||
| 542 | }) | 490 | }) |
| 543 | - this.getAll(this.formInline) | ||
| 544 | - } | ||
| 545 | - } | ||
| 546 | - }, | ||
| 547 | - // 初始化查询所有数据 | ||
| 548 | - async getAll(formInline) { | ||
| 549 | - this.formInline.classifyId = | ||
| 550 | - this.formInline.classifyId[2] || | ||
| 551 | - this.formInline.classifyId[1] || | ||
| 552 | - this.formInline.classifyId[0] || | ||
| 553 | - this.formInline.classifyId | ||
| 554 | - const res = await getClassifyGetAll(formInline) | ||
| 555 | - this.total = res.data.total | ||
| 556 | - this.tableData = res.data.list | ||
| 557 | - console.log(this.tableData) | ||
| 558 | - }, | ||
| 559 | - // 初始化查询所有分类 | ||
| 560 | - async queryAllCategory() { | ||
| 561 | - const res = await getClassify() | ||
| 562 | - this.categoryList = res.data | ||
| 563 | - this.handleRemoveEmptyChild(this.categoryList) | ||
| 564 | - }, | ||
| 565 | - handleRemoveEmptyChild(arr) { | ||
| 566 | - for (let i = 0; i < arr.length; i++) { | ||
| 567 | - if (arr[i].childs && Array.isArray(arr[i].childs)) { | ||
| 568 | - this.handleRemoveEmptyChild(arr[i].childs) | ||
| 569 | - } | ||
| 570 | - if (arr[i].childs && Array.isArray(arr[i].childs) && arr[i].childs.length === 0) { | ||
| 571 | - delete arr[i].childs | ||
| 572 | - } | ||
| 573 | - } | ||
| 574 | - }, | ||
| 575 | - // *********************导入部分 | ||
| 576 | - UploadUrls: function() { | ||
| 577 | - // 因为action参数是必填项,我们使用二次确认进行文件上传时,直接填上传文件的url会因为没有参数导致api报404,所以这里将action设置为一个返回为空的方法就行,避免抛错 | ||
| 578 | - return '' | ||
| 579 | - }, | ||
| 580 | - // 下载模板 | ||
| 581 | - poDownload() { | ||
| 582 | - downloadTemplate().then(res => { | ||
| 583 | - console.log(res, 1111) | ||
| 584 | - // const content = res | ||
| 585 | - const blob = new Blob([res]) | ||
| 586 | - const fileName = '批量导入商品模板.xlsx' | ||
| 587 | - if ('download' in document.createElement('a')) { | ||
| 588 | - // 非IE下载 | ||
| 589 | - const elink = document.createElement('a') | ||
| 590 | - elink.download = fileName | ||
| 591 | - elink.style.display = 'none' | ||
| 592 | - elink.href = URL.createObjectURL(blob) | ||
| 593 | - document.body.appendChild(elink) | ||
| 594 | - elink.click() | ||
| 595 | - URL.revokeObjectURL(elink.href) // 释放URL 对象 | ||
| 596 | - document.body.removeChild(elink) | 491 | + .catch(() => {}) |
| 492 | + }, | ||
| 493 | + // 商品上下架 | ||
| 494 | + async down(row) { | ||
| 495 | + console.log(row.shelveState) | ||
| 496 | + if (row.shelveState) { | ||
| 497 | + console.log(111) | ||
| 498 | + const res = await getClassifyStart({ | ||
| 499 | + productId: row.productId, | ||
| 500 | + shelveState: 0 | ||
| 501 | + }) | ||
| 502 | + if (res.code === '') { | ||
| 503 | + this.$message({ | ||
| 504 | + type: 'success', | ||
| 505 | + message: '下架成功!' | ||
| 506 | + }) | ||
| 507 | + this.getAll(this.formInline) | ||
| 508 | + } | ||
| 597 | } else { | 509 | } else { |
| 598 | - // IE10+下载 | ||
| 599 | - navigator.msSaveBlob(blob, fileName) | ||
| 600 | - } | ||
| 601 | - }) | ||
| 602 | - }, | ||
| 603 | - // 导入 | ||
| 604 | - uploadFile() { | ||
| 605 | - if (this.batchFileList.length === 0) { | ||
| 606 | - this.$message.warning('请上传文件') | ||
| 607 | - } else { | ||
| 608 | - const formDate = new FormData() | ||
| 609 | - formDate.append('file', this.batchFileList[0]) | ||
| 610 | - console.log(formDate.get('file')) | ||
| 611 | - importProduct(formDate).then(res => { | ||
| 612 | - console.log(res) | 510 | + const res = await getClassifyStart({ |
| 511 | + productId: row.productId, | ||
| 512 | + shelveState: 1 | ||
| 513 | + }) | ||
| 613 | if (res.code === '') { | 514 | if (res.code === '') { |
| 614 | - this.$message.success('导入成功') | ||
| 615 | - this.batchAdd = false | ||
| 616 | - this.batchFileList = [] | 515 | + this.$message({ |
| 516 | + type: 'success', | ||
| 517 | + message: '上架成功!' | ||
| 518 | + }) | ||
| 617 | this.getAll(this.formInline) | 519 | this.getAll(this.formInline) |
| 618 | } | 520 | } |
| 619 | - }) | ||
| 620 | - } | ||
| 621 | - }, | ||
| 622 | - // 上传文件之前的钩子, 参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传 | ||
| 623 | - beforeUploadFile(file) { | ||
| 624 | - console.log('before upload') | ||
| 625 | - console.log(file) | ||
| 626 | - const extension = file.name.substring(file.name.lastIndexOf('.') + 1) | ||
| 627 | - const size = file.size / 1024 / 1024 | ||
| 628 | - if (extension !== 'xlsx') { | ||
| 629 | - this.$message.warning('只能上传后缀是.xlsx的文件') | ||
| 630 | - } | ||
| 631 | - if (size > 10) { | ||
| 632 | - this.$message.warning('文件大小不得超过10M') | ||
| 633 | - } | ||
| 634 | - }, | ||
| 635 | - // 文件状态改变时的钩子 | ||
| 636 | - fileChange(file, batchFileList) { | ||
| 637 | - console.log(file.raw) | ||
| 638 | - this.batchFileList.push(file.raw) | ||
| 639 | - console.log(this.batchFileList) | ||
| 640 | - }, | ||
| 641 | - batchRemove(file, batchFileList) { | ||
| 642 | - this.batchFileList = [] | ||
| 643 | - }, | ||
| 644 | - // 文件超出个数限制时的钩子 | ||
| 645 | - exceedFile(files, batchFileList) { | ||
| 646 | - this.$message.warning(`只能选择1个文件`) | ||
| 647 | - }, | ||
| 648 | - // 文件上传成功时的钩子 | ||
| 649 | - handleSuccess(res, file, batchFileList) { | ||
| 650 | - this.$message.success('文件上传成功') | ||
| 651 | - }, | ||
| 652 | - // 文件上传失败时的钩子 | ||
| 653 | - handleError() { | ||
| 654 | - this.$message.error('文件上传失败') | ||
| 655 | - }, | ||
| 656 | - // 切换优惠方式清除内容 | ||
| 657 | - modeChange() { | ||
| 658 | - this.productData.forEach(item => { | ||
| 659 | - item.memberPrices.forEach(itemJ => { | ||
| 660 | - itemJ.price = '' | ||
| 661 | - }) | ||
| 662 | - }) | ||
| 663 | - }, | ||
| 664 | - handleSelectionChange(val) { | ||
| 665 | - console.log(val) | ||
| 666 | - let zuheId = '' | ||
| 667 | - for(let i=0;i<val.length;i++){ | ||
| 668 | - zuheId += val[i].productId + ',' | ||
| 669 | - } | ||
| 670 | - this.canst = zuheId | 521 | + } |
| 522 | + }, | ||
| 523 | + // 初始化查询所有数据 | ||
| 524 | + async getAll(formInline) { | ||
| 525 | + this.formInline.classifyId = | ||
| 526 | + this.formInline.classifyId[2] || | ||
| 527 | + this.formInline.classifyId[1] || | ||
| 528 | + this.formInline.classifyId[0] || | ||
| 529 | + this.formInline.classifyId | ||
| 530 | + const res = await getClassifyGetAll(formInline) | ||
| 531 | + this.total = res.data.total | ||
| 532 | + this.tableData = res.data.list | ||
| 533 | + console.log(this.tableData) | ||
| 534 | + }, | ||
| 535 | + // 初始化查询所有分类 | ||
| 536 | + async queryAllCategory() { | ||
| 537 | + const res = await getClassify() | ||
| 538 | + this.categoryList = res.data | ||
| 539 | + this.handleRemoveEmptyChild(this.categoryList) | ||
| 540 | + }, | ||
| 541 | + handleRemoveEmptyChild(arr) { | ||
| 542 | + for (let i = 0; i < arr.length; i++) { | ||
| 543 | + if (arr[i].childs && Array.isArray(arr[i].childs)) { | ||
| 544 | + this.handleRemoveEmptyChild(arr[i].childs) | ||
| 545 | + } | ||
| 546 | + if (arr[i].childs && Array.isArray(arr[i].childs) && arr[i].childs.length === 0) { | ||
| 547 | + delete arr[i].childs | ||
| 671 | } | 548 | } |
| 672 | - } | ||
| 673 | -} | ||
| 674 | -</script> | ||
| 675 | -<style lang='scss' scoped> | ||
| 676 | -//@import url(); 引入公共css类 | ||
| 677 | -@import url("../../../styles/elDialog.scss"); | ||
| 678 | -::v-deep .bian_css{ | ||
| 679 | - margin:auto; | ||
| 680 | - max-height:840px; | ||
| 681 | - overflow-y: auto; | ||
| 682 | - .el-dialog__body { | ||
| 683 | - padding: 0px; | ||
| 684 | - background-color: #fff; | ||
| 685 | } | 549 | } |
| 686 | - .el-dialog__header { | ||
| 687 | - background-color: #fff; | ||
| 688 | - padding:10px 20px 10px 20px; | ||
| 689 | - border-bottom: 1px solid #EFEFEF; | 550 | + }, |
| 551 | + // *********************导入部分 | ||
| 552 | + UploadUrls: function() { | ||
| 553 | + // 因为action参数是必填项,我们使用二次确认进行文件上传时,直接填上传文件的url会因为没有参数导致api报404,所以这里将action设置为一个返回为空的方法就行,避免抛错 | ||
| 554 | + return '' | ||
| 555 | + }, | ||
| 556 | + // 下载模板 | ||
| 557 | + poDownload() { | ||
| 558 | + downloadTemplate().then(res => { | ||
| 559 | + console.log(res, 1111) | ||
| 560 | + // const content = res | ||
| 561 | + const blob = new Blob([res]) | ||
| 562 | + const fileName = '批量导入商品模板.xlsx' | ||
| 563 | + if ('download' in document.createElement('a')) { | ||
| 564 | + // 非IE下载 | ||
| 565 | + const elink = document.createElement('a') | ||
| 566 | + elink.download = fileName | ||
| 567 | + elink.style.display = 'none' | ||
| 568 | + elink.href = URL.createObjectURL(blob) | ||
| 569 | + document.body.appendChild(elink) | ||
| 570 | + elink.click() | ||
| 571 | + URL.revokeObjectURL(elink.href) // 释放URL 对象 | ||
| 572 | + document.body.removeChild(elink) | ||
| 573 | + } else { | ||
| 574 | + // IE10+下载 | ||
| 575 | + navigator.msSaveBlob(blob, fileName) | ||
| 576 | + } | ||
| 577 | + }) | ||
| 578 | + }, | ||
| 579 | + // 导入 | ||
| 580 | + uploadFile() { | ||
| 581 | + if (this.batchFileList.length === 0) { | ||
| 582 | + this.$message.warning('请上传文件') | ||
| 583 | + } else { | ||
| 584 | + const formDate = new FormData() | ||
| 585 | + formDate.append('file', this.batchFileList[0]) | ||
| 586 | + console.log(formDate.get('file')) | ||
| 587 | + importProduct(formDate).then(res => { | ||
| 588 | + console.log(res) | ||
| 589 | + if (res.code === '') { | ||
| 590 | + this.$message.success('导入成功') | ||
| 591 | + this.batchAdd = false | ||
| 592 | + this.batchFileList = [] | ||
| 593 | + this.getAll(this.formInline) | ||
| 594 | + } | ||
| 595 | + }) | ||
| 690 | } | 596 | } |
| 691 | - .el-dialog__title { | ||
| 692 | - font-size: 14px; | ||
| 693 | - color: #000000e6; | 597 | + }, |
| 598 | + // 上传文件之前的钩子, 参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传 | ||
| 599 | + beforeUploadFile(file) { | ||
| 600 | + console.log('before upload') | ||
| 601 | + console.log(file) | ||
| 602 | + const extension = file.name.substring(file.name.lastIndexOf('.') + 1) | ||
| 603 | + const size = file.size / 1024 / 1024 | ||
| 604 | + if (extension !== 'xlsx') { | ||
| 605 | + this.$message.warning('只能上传后缀是.xlsx的文件') | ||
| 694 | } | 606 | } |
| 695 | - .el-date-table td.available:hover{ | ||
| 696 | - background-color:#3F9B6A; | 607 | + if (size > 10) { |
| 608 | + this.$message.warning('文件大小不得超过10M') | ||
| 697 | } | 609 | } |
| 698 | - .el-date-table td.start-date span{ | ||
| 699 | - background-color:#3F9B6A; | 610 | + }, |
| 611 | + // 文件状态改变时的钩子 | ||
| 612 | + fileChange(file, batchFileList) { | ||
| 613 | + console.log(file.raw) | ||
| 614 | + this.batchFileList.push(file.raw) | ||
| 615 | + console.log(this.batchFileList) | ||
| 616 | + }, | ||
| 617 | + batchRemove(file, batchFileList) { | ||
| 618 | + this.batchFileList = [] | ||
| 619 | + }, | ||
| 620 | + // 文件超出个数限制时的钩子 | ||
| 621 | + exceedFile(files, batchFileList) { | ||
| 622 | + this.$message.warning(`只能选择1个文件`) | ||
| 623 | + }, | ||
| 624 | + // 文件上传成功时的钩子 | ||
| 625 | + handleSuccess(res, file, batchFileList) { | ||
| 626 | + this.$message.success('文件上传成功') | ||
| 627 | + }, | ||
| 628 | + // 文件上传失败时的钩子 | ||
| 629 | + handleError() { | ||
| 630 | + this.$message.error('文件上传失败') | ||
| 631 | + }, | ||
| 632 | + // 切换优惠方式清除内容 | ||
| 633 | + modeChange() { | ||
| 634 | + this.productData.forEach(item => { | ||
| 635 | + item.memberPrices.forEach(itemJ => { | ||
| 636 | + itemJ.price = '' | ||
| 637 | + }) | ||
| 638 | + }) | ||
| 639 | + }, | ||
| 640 | + handleSelectionChange(val) { | ||
| 641 | + console.log(val) | ||
| 642 | + let zuheId = '' | ||
| 643 | + for (let i = 0; i < val.length; i++) { | ||
| 644 | + zuheId += val[i].productId + ',' | ||
| 700 | } | 645 | } |
| 646 | + this.canst = zuheId | ||
| 701 | } | 647 | } |
| 702 | -.tab_show { | ||
| 703 | - padding: 0 20px 20px 20px; | ||
| 704 | - background-color:#fff; | ||
| 705 | -} | ||
| 706 | -.fenye { | ||
| 707 | - margin-top: 20px; | ||
| 708 | - display: flex; | ||
| 709 | - justify-content: flex-end; | ||
| 710 | - position: relative; | ||
| 711 | -} | 648 | + } |
| 649 | + } | ||
| 650 | +</script> | ||
| 651 | +<style lang='scss' scoped> | ||
| 652 | + //@import url(); 引入公共css类 | ||
| 653 | + @import url("../../../styles/elDialog.scss"); | ||
| 654 | + | ||
| 655 | + ::v-deep .bian_css { | ||
| 656 | + margin: auto; | ||
| 657 | + max-height: 840px; | ||
| 658 | + overflow-y: auto; | ||
| 659 | + | ||
| 660 | + .el-dialog__body { | ||
| 661 | + padding: 0px; | ||
| 662 | + background-color: #fff; | ||
| 663 | + } | ||
| 664 | + | ||
| 665 | + .el-dialog__header { | ||
| 666 | + background-color: #fff; | ||
| 667 | + padding: 10px 20px 10px 20px; | ||
| 668 | + border-bottom: 1px solid #EFEFEF; | ||
| 669 | + } | ||
| 670 | + | ||
| 671 | + .el-dialog__title { | ||
| 672 | + font-size: 14px; | ||
| 673 | + color: #000000e6; | ||
| 674 | + } | ||
| 675 | + | ||
| 676 | + .el-date-table td.available:hover { | ||
| 677 | + background-color: #3F9B6A; | ||
| 678 | + } | ||
| 679 | + | ||
| 680 | + .el-date-table td.start-date span { | ||
| 681 | + background-color: #3F9B6A; | ||
| 682 | + } | ||
| 683 | + } | ||
| 684 | + | ||
| 685 | + .tab_show { | ||
| 686 | + padding: 0 20px 20px 20px; | ||
| 687 | + background-color: #fff; | ||
| 688 | + } | ||
| 689 | + | ||
| 690 | + .fenye { | ||
| 691 | + margin-top: 20px; | ||
| 692 | + display: flex; | ||
| 693 | + justify-content: flex-end; | ||
| 694 | + position: relative; | ||
| 695 | + } | ||
| 696 | + | ||
| 712 | ::v-deep .el-pagination__total { | 697 | ::v-deep .el-pagination__total { |
| 713 | position: absolute; | 698 | position: absolute; |
| 714 | left: 10px; | 699 | left: 10px; |
| 715 | } | 700 | } |
| 701 | + | ||
| 716 | .formSearch { | 702 | .formSearch { |
| 717 | - display: flex; | ||
| 718 | - width: 100%; | ||
| 719 | - font-size: 14px; | ||
| 720 | - justify-content: space-between; | ||
| 721 | - } | 703 | + display: flex; |
| 704 | + width: 100%; | ||
| 705 | + font-size: 14px; | ||
| 706 | + justify-content: space-between; | ||
| 707 | + } | ||
| 722 | 708 | ||
| 723 | -.uploadDialog{ | ||
| 724 | - // display: flex; | ||
| 725 | - // flex-direction: column; | ||
| 726 | - // justify-content: center; | ||
| 727 | - >>>.el-upload__tip{ | ||
| 728 | - display: inline-block; | ||
| 729 | - width: 360px; | ||
| 730 | - margin: auto; | 709 | + .uploadDialog { |
| 710 | + | ||
| 711 | + // display: flex; | ||
| 712 | + // flex-direction: column; | ||
| 713 | + // justify-content: center; | ||
| 714 | + >>>.el-upload__tip { | ||
| 715 | + display: inline-block; | ||
| 716 | + width: 360px; | ||
| 717 | + margin: auto; | ||
| 718 | + } | ||
| 731 | } | 719 | } |
| 732 | -} | ||
| 733 | -.vipDialog{ | ||
| 734 | - .priceTable{ | ||
| 735 | - table{ | ||
| 736 | - width: 100%; | ||
| 737 | - text-align: center; | ||
| 738 | - border-left: 1px solid #EBEEF5; | ||
| 739 | - border-bottom: 1px solid #EBEEF5; | ||
| 740 | - font-size: 14px; | ||
| 741 | - color: #606266; | ||
| 742 | - border-collapse: collapse; | ||
| 743 | - tr{ | ||
| 744 | - border-top: 1px solid #EBEEF5; | ||
| 745 | - th{ | ||
| 746 | - padding: 12px 0; | ||
| 747 | - background: #F2F3F5; | ||
| 748 | - color: #0009; | ||
| 749 | - border-right: 1px solid #F2F3F5; | ||
| 750 | - } | ||
| 751 | - td{ | ||
| 752 | - padding: 12px 0; | ||
| 753 | - border-right: 1px solid #EBEEF5; | ||
| 754 | - &.td-input{ | ||
| 755 | - .el-input{ | 720 | + |
| 721 | + .vipDialog { | ||
| 722 | + .priceTable { | ||
| 723 | + table { | ||
| 724 | + width: 100%; | ||
| 725 | + text-align: center; | ||
| 726 | + border-left: 1px solid #EBEEF5; | ||
| 727 | + border-bottom: 1px solid #EBEEF5; | ||
| 728 | + font-size: 14px; | ||
| 729 | + color: #606266; | ||
| 730 | + border-collapse: collapse; | ||
| 731 | + | ||
| 732 | + tr { | ||
| 733 | + border-top: 1px solid #EBEEF5; | ||
| 734 | + | ||
| 735 | + th { | ||
| 736 | + padding: 12px 0; | ||
| 737 | + background: #F2F3F5; | ||
| 738 | + color: #0009; | ||
| 739 | + border-right: 1px solid #F2F3F5; | ||
| 740 | + } | ||
| 741 | + | ||
| 742 | + td { | ||
| 743 | + padding: 12px 0; | ||
| 744 | + border-right: 1px solid #EBEEF5; | ||
| 745 | + | ||
| 746 | + &.td-input { | ||
| 747 | + .el-input { | ||
| 748 | + width: 80px; | ||
| 749 | + margin-right: 0; | ||
| 750 | + } | ||
| 751 | + } | ||
| 752 | + | ||
| 753 | + &:nth-child(1), | ||
| 754 | + &:nth-child(2) { | ||
| 756 | width: 80px; | 755 | width: 80px; |
| 757 | - margin-right: 0; | ||
| 758 | } | 756 | } |
| 759 | - } | ||
| 760 | - &:nth-child(1),&:nth-child(2){ | ||
| 761 | - width: 80px; | ||
| 762 | - } | ||
| 763 | - .el-input{ | ||
| 764 | - width: 100px; | ||
| 765 | - margin-right: 10px; | 757 | + |
| 758 | + .el-input { | ||
| 759 | + width: 100px; | ||
| 760 | + margin-right: 10px; | ||
| 761 | + } | ||
| 766 | } | 762 | } |
| 767 | } | 763 | } |
| 768 | } | 764 | } |
| 769 | } | 765 | } |
| 770 | - } | ||
| 771 | - .clearBtn{ | ||
| 772 | - margin-top: 20px; | ||
| 773 | - } | ||
| 774 | -} | ||
| 775 | 766 | ||
| 767 | + .clearBtn { | ||
| 768 | + margin-top: 20px; | ||
| 769 | + } | ||
| 770 | + } | ||
| 776 | </style> | 771 | </style> |
merchant-web-master/src/views/order/pending/index.vue
| @@ -64,10 +64,18 @@ | @@ -64,10 +64,18 @@ | ||
| 64 | :header-cell-style="{fontSize: '14px',color:'#0009',fontWeight: 'normal',backgroundColor:'#F2F3F5'}" | 64 | :header-cell-style="{fontSize: '14px',color:'#0009',fontWeight: 'normal',backgroundColor:'#F2F3F5'}" |
| 65 | tooltip-effect="dark" | 65 | tooltip-effect="dark" |
| 66 | > | 66 | > |
| 67 | - <el-table-column label="订单id" width="220"> | 67 | + <el-table-column label="订单id" width="80"> |
| 68 | <template slot-scope="scope">{{ scope.row.orderId }}</template> | 68 | <template slot-scope="scope">{{ scope.row.orderId }}</template> |
| 69 | </el-table-column> | 69 | </el-table-column> |
| 70 | - <el-table-column prop="price" label="支付金额(元)" width="220" /> | 70 | + <el-table-column label="商品名称" width="250" show-overflow-tooltip> |
| 71 | + <template slot-scope="scope" v-if="scope.row.products &&scope.row.products.length > 0"> | ||
| 72 | + <span v-for="(item,index) in scope.row.products" :key="index">{{ item.productName || '暂无'}}</span> | ||
| 73 | + </template> | ||
| 74 | + <template slot-scope="scope" v-else> | ||
| 75 | + 暂无 | ||
| 76 | + </template> | ||
| 77 | + </el-table-column> | ||
| 78 | + <el-table-column prop="price" label="支付金额(元)"/> | ||
| 71 | <el-table-column prop="number" label="商品数量(件)" show-overflow-tooltip /> | 79 | <el-table-column prop="number" label="商品数量(件)" show-overflow-tooltip /> |
| 72 | <el-table-column label="订单状态" show-overflow-tooltip> | 80 | <el-table-column label="订单状态" show-overflow-tooltip> |
| 73 | <template slot-scope="scope"> | 81 | <template slot-scope="scope"> |
merchant-web-master/src/views/salesSta/dataSta.vue
| @@ -3,81 +3,80 @@ | @@ -3,81 +3,80 @@ | ||
| 3 | <div class="pending"> | 3 | <div class="pending"> |
| 4 | <div class="tab_show"> | 4 | <div class="tab_show"> |
| 5 | <div style="display: flex;margin: 15px 0;"> | 5 | <div style="display: flex;margin: 15px 0;"> |
| 6 | - <el-form ref="formParams" :inline="true" :model="formParams"> | ||
| 7 | - <el-form-item label="日期"> | ||
| 8 | - <el-date-picker v-model="formParams.tongjiTime" type="daterange" range-separator="至" | ||
| 9 | - start-placeholder="开始时间" end-placeholder="结束时间" /> | ||
| 10 | - </el-form-item> | ||
| 11 | - | ||
| 12 | - <el-form-item label-width="0"> | ||
| 13 | - <el-button plain @click="search(1)" | ||
| 14 | - style="background-color: #3F9B6A;color: #fff;">查询</el-button> | ||
| 15 | - <el-button plain @click="clear(1)" | ||
| 16 | - class="buttonHover" | ||
| 17 | - style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;">重置</el-button> | ||
| 18 | - </el-form-item> | ||
| 19 | - </el-form> | 6 | + <el-form ref="formParams" :inline="true" :model="formParams"> |
| 7 | + <el-form-item label="日期"> | ||
| 8 | + <el-date-picker v-model="formParams.tongjiTime" type="daterange" range-separator="至" | ||
| 9 | + start-placeholder="开始时间" end-placeholder="结束时间" /> | ||
| 10 | + </el-form-item> | ||
| 11 | + | ||
| 12 | + <el-form-item label-width="0"> | ||
| 13 | + <el-button plain @click="search(1)" style="background-color: #3F9B6A;color: #fff;">查询</el-button> | ||
| 14 | + <el-button plain @click="clear(1)" class="buttonHover" | ||
| 15 | + style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;">重置</el-button> | ||
| 16 | + </el-form-item> | ||
| 17 | + </el-form> | ||
| 20 | </div> | 18 | </div> |
| 21 | <div style="padding:10px 40px 20px 20px;border:1px solid #EBEEF5;margin-bottom: 20px;"> | 19 | <div style="padding:10px 40px 20px 20px;border:1px solid #EBEEF5;margin-bottom: 20px;"> |
| 22 | - <div class="titleTj"> | ||
| 23 | - 销售额统计 | ||
| 24 | - </div> | 20 | + <div class="titleTj"> |
| 21 | + 销售额统计 | ||
| 22 | + </div> | ||
| 25 | 23 | ||
| 26 | - <div class=""> | ||
| 27 | - <el-descriptions class="margin-top" title="" :column="1" border :labelStyle="labelStyle" :contentStyle="contentStyle"> | ||
| 28 | - <el-descriptions-item> | ||
| 29 | - <template slot="label"> | 24 | + <div class=""> |
| 25 | + <el-descriptions class="margin-top" title="" :column="1" border :labelStyle="labelStyle" | ||
| 26 | + :contentStyle="contentStyle"> | ||
| 27 | + <el-descriptions-item> | ||
| 28 | + <template slot="label"> | ||
| 30 | 29 | ||
| 31 | - 销售总额 | ||
| 32 | - </template> | ||
| 33 | - ¥{{tongji.transactionsCompleted + tongji.invalidOrderAmount}} | ||
| 34 | - </el-descriptions-item> | ||
| 35 | - <el-descriptions-item> | ||
| 36 | - <template slot="label"> | 30 | + 销售总额 |
| 31 | + </template> | ||
| 32 | + ¥{{tongji.transactionsCompleted + tongji.invalidOrderAmount}} | ||
| 33 | + </el-descriptions-item> | ||
| 34 | + <el-descriptions-item> | ||
| 35 | + <template slot="label"> | ||
| 37 | 36 | ||
| 38 | - 有效订单数 | ||
| 39 | - </template> | ||
| 40 | - {{tongji.validOrders}} | ||
| 41 | - </el-descriptions-item> | 37 | + 有效订单数 |
| 38 | + </template> | ||
| 39 | + {{tongji.validOrders}} | ||
| 40 | + </el-descriptions-item> | ||
| 42 | 41 | ||
| 43 | - <el-descriptions-item> | ||
| 44 | - <template slot="label"> | ||
| 45 | - 有效订单总额 | ||
| 46 | - </template> | ||
| 47 | - ¥{{tongji.transactionsCompleted}} | ||
| 48 | - </el-descriptions-item> | ||
| 49 | - <el-descriptions-item> | ||
| 50 | - <template slot="label"> | ||
| 51 | - 无效订单总数(关闭或取消) | ||
| 52 | - </template> | ||
| 53 | - {{tongji.invalidOrder}} | ||
| 54 | - </el-descriptions-item> | ||
| 55 | - <el-descriptions-item> | ||
| 56 | - <template slot="label"> | ||
| 57 | - 无效订单总额 | ||
| 58 | - </template> | ||
| 59 | - ¥{{tongji.invalidOrderAmount}} | ||
| 60 | - </el-descriptions-item> | ||
| 61 | - <el-descriptions-item> | ||
| 62 | - <template slot="label"> | ||
| 63 | - 已成交订单总数 | ||
| 64 | - </template> | ||
| 65 | - {{tongji.alreadyTransacted}} | ||
| 66 | - </el-descriptions-item> | ||
| 67 | - <el-descriptions-item> | ||
| 68 | - <template slot="label"> | ||
| 69 | - 已成交订单总额 | ||
| 70 | - </template> | ||
| 71 | - ¥{{tongji.transactionsCompleted}} | ||
| 72 | - </el-descriptions-item> | ||
| 73 | - </el-descriptions> | ||
| 74 | - </div> | 42 | + <el-descriptions-item> |
| 43 | + <template slot="label"> | ||
| 44 | + 有效订单总额 | ||
| 45 | + </template> | ||
| 46 | + ¥{{tongji.transactionsCompleted}} | ||
| 47 | + </el-descriptions-item> | ||
| 48 | + <el-descriptions-item> | ||
| 49 | + <template slot="label"> | ||
| 50 | + 无效订单总数(关闭或取消) | ||
| 51 | + </template> | ||
| 52 | + {{tongji.invalidOrder}} | ||
| 53 | + </el-descriptions-item> | ||
| 54 | + <el-descriptions-item> | ||
| 55 | + <template slot="label"> | ||
| 56 | + 无效订单总额 | ||
| 57 | + </template> | ||
| 58 | + ¥{{tongji.invalidOrderAmount}} | ||
| 59 | + </el-descriptions-item> | ||
| 60 | + <el-descriptions-item> | ||
| 61 | + <template slot="label"> | ||
| 62 | + 已成交订单总数 | ||
| 63 | + </template> | ||
| 64 | + {{tongji.alreadyTransacted}} | ||
| 65 | + </el-descriptions-item> | ||
| 66 | + <el-descriptions-item> | ||
| 67 | + <template slot="label"> | ||
| 68 | + 已成交订单总额 | ||
| 69 | + </template> | ||
| 70 | + ¥{{tongji.transactionsCompleted}} | ||
| 71 | + </el-descriptions-item> | ||
| 72 | + </el-descriptions> | ||
| 73 | + </div> | ||
| 75 | </div> | 74 | </div> |
| 76 | <div style="padding:10px 40px 20px 20px;border:1px solid #EBEEF5;margin-bottom: 20px;"> | 75 | <div style="padding:10px 40px 20px 20px;border:1px solid #EBEEF5;margin-bottom: 20px;"> |
| 77 | - <div class="titleTj"> | ||
| 78 | - 销售毛利润/率统计 | ||
| 79 | - </div> | ||
| 80 | - <!-- <div style="display: flex;margin: 15px 0;"> | 76 | + <div class="titleTj"> |
| 77 | + 销售毛利润/率统计 | ||
| 78 | + </div> | ||
| 79 | + <!-- <div style="display: flex;margin: 15px 0;"> | ||
| 81 | <el-form ref="formParams" :inline="true" :model="formParams"> | 80 | <el-form ref="formParams" :inline="true" :model="formParams"> |
| 82 | <el-form-item label="日期"> | 81 | <el-form-item label="日期"> |
| 83 | <el-date-picker v-model="formParams.maoliTime" type="daterange" range-separator="至" | 82 | <el-date-picker v-model="formParams.maoliTime" type="daterange" range-separator="至" |
| @@ -92,88 +91,89 @@ | @@ -92,88 +91,89 @@ | ||
| 92 | </el-form-item> | 91 | </el-form-item> |
| 93 | </el-form> | 92 | </el-form> |
| 94 | </div> --> | 93 | </div> --> |
| 95 | - <div class=""> | ||
| 96 | - <el-descriptions class="margin-top" title="" :column="1" border :labelStyle="labelStyle" :contentStyle="contentStyle"> | ||
| 97 | - <el-descriptions-item> | ||
| 98 | - <template slot="label"> | 94 | + <div class=""> |
| 95 | + <el-descriptions class="margin-top" title="" :column="1" border :labelStyle="labelStyle" | ||
| 96 | + :contentStyle="contentStyle"> | ||
| 97 | + <el-descriptions-item> | ||
| 98 | + <template slot="label"> | ||
| 99 | 99 | ||
| 100 | - 销售总额 | ||
| 101 | - </template> | ||
| 102 | - ¥{{tongji.transactionsCompleted + tongji.invalidOrderAmount}} | ||
| 103 | - </el-descriptions-item> | ||
| 104 | - <el-descriptions-item> | ||
| 105 | - <template slot="label"> | 100 | + 销售总额 |
| 101 | + </template> | ||
| 102 | + ¥{{tongji.transactionsCompleted + tongji.invalidOrderAmount}} | ||
| 103 | + </el-descriptions-item> | ||
| 104 | + <el-descriptions-item> | ||
| 105 | + <template slot="label"> | ||
| 106 | 106 | ||
| 107 | - 订单毛利润(总) | ||
| 108 | - </template> | ||
| 109 | - ¥{{maoli.subtract}} | ||
| 110 | - </el-descriptions-item> | 107 | + 订单毛利润(总) |
| 108 | + </template> | ||
| 109 | + ¥{{maoli.subtract}} | ||
| 110 | + </el-descriptions-item> | ||
| 111 | 111 | ||
| 112 | - <el-descriptions-item> | ||
| 113 | - <template slot="label"> | ||
| 114 | - 订单毛利率(总) | ||
| 115 | - </template> | ||
| 116 | - 毛利率:{{maoli.divide}}% | ||
| 117 | - </el-descriptions-item> | ||
| 118 | - <el-descriptions-item> | ||
| 119 | - <template slot="label"> | ||
| 120 | - 有效订单总数 | ||
| 121 | - </template> | ||
| 122 | - {{tongji.validOrders}} | ||
| 123 | - </el-descriptions-item> | ||
| 124 | - <el-descriptions-item> | ||
| 125 | - <template slot="label"> | ||
| 126 | - 有效订单总额 | ||
| 127 | - </template> | ||
| 128 | - ¥{{tongji.transactionsCompleted}} | ||
| 129 | - </el-descriptions-item> | ||
| 130 | - <el-descriptions-item> | ||
| 131 | - <template slot="label"> | ||
| 132 | - 无效订单总数(关闭或取消) | ||
| 133 | - </template> | ||
| 134 | - {{tongji.invalidOrder}} | ||
| 135 | - </el-descriptions-item> | ||
| 136 | - <el-descriptions-item> | ||
| 137 | - <template slot="label"> | ||
| 138 | - 无效订单总额 | ||
| 139 | - </template> | ||
| 140 | - ¥{{tongji.invalidOrderAmount}} | ||
| 141 | - </el-descriptions-item> | ||
| 142 | - <el-descriptions-item> | ||
| 143 | - <template slot="label"> | ||
| 144 | - 已成交订单总数 | ||
| 145 | - </template> | ||
| 146 | - {{tongji.alreadyTransacted}} | ||
| 147 | - </el-descriptions-item> | ||
| 148 | - <el-descriptions-item> | ||
| 149 | - <template slot="label"> | ||
| 150 | - 已成交订单总额 | ||
| 151 | - </template> | ||
| 152 | - ¥{{tongji.transactionsCompleted}} | ||
| 153 | - </el-descriptions-item> | ||
| 154 | - <el-descriptions-item> | ||
| 155 | - <template slot="label"> | ||
| 156 | - 毛利率排行 | ||
| 157 | - </template> | 112 | + <el-descriptions-item> |
| 113 | + <template slot="label"> | ||
| 114 | + 订单毛利率(总) | ||
| 115 | + </template> | ||
| 116 | + 毛利率:{{maoli.divide}}% | ||
| 117 | + </el-descriptions-item> | ||
| 118 | + <el-descriptions-item> | ||
| 119 | + <template slot="label"> | ||
| 120 | + 有效订单总数 | ||
| 121 | + </template> | ||
| 122 | + {{tongji.validOrders}} | ||
| 123 | + </el-descriptions-item> | ||
| 124 | + <el-descriptions-item> | ||
| 125 | + <template slot="label"> | ||
| 126 | + 有效订单总额 | ||
| 127 | + </template> | ||
| 128 | + ¥{{tongji.transactionsCompleted}} | ||
| 129 | + </el-descriptions-item> | ||
| 130 | + <el-descriptions-item> | ||
| 131 | + <template slot="label"> | ||
| 132 | + 无效订单总数(关闭或取消) | ||
| 133 | + </template> | ||
| 134 | + {{tongji.invalidOrder}} | ||
| 135 | + </el-descriptions-item> | ||
| 136 | + <el-descriptions-item> | ||
| 137 | + <template slot="label"> | ||
| 138 | + 无效订单总额 | ||
| 139 | + </template> | ||
| 140 | + ¥{{tongji.invalidOrderAmount}} | ||
| 141 | + </el-descriptions-item> | ||
| 142 | + <el-descriptions-item> | ||
| 143 | + <template slot="label"> | ||
| 144 | + 已成交订单总数 | ||
| 145 | + </template> | ||
| 146 | + {{tongji.alreadyTransacted}} | ||
| 147 | + </el-descriptions-item> | ||
| 148 | + <el-descriptions-item> | ||
| 149 | + <template slot="label"> | ||
| 150 | + 已成交订单总额 | ||
| 151 | + </template> | ||
| 152 | + ¥{{tongji.transactionsCompleted}} | ||
| 153 | + </el-descriptions-item> | ||
| 154 | + <el-descriptions-item> | ||
| 155 | + <template slot="label"> | ||
| 156 | + 毛利率排行 | ||
| 157 | + </template> | ||
| 158 | 158 | ||
| 159 | - </el-descriptions-item> | ||
| 160 | - <el-descriptions-item v-for="item in maoli.salesRanking" :key="item.id"> | ||
| 161 | - <template slot="label"> | ||
| 162 | - <span v-for="(value, key) in item" :key="key">{{ key }}</span> | ||
| 163 | - </template> | ||
| 164 | - <span v-for="(value, key) in item" :key="key">毛利率:{{ value }}%</span> | ||
| 165 | - </el-descriptions-item> | ||
| 166 | - <!-- <el-descriptions-item> | 159 | + </el-descriptions-item> |
| 160 | + <el-descriptions-item v-for="item in maoli.salesRanking" :key="item.id"> | ||
| 161 | + <template slot="label"> | ||
| 162 | + <span v-for="(value, key) in item" :key="key">{{ key }}</span> | ||
| 163 | + </template> | ||
| 164 | + <span v-for="(value, key) in item" :key="key">毛利率:{{ value }}%</span> | ||
| 165 | + </el-descriptions-item> | ||
| 166 | + <!-- <el-descriptions-item> | ||
| 167 | <template slot="label"> | 167 | <template slot="label"> |
| 168 | 商品2 | 168 | 商品2 |
| 169 | </template> | 169 | </template> |
| 170 | 毛利率:21.01% | 170 | 毛利率:21.01% |
| 171 | </el-descriptions-item> --> | 171 | </el-descriptions-item> --> |
| 172 | - </el-descriptions> | ||
| 173 | - </div> | 172 | + </el-descriptions> |
| 173 | + </div> | ||
| 174 | </div> | 174 | </div> |
| 175 | <!-- 搜索 --> | 175 | <!-- 搜索 --> |
| 176 | -<!-- <div class="filter-container"> | 176 | + <!-- <div class="filter-container"> |
| 177 | <div style="display:flex;justify-content: space-between;background-color: #f5f5f5;padding:10px"> | 177 | <div style="display:flex;justify-content: space-between;background-color: #f5f5f5;padding:10px"> |
| 178 | <div style="line-height:200%">筛选查询</div> | 178 | <div style="line-height:200%">筛选查询</div> |
| 179 | <div> | 179 | <div> |
| @@ -198,48 +198,41 @@ | @@ -198,48 +198,41 @@ | ||
| 198 | </div> --> | 198 | </div> --> |
| 199 | <!-- 表格 --> | 199 | <!-- 表格 --> |
| 200 | <div class="tableBox"> | 200 | <div class="tableBox"> |
| 201 | - <el-table | ||
| 202 | - :data="tableData" | ||
| 203 | - :header-cell-style="{fontSize: '14px',color:'#0009',fontWeight: 'normal',backgroundColor:'#F2F3F5'}" | ||
| 204 | - > | ||
| 205 | - <el-table-column prop="id" label="排名"> | ||
| 206 | - <template slot-scope="scope"> | ||
| 207 | - {{scope.$index + 1 }} | ||
| 208 | - </template> | ||
| 209 | - </el-table-column> | ||
| 210 | - <el-table-column prop="shopnum" label="商品编号"> | ||
| 211 | - <template slot-scope="scope"> | ||
| 212 | - {{scope.row.products[0].productId}} | ||
| 213 | - </template> | ||
| 214 | - </el-table-column> | ||
| 215 | - <el-table-column prop="shopname" label="商品名称" width="300"> | ||
| 216 | - <template slot-scope="scope"> | ||
| 217 | - {{scope.row.products[0].productName}} | ||
| 218 | - </template> | ||
| 219 | - </el-table-column> | ||
| 220 | - <el-table-column prop="fl" label="商品分类"> | ||
| 221 | - <template slot-scope="scope"> | ||
| 222 | - {{scope.row.product.shopGroupName}} | ||
| 223 | - </template> | ||
| 224 | - </el-table-column> | ||
| 225 | - | ||
| 226 | - <el-table-column prop="createTime" label="商品创建时间"> | ||
| 227 | - <template slot-scope="scope"> | ||
| 228 | - {{scope.row.product.createTime}} | ||
| 229 | - </template> | ||
| 230 | - </el-table-column> | ||
| 231 | - <el-table-column prop="bigDecimal" label="销售数量" /> | ||
| 232 | - <el-table-column prop="multiply" label="销售金额" :sortable="true" :sort-method="sortMethod"/> | ||
| 233 | - </el-table> | 201 | + <el-table :data="tableData" |
| 202 | + :header-cell-style="{fontSize: '14px',color:'#0009',fontWeight: 'normal',backgroundColor:'#F2F3F5'}"> | ||
| 203 | + <el-table-column prop="id" label="排名"> | ||
| 204 | + <template slot-scope="scope"> | ||
| 205 | + {{scope.$index + 1 }} | ||
| 206 | + </template> | ||
| 207 | + </el-table-column> | ||
| 208 | + <el-table-column prop="shopnum" label="商品编号"> | ||
| 209 | + <template slot-scope="scope"> | ||
| 210 | + {{scope.row.products[0].productId}} | ||
| 211 | + </template> | ||
| 212 | + </el-table-column> | ||
| 213 | + <el-table-column prop="shopname" label="商品名称" width="300"> | ||
| 214 | + <template slot-scope="scope"> | ||
| 215 | + {{scope.row.products[0].productName}} | ||
| 216 | + </template> | ||
| 217 | + </el-table-column> | ||
| 218 | + <el-table-column prop="fl" label="商品分类"> | ||
| 219 | + <template slot-scope="scope"> | ||
| 220 | + {{scope.row.product.shopGroupName}} | ||
| 221 | + </template> | ||
| 222 | + </el-table-column> | ||
| 223 | + | ||
| 224 | + <el-table-column prop="createTime" label="商品创建时间"> | ||
| 225 | + <template slot-scope="scope"> | ||
| 226 | + {{scope.row.product.createTime}} | ||
| 227 | + </template> | ||
| 228 | + </el-table-column> | ||
| 229 | + <el-table-column prop="bigDecimal" label="销售数量" /> | ||
| 230 | + <el-table-column prop="multiply" label="销售金额" :sortable="true" :sort-method="sortMethod" /> | ||
| 231 | + </el-table> | ||
| 234 | <div class="fenye"> | 232 | <div class="fenye"> |
| 235 | <div>共{{ total }}条</div> | 233 | <div>共{{ total }}条</div> |
| 236 | - <el-pagination | ||
| 237 | - :current-page="currentPage" | ||
| 238 | - :page-size="10" | ||
| 239 | - layout="prev, pager, next" | ||
| 240 | - :total="total" | ||
| 241 | - @current-change="handleCurrentChange" | ||
| 242 | - /> | 234 | + <el-pagination :current-page="currentPage" :page-size="10" layout="prev, pager, next" :total="total" |
| 235 | + @current-change="handleCurrentChange" /> | ||
| 243 | </div> | 236 | </div> |
| 244 | </div> | 237 | </div> |
| 245 | </div> | 238 | </div> |
| @@ -248,201 +241,222 @@ | @@ -248,201 +241,222 @@ | ||
| 248 | </template> | 241 | </template> |
| 249 | 242 | ||
| 250 | <script> | 243 | <script> |
| 251 | - import {salesStatistics, | ||
| 252 | - orderGetAll, | ||
| 253 | - calculateGrossProfit} from '@/api/dataSta' | ||
| 254 | import { | 244 | import { |
| 255 | - salesRanking,} from '@/api/psRanking' | ||
| 256 | -import { async } from 'q'; | ||
| 257 | -export default { | ||
| 258 | - data () { | ||
| 259 | - // 这里存放数据 | ||
| 260 | - return { | ||
| 261 | - formParams:{ | ||
| 262 | - maoliTime:'', | ||
| 263 | - tongjiTime:'' | ||
| 264 | - }, | ||
| 265 | - currentPage:1, | ||
| 266 | - formInline: { | ||
| 267 | - searchType: '1', | ||
| 268 | - search: '', // 搜索字段 | ||
| 269 | - state: '4', | ||
| 270 | - // afterState: '', // 售后状态 0-无售后 1-售后中 2-售后成功 3-售后关闭 | ||
| 271 | - dates: [], // 下单时间数组 | ||
| 272 | - page: 1, | ||
| 273 | - shopName: '', | ||
| 274 | - pageSize: 10 | ||
| 275 | - }, | ||
| 276 | - fut:true, | ||
| 277 | - total: 1, | ||
| 278 | - tableData: [], | ||
| 279 | - tableLoading: false, | ||
| 280 | - dialogVisible:false, | ||
| 281 | - tongji:{}, | ||
| 282 | - maoli:{}, | ||
| 283 | - pageindex: { | ||
| 284 | - pageNumber: 1, | ||
| 285 | - pageSize: 10, | ||
| 286 | - }, | ||
| 287 | - labelStyle:{ | ||
| 288 | - width:'35%', | ||
| 289 | - textAlign:'center', | ||
| 290 | - color:'#000', | ||
| 291 | - backgroundColor:'#F9FAFC', | ||
| 292 | - }, | ||
| 293 | - contentStyle:{ | ||
| 294 | - textAlign:'center', | ||
| 295 | - } | ||
| 296 | - | ||
| 297 | - } | 245 | + salesStatistics, |
| 246 | + orderGetAll, | ||
| 247 | + calculateGrossProfit | ||
| 248 | + } from '@/api/dataSta' | ||
| 249 | + import { | ||
| 250 | + salesRanking, | ||
| 251 | + } from '@/api/psRanking' | ||
| 252 | + import { | ||
| 253 | + async | ||
| 254 | + } from 'q'; | ||
| 255 | + export default { | ||
| 256 | + data() { | ||
| 257 | + // 这里存放数据 | ||
| 258 | + return { | ||
| 259 | + formParams: { | ||
| 260 | + maoliTime: '', | ||
| 261 | + tongjiTime: '' | ||
| 262 | + }, | ||
| 263 | + currentPage: 1, | ||
| 264 | + formInline: { | ||
| 265 | + searchType: '1', | ||
| 266 | + search: '', // 搜索字段 | ||
| 267 | + state: '4', | ||
| 268 | + // afterState: '', // 售后状态 0-无售后 1-售后中 2-售后成功 3-售后关闭 | ||
| 269 | + dates: [], // 下单时间数组 | ||
| 270 | + page: 1, | ||
| 271 | + shopName: '', | ||
| 272 | + pageSize: 10 | ||
| 273 | + }, | ||
| 274 | + fut: true, | ||
| 275 | + total: 1, | ||
| 276 | + tableData: [], | ||
| 277 | + tableLoading: false, | ||
| 278 | + dialogVisible: false, | ||
| 279 | + tongji: {}, | ||
| 280 | + maoli: {}, | ||
| 281 | + pageindex: { | ||
| 282 | + pageNumber: 1, | ||
| 283 | + pageSize: 10, | ||
| 284 | + }, | ||
| 285 | + labelStyle: { | ||
| 286 | + width: '35%', | ||
| 287 | + textAlign: 'center', | ||
| 288 | + color: '#000', | ||
| 289 | + backgroundColor: '#F9FAFC', | ||
| 290 | + }, | ||
| 291 | + contentStyle: { | ||
| 292 | + textAlign: 'center', | ||
| 293 | + } | ||
| 298 | 294 | ||
| 299 | - }, | ||
| 300 | - // 生命周期 - 挂载完成(可以访问DOM元素) | ||
| 301 | - mounted() { | ||
| 302 | - this.getAll() | ||
| 303 | - }, | ||
| 304 | - // 方法集合 | ||
| 305 | - methods: { | ||
| 306 | - sortMethod(before,after){ | ||
| 307 | - return Number(after.multiply) - Number(before.multiply) | ||
| 308 | - }, | ||
| 309 | - toggleFilter(){ | ||
| 310 | - this.fut = !this.fut | ||
| 311 | - }, | ||
| 312 | - handleSizeChange (val) { | ||
| 313 | - this.formInline.pageSize = val | ||
| 314 | - // this.getAll(this.formInline) | ||
| 315 | - }, | ||
| 316 | - handleCurrentChange (val) { | ||
| 317 | - this.formInline.page = val | ||
| 318 | - // this.getAll(this.formInline) | ||
| 319 | - }, | ||
| 320 | - //重置 | ||
| 321 | - clear(val){ | ||
| 322 | - this.formInline = { | ||
| 323 | - searchType: '1', | ||
| 324 | - search: '', // 搜索字段 | ||
| 325 | - state: '', | ||
| 326 | - // afterState: '', // 售后状态 0-无售后 1-售后中 2-售后成功 3-售后关闭 | ||
| 327 | - dates: [], // 下单时间数组 | ||
| 328 | - page: 1, | ||
| 329 | - shopName: '', | ||
| 330 | - pageSize: 10 | ||
| 331 | } | 295 | } |
| 332 | - this.formParams.tongjiTime = '' | ||
| 333 | - this.getAll() | ||
| 334 | - // if(val == 1){ | ||
| 335 | - // this.formParams.tongjiTime = '' | ||
| 336 | - // this.getAll() | ||
| 337 | - // }else{ | ||
| 338 | - // this.formParams.maoliTime = '' | ||
| 339 | - // this.getAll() | ||
| 340 | - // } | 296 | + |
| 341 | }, | 297 | }, |
| 342 | - // 查询 | ||
| 343 | - search (val) { | ||
| 344 | - this.formInline.dates = this.formParams.tongjiTime || [] | 298 | + // 生命周期 - 挂载完成(可以访问DOM元素) |
| 299 | + mounted() { | ||
| 345 | this.getAll() | 300 | this.getAll() |
| 346 | - // if(val ==1){ | ||
| 347 | - // this.formInline.dates = this.formParams.tongjiTime | ||
| 348 | - // this.getAll() | ||
| 349 | - // }else{ | ||
| 350 | - // this.formInline.dates = this.formParams.maoliTime | ||
| 351 | - // this.getAll() | ||
| 352 | - // } | 301 | + }, |
| 302 | + // 方法集合 | ||
| 303 | + methods: { | ||
| 304 | + sortMethod(before, after) { | ||
| 305 | + return Number(after.multiply) - Number(before.multiply) | ||
| 306 | + }, | ||
| 307 | + toggleFilter() { | ||
| 308 | + this.fut = !this.fut | ||
| 309 | + }, | ||
| 310 | + handleSizeChange(val) { | ||
| 311 | + this.formInline.pageSize = val | ||
| 312 | + // this.getAll(this.formInline) | ||
| 313 | + }, | ||
| 314 | + handleCurrentChange(val) { | ||
| 315 | + this.formInline.page = val | ||
| 316 | + // this.getAll(this.formInline) | ||
| 317 | + }, | ||
| 318 | + //重置 | ||
| 319 | + clear(val) { | ||
| 320 | + this.formInline = { | ||
| 321 | + searchType: '1', | ||
| 322 | + search: '', // 搜索字段 | ||
| 323 | + state: '', | ||
| 324 | + // afterState: '', // 售后状态 0-无售后 1-售后中 2-售后成功 3-售后关闭 | ||
| 325 | + dates: [], // 下单时间数组 | ||
| 326 | + page: 1, | ||
| 327 | + shopName: '', | ||
| 328 | + pageSize: 10 | ||
| 329 | + } | ||
| 330 | + this.formParams.tongjiTime = '' | ||
| 331 | + this.getAll() | ||
| 332 | + // if(val == 1){ | ||
| 333 | + // this.formParams.tongjiTime = '' | ||
| 334 | + // this.getAll() | ||
| 335 | + // }else{ | ||
| 336 | + // this.formParams.maoliTime = '' | ||
| 337 | + // this.getAll() | ||
| 338 | + // } | ||
| 339 | + }, | ||
| 340 | + // 查询 | ||
| 341 | + search(val) { | ||
| 342 | + this.formInline.dates = this.formParams.tongjiTime || [] | ||
| 343 | + this.getAll() | ||
| 344 | + // if(val ==1){ | ||
| 345 | + // this.formInline.dates = this.formParams.tongjiTime | ||
| 346 | + // this.getAll() | ||
| 347 | + // }else{ | ||
| 348 | + // this.formInline.dates = this.formParams.maoliTime | ||
| 349 | + // this.getAll() | ||
| 350 | + // } | ||
| 353 | // console.log(this.formParams.tongjiTime) | 351 | // console.log(this.formParams.tongjiTime) |
| 354 | // console.log(this.formParams.maoliTime) | 352 | // console.log(this.formParams.maoliTime) |
| 355 | - }, | ||
| 356 | - // 初始化查询所有数据 | ||
| 357 | - async getAll () { | ||
| 358 | - const res = await orderGetAll(this.formInline) | ||
| 359 | - const Orderlist = await calculateGrossProfit(res.data.list) | ||
| 360 | - const tablelist = await salesStatistics(res.data.list) | ||
| 361 | - this.maoli = Orderlist.data | ||
| 362 | - this.tongji = tablelist.data | ||
| 363 | - // this.loading = false; | 353 | + }, |
| 354 | + // 初始化查询所有数据 | ||
| 355 | + async getAll() { | ||
| 356 | + const res = await orderGetAll(this.formInline) | ||
| 357 | + const Orderlist = await calculateGrossProfit(res.data.list) | ||
| 358 | + const tablelist = await salesStatistics(res.data.list) | ||
| 359 | + this.maoli = Orderlist.data | ||
| 360 | + this.tongji = tablelist.data | ||
| 361 | + // this.loading = false; | ||
| 364 | 362 | ||
| 365 | 363 | ||
| 366 | - const list = await salesRanking(res.data.list) | ||
| 367 | - this.tableData = list.data | ||
| 368 | - this.total = list.data.length | 364 | + const list = await salesRanking(res.data.list) |
| 365 | + this.tableData = list.data | ||
| 366 | + // console.log(list.data) | ||
| 367 | + this.total = list.data.length | ||
| 369 | 368 | ||
| 370 | - }, | 369 | + }, |
| 371 | 370 | ||
| 372 | 371 | ||
| 372 | + } | ||
| 373 | } | 373 | } |
| 374 | -} | ||
| 375 | </script> | 374 | </script> |
| 376 | <style lang='scss' scoped> | 375 | <style lang='scss' scoped> |
| 377 | -.pending{ | ||
| 378 | - padding-left: 15px; | ||
| 379 | -} | ||
| 380 | -.tab_show{ | ||
| 381 | - padding-top: 10px; | ||
| 382 | - padding-left: 15px; | ||
| 383 | - padding-right: 15px; | ||
| 384 | - background-color: #fff; | ||
| 385 | -} | ||
| 386 | -.filter-container { | ||
| 387 | -font-size:12px; | ||
| 388 | -border:1px solid #EBEEF5; | ||
| 389 | - margin-bottom:20px; | ||
| 390 | - | ||
| 391 | -} | ||
| 392 | -.formSearch{ | ||
| 393 | - padding: 0 20px; | ||
| 394 | - height: 60px; /* 或者你想要的任何高度 */ | 376 | + .pending { |
| 377 | + padding-left: 15px; | ||
| 378 | + } | ||
| 379 | + | ||
| 380 | + .tab_show { | ||
| 381 | + padding-top: 10px; | ||
| 382 | + padding-left: 15px; | ||
| 383 | + padding-right: 15px; | ||
| 384 | + background-color: #fff; | ||
| 385 | + } | ||
| 386 | + | ||
| 387 | + .filter-container { | ||
| 388 | + font-size: 12px; | ||
| 389 | + border: 1px solid #EBEEF5; | ||
| 390 | + margin-bottom: 20px; | ||
| 391 | + | ||
| 392 | + } | ||
| 393 | + | ||
| 394 | + .formSearch { | ||
| 395 | + padding: 0 20px; | ||
| 396 | + height: 60px; | ||
| 397 | + /* 或者你想要的任何高度 */ | ||
| 395 | /* 过渡效果 */ | 398 | /* 过渡效果 */ |
| 396 | - transition: height 0.3s ease-in-out; /* 动画的持续时间、类型 */ | ||
| 397 | - overflow: hidden; /* 隐藏溢出的内容,这样高度变化时内容不会显示出来 */ | ||
| 398 | - | ||
| 399 | -} | ||
| 400 | -.collapsed { | ||
| 401 | - padding: 0 10px; | ||
| 402 | - margin-top: 0px; | ||
| 403 | - height: 0; | ||
| 404 | - transition: height 0.3s ease-in-out; /* 动画的持续时间、类型 */ | ||
| 405 | - overflow: hidden; /* 隐藏溢出的内容,这样高度变化时内容不会显示出来 */ | ||
| 406 | -} | ||
| 407 | -::v-deep .collapsed{ | ||
| 408 | - .el-form--inline .el-form-item{ | ||
| 409 | - margin-top: 10px; | ||
| 410 | - margin-right:20px; | ||
| 411 | - margin-bottom:0px; | 399 | + transition: height 0.3s ease-in-out; |
| 400 | + /* 动画的持续时间、类型 */ | ||
| 401 | + overflow: hidden; | ||
| 402 | + /* 隐藏溢出的内容,这样高度变化时内容不会显示出来 */ | ||
| 403 | + | ||
| 412 | } | 404 | } |
| 413 | - .el-form-item__label{ | ||
| 414 | - font-size:12px; | 405 | + |
| 406 | + .collapsed { | ||
| 407 | + padding: 0 10px; | ||
| 408 | + margin-top: 0px; | ||
| 409 | + height: 0; | ||
| 410 | + transition: height 0.3s ease-in-out; | ||
| 411 | + /* 动画的持续时间、类型 */ | ||
| 412 | + overflow: hidden; | ||
| 413 | + /* 隐藏溢出的内容,这样高度变化时内容不会显示出来 */ | ||
| 415 | } | 414 | } |
| 416 | -} | ||
| 417 | -::v-deep .formSearch{ | ||
| 418 | - .el-form--inline .el-form-item{ | 415 | + |
| 416 | + ::v-deep .collapsed { | ||
| 417 | + .el-form--inline .el-form-item { | ||
| 419 | margin-top: 10px; | 418 | margin-top: 10px; |
| 420 | - margin-right:20px; | ||
| 421 | - margin-bottom:0px; | 419 | + margin-right: 20px; |
| 420 | + margin-bottom: 0px; | ||
| 421 | + } | ||
| 422 | + | ||
| 423 | + .el-form-item__label { | ||
| 424 | + font-size: 12px; | ||
| 425 | + } | ||
| 422 | } | 426 | } |
| 423 | - .el-form-item__label{ | ||
| 424 | - font-size:12px; | 427 | + |
| 428 | + ::v-deep .formSearch { | ||
| 429 | + .el-form--inline .el-form-item { | ||
| 430 | + margin-top: 10px; | ||
| 431 | + margin-right: 20px; | ||
| 432 | + margin-bottom: 0px; | ||
| 433 | + } | ||
| 434 | + | ||
| 435 | + .el-form-item__label { | ||
| 436 | + font-size: 12px; | ||
| 437 | + } | ||
| 438 | + } | ||
| 439 | + | ||
| 440 | + .fenye { | ||
| 441 | + margin-top: 20px; | ||
| 442 | + display: flex; | ||
| 443 | + justify-content: space-between; | ||
| 444 | + } | ||
| 445 | + | ||
| 446 | + .titleTj { | ||
| 447 | + width: 100%; | ||
| 448 | + color: #9C9C9C; | ||
| 449 | + position: relative; | ||
| 450 | + margin-bottom: 15px; | ||
| 451 | + } | ||
| 452 | + | ||
| 453 | + .titleTj::before { | ||
| 454 | + content: ""; | ||
| 455 | + position: absolute; | ||
| 456 | + top: 0; | ||
| 457 | + left: -10px; | ||
| 458 | + width: 4px; | ||
| 459 | + height: 100%; | ||
| 460 | + background-color: #14BA99; | ||
| 425 | } | 461 | } |
| 426 | -} | ||
| 427 | -.fenye{ | ||
| 428 | - margin-top: 20px; | ||
| 429 | - display: flex; | ||
| 430 | - justify-content: space-between; | ||
| 431 | -} | ||
| 432 | -.titleTj{ | ||
| 433 | - width:100%; | ||
| 434 | - color:#9C9C9C; | ||
| 435 | - position: relative; | ||
| 436 | - margin-bottom:15px; | ||
| 437 | -} | ||
| 438 | - | ||
| 439 | -.titleTj::before { | ||
| 440 | - content: ""; | ||
| 441 | - position: absolute; | ||
| 442 | - top:0; | ||
| 443 | - left:-10px; | ||
| 444 | - width: 4px; | ||
| 445 | - height: 100%; | ||
| 446 | - background-color: #14BA99; | ||
| 447 | -} | ||
| 448 | </style> | 462 | </style> |
merchant-web-master/src/views/stockControl/inventory/addCommodity copy.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div> | ||
| 3 | + <el-card class="box-card"> | ||
| 4 | + <div slot="header" style="display:flex;justify-content: space-between;"> | ||
| 5 | + <div> | ||
| 6 | + <span v-if="!productId" class="addTitle">新增商品</span> | ||
| 7 | + <span v-else class="addTitle">编辑商品</span> | ||
| 8 | + </div> | ||
| 9 | + <div> | ||
| 10 | + <el-button v-if="active" style="background-color: #3F9B6A;color: #fff" @click="back">取消</el-button> | ||
| 11 | + <el-button v-if="active" style="background-color: #3F9B6A;color: #fff" @click="next">下一步</el-button> | ||
| 12 | + <el-button v-if="!active" style="background-color: #3F9B6A;color: #fff" @click="save">保存</el-button> | ||
| 13 | + <el-button v-if="!active" style="background-color: #3F9B6A;color: #fff" @click="last">上一步</el-button> | ||
| 14 | + </div> | ||
| 15 | + </div> | ||
| 16 | + <!-- 步骤条 --> | ||
| 17 | + <div class="stepsColor common"> | ||
| 18 | + <div class="stepsOne common"> | ||
| 19 | + <div :class="active ? 'one_class common' : 't_class common'">1</div> | ||
| 20 | + <div :class="active ? 'two_class' : 'w_class'">基本属性&商品描述</div> | ||
| 21 | + </div> | ||
| 22 | + <div class="line" /> | ||
| 23 | + <div class="stepsTwo common"> | ||
| 24 | + <div :class="active ? 't_class common' : 'one_class common'">2</div> | ||
| 25 | + <div :class="active ? 'w_class' : 'two_class' ">基本属性&商品描述</div> | ||
| 26 | + </div> | ||
| 27 | + </div> | ||
| 28 | + </el-card> | ||
| 29 | + <!-- 商品 --> | ||
| 30 | + <div class="addCom common"> | ||
| 31 | + <div v-if="active"> | ||
| 32 | + <el-form ref="form" :model="form" :rules="rules" label-width="80px" style="padding: 40px 40px;"> | ||
| 33 | + <div class="leftCom"> | ||
| 34 | + <el-form-item label="商品名称" prop="productName"> | ||
| 35 | + <el-input v-model="form.productName" maxlength="50" show-word-limit /> | ||
| 36 | + </el-form-item> | ||
| 37 | + <el-form-item label="卖点简介"> | ||
| 38 | + <el-input v-model="form.productBrief" maxlength="50" show-word-limit /> | ||
| 39 | + </el-form-item> | ||
| 40 | + <el-form-item> | ||
| 41 | + <Tinymce v-if="showTinymce" ref="content" v-model="form.productText" class="tinymce-wrap" :height="200" /> | ||
| 42 | + </el-form-item> | ||
| 43 | + </div> | ||
| 44 | + <div class="rightCom"> | ||
| 45 | + <el-form-item label="官方分类" prop="classifyId"> | ||
| 46 | + <el-cascader | ||
| 47 | + v-model="form.classifyId" | ||
| 48 | + :options="classifyList" | ||
| 49 | + clearable | ||
| 50 | + :props="{ | ||
| 51 | + checkStrictly: false, | ||
| 52 | + label:'categoryName', | ||
| 53 | + value:'id', | ||
| 54 | + children:'childs' | ||
| 55 | + }" | ||
| 56 | + @change="handleChangeCascader" | ||
| 57 | + /> | ||
| 58 | + </el-form-item> | ||
| 59 | + | ||
| 60 | + <el-form-item label="商品分组" prop="shopGroupId"> | ||
| 61 | + <el-select v-model="form.shopGroupId" placeholder="请选择商品分组" clearable> | ||
| 62 | + <el-option | ||
| 63 | + v-for="(item,index) in groupList" | ||
| 64 | + :key="index" | ||
| 65 | + :label="item.groupName" | ||
| 66 | + :value="item.shopGroupId" | ||
| 67 | + /> | ||
| 68 | + </el-select> | ||
| 69 | + </el-form-item> | ||
| 70 | + <el-form-item label="品牌"> | ||
| 71 | + <el-select | ||
| 72 | + v-model="form.brandId" | ||
| 73 | + clearable | ||
| 74 | + placeholder="请选择品牌" | ||
| 75 | + > | ||
| 76 | + <el-option | ||
| 77 | + v-for="item in brandList" | ||
| 78 | + :key="item.id" | ||
| 79 | + :label="item.brandName" | ||
| 80 | + :value="item.id" | ||
| 81 | + /> | ||
| 82 | + </el-select> | ||
| 83 | + </el-form-item> | ||
| 84 | + <el-form-item class="form-item-long" label="供应商"> | ||
| 85 | + <el-input v-model="form.supplierName" maxlength="30" show-word-limit placeholder="请输入供应商名称" /> | ||
| 86 | + </el-form-item> | ||
| 87 | + <el-form-item class="form-item-long" label="成本价" prop="cost"> | ||
| 88 | + <el-input v-model.number="form.cost" type="number" maxlength="10" show-word-limit placeholder="请输入成本价" /> | ||
| 89 | + </el-form-item> | ||
| 90 | + <el-form-item label="需要物流" prop="ifLogistics"> | ||
| 91 | + <el-radio-group v-model="form.ifLogistics"> | ||
| 92 | + <el-radio :label="1">是</el-radio> | ||
| 93 | + <el-radio :label="0">否</el-radio> | ||
| 94 | + </el-radio-group> | ||
| 95 | + </el-form-item> | ||
| 96 | + <el-form-item label="上架状态" prop="shelveState"> | ||
| 97 | + <el-radio-group v-model="form.shelveState"> | ||
| 98 | + <el-radio :label="1">上架</el-radio> | ||
| 99 | + <el-radio :label="0">下架</el-radio> | ||
| 100 | + </el-radio-group> | ||
| 101 | + </el-form-item> | ||
| 102 | + <el-form-item label="允许超卖" prop="ifOversold"> | ||
| 103 | + <el-radio-group v-model="form.ifOversold"> | ||
| 104 | + <el-radio :label="1">允许</el-radio> | ||
| 105 | + <el-radio :label="0">不允许</el-radio> | ||
| 106 | + </el-radio-group> | ||
| 107 | + </el-form-item> | ||
| 108 | + <el-form-item label="积分兑换" prop="ifCredit"> | ||
| 109 | + <el-radio-group v-model="form.ifCredit"> | ||
| 110 | + <el-radio :label="1">允许</el-radio> | ||
| 111 | + <el-radio :label="0">不允许</el-radio> | ||
| 112 | + </el-radio-group> | ||
| 113 | + <p style="color: #cf0f0f">开启积分兑换后,积分所抵扣的金额由商户承担</p> | ||
| 114 | + </el-form-item> | ||
| 115 | + <el-form-item v-if="form.ifCredit" class="form-item-long" label="单笔最大抵扣" prop="creditLimit"> | ||
| 116 | + <!-- <el-input v-model="form.creditLimit" type="number" placeholder="请输入单笔最大抵扣" /> --> | ||
| 117 | + <el-input-number v-model="form.creditLimit" :controls="false" :min="0" :precision="0" placeholder="请输入单笔最大抵扣" /> | ||
| 118 | + <p style="color: #cf0f0f; height: 25px; line-height: 25px;margin-top: 10px">限制一笔订单中该商品最多抵扣多少积分</p> | ||
| 119 | + <p style="color: #cf0f0f; height: 25px; line-height: 25px">( 注:1积分 = {{ integralProportion }}元 请输入整数 )</p> | ||
| 120 | + </el-form-item> | ||
| 121 | + <!-- <el-form-item label="花呗分期">--> | ||
| 122 | + <!-- <el-radio-group v-model="form.ifHuabei">--> | ||
| 123 | + <!-- <el-radio :label="1">支持</el-radio>--> | ||
| 124 | + <!-- <el-radio :label="0">不支持</el-radio>--> | ||
| 125 | + <!-- </el-radio-group>--> | ||
| 126 | + <!-- </el-form-item>--> | ||
| 127 | + </div> | ||
| 128 | + </el-form> | ||
| 129 | + </div> | ||
| 130 | + <div v-if="!active" class="centerCom"> | ||
| 131 | + <el-form ref="form" :model="params" label-width="80px"> | ||
| 132 | + <StyleInformation :form="params" /> | ||
| 133 | + </el-form> | ||
| 134 | + </div> | ||
| 135 | + </div> | ||
| 136 | + | ||
| 137 | + <!-- 弹窗 --> | ||
| 138 | + <el-dialog | ||
| 139 | + :visible.sync="dialogVisible" | ||
| 140 | + class="check-image-dialog" | ||
| 141 | + title="查看图片" | ||
| 142 | + center="center" | ||
| 143 | + > | ||
| 144 | + <img width="100%" :src="dialogImageUrl" alt> | ||
| 145 | + </el-dialog> | ||
| 146 | + </div> | ||
| 147 | +</template> | ||
| 148 | + | ||
| 149 | +<script> | ||
| 150 | +import Tinymce from '@/components/Tinymce' | ||
| 151 | +import { | ||
| 152 | + getGroupSelect, | ||
| 153 | + getClassify, | ||
| 154 | + getClassifyAdd, | ||
| 155 | + getClassifyGetById, | ||
| 156 | + getClassifyUpdate, | ||
| 157 | + getBrandList | ||
| 158 | +} from '@/api/commodity' | ||
| 159 | +import { | ||
| 160 | + getSelect | ||
| 161 | +} from '@/api/account'; | ||
| 162 | +import { uploadUrl } from '@/utils/request' | ||
| 163 | +import StyleInformation from './addComponent' | ||
| 164 | +export default { | ||
| 165 | + components: { | ||
| 166 | + Tinymce, | ||
| 167 | + StyleInformation | ||
| 168 | + }, | ||
| 169 | + props: { | ||
| 170 | + productId: { | ||
| 171 | + type: Number, | ||
| 172 | + default: 0 | ||
| 173 | + }, | ||
| 174 | + showTinymce: { | ||
| 175 | + type: Boolean | ||
| 176 | + }, | ||
| 177 | + message: { | ||
| 178 | + type: String, | ||
| 179 | + default: '' | ||
| 180 | + } | ||
| 181 | + }, | ||
| 182 | + data() { | ||
| 183 | + // const checkCreditLimit = (rule, value, callback) => { | ||
| 184 | + // console.log(this.form.ifCredit) | ||
| 185 | + // if (this.form.ifCredit) { | ||
| 186 | + // callback(new Error('当选择允许积分兑换时,必须填写该值')) | ||
| 187 | + // } | ||
| 188 | + // const reg = /^[1-9]\d*$/ | ||
| 189 | + // if (value === '' || value === undefined || value === null) { | ||
| 190 | + // callback(); | ||
| 191 | + // } else { | ||
| 192 | + // if ((!reg.test(value)) && value !== '') { | ||
| 193 | + // callback(new Error('请输入正确的价格')); | ||
| 194 | + // } else { | ||
| 195 | + // callback(); | ||
| 196 | + // } | ||
| 197 | + // } | ||
| 198 | + // callback() | ||
| 199 | + // } | ||
| 200 | + return { | ||
| 201 | + brandList: [], | ||
| 202 | + active: 1, | ||
| 203 | + action: uploadUrl, | ||
| 204 | + form: { | ||
| 205 | + brandId: null, // 品牌ID | ||
| 206 | + productName: '', // 商品名称 | ||
| 207 | + productBrief: '', // 商品简介 | ||
| 208 | + shopGroupId: '', // 商品分组id | ||
| 209 | + classifyId: '', // 分类id | ||
| 210 | + supplierName: '', // 供应商名称 | ||
| 211 | + cost:null,//成本价 | ||
| 212 | + ifLogistics: '', // 是否需要物流 1-是 0-否 | ||
| 213 | + shelveState: '', // 是否上架 1-上架 0-不上架 | ||
| 214 | + ifOversold: '', // 是否允许超卖 1-是 0-否 | ||
| 215 | + ifCredit: '', // 是否支持积分兑换 1-是 0-否 | ||
| 216 | + creditLimit: '', // 单笔订单限制使用多少积分 | ||
| 217 | + ifHuabei: 1, // 是否支持花呗分期 1-是 0-否 | ||
| 218 | + productText: '', // 商品描述(富文本) | ||
| 219 | + images: [], // "图片地址" | ||
| 220 | + deletes: [], // 删除的规格id数组 | ||
| 221 | + names: [ | ||
| 222 | + { | ||
| 223 | + code: '', // 级别 | ||
| 224 | + skuName: '', // 规格名 | ||
| 225 | + values: [ | ||
| 226 | + { | ||
| 227 | + valueCode: '', // 级别 | ||
| 228 | + skuValue: '', // 规格值 | ||
| 229 | + image: '' // 图片 | ||
| 230 | + } | ||
| 231 | + ] | ||
| 232 | + } | ||
| 233 | + ], | ||
| 234 | + skus: [ | ||
| 235 | + { | ||
| 236 | + skuName: '', // 规格名称 | ||
| 237 | + skuValue: '', // 规格值 | ||
| 238 | + price: '', // 售价 | ||
| 239 | + originalPrice: '', // 原价 | ||
| 240 | + stockNumber: '', // 库存数量 | ||
| 241 | + weight: '', // 重量 | ||
| 242 | + skuImage: '', // 配图地址 | ||
| 243 | + style: '' // 款式 1-单款式 2-多款式 | ||
| 244 | + } | ||
| 245 | + ] | ||
| 246 | + }, | ||
| 247 | + params: { | ||
| 248 | + applyPrice: 0, | ||
| 249 | + attrStyle: 0, | ||
| 250 | + categoryId: '', | ||
| 251 | + oversold: 1, | ||
| 252 | + collects: 0, | ||
| 253 | + groupId: '', | ||
| 254 | + imgs: [], | ||
| 255 | + deletes: [], // 删除规格数据 | ||
| 256 | + isDelete: 0, | ||
| 257 | + limitCount: 0, | ||
| 258 | + minusStock: '', | ||
| 259 | + needLogistics: 1, | ||
| 260 | + platform: '', | ||
| 261 | + price: 0, | ||
| 262 | + productCode: '', | ||
| 263 | + productName: '', | ||
| 264 | + sellCount: 0, | ||
| 265 | + sellDesc: '', | ||
| 266 | + sellType: '', | ||
| 267 | + shortName: '', | ||
| 268 | + skuAttrList: [ | ||
| 269 | + { | ||
| 270 | + code: '', | ||
| 271 | + skuName: '', | ||
| 272 | + needImg: false, | ||
| 273 | + values: [ | ||
| 274 | + { | ||
| 275 | + skuValue: '', | ||
| 276 | + valueCode: '', | ||
| 277 | + image: '' | ||
| 278 | + } | ||
| 279 | + ] | ||
| 280 | + } | ||
| 281 | + ], | ||
| 282 | + skuList: [ | ||
| 283 | + { | ||
| 284 | + isDelete: '', | ||
| 285 | + skuAttrCodeDTOList: [ | ||
| 286 | + { | ||
| 287 | + code: '', | ||
| 288 | + valueCode: '' | ||
| 289 | + } | ||
| 290 | + ], | ||
| 291 | + skuAttrList: [], | ||
| 292 | + sku: '', | ||
| 293 | + skuImg: '', | ||
| 294 | + price: 0, | ||
| 295 | + originalPrice: 0, | ||
| 296 | + stockNumber: 0, | ||
| 297 | + weight: 0 | ||
| 298 | + } | ||
| 299 | + ], | ||
| 300 | + sortOrder: '', | ||
| 301 | + status: '', | ||
| 302 | + stock: '', | ||
| 303 | + supplierName: '', | ||
| 304 | + cost:null, | ||
| 305 | + views: '', | ||
| 306 | + weight: '' | ||
| 307 | + }, | ||
| 308 | + imgList: [], | ||
| 309 | + groupList: [], | ||
| 310 | + classifyList: [], | ||
| 311 | + dialogImageUrl: '', | ||
| 312 | + dialogVisible: false, | ||
| 313 | + rules: { | ||
| 314 | + productName: [{ required: true, message: '请输入商品名称', trigger: 'blur' }], | ||
| 315 | + shopGroupId: [{ required: true, message: '请选择商品分组', trigger: 'change' }], | ||
| 316 | + classifyId: [{ required: true, message: '请选择商品分类', trigger: 'change' }], | ||
| 317 | + cost:[{ required: true, message: '请输入成本价', trigger: 'change' }], | ||
| 318 | + ifLogistics: [{ required: true, message: '请选择是否需要物流', trigger: 'change' }], | ||
| 319 | + shelveState: [{ required: true, message: '请选择是否上架', trigger: 'change' }], | ||
| 320 | + ifOversold: [{ required: true, message: '请选择是否允许超卖', trigger: 'change' }], | ||
| 321 | + ifCredit: [{ required: true, message: '请选择是否支持积分兑换', trigger: 'change' }], | ||
| 322 | + creditLimit: [{ required: true, message: '请输入单笔最大抵扣', trigger: 'blur' }] | ||
| 323 | + }, | ||
| 324 | + integralList: [], | ||
| 325 | + integralProportion: '' // 积分兑换金额比例 | ||
| 326 | + } | ||
| 327 | + }, | ||
| 328 | + watch: { | ||
| 329 | + productId: { | ||
| 330 | + handler(nVal, oVal) { | ||
| 331 | + if (nVal) { | ||
| 332 | + // this.details() | ||
| 333 | + } | ||
| 334 | + } | ||
| 335 | + }, | ||
| 336 | + }, | ||
| 337 | + mounted() { | ||
| 338 | + this.groups() | ||
| 339 | + this.selectList() | ||
| 340 | + this.getBrandList() | ||
| 341 | + // if (this.productId) { | ||
| 342 | + // this.details() | ||
| 343 | + // } | ||
| 344 | + this.getCredit() | ||
| 345 | + }, | ||
| 346 | + methods: { | ||
| 347 | + handleChangeCascader() { | ||
| 348 | + console.log(this.form.classifyId) | ||
| 349 | + }, | ||
| 350 | + async getBrandList() { | ||
| 351 | + const { data } = await getBrandList() | ||
| 352 | + this.brandList = data | ||
| 353 | + }, | ||
| 354 | + async getCredit() { | ||
| 355 | + const res = await getSelect({ dictName: 'CREDIT_CONFIG' }) | ||
| 356 | + this.integralList = res.data | ||
| 357 | + this.integralList.forEach((item) => { | ||
| 358 | + if (item.dictName === 'credit_exchange_rate') { | ||
| 359 | + this.integralProportion = item.dictDescribe | ||
| 360 | + } | ||
| 361 | + }) | ||
| 362 | + }, | ||
| 363 | + handleImageSuccess(response) { | ||
| 364 | + const { url } = response.data | ||
| 365 | + this.imgList.push(url) | ||
| 366 | + }, | ||
| 367 | + handlePictureCardPreview(file) { | ||
| 368 | + this.dialogImageUrl = file.imgPath | ||
| 369 | + this.dialogVisible = true | ||
| 370 | + }, | ||
| 371 | + // 移除图片 | ||
| 372 | + handleRemove(file) { | ||
| 373 | + const { imgPath } = file | ||
| 374 | + this.form.imgs = this.form.imgs.filter(item => { | ||
| 375 | + return item.imgPath !== imgPath | ||
| 376 | + }) | ||
| 377 | + }, | ||
| 378 | + // 下一步 | ||
| 379 | + next() { | ||
| 380 | + this.$refs['form'].validate((valid) => { | ||
| 381 | + console.log('val', valid) | ||
| 382 | + if (valid) { | ||
| 383 | + if (this.active === 1) { | ||
| 384 | + this.active = 0 | ||
| 385 | + // console.log(this.form); | ||
| 386 | + sessionStorage.setItem('form', JSON.stringify(this.form.skus)) | ||
| 387 | + } | ||
| 388 | + } else { | ||
| 389 | + this.$message({ | ||
| 390 | + message: '请填写正确的信息', | ||
| 391 | + type: 'warning' | ||
| 392 | + }) | ||
| 393 | + return false | ||
| 394 | + } | ||
| 395 | + }) | ||
| 396 | + }, | ||
| 397 | + // 点击新增商品时表单数据重置 | ||
| 398 | + reset() { | ||
| 399 | + // this.form.productText = '' | ||
| 400 | + this.form = { | ||
| 401 | + productName: '', | ||
| 402 | + productBrief: '', | ||
| 403 | + shopGroupId: '', | ||
| 404 | + classifyId: '', | ||
| 405 | + supplierName: '', | ||
| 406 | + ifLogistics: '', | ||
| 407 | + shelveState: ' ', | ||
| 408 | + ifOversold: '', | ||
| 409 | + ifCredit: '', | ||
| 410 | + creditLimit: '', | ||
| 411 | + ifHuabei: 1, | ||
| 412 | + cost:0, | ||
| 413 | + productText: '', | ||
| 414 | + images: [], | ||
| 415 | + deletes: [], | ||
| 416 | + names: [ | ||
| 417 | + { | ||
| 418 | + code: '', | ||
| 419 | + skuName: '', | ||
| 420 | + values: [ | ||
| 421 | + { | ||
| 422 | + valueCode: '', | ||
| 423 | + skuValue: '', | ||
| 424 | + image: '' | ||
| 425 | + } | ||
| 426 | + ] | ||
| 427 | + } | ||
| 428 | + ], | ||
| 429 | + skus: [ | ||
| 430 | + { | ||
| 431 | + skuName: '', | ||
| 432 | + skuValue: '', | ||
| 433 | + price: '', | ||
| 434 | + originalPrice: '', | ||
| 435 | + stockNumber: '', | ||
| 436 | + weight: '', | ||
| 437 | + skuImage: '', | ||
| 438 | + style: '' | ||
| 439 | + } | ||
| 440 | + ] | ||
| 441 | + } | ||
| 442 | + this.params = { | ||
| 443 | + applyPrice: 0, | ||
| 444 | + attrStyle: 0, | ||
| 445 | + categoryId: '', | ||
| 446 | + oversold: 1, | ||
| 447 | + collects: 0, | ||
| 448 | + groupId: '', | ||
| 449 | + imgs: [], | ||
| 450 | + deletes: [], | ||
| 451 | + isDelete: 0, | ||
| 452 | + limitCount: 0, | ||
| 453 | + minusStock: '', | ||
| 454 | + needLogistics: 1, | ||
| 455 | + platform: '', | ||
| 456 | + price: 0, | ||
| 457 | + productCode: '', | ||
| 458 | + productName: '', | ||
| 459 | + sellCount: 0, | ||
| 460 | + sellDesc: '', | ||
| 461 | + sellType: '', | ||
| 462 | + shortName: '', | ||
| 463 | + skuAttrList: [ | ||
| 464 | + { | ||
| 465 | + code: '', | ||
| 466 | + skuName: '', | ||
| 467 | + needImg: false, | ||
| 468 | + values: [ | ||
| 469 | + { | ||
| 470 | + skuValue: '', | ||
| 471 | + valueCode: '', | ||
| 472 | + image: '' | ||
| 473 | + } | ||
| 474 | + ] | ||
| 475 | + } | ||
| 476 | + ], | ||
| 477 | + skuList: [ | ||
| 478 | + { | ||
| 479 | + isDelete: '', | ||
| 480 | + skuAttrCodeDTOList: [ | ||
| 481 | + { | ||
| 482 | + code: '', | ||
| 483 | + valueCode: '' | ||
| 484 | + } | ||
| 485 | + ], | ||
| 486 | + skuAttrList: [], | ||
| 487 | + sku: '', | ||
| 488 | + skuImg: '', | ||
| 489 | + price: 0, | ||
| 490 | + originalPrice: 0, | ||
| 491 | + stockNumber: 0, | ||
| 492 | + weight: 0 | ||
| 493 | + } | ||
| 494 | + ], | ||
| 495 | + sortOrder: '', | ||
| 496 | + status: '', | ||
| 497 | + stock: '', | ||
| 498 | + supplierName: '', | ||
| 499 | + views: '', | ||
| 500 | + weight: '' | ||
| 501 | + } | ||
| 502 | + this.imgList = [] | ||
| 503 | + this.dialogImageUrl = '' | ||
| 504 | + this.dialogVisible = false | ||
| 505 | + this.active = 1 | ||
| 506 | + }, | ||
| 507 | + // 返回 | ||
| 508 | + back() { | ||
| 509 | + this.active = 1 | ||
| 510 | + this.$emit('cancel') | ||
| 511 | + }, | ||
| 512 | + // 上一步 | ||
| 513 | + last() { | ||
| 514 | + if (this.active !== 1) { | ||
| 515 | + this.active = 1 | ||
| 516 | + } | ||
| 517 | + }, | ||
| 518 | + // 保存 | ||
| 519 | + async save() { | ||
| 520 | + console.log(this.params.skuAttrList) | ||
| 521 | + if (this.params.attrStyle === 1) { | ||
| 522 | + for (let i = 0; i < this.params.skuAttrList.length; i++) { | ||
| 523 | + if (this.params.skuAttrList[i].skuName === '') { | ||
| 524 | + this.$message({ | ||
| 525 | + message: '规格名不能为空', | ||
| 526 | + type: 'warning' | ||
| 527 | + }) | ||
| 528 | + return false | ||
| 529 | + } | ||
| 530 | + } | ||
| 531 | + } | ||
| 532 | + this.form.names = this.params.skuAttrList | ||
| 533 | + this.params.skuList.forEach(element => { | ||
| 534 | + element.style = this.params.attrStyle | ||
| 535 | + }) | ||
| 536 | + this.form.skus = this.params.skuList | ||
| 537 | + this.form.images = this.params.imgs | ||
| 538 | + this.form.deletes = this.params.deletes | ||
| 539 | + this.form.classifyId = Array.isArray(this.form.classifyId) ? this.form.classifyId[this.form.classifyId.length - 1] : this.form.classifyId | ||
| 540 | + if (this.productId) { | ||
| 541 | + this.form.productId = this.productId | ||
| 542 | + const sku = JSON.parse(sessionStorage.getItem('form')) | ||
| 543 | + console.log(sku) | ||
| 544 | + sku.forEach((element, i) => { | ||
| 545 | + for (let index = 0; index < this.form.skus.length; index++) { | ||
| 546 | + if (i === index) { | ||
| 547 | + this.form.skus[index].skuId = element.skuId | ||
| 548 | + } | ||
| 549 | + } | ||
| 550 | + }) | ||
| 551 | + console.log(this.form, 'this.form') | ||
| 552 | + const res = await getClassifyUpdate(this.form) | ||
| 553 | + console.log(res) | ||
| 554 | + if (res.code === '') { | ||
| 555 | + this.$message({ | ||
| 556 | + type: 'success', | ||
| 557 | + message: '成功!' | ||
| 558 | + }) | ||
| 559 | + this.back() | ||
| 560 | + } | ||
| 561 | + } else { | ||
| 562 | + console.log('message1',this.message) | ||
| 563 | + if(this.message != ''){ | ||
| 564 | + const formData = new FormData(); | ||
| 565 | + formData.append('combinationId', this.message); | ||
| 566 | + for (let [key, value] of formData.entries()) { | ||
| 567 | + this.form[key] = value; | ||
| 568 | + } | ||
| 569 | + } | ||
| 570 | + const res = await getClassifyAdd(this.form) | ||
| 571 | + if (res.code === '') { | ||
| 572 | + this.$message({ | ||
| 573 | + type: 'success', | ||
| 574 | + message: '成功!' | ||
| 575 | + }) | ||
| 576 | + this.reset() | ||
| 577 | + this.back() | ||
| 578 | + } | ||
| 579 | + } | ||
| 580 | + }, | ||
| 581 | + // 获取商品分组 | ||
| 582 | + async groups() { | ||
| 583 | + const res = await getGroupSelect({ | ||
| 584 | + }) | ||
| 585 | + this.groupList = res.data | ||
| 586 | + }, | ||
| 587 | + // 获取详情 | ||
| 588 | + async details() { | ||
| 589 | + const res = await getClassifyGetById({ productId: this.productId }) | ||
| 590 | + this.form = res.data | ||
| 591 | + this.$set(this.form, 'productText', res.data.productText) | ||
| 592 | + // this.form.productText = res.data.productText | ||
| 593 | + // console.log(this.form.productText, 'productText') | ||
| 594 | + if (res.data.names.length !== 0) { | ||
| 595 | + this.params.skuAttrList = res.data.names | ||
| 596 | + } | ||
| 597 | + // this.params.skuAttrList.forEach((item) => { | ||
| 598 | + // var data = {} | ||
| 599 | + // var arr = Object.keys(res.data) | ||
| 600 | + // if (arr.length === 0) { | ||
| 601 | + // item.needImg = false | ||
| 602 | + // } | ||
| 603 | + // }) | ||
| 604 | + this.params.skuList = this.form.skus | ||
| 605 | + this.params.attrStyle = res.data.skus[0].style | ||
| 606 | + this.params.imgs = res.data.images | ||
| 607 | + }, | ||
| 608 | + async selectList() { | ||
| 609 | + const res = await getClassify() | ||
| 610 | + this.classifyList = this.filterList(res.data) | ||
| 611 | + }, | ||
| 612 | + filterList(data) { | ||
| 613 | + data.forEach(i => { | ||
| 614 | + if (i.childs.length) { | ||
| 615 | + this.filterList(i.childs) | ||
| 616 | + } else { | ||
| 617 | + i.childs = null | ||
| 618 | + } | ||
| 619 | + }) | ||
| 620 | + return data | ||
| 621 | + } | ||
| 622 | + } | ||
| 623 | +} | ||
| 624 | +</script> | ||
| 625 | + | ||
| 626 | +<style scoped lang='scss'> | ||
| 627 | +@import url("../../../styles/elDialog.scss"); | ||
| 628 | +.btnList { | ||
| 629 | + float: right; | ||
| 630 | + padding: 3px 0; | ||
| 631 | + width: 100px; | ||
| 632 | + height: 40px; | ||
| 633 | + border-radius: 4px; | ||
| 634 | + margin-right: 30px; | ||
| 635 | +} | ||
| 636 | +.addTitle { | ||
| 637 | + font-size: 20px; | ||
| 638 | + color: #333333; | ||
| 639 | + line-height: 50px; | ||
| 640 | +} | ||
| 641 | +.stepsColor{ | ||
| 642 | + font-size: 20px; | ||
| 643 | + line-height: 40px; | ||
| 644 | + .one_class { | ||
| 645 | + width: 40px; | ||
| 646 | + background: #3F9B6A; | ||
| 647 | + border-radius: 50%; | ||
| 648 | + color: #ffffff; | ||
| 649 | + margin: 0 10px; | ||
| 650 | + } | ||
| 651 | + .two_class { | ||
| 652 | + color: #3F9B6A; | ||
| 653 | + } | ||
| 654 | + .line { | ||
| 655 | + width: 230px; | ||
| 656 | + height: 2px; | ||
| 657 | + background: #e0e5eb; | ||
| 658 | + margin: 0 20px; | ||
| 659 | + } | ||
| 660 | + .t_class { | ||
| 661 | + width: 40px; | ||
| 662 | + background: #dddddd; | ||
| 663 | + border-radius: 50%; | ||
| 664 | + color: #333333; | ||
| 665 | + margin: 0 10px; | ||
| 666 | + } | ||
| 667 | + .w_class { | ||
| 668 | + color: #666666; | ||
| 669 | + } | ||
| 670 | +} | ||
| 671 | +.common { | ||
| 672 | + display: flex; | ||
| 673 | + justify-content: center; | ||
| 674 | + align-items: center; | ||
| 675 | +} | ||
| 676 | + | ||
| 677 | +.addCom { | ||
| 678 | + margin: 10px 0; | ||
| 679 | + justify-content: space-around; | ||
| 680 | + align-items: unset; | ||
| 681 | + .el-form{ | ||
| 682 | + display: flex; | ||
| 683 | + padding: 40px 0; | ||
| 684 | + } | ||
| 685 | + .leftCom { | ||
| 686 | + width: 65%; | ||
| 687 | + background: #ffffff; | ||
| 688 | + } | ||
| 689 | + .rightCom { | ||
| 690 | + width: 35%; | ||
| 691 | + background: #ffffff; | ||
| 692 | + margin-left: 80px; | ||
| 693 | + } | ||
| 694 | +} | ||
| 695 | +.centerCom { | ||
| 696 | + width: 1660px; | ||
| 697 | + background: #ffffff; | ||
| 698 | + box-shadow: 0px 5px 20px 0px rgba(51, 51, 51, 0.15); | ||
| 699 | + border-radius: 4px; | ||
| 700 | +} | ||
| 701 | +</style> | ||
| 702 | +<style scoped> | ||
| 703 | +.form-item-long >>> .el-input { | ||
| 704 | + width: 100%; | ||
| 705 | +} | ||
| 706 | +</style> |
merchant-web-master/src/views/stockControl/inventory/addCommodity.vue
| 1 | <template> | 1 | <template> |
| 2 | <div> | 2 | <div> |
| 3 | - <el-card class="box-card"> | ||
| 4 | - <div slot="header" style="display:flex;justify-content: space-between;"> | ||
| 5 | - <div> | ||
| 6 | - <span v-if="!productId" class="addTitle">新增商品</span> | ||
| 7 | - <span v-else class="addTitle">编辑商品</span> | ||
| 8 | - </div> | ||
| 9 | - <div> | ||
| 10 | - <el-button v-if="active" style="background-color: #3F9B6A;color: #fff" @click="back">取消</el-button> | ||
| 11 | - <el-button v-if="active" style="background-color: #3F9B6A;color: #fff" @click="next">下一步</el-button> | ||
| 12 | - <el-button v-if="!active" style="background-color: #3F9B6A;color: #fff" @click="save">保存</el-button> | ||
| 13 | - <el-button v-if="!active" style="background-color: #3F9B6A;color: #fff" @click="last">上一步</el-button> | ||
| 14 | - </div> | 3 | + <!-- 步骤条 --> |
| 4 | + <div class="stepsColor common"> | ||
| 5 | + <div class="stepsOne common"> | ||
| 6 | + <div :class="active ? 'one_class common' : 't_class common'">1</div> | ||
| 7 | + <div :class="active ? 'two_class' : 'w_class'">基本属性</div> | ||
| 15 | </div> | 8 | </div> |
| 16 | - <!-- 步骤条 --> | ||
| 17 | - <div class="stepsColor common"> | ||
| 18 | - <div class="stepsOne common"> | ||
| 19 | - <div :class="active ? 'one_class common' : 't_class common'">1</div> | ||
| 20 | - <div :class="active ? 'two_class' : 'w_class'">基本属性&商品描述</div> | ||
| 21 | - </div> | ||
| 22 | - <div class="line" /> | ||
| 23 | - <div class="stepsTwo common"> | ||
| 24 | - <div :class="active ? 't_class common' : 'one_class common'">2</div> | ||
| 25 | - <div :class="active ? 'w_class' : 'two_class' ">基本属性&商品描述</div> | ||
| 26 | - </div> | 9 | + <div class="line" /> |
| 10 | + <div class="stepsTwo common"> | ||
| 11 | + <div :class="active ? 't_class common' : 'one_class common'">2</div> | ||
| 12 | + <div :class="active ? 'w_class' : 'two_class' ">商品描述</div> | ||
| 27 | </div> | 13 | </div> |
| 28 | - </el-card> | 14 | + </div> |
| 29 | <!-- 商品 --> | 15 | <!-- 商品 --> |
| 30 | <div class="addCom common"> | 16 | <div class="addCom common"> |
| 31 | <div v-if="active"> | 17 | <div v-if="active"> |
| 32 | - <el-form ref="form" :model="form" :rules="rules" label-width="80px" style="padding: 40px 40px;"> | ||
| 33 | - <div class="leftCom"> | ||
| 34 | - <el-form-item label="商品名称" prop="productName"> | ||
| 35 | - <el-input v-model="form.productName" maxlength="50" show-word-limit /> | ||
| 36 | - </el-form-item> | ||
| 37 | - <el-form-item label="卖点简介"> | ||
| 38 | - <el-input v-model="form.productBrief" maxlength="50" show-word-limit /> | ||
| 39 | - </el-form-item> | ||
| 40 | - <el-form-item> | ||
| 41 | - <Tinymce v-if="showTinymce" ref="content" v-model="form.productText" class="tinymce-wrap" :height="200" /> | ||
| 42 | - </el-form-item> | ||
| 43 | - </div> | ||
| 44 | - <div class="rightCom"> | ||
| 45 | - <el-form-item label="官方分类" prop="classifyId"> | ||
| 46 | - <el-cascader | ||
| 47 | - v-model="form.classifyId" | ||
| 48 | - :options="classifyList" | ||
| 49 | - clearable | ||
| 50 | - :props="{ | ||
| 51 | - checkStrictly: false, | ||
| 52 | - label:'categoryName', | ||
| 53 | - value:'id', | ||
| 54 | - children:'childs' | ||
| 55 | - }" | ||
| 56 | - @change="handleChangeCascader" | ||
| 57 | - /> | ||
| 58 | - </el-form-item> | ||
| 59 | - | ||
| 60 | - <el-form-item label="商品分组" prop="shopGroupId"> | ||
| 61 | - <el-select v-model="form.shopGroupId" placeholder="请选择商品分组" clearable> | ||
| 62 | - <el-option | ||
| 63 | - v-for="(item,index) in groupList" | ||
| 64 | - :key="index" | ||
| 65 | - :label="item.groupName" | ||
| 66 | - :value="item.shopGroupId" | 18 | + <el-form ref="form" :model="form" :rules="rules" label-width="120px" style="padding:10px 20px;"> |
| 19 | + <el-form-item label="商品名称" prop="productName"> | ||
| 20 | + <el-input v-model="form.productName" maxlength="50" show-word-limit /> | ||
| 21 | + </el-form-item> | ||
| 22 | + <el-row :gutter="20"> | ||
| 23 | + <el-col :span="12"> | ||
| 24 | + <el-form-item label="官方分类" prop="classifyId"> | ||
| 25 | + <el-cascader | ||
| 26 | + v-model="form.classifyId" | ||
| 27 | + :options="classifyList" | ||
| 28 | + clearable | ||
| 29 | + :props="{ | ||
| 30 | + checkStrictly: false, | ||
| 31 | + label:'categoryName', | ||
| 32 | + value:'id', | ||
| 33 | + children:'childs' | ||
| 34 | + }" | ||
| 35 | + style="width: 100%" | ||
| 36 | + @change="handleChangeCascader" | ||
| 67 | /> | 37 | /> |
| 68 | - </el-select> | ||
| 69 | - </el-form-item> | ||
| 70 | - <el-form-item label="品牌"> | ||
| 71 | - <el-select | ||
| 72 | - v-model="form.brandId" | ||
| 73 | - clearable | ||
| 74 | - placeholder="请选择品牌" | ||
| 75 | - > | ||
| 76 | - <el-option | ||
| 77 | - v-for="item in brandList" | ||
| 78 | - :key="item.id" | ||
| 79 | - :label="item.brandName" | ||
| 80 | - :value="item.id" | ||
| 81 | - /> | ||
| 82 | - </el-select> | ||
| 83 | - </el-form-item> | ||
| 84 | - <el-form-item class="form-item-long" label="供应商"> | ||
| 85 | - <el-input v-model="form.supplierName" maxlength="30" show-word-limit placeholder="请输入供应商名称" /> | ||
| 86 | - </el-form-item> | ||
| 87 | - <el-form-item class="form-item-long" label="成本价" prop="cost"> | ||
| 88 | - <el-input v-model.number="form.cost" type="number" maxlength="10" show-word-limit placeholder="请输入成本价" /> | ||
| 89 | - </el-form-item> | ||
| 90 | - <el-form-item label="需要物流" prop="ifLogistics"> | ||
| 91 | - <el-radio-group v-model="form.ifLogistics"> | ||
| 92 | - <el-radio :label="1">是</el-radio> | ||
| 93 | - <el-radio :label="0">否</el-radio> | ||
| 94 | - </el-radio-group> | ||
| 95 | - </el-form-item> | ||
| 96 | - <el-form-item label="上架状态" prop="shelveState"> | ||
| 97 | - <el-radio-group v-model="form.shelveState"> | ||
| 98 | - <el-radio :label="1">上架</el-radio> | ||
| 99 | - <el-radio :label="0">下架</el-radio> | ||
| 100 | - </el-radio-group> | ||
| 101 | - </el-form-item> | ||
| 102 | - <el-form-item label="允许超卖" prop="ifOversold"> | ||
| 103 | - <el-radio-group v-model="form.ifOversold"> | ||
| 104 | - <el-radio :label="1">允许</el-radio> | ||
| 105 | - <el-radio :label="0">不允许</el-radio> | ||
| 106 | - </el-radio-group> | ||
| 107 | - </el-form-item> | ||
| 108 | - <el-form-item label="积分兑换" prop="ifCredit"> | ||
| 109 | - <el-radio-group v-model="form.ifCredit"> | ||
| 110 | - <el-radio :label="1">允许</el-radio> | ||
| 111 | - <el-radio :label="0">不允许</el-radio> | ||
| 112 | - </el-radio-group> | ||
| 113 | - <p style="color: #cf0f0f">开启积分兑换后,积分所抵扣的金额由商户承担</p> | ||
| 114 | - </el-form-item> | ||
| 115 | - <el-form-item v-if="form.ifCredit" class="form-item-long" label="单笔最大抵扣" prop="creditLimit"> | ||
| 116 | - <!-- <el-input v-model="form.creditLimit" type="number" placeholder="请输入单笔最大抵扣" /> --> | ||
| 117 | - <el-input-number v-model="form.creditLimit" :controls="false" :min="0" :precision="0" placeholder="请输入单笔最大抵扣" /> | ||
| 118 | - <p style="color: #cf0f0f; height: 25px; line-height: 25px;margin-top: 10px">限制一笔订单中该商品最多抵扣多少积分</p> | ||
| 119 | - <p style="color: #cf0f0f; height: 25px; line-height: 25px">( 注:1积分 = {{ integralProportion }}元 请输入整数 )</p> | ||
| 120 | - </el-form-item> | ||
| 121 | - <!-- <el-form-item label="花呗分期">--> | ||
| 122 | - <!-- <el-radio-group v-model="form.ifHuabei">--> | ||
| 123 | - <!-- <el-radio :label="1">支持</el-radio>--> | ||
| 124 | - <!-- <el-radio :label="0">不支持</el-radio>--> | ||
| 125 | - <!-- </el-radio-group>--> | ||
| 126 | - <!-- </el-form-item>--> | ||
| 127 | - </div> | 38 | + </el-form-item> |
| 39 | + </el-col> | ||
| 40 | + <el-col :span="12"> | ||
| 41 | + <el-form-item label="商品分组" prop="shopGroupId"> | ||
| 42 | + <el-select v-model="form.shopGroupId" placeholder="请选择商品分组" clearable style="width: 100%"> | ||
| 43 | + <el-option | ||
| 44 | + v-for="(item,index) in groupList" | ||
| 45 | + :key="index" | ||
| 46 | + :label="item.groupName" | ||
| 47 | + :value="item.shopGroupId" | ||
| 48 | + /> | ||
| 49 | + </el-select> | ||
| 50 | + </el-form-item> | ||
| 51 | + </el-col> | ||
| 52 | + <el-col :span="12"> | ||
| 53 | + <el-form-item label="品牌"> | ||
| 54 | + <el-select | ||
| 55 | + v-model="form.brandId" | ||
| 56 | + clearable | ||
| 57 | + placeholder="请选择品牌" | ||
| 58 | + style="width: 100%" | ||
| 59 | + > | ||
| 60 | + <el-option | ||
| 61 | + v-for="item in brandList" | ||
| 62 | + :key="item.id" | ||
| 63 | + :label="item.brandName" | ||
| 64 | + :value="item.id" | ||
| 65 | + /> | ||
| 66 | + </el-select> | ||
| 67 | + </el-form-item> | ||
| 68 | + </el-col> | ||
| 69 | + <el-col :span="12"> | ||
| 70 | + <el-form-item class="form-item-long" label="供应商"> | ||
| 71 | + <el-input v-model="form.supplierName" maxlength="30" show-word-limit placeholder="请输入供应商名称" /> | ||
| 72 | + </el-form-item> | ||
| 73 | + </el-col> | ||
| 74 | + <el-col :span="12"> | ||
| 75 | + <el-form-item class="form-item-long" label="成本价(/元)" prop="cost"> | ||
| 76 | + <el-input v-model.number="form.cost" type="number" maxlength="10" show-word-limit placeholder="请输入成本价" /> | ||
| 77 | + </el-form-item> | ||
| 78 | + </el-col> | ||
| 79 | + <el-col :span="12"> | ||
| 80 | + <el-form-item label="需要物流" prop="ifLogistics"> | ||
| 81 | + <el-radio-group v-model="form.ifLogistics"> | ||
| 82 | + <el-radio :label="1">是</el-radio> | ||
| 83 | + <el-radio :label="0">否</el-radio> | ||
| 84 | + </el-radio-group> | ||
| 85 | + </el-form-item> | ||
| 86 | + </el-col> | ||
| 87 | + <el-col :span="12"> | ||
| 88 | + <el-form-item label="上架状态" prop="shelveState"> | ||
| 89 | + <el-radio-group v-model="form.shelveState"> | ||
| 90 | + <el-radio :label="1">上架</el-radio> | ||
| 91 | + <el-radio :label="0">下架</el-radio> | ||
| 92 | + </el-radio-group> | ||
| 93 | + </el-form-item> | ||
| 94 | + </el-col> | ||
| 95 | + <el-col :span="12"> | ||
| 96 | + <el-form-item label="允许超卖" prop="ifOversold"> | ||
| 97 | + <el-radio-group v-model="form.ifOversold"> | ||
| 98 | + <el-radio :label="1">允许</el-radio> | ||
| 99 | + <el-radio :label="0">不允许</el-radio> | ||
| 100 | + </el-radio-group> | ||
| 101 | + </el-form-item> | ||
| 102 | + </el-col> | ||
| 103 | + | ||
| 104 | + </el-row> | ||
| 105 | + <el-form-item label="卖点简介"> | ||
| 106 | + <el-input v-model="form.productBrief" maxlength="50" show-word-limit /> | ||
| 107 | + </el-form-item> | ||
| 108 | + <el-form-item> | ||
| 109 | + <Tinymce v-if="showTinymce" ref="content" v-model="form.productText" class="tinymce-wrap" :height="200" /> | ||
| 110 | + </el-form-item> | ||
| 111 | + <el-row :gutter="20"> | ||
| 112 | + <el-col :span="12"> | ||
| 113 | + <el-form-item label="积分兑换" prop="ifCredit"> | ||
| 114 | + <el-radio-group v-model="form.ifCredit"> | ||
| 115 | + <el-radio :label="1">允许</el-radio> | ||
| 116 | + <el-radio :label="0">不允许</el-radio> | ||
| 117 | + </el-radio-group> | ||
| 118 | + <p style="color: #cf0f0f">开启积分兑换后,积分所抵扣的金额由商户承担</p> | ||
| 119 | + </el-form-item> | ||
| 120 | + </el-col> | ||
| 121 | + <el-col :span="12" v-if="form.ifCredit"> | ||
| 122 | + <el-form-item class="form-item-long" label="单笔最大抵扣" prop="creditLimit"> | ||
| 123 | + <el-input-number v-model="form.creditLimit" :controls="false" :min="0" :precision="0" placeholder="请输入单笔最大抵扣" /> | ||
| 124 | + <p style="color: #cf0f0f; height: 25px; line-height: 25px;margin-top: 10px">限制一笔订单中该商品最多抵扣多少积分</p> | ||
| 125 | + <p style="color: #cf0f0f; height: 25px; line-height: 25px">( 注:1积分 = {{ integralProportion }}元 请输入整数 )</p> | ||
| 126 | + </el-form-item> | ||
| 127 | + </el-col> | ||
| 128 | + </el-row> | ||
| 129 | + | ||
| 128 | </el-form> | 130 | </el-form> |
| 129 | </div> | 131 | </div> |
| 130 | - <div v-if="!active" class="centerCom"> | 132 | + <div v-if="!active" style="width: 100%;"> |
| 131 | <el-form ref="form" :model="params" label-width="80px"> | 133 | <el-form ref="form" :model="params" label-width="80px"> |
| 132 | <StyleInformation :form="params" /> | 134 | <StyleInformation :form="params" /> |
| 133 | </el-form> | 135 | </el-form> |
| @@ -143,6 +145,12 @@ | @@ -143,6 +145,12 @@ | ||
| 143 | > | 145 | > |
| 144 | <img width="100%" :src="dialogImageUrl" alt> | 146 | <img width="100%" :src="dialogImageUrl" alt> |
| 145 | </el-dialog> | 147 | </el-dialog> |
| 148 | + <div style="padding: 20px;"> | ||
| 149 | + <el-button v-if="active" class="buttonHover" style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;" @click="back">取消</el-button> | ||
| 150 | + <el-button v-if="active" style="background-color: #3F9B6A;color: #fff" @click="next">下一步</el-button> | ||
| 151 | + <el-button v-if="!active" style="background-color: #3F9B6A;color: #fff" @click="save">保存</el-button> | ||
| 152 | + <el-button v-if="!active" style="background-color: #3F9B6A;color: #fff" @click="last">上一步</el-button> | ||
| 153 | + </div> | ||
| 146 | </div> | 154 | </div> |
| 147 | </template> | 155 | </template> |
| 148 | 156 | ||
| @@ -160,7 +168,7 @@ import { | @@ -160,7 +168,7 @@ import { | ||
| 160 | getSelect | 168 | getSelect |
| 161 | } from '@/api/account'; | 169 | } from '@/api/account'; |
| 162 | import { uploadUrl } from '@/utils/request' | 170 | import { uploadUrl } from '@/utils/request' |
| 163 | -import StyleInformation from './addComponent' | 171 | +import StyleInformation from '@/views/stockControl/inventory/addComponent' |
| 164 | export default { | 172 | export default { |
| 165 | components: { | 173 | components: { |
| 166 | Tinymce, | 174 | Tinymce, |
| @@ -173,12 +181,11 @@ export default { | @@ -173,12 +181,11 @@ export default { | ||
| 173 | }, | 181 | }, |
| 174 | showTinymce: { | 182 | showTinymce: { |
| 175 | type: Boolean | 183 | type: Boolean |
| 176 | - }, | ||
| 177 | - message: { | ||
| 178 | - type: String, | ||
| 179 | - default: '' | ||
| 180 | - } | 184 | + } |
| 181 | }, | 185 | }, |
| 186 | + watch: { | ||
| 187 | + | ||
| 188 | + }, | ||
| 182 | data() { | 189 | data() { |
| 183 | // const checkCreditLimit = (rule, value, callback) => { | 190 | // const checkCreditLimit = (rule, value, callback) => { |
| 184 | // console.log(this.form.ifCredit) | 191 | // console.log(this.form.ifCredit) |
| @@ -409,7 +416,7 @@ export default { | @@ -409,7 +416,7 @@ export default { | ||
| 409 | ifCredit: '', | 416 | ifCredit: '', |
| 410 | creditLimit: '', | 417 | creditLimit: '', |
| 411 | ifHuabei: 1, | 418 | ifHuabei: 1, |
| 412 | - cost:0, | 419 | + cost:null, |
| 413 | productText: '', | 420 | productText: '', |
| 414 | images: [], | 421 | images: [], |
| 415 | deletes: [], | 422 | deletes: [], |
| @@ -447,6 +454,7 @@ export default { | @@ -447,6 +454,7 @@ export default { | ||
| 447 | collects: 0, | 454 | collects: 0, |
| 448 | groupId: '', | 455 | groupId: '', |
| 449 | imgs: [], | 456 | imgs: [], |
| 457 | + cost:null, | ||
| 450 | deletes: [], | 458 | deletes: [], |
| 451 | isDelete: 0, | 459 | isDelete: 0, |
| 452 | limitCount: 0, | 460 | limitCount: 0, |
| @@ -540,7 +548,6 @@ export default { | @@ -540,7 +548,6 @@ export default { | ||
| 540 | if (this.productId) { | 548 | if (this.productId) { |
| 541 | this.form.productId = this.productId | 549 | this.form.productId = this.productId |
| 542 | const sku = JSON.parse(sessionStorage.getItem('form')) | 550 | const sku = JSON.parse(sessionStorage.getItem('form')) |
| 543 | - console.log(sku) | ||
| 544 | sku.forEach((element, i) => { | 551 | sku.forEach((element, i) => { |
| 545 | for (let index = 0; index < this.form.skus.length; index++) { | 552 | for (let index = 0; index < this.form.skus.length; index++) { |
| 546 | if (i === index) { | 553 | if (i === index) { |
| @@ -549,8 +556,8 @@ export default { | @@ -549,8 +556,8 @@ export default { | ||
| 549 | } | 556 | } |
| 550 | }) | 557 | }) |
| 551 | console.log(this.form, 'this.form') | 558 | console.log(this.form, 'this.form') |
| 559 | + | ||
| 552 | const res = await getClassifyUpdate(this.form) | 560 | const res = await getClassifyUpdate(this.form) |
| 553 | - console.log(res) | ||
| 554 | if (res.code === '') { | 561 | if (res.code === '') { |
| 555 | this.$message({ | 562 | this.$message({ |
| 556 | type: 'success', | 563 | type: 'success', |
| @@ -559,14 +566,7 @@ export default { | @@ -559,14 +566,7 @@ export default { | ||
| 559 | this.back() | 566 | this.back() |
| 560 | } | 567 | } |
| 561 | } else { | 568 | } else { |
| 562 | - console.log('message1',this.message) | ||
| 563 | - if(this.message != ''){ | ||
| 564 | - const formData = new FormData(); | ||
| 565 | - formData.append('combinationId', this.message); | ||
| 566 | - for (let [key, value] of formData.entries()) { | ||
| 567 | - this.form[key] = value; | ||
| 568 | - } | ||
| 569 | - } | 569 | + |
| 570 | const res = await getClassifyAdd(this.form) | 570 | const res = await getClassifyAdd(this.form) |
| 571 | if (res.code === '') { | 571 | if (res.code === '') { |
| 572 | this.$message({ | 572 | this.$message({ |
| @@ -634,13 +634,16 @@ export default { | @@ -634,13 +634,16 @@ export default { | ||
| 634 | margin-right: 30px; | 634 | margin-right: 30px; |
| 635 | } | 635 | } |
| 636 | .addTitle { | 636 | .addTitle { |
| 637 | - font-size: 20px; | 637 | + font-size: 14px; |
| 638 | color: #333333; | 638 | color: #333333; |
| 639 | line-height: 50px; | 639 | line-height: 50px; |
| 640 | } | 640 | } |
| 641 | .stepsColor{ | 641 | .stepsColor{ |
| 642 | font-size: 20px; | 642 | font-size: 20px; |
| 643 | line-height: 40px; | 643 | line-height: 40px; |
| 644 | + width: 50%; | ||
| 645 | + margin: 0 auto; | ||
| 646 | + padding: 15px 0; | ||
| 644 | .one_class { | 647 | .one_class { |
| 645 | width: 40px; | 648 | width: 40px; |
| 646 | background: #3F9B6A; | 649 | background: #3F9B6A; |
| @@ -678,9 +681,12 @@ export default { | @@ -678,9 +681,12 @@ export default { | ||
| 678 | margin: 10px 0; | 681 | margin: 10px 0; |
| 679 | justify-content: space-around; | 682 | justify-content: space-around; |
| 680 | align-items: unset; | 683 | align-items: unset; |
| 684 | + // width: 100%; | ||
| 685 | + padding:0 20px; | ||
| 686 | + | ||
| 681 | .el-form{ | 687 | .el-form{ |
| 682 | - display: flex; | ||
| 683 | - padding: 40px 0; | 688 | + // display: flex; |
| 689 | + padding: 0px 10px 10px; | ||
| 684 | } | 690 | } |
| 685 | .leftCom { | 691 | .leftCom { |
| 686 | width: 65%; | 692 | width: 65%; |
merchant-web-master/src/views/stockControl/inventory/addComponent copy.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div class="style-information-component"> | ||
| 3 | + <el-form-item label="商品图片" /> | ||
| 4 | + <div class="upload-wrap"> | ||
| 5 | + <upimg filePath="bueniss" :value="imgsGeshi(form.imgs)" inputtype="coverImage" :limit="5" | ||
| 6 | + @changimg="e=>changimg(e,'imgs')"></upimg> | ||
| 7 | + <!-- <el-upload | ||
| 8 | + list-type="picture-card" | ||
| 9 | + :on-preview="handlePictureCardPreview" | ||
| 10 | + :on-remove="handleRemove" | ||
| 11 | + :headers="headers" | ||
| 12 | + :data="dataObj" | ||
| 13 | + :file-list="form.imgs" | ||
| 14 | + :limit="20" | ||
| 15 | + :on-success="handleImageSuccess" | ||
| 16 | + :action="action" | ||
| 17 | + > | ||
| 18 | + <i slot="default" class="el-icon-plus" /> | ||
| 19 | + <div slot="file" slot-scope="{ file }"> | ||
| 20 | + <img class="el-upload-list__item-thumbnail" :src="file.imgPath"> | ||
| 21 | + <span class="el-upload-list__item-actions"> | ||
| 22 | + <span class="el-upload-list__item-preview" @click="handlePictureCardPreview(file)"> | ||
| 23 | + <i class="el-icon-zoom-in" /> | ||
| 24 | + </span> | ||
| 25 | + <span class="el-upload-list__item-delete" @click="handleRemove(file)"> | ||
| 26 | + <i class="el-icon-delete" /> | ||
| 27 | + </span> | ||
| 28 | + </span> | ||
| 29 | + </div> | ||
| 30 | + </el-upload> --> | ||
| 31 | + </div> | ||
| 32 | + <el-form-item label="款式设置"> | ||
| 33 | + <el-radio-group v-model="form.attrStyle" @change="changeAttrStyle"> | ||
| 34 | + <el-radio :label="0">单款式</el-radio> | ||
| 35 | + <el-radio :label="1">多款式</el-radio> | ||
| 36 | + </el-radio-group> | ||
| 37 | + </el-form-item> | ||
| 38 | + <div class="style-container"> | ||
| 39 | + <div v-if="form.attrStyle === 0" class="single-style"> | ||
| 40 | + <el-table | ||
| 41 | + :data="skuList" | ||
| 42 | + :header-cell-style="{fontSize: '14px',color:'#0009',fontWeight: 'normal',backgroundColor:'#F2F3F5'}" | ||
| 43 | + > | ||
| 44 | + <el-table-column label="规格"> | ||
| 45 | + <template slot-scope="scope"> | ||
| 46 | + <el-input v-model="singleStyle.skuValue" :sss="scope" maxlength="40" /> | ||
| 47 | + </template> | ||
| 48 | + </el-table-column> | ||
| 49 | + <el-table-column label="售价"> | ||
| 50 | + <template slot-scope="scope"> | ||
| 51 | + <!-- <el-input v-model="scope.row.price" type="number" oninput="value=value.replace(/-/, '')" /> --> | ||
| 52 | + <el-input-number v-model="scope.row.price" :controls="false" :min="0" :precision="2" :step="0.01" /> | ||
| 53 | + </template> | ||
| 54 | + </el-table-column> | ||
| 55 | + <el-table-column label="原价"> | ||
| 56 | + <template slot-scope="scope"> | ||
| 57 | + <!-- <el-input v-model="scope.row.originalPrice" type="number" oninput="value=value.replace(/-/, '')" /> --> | ||
| 58 | + <el-input-number v-model="scope.row.originalPrice" :controls="false" :min="0" :precision="2" :step="0.01" /> | ||
| 59 | + </template> | ||
| 60 | + </el-table-column> | ||
| 61 | + <el-table-column label="库存"> | ||
| 62 | + <template slot-scope="scope"> | ||
| 63 | + <!-- <el-input v-model="scope.row.stockNumber" type="number" oninput="value=value.replace(/[^\d]/g,'')" /> --> | ||
| 64 | + <el-input-number v-model="scope.row.stockNumber" :controls="false" :min="0" :precision="0" /> | ||
| 65 | + </template> | ||
| 66 | + </el-table-column> | ||
| 67 | + <el-table-column label="重量(KG)"> | ||
| 68 | + <template slot-scope="scope"> | ||
| 69 | + <!-- <el-input v-model="scope.row.weight" type="number" oninput="value=value.replace(/-/, '')" /> --> | ||
| 70 | + <el-input-number v-model="scope.row.weight" :controls="false" :min="0" :precision="2" :step="0.01" /> | ||
| 71 | + </template> | ||
| 72 | + </el-table-column> | ||
| 73 | + <el-table-column label="国际条码"> | ||
| 74 | + <template slot-scope="scope"> | ||
| 75 | + <el-input v-model="scope.row.sku" /> | ||
| 76 | + </template> | ||
| 77 | + </el-table-column> | ||
| 78 | + </el-table> | ||
| 79 | + </div> | ||
| 80 | + <div v-else class="multiple-styles"> | ||
| 81 | + <div v-for="(skuAttr, index) in form.skuAttrList" :key="index" class="sku-attr-list"> | ||
| 82 | + <el-form-item label="规格名"> | ||
| 83 | + <el-input v-model="skuAttr.skuName" maxlength="20" /> | ||
| 84 | + <i v-if="index != 0" class="el-icon-close delImg" @click="delSkuAttrList(index)" /> | ||
| 85 | + <el-checkbox | ||
| 86 | + v-if="index === 0" | ||
| 87 | + v-model="skuAttr.needImg" | ||
| 88 | + style="margin-left: 20px;" | ||
| 89 | + >需要配图</el-checkbox> | ||
| 90 | + </el-form-item> | ||
| 91 | + <el-form-item label="规格值"> | ||
| 92 | + <div class="attr-value-list"> | ||
| 93 | + <div | ||
| 94 | + v-for="(sku, index1) in skuAttr.values" | ||
| 95 | + :key="index + '-' + index1" | ||
| 96 | + class="main-diagram m-8" | ||
| 97 | + > | ||
| 98 | + <el-input v-model="sku.skuValue" maxlength="10" /> | ||
| 99 | + <i v-if="index === 0 && index1 === 0" /> | ||
| 100 | + <i v-else class="el-icon-close delImg" @click="delValue(index,index1)" /> | ||
| 101 | + <div v-if="skuAttr.needImg && index === 0" class="upload-wrap diagram-upload"> | ||
| 102 | + <div class="span-wrap"> | ||
| 103 | + <el-upload | ||
| 104 | + list-type="picture-card" | ||
| 105 | + :show-file-list="false" | ||
| 106 | + :on-preview="handlePictureCardPreview" | ||
| 107 | + :on-remove="handleRemove" | ||
| 108 | + :headers="headers" | ||
| 109 | + :data="dataObj" | ||
| 110 | + :file-list="[sku]" | ||
| 111 | + :multiple="false" | ||
| 112 | + :on-success="handleImageSuccess1" | ||
| 113 | + :action="action" | ||
| 114 | + > | ||
| 115 | + <i v-if="!sku.image" slot="trigger" class="el-icon-plus" /> | ||
| 116 | + <div v-else class="attr-value-img"> | ||
| 117 | + <img class="attr-thumbnail" :src="sku.image"> | ||
| 118 | + </div> | ||
| 119 | + </el-upload> | ||
| 120 | + <div v-if="sku.image" class="attr-actions"> | ||
| 121 | + <span | ||
| 122 | + class="attr-preview" | ||
| 123 | + @click="handlePictureCardPreview({imgPath:sku.image})" | ||
| 124 | + > | ||
| 125 | + <i class="el-icon-zoom-in" /> | ||
| 126 | + </span> | ||
| 127 | + <span class="attr-delete" @click="handleRemove1(sku)"> | ||
| 128 | + <i class="el-icon-delete" /> | ||
| 129 | + </span> | ||
| 130 | + </div> | ||
| 131 | + </div> | ||
| 132 | + </div> | ||
| 133 | + </div> | ||
| 134 | + <div class="tableBtn greens" style="margin-left: 10px;" @click="addAttrValue(index)">添加</div> | ||
| 135 | + </div> | ||
| 136 | + </el-form-item> | ||
| 137 | + </div> | ||
| 138 | + <el-button class="add-attr-btn" style="background-color: #3F9B6A;color: #fff" @click="addSkuAttrList">添加规格</el-button> | ||
| 139 | + <el-table | ||
| 140 | + :data="skuList" | ||
| 141 | + :header-cell-style="{fontSize: '14px',color:'#0009',fontWeight: 'normal',backgroundColor:'#F2F3F5'}" | ||
| 142 | + > | ||
| 143 | + <el-table-column | ||
| 144 | + v-for="(skuAttr, index) in skuAttrName" | ||
| 145 | + :key="index" | ||
| 146 | + :label="skuAttr.skuName" | ||
| 147 | + > | ||
| 148 | + <template slot-scope="scope"> | ||
| 149 | + {{ | ||
| 150 | + scope.row.skuAttrCodeDTOList && | ||
| 151 | + scope.row.skuAttrCodeDTOList[index] | ||
| 152 | + | attrValueFilter(form.skuAttrList) | ||
| 153 | + }} | ||
| 154 | + </template> | ||
| 155 | + </el-table-column> | ||
| 156 | + <el-table-column label="售价"> | ||
| 157 | + <template slot-scope="scope"> | ||
| 158 | + <!-- <el-input v-model="scope.row.price" type="number" oninput="value=value.replace(/-/, '')" /> --> | ||
| 159 | + <el-input-number v-model="scope.row.price" :controls="false" :min="0" :precision="2" :step="0.01" /> | ||
| 160 | + </template> | ||
| 161 | + </el-table-column> | ||
| 162 | + <el-table-column label="原价"> | ||
| 163 | + <template slot-scope="scope"> | ||
| 164 | + <!-- <el-input v-model="scope.row.originalPrice" type="number" oninput="value=value.replace(/-/, '')" /> --> | ||
| 165 | + <el-input-number v-model="scope.row.originalPrice" :controls="false" :min="0" :precision="2" :step="0.01" /> | ||
| 166 | + </template> | ||
| 167 | + </el-table-column> | ||
| 168 | + <!-- <el-table-column label="成本"> | ||
| 169 | + <template slot-scope="scope"> | ||
| 170 | + <el-input-number v-model="scope.row.cost" :controls="false" :min="0" :precision="2" :step="0.01" /> | ||
| 171 | + </template> | ||
| 172 | + </el-table-column> --> | ||
| 173 | + <el-table-column label="库存"> | ||
| 174 | + <template slot-scope="scope"> | ||
| 175 | + <!-- <el-input v-model="scope.row.stockNumber" type="number" oninput="value=value.replace(/[^\d]/g,'')" /> --> | ||
| 176 | + <el-input-number v-model="scope.row.stockNumber" :controls="false" :min="0" :precision="0" /> | ||
| 177 | + </template> | ||
| 178 | + </el-table-column> | ||
| 179 | + <el-table-column label="重量(KG)"> | ||
| 180 | + <template slot-scope="scope"> | ||
| 181 | + <!-- <el-input v-model="scope.row.weight" type="number" oninput="value=value.replace(/-/, '')" /> --> | ||
| 182 | + <el-input-number v-model="scope.row.weight" :controls="false" :min="0" :precision="6" :step="0.01" /> | ||
| 183 | + </template> | ||
| 184 | + </el-table-column> | ||
| 185 | + <el-table-column label="国际条码"> | ||
| 186 | + <template slot-scope="scope"> | ||
| 187 | + <el-input v-model="scope.row.sku" /> | ||
| 188 | + </template> | ||
| 189 | + </el-table-column> | ||
| 190 | + <!-- <el-table-column label="操作"> | ||
| 191 | + <template slot-scope="scope"> | ||
| 192 | + <el-button type="text" @click="delAttrValue(scope.row,scope.$index,scope.row,scope)">删除</el-button> | ||
| 193 | + </template> | ||
| 194 | + </el-table-column> --> | ||
| 195 | + </el-table> | ||
| 196 | + </div> | ||
| 197 | + </div> | ||
| 198 | + <el-dialog | ||
| 199 | + :append-to-body="true" | ||
| 200 | + :visible.sync="dialogVisible" | ||
| 201 | + title="查看图片" | ||
| 202 | + center | ||
| 203 | + custom-class="bian_css" | ||
| 204 | + > | ||
| 205 | + <img width="100%" :src="dialogImageUrl" alt> | ||
| 206 | + </el-dialog> | ||
| 207 | + </div> | ||
| 208 | +</template> | ||
| 209 | +<script> | ||
| 210 | +import { uploadUrl } from '@/utils/request' | ||
| 211 | +import { getToken } from '@/utils/auth' | ||
| 212 | +import upimg from "@/components/ImageUpload/index" | ||
| 213 | +export default { | ||
| 214 | + components: { | ||
| 215 | + upimg | ||
| 216 | + }, | ||
| 217 | + filters: { | ||
| 218 | + attrValueFilter(map, list) { | ||
| 219 | + const hasChilds = | ||
| 220 | + list && | ||
| 221 | + list.filter(skuAttr => { | ||
| 222 | + const hasChild = skuAttr.values.some(attr => { | ||
| 223 | + return attr.skuValue | ||
| 224 | + }) | ||
| 225 | + return skuAttr.skuName && hasChild | ||
| 226 | + }) | ||
| 227 | + if (!map) { | ||
| 228 | + return '' | ||
| 229 | + } | ||
| 230 | + const { code, valueCode } = map | ||
| 231 | + let codeStr = '' | ||
| 232 | + hasChilds.map(item => { | ||
| 233 | + const { values } = item | ||
| 234 | + values && | ||
| 235 | + values.some(attr => { | ||
| 236 | + const isSome = item.code === code && attr.valueCode === valueCode | ||
| 237 | + if (isSome) { | ||
| 238 | + codeStr = attr.skuValue | ||
| 239 | + } | ||
| 240 | + return isSome | ||
| 241 | + }) | ||
| 242 | + }) | ||
| 243 | + return codeStr | ||
| 244 | + } | ||
| 245 | + }, | ||
| 246 | + props: { | ||
| 247 | + form: { | ||
| 248 | + type: Object, | ||
| 249 | + default() { | ||
| 250 | + return {} | ||
| 251 | + } | ||
| 252 | + } | ||
| 253 | + }, | ||
| 254 | + data() { | ||
| 255 | + return { | ||
| 256 | + dialogImageUrl: '', | ||
| 257 | + dialogVisible: false, | ||
| 258 | + newform: this.form, | ||
| 259 | + headers: { | ||
| 260 | + 'Authorization-business': getToken() | ||
| 261 | + }, | ||
| 262 | + action: uploadUrl, | ||
| 263 | + dataObj: { | ||
| 264 | + folderId: 1 | ||
| 265 | + }, | ||
| 266 | + fileList: [] | ||
| 267 | + } | ||
| 268 | + }, | ||
| 269 | + computed: { | ||
| 270 | + skuAttrName() { | ||
| 271 | + return ( | ||
| 272 | + this.form.skuAttrList && | ||
| 273 | + this.form.skuAttrList.filter(skuAttr => { | ||
| 274 | + const hasChilds = skuAttr.values.some(attr => { | ||
| 275 | + return attr.skuValue | ||
| 276 | + }) | ||
| 277 | + return skuAttr.skuName && hasChilds | ||
| 278 | + }) | ||
| 279 | + ) | ||
| 280 | + }, | ||
| 281 | + singleStyle() { | ||
| 282 | + if (this.form.skuAttrList && this.form.skuAttrList[0]) { | ||
| 283 | + return this.form.skuAttrList && this.form.skuAttrList[0].values[0] | ||
| 284 | + } | ||
| 285 | + return { | ||
| 286 | + skuValue: '' | ||
| 287 | + } | ||
| 288 | + }, | ||
| 289 | + skuList() { | ||
| 290 | + if (this.form.attrStyle === 0) { | ||
| 291 | + return this.form.skuList.slice(0, 1) | ||
| 292 | + } | ||
| 293 | + return this.form.skuList | ||
| 294 | + } | ||
| 295 | + }, | ||
| 296 | + watch: { | ||
| 297 | + 'form.skuAttrList': { | ||
| 298 | + handler(newVal, oldVal) { | ||
| 299 | + // 判断是否有规格值 | ||
| 300 | + const hasChilds = | ||
| 301 | + this.form.skuAttrList && | ||
| 302 | + this.form.skuAttrList.filter(skuAttr => { | ||
| 303 | + const hasChild = skuAttr.values.some(attr => { | ||
| 304 | + return attr.skuValue | ||
| 305 | + }) | ||
| 306 | + return skuAttr.skuName && hasChild | ||
| 307 | + }) | ||
| 308 | + if (this.form.attrStyle === 1 && hasChilds.length) { | ||
| 309 | + this.skuFormat() | ||
| 310 | + } | ||
| 311 | + // console.log(newVal); | ||
| 312 | + // console.log(oldVal); | ||
| 313 | + }, | ||
| 314 | + deep: true | ||
| 315 | + }, | ||
| 316 | + 'form.skuList': { | ||
| 317 | + handler(newVal, oldVal) { | ||
| 318 | + // console.log(newVal); | ||
| 319 | + // console.log(oldVal); | ||
| 320 | + }, | ||
| 321 | + deep: true | ||
| 322 | + } | ||
| 323 | + }, | ||
| 324 | + created() { | ||
| 325 | + this.headers.tenant = 'MDAwMA==' | ||
| 326 | + }, | ||
| 327 | + methods: { | ||
| 328 | + imgsGeshi(val){ | ||
| 329 | + let arr = [] | ||
| 330 | + val.forEach(item => { | ||
| 331 | + arr.push(item.imgPath) | ||
| 332 | + }); | ||
| 333 | + arr = arr.join(',') | ||
| 334 | + return arr | ||
| 335 | + }, | ||
| 336 | + changimg(e, type) { | ||
| 337 | + e = e.split(',') | ||
| 338 | + this.form.imgs = [] | ||
| 339 | + e.map(item => { | ||
| 340 | + this.form.imgs.push({ | ||
| 341 | + imgPath: item | ||
| 342 | + }) | ||
| 343 | + }) | ||
| 344 | + }, | ||
| 345 | + // proving1(e) { | ||
| 346 | + // var keynum = window.event ? e.keyCode : e.which // 获取键盘码 | ||
| 347 | + // // var keychar = String.fromCharCode(keynum) // 获取键盘码对应的字符 | ||
| 348 | + // console.log( | ||
| 349 | + // e.key | ||
| 350 | + // .replace(/[^\d^\.]+/g, '') | ||
| 351 | + // .replace('.', '$#$') | ||
| 352 | + // .replace(/\./g, '') | ||
| 353 | + // .replace('$#$', '.') | ||
| 354 | + // ) | ||
| 355 | + // console.log(keynum) | ||
| 356 | + // if ( | ||
| 357 | + // e.key | ||
| 358 | + // .replace(/[^\d^\.]+/g, '') | ||
| 359 | + // .replace('.', '$#$') | ||
| 360 | + // .replace(/\./g, '') | ||
| 361 | + // .replace('$#$', '.') === '' && | ||
| 362 | + // keynum !== 8 | ||
| 363 | + // ) { | ||
| 364 | + // this.$message.warning('禁止输入中文或空') | ||
| 365 | + // e.target.value = ' ' | ||
| 366 | + // } | ||
| 367 | + // }, | ||
| 368 | + handleImageSuccess(response) { | ||
| 369 | + const url = response.data.url | ||
| 370 | + this.form.imgs.push({ | ||
| 371 | + imgPath: url | ||
| 372 | + }) | ||
| 373 | + }, | ||
| 374 | + // 移除图片 | ||
| 375 | + handleRemove(file) { | ||
| 376 | + const { imgPath } = file | ||
| 377 | + this.form.imgs = this.form.imgs.filter(item => { | ||
| 378 | + return item.imgPath !== imgPath | ||
| 379 | + }) | ||
| 380 | + }, | ||
| 381 | + handleRemove1(file) { | ||
| 382 | + file.image = '' | ||
| 383 | + }, | ||
| 384 | + handlePictureCardPreview(file) { | ||
| 385 | + this.dialogImageUrl = file.imgPath | ||
| 386 | + this.dialogVisible = true | ||
| 387 | + }, | ||
| 388 | + handleImageSuccess1(response, file, fileList) { | ||
| 389 | + const url = response.data.url | ||
| 390 | + fileList[0].image = url | ||
| 391 | + }, | ||
| 392 | + del(row, index, arr) { | ||
| 393 | + console.log(row, index) | ||
| 394 | + // this.form.skuList.splice(index, 1); | ||
| 395 | + // console.log(this.form.skuAttrList); | ||
| 396 | + // console.log(this.form.skuList); | ||
| 397 | + console.log(arr) | ||
| 398 | + }, | ||
| 399 | + // | ||
| 400 | + changeAttrStyle(index) { | ||
| 401 | + console.log(index) | ||
| 402 | + console.log(this.form) | ||
| 403 | + // if (index === 0) { | ||
| 404 | + // this.form.skuAttrList = [] | ||
| 405 | + // } | ||
| 406 | + }, | ||
| 407 | + addSkuAttrList() { | ||
| 408 | + this.form.skuAttrList.push({ | ||
| 409 | + code: '', | ||
| 410 | + skuName: '', | ||
| 411 | + values: [ | ||
| 412 | + { | ||
| 413 | + skuValue: '', | ||
| 414 | + valueCode: '', | ||
| 415 | + image: '', | ||
| 416 | + isDelete: 0, | ||
| 417 | + sortOrder: 0 | ||
| 418 | + } | ||
| 419 | + ], | ||
| 420 | + isDelete: 0, | ||
| 421 | + needImg: 0, | ||
| 422 | + sortOrder: 0 | ||
| 423 | + }) | ||
| 424 | + }, | ||
| 425 | + addAttrValue(index) { | ||
| 426 | + this.form.skuAttrList[index].values.push({ | ||
| 427 | + skuValue: '', | ||
| 428 | + valueCode: '', | ||
| 429 | + image: '' | ||
| 430 | + }) | ||
| 431 | + }, | ||
| 432 | + // 删除规格值 | ||
| 433 | + delValue(index, index1) { | ||
| 434 | + const newList = JSON.parse(JSON.stringify(this.form.skuAttrList[index])) | ||
| 435 | + const valueObj = { | ||
| 436 | + code: newList.code, | ||
| 437 | + skuId: newList.skuId, | ||
| 438 | + valueCode: newList.values[index1].valueCode | ||
| 439 | + } | ||
| 440 | + this.form.deletes.push(valueObj) | ||
| 441 | + this.form.skuAttrList[index].values.splice(index1, 1) | ||
| 442 | + }, | ||
| 443 | + // 删除规格名 | ||
| 444 | + delSkuAttrList(index) { | ||
| 445 | + const newList = JSON.parse(JSON.stringify(this.form.skuAttrList[index])) | ||
| 446 | + newList.values.forEach(item => { | ||
| 447 | + const valueObj = { | ||
| 448 | + code: newList.code, | ||
| 449 | + skuId: newList.skuId, | ||
| 450 | + valueCode: '' | ||
| 451 | + } | ||
| 452 | + valueObj.valueCode = item.valueCode | ||
| 453 | + this.form.deletes.push(valueObj) | ||
| 454 | + }) | ||
| 455 | + this.form.skuAttrList.splice(index, 1) | ||
| 456 | + }, | ||
| 457 | + delAttrValue1(row, index, arr) { | ||
| 458 | + | ||
| 459 | + }, | ||
| 460 | + skuFormat() { | ||
| 461 | + const skuListArray = [] | ||
| 462 | + const result = { | ||
| 463 | + isDelete: 0, | ||
| 464 | + productId: '', | ||
| 465 | + skuAttrCodeDTOList: [ | ||
| 466 | + { | ||
| 467 | + code: '', | ||
| 468 | + valueCode: '' | ||
| 469 | + } | ||
| 470 | + ], | ||
| 471 | + sku: '', | ||
| 472 | + skuImg: '', | ||
| 473 | + price: 0, | ||
| 474 | + originalPrice: 0, | ||
| 475 | + stockNumber: 0, | ||
| 476 | + weight: 0 | ||
| 477 | + } | ||
| 478 | + const doExchange = (arr, depth) => { | ||
| 479 | + const map = { | ||
| 480 | + arr: [] | ||
| 481 | + } | ||
| 482 | + for (var i = 0; i < arr[depth].length; i++) { | ||
| 483 | + map.arr.push(arr[depth][i]) | ||
| 484 | + const { code, valueCode, attrId } = arr[depth][i] | ||
| 485 | + result.skuAttrCodeDTOList[depth] = { | ||
| 486 | + code, | ||
| 487 | + valueCode, | ||
| 488 | + attrId | ||
| 489 | + } | ||
| 490 | + if (depth !== arr.length - 1) { | ||
| 491 | + doExchange(arr, depth + 1) | ||
| 492 | + } else { | ||
| 493 | + skuListArray.push(JSON.parse(JSON.stringify(result))) | ||
| 494 | + } | ||
| 495 | + } | ||
| 496 | + } | ||
| 497 | + // this.form.skuList = skuListArray | ||
| 498 | + // 获取规格值的所有组合 | ||
| 499 | + const values = [] | ||
| 500 | + this.form.skuAttrList.map((skuItem, index) => { | ||
| 501 | + const attrList = [] | ||
| 502 | + skuItem.code = skuItem.code || 'attr_code_' + index | ||
| 503 | + const { code } = skuItem | ||
| 504 | + skuItem.values && | ||
| 505 | + skuItem.values.map((attrItem, index1) => { | ||
| 506 | + attrItem.valueCode = skuItem.valueCode || code + '_value_' + index1 | ||
| 507 | + const skuId = attrItem.skuId | ||
| 508 | + const attrId = attrItem.attrId | ||
| 509 | + if (attrItem.skuValue) { | ||
| 510 | + attrList.push({ | ||
| 511 | + skuId, | ||
| 512 | + attrId, | ||
| 513 | + code, | ||
| 514 | + valueCode: attrItem.valueCode | ||
| 515 | + }) | ||
| 516 | + } | ||
| 517 | + }) | ||
| 518 | + if (attrList.length) { | ||
| 519 | + values.push(attrList) | ||
| 520 | + } | ||
| 521 | + }) | ||
| 522 | + // 相互组合 | ||
| 523 | + if (values.length) { | ||
| 524 | + doExchange(values, 0) | ||
| 525 | + } | ||
| 526 | + this.form.skuList = skuListArray.map(sku1 => { | ||
| 527 | + const { skuAttrList, skuAttrCodeDTOList } = sku1 | ||
| 528 | + const skuAttrList1 = skuAttrCodeDTOList || skuAttrList | ||
| 529 | + const skuMap = this.form.skuList.filter(sku2 => { | ||
| 530 | + const skuAttrList2 = sku2.skuAttrList | ||
| 531 | + sku2.skuAttrCodeDTOList = skuAttrList2 | ||
| 532 | + if (!skuAttrList2) return false | ||
| 533 | + const ids = [] | ||
| 534 | + skuAttrList1.filter(item => ids.push(item.id)) | ||
| 535 | + const result = skuAttrList2.every( | ||
| 536 | + item => ids.indexOf(item.attrValueId) !== -1 | ||
| 537 | + ) | ||
| 538 | + return result | ||
| 539 | + }) | ||
| 540 | + let selectMap = sku1 | ||
| 541 | + if (skuMap && skuMap.length) { | ||
| 542 | + selectMap = JSON.parse(JSON.stringify(skuMap[0])) | ||
| 543 | + selectMap.skuAttrCodeDTOList = skuAttrCodeDTOList | ||
| 544 | + } | ||
| 545 | + return selectMap | ||
| 546 | + }) | ||
| 547 | + } | ||
| 548 | + } | ||
| 549 | +} | ||
| 550 | +</script> | ||
| 551 | +<style lang="scss" scoped> | ||
| 552 | +@import url("../../../styles/elDialog.scss"); | ||
| 553 | +.style-information-component { | ||
| 554 | + width: 100%; | ||
| 555 | + min-height: 300px; | ||
| 556 | + padding: 24px; | ||
| 557 | + background-color: rgb(255, 255, 255); | ||
| 558 | + .el-form-item { | ||
| 559 | + margin-bottom: 10px; | ||
| 560 | + } | ||
| 561 | + .attr-value-list { | ||
| 562 | + display: flex; | ||
| 563 | + flex-wrap: wrap; | ||
| 564 | + .main-diagram { | ||
| 565 | + width: 180px; | ||
| 566 | + .span-wrap { | ||
| 567 | + position: relative; | ||
| 568 | + display: inline-block; | ||
| 569 | + margin-top: 10px; | ||
| 570 | + .attr-actions { | ||
| 571 | + line-height: 100px; | ||
| 572 | + position: absolute; | ||
| 573 | + width: 100%; | ||
| 574 | + height: 100%; | ||
| 575 | + left: 0; | ||
| 576 | + top: 0; | ||
| 577 | + cursor: default; | ||
| 578 | + text-align: center; | ||
| 579 | + color: #fff; | ||
| 580 | + opacity: 0; | ||
| 581 | + font-size: 20px; | ||
| 582 | + background-color: rgba(0, 0, 0, 0.5); | ||
| 583 | + -webkit-transition: opacity 0.3s; | ||
| 584 | + transition: opacity 0.3s; | ||
| 585 | + z-index: 1; | ||
| 586 | + &:hover { | ||
| 587 | + opacity: 1; | ||
| 588 | + .attr-preview { | ||
| 589 | + display: inline-block; | ||
| 590 | + } | ||
| 591 | + i { | ||
| 592 | + color: #fff; | ||
| 593 | + font-size: 20px; | ||
| 594 | + } | ||
| 595 | + } | ||
| 596 | + } | ||
| 597 | + .attr-preview { | ||
| 598 | + display: none; | ||
| 599 | + cursor: pointer; | ||
| 600 | + font-size: 20px; | ||
| 601 | + color: #fff; | ||
| 602 | + } | ||
| 603 | + .attr-delete { | ||
| 604 | + margin-left: 15px; | ||
| 605 | + color: #fff; | ||
| 606 | + } | ||
| 607 | + } | ||
| 608 | + .attr-value-img { | ||
| 609 | + width: 100%; | ||
| 610 | + height: 100%; | ||
| 611 | + img { | ||
| 612 | + width: 100%; | ||
| 613 | + height: 100%; | ||
| 614 | + object-fit: contain; | ||
| 615 | + } | ||
| 616 | + } | ||
| 617 | + } | ||
| 618 | + } | ||
| 619 | + .m-8 { | ||
| 620 | + margin-right: 8px; | ||
| 621 | + } | ||
| 622 | + .upload-btn { | ||
| 623 | + box-sizing: border-box; | ||
| 624 | + display: flex; | ||
| 625 | + align-items: center; | ||
| 626 | + justify-content: center; | ||
| 627 | + width: 100%; | ||
| 628 | + height: 110px; | ||
| 629 | + cursor: pointer; | ||
| 630 | + border: 2px dashed #2e60f8; | ||
| 631 | + border-radius: 2px; | ||
| 632 | + background-color: #f8f9fb; | ||
| 633 | + text-align: center; | ||
| 634 | + font-size: 20px; | ||
| 635 | + color: #2e60f8; | ||
| 636 | + i { | ||
| 637 | + color: #2e60f8; | ||
| 638 | + font-size: 20px; | ||
| 639 | + } | ||
| 640 | + .upload-title { | ||
| 641 | + margin-left: 10px; | ||
| 642 | + font-size: 14px; | ||
| 643 | + } | ||
| 644 | + } | ||
| 645 | + .upload-wrap { | ||
| 646 | + margin-bottom: 25px; | ||
| 647 | + .el-upload-list__item { | ||
| 648 | + transition: none !important; | ||
| 649 | + } | ||
| 650 | + .el-upload, | ||
| 651 | + .el-upload-list__item { | ||
| 652 | + width: 100px; | ||
| 653 | + height: 100px; | ||
| 654 | + line-height: 100px; | ||
| 655 | + } | ||
| 656 | + .el-progress, | ||
| 657 | + .el-progress-circle { | ||
| 658 | + width: 80px !important; | ||
| 659 | + height: 80px !important; | ||
| 660 | + } | ||
| 661 | + } | ||
| 662 | + .sku-attr-list { | ||
| 663 | + .el-input { | ||
| 664 | + width: 180px; | ||
| 665 | + } | ||
| 666 | + } | ||
| 667 | + .single-style { | ||
| 668 | + .el-input { | ||
| 669 | + max-width: 180px; | ||
| 670 | + } | ||
| 671 | + } | ||
| 672 | + .add-attr-btn { | ||
| 673 | + margin-bottom: 25px; | ||
| 674 | + } | ||
| 675 | + .check-image-dialog { | ||
| 676 | + .el-dialog { | ||
| 677 | + margin-top: 25px; | ||
| 678 | + .el-dialog__body { | ||
| 679 | + img { | ||
| 680 | + max-width: 100%; | ||
| 681 | + max-height: 100%; | ||
| 682 | + height: 500px; | ||
| 683 | + object-fit: contain; | ||
| 684 | + } | ||
| 685 | + } | ||
| 686 | + } | ||
| 687 | + } | ||
| 688 | + .delImg{ | ||
| 689 | + position: absolute; | ||
| 690 | + top: 12px; | ||
| 691 | + margin-left: -24px | ||
| 692 | + } | ||
| 693 | + .delImg:hover{ | ||
| 694 | + border-radius: 50%; | ||
| 695 | + color: #ffffff; | ||
| 696 | + background:#2e60f8; | ||
| 697 | + cursor: pointer; | ||
| 698 | + } | ||
| 699 | +} | ||
| 700 | +</style> |
merchant-web-master/src/views/stockControl/inventory/addComponent.vue
| 1 | <template> | 1 | <template> |
| 2 | <div class="style-information-component"> | 2 | <div class="style-information-component"> |
| 3 | - <el-form-item label="商品图片" /> | ||
| 4 | - <div class="upload-wrap"> | ||
| 5 | - <upimg filePath="bueniss" :value="imgsGeshi(form.imgs)" inputtype="coverImage" :limit="5" | ||
| 6 | - @changimg="e=>changimg(e,'imgs')"></upimg> | ||
| 7 | - <!-- <el-upload | ||
| 8 | - list-type="picture-card" | ||
| 9 | - :on-preview="handlePictureCardPreview" | ||
| 10 | - :on-remove="handleRemove" | ||
| 11 | - :headers="headers" | ||
| 12 | - :data="dataObj" | ||
| 13 | - :file-list="form.imgs" | ||
| 14 | - :limit="20" | ||
| 15 | - :on-success="handleImageSuccess" | ||
| 16 | - :action="action" | ||
| 17 | - > | ||
| 18 | - <i slot="default" class="el-icon-plus" /> | ||
| 19 | - <div slot="file" slot-scope="{ file }"> | ||
| 20 | - <img class="el-upload-list__item-thumbnail" :src="file.imgPath"> | ||
| 21 | - <span class="el-upload-list__item-actions"> | ||
| 22 | - <span class="el-upload-list__item-preview" @click="handlePictureCardPreview(file)"> | ||
| 23 | - <i class="el-icon-zoom-in" /> | ||
| 24 | - </span> | ||
| 25 | - <span class="el-upload-list__item-delete" @click="handleRemove(file)"> | ||
| 26 | - <i class="el-icon-delete" /> | 3 | + <el-form-item label="商品图片" > |
| 4 | + <div class="upload-wrap"> | ||
| 5 | + <upimg filePath="bueniss" :value="imgsGeshi(form.imgs)" inputtype="coverImage" :limit="5" | ||
| 6 | + @changimg="e=>changimg(e,'imgs')"></upimg> | ||
| 7 | + <!-- <el-upload | ||
| 8 | + list-type="picture-card" | ||
| 9 | + :on-preview="handlePictureCardPreview" | ||
| 10 | + :on-remove="handleRemove" | ||
| 11 | + :headers="headers" | ||
| 12 | + :data="dataObj" | ||
| 13 | + :file-list="form.imgs" | ||
| 14 | + :limit="20" | ||
| 15 | + :on-success="handleImageSuccess" | ||
| 16 | + :action="action" | ||
| 17 | + > | ||
| 18 | + <i slot="default" class="el-icon-plus" /> | ||
| 19 | + <div slot="file" slot-scope="{ file }"> | ||
| 20 | + <img class="el-upload-list__item-thumbnail" :src="file.imgPath"> | ||
| 21 | + <span class="el-upload-list__item-actions"> | ||
| 22 | + <span class="el-upload-list__item-preview" @click="handlePictureCardPreview(file)"> | ||
| 23 | + <i class="el-icon-zoom-in" /> | ||
| 24 | + </span> | ||
| 25 | + <span class="el-upload-list__item-delete" @click="handleRemove(file)"> | ||
| 26 | + <i class="el-icon-delete" /> | ||
| 27 | + </span> | ||
| 27 | </span> | 28 | </span> |
| 28 | - </span> | ||
| 29 | - </div> | ||
| 30 | - </el-upload> --> | ||
| 31 | - </div> | ||
| 32 | - <el-form-item label="款式设置"> | ||
| 33 | - <el-radio-group v-model="form.attrStyle" @change="changeAttrStyle"> | ||
| 34 | - <el-radio :label="0">单款式</el-radio> | ||
| 35 | - <el-radio :label="1">多款式</el-radio> | ||
| 36 | - </el-radio-group> | 29 | + </div> |
| 30 | + </el-upload> --> | ||
| 31 | + </div> | ||
| 37 | </el-form-item> | 32 | </el-form-item> |
| 38 | - <div class="style-container"> | 33 | + <el-form-item label="规格设置"> |
| 34 | + <div class="style-container" > | ||
| 39 | <div v-if="form.attrStyle === 0" class="single-style"> | 35 | <div v-if="form.attrStyle === 0" class="single-style"> |
| 40 | <el-table | 36 | <el-table |
| 41 | :data="skuList" | 37 | :data="skuList" |
| 42 | - :header-cell-style="{fontSize: '14px',color:'#0009',fontWeight: 'normal',backgroundColor:'#F2F3F5'}" | 38 | + |
| 39 | + :header-cell-style="{fontSize: '14px',color:'#0009',fontWeight: 'normal',backgroundColor:'#F2F3F5'}" | ||
| 43 | > | 40 | > |
| 44 | <el-table-column label="规格"> | 41 | <el-table-column label="规格"> |
| 45 | <template slot-scope="scope"> | 42 | <template slot-scope="scope"> |
| 46 | <el-input v-model="singleStyle.skuValue" :sss="scope" maxlength="40" /> | 43 | <el-input v-model="singleStyle.skuValue" :sss="scope" maxlength="40" /> |
| 47 | </template> | 44 | </template> |
| 48 | </el-table-column> | 45 | </el-table-column> |
| 49 | - <el-table-column label="售价"> | 46 | + <el-table-column label="售价(/元)"> |
| 50 | <template slot-scope="scope"> | 47 | <template slot-scope="scope"> |
| 51 | <!-- <el-input v-model="scope.row.price" type="number" oninput="value=value.replace(/-/, '')" /> --> | 48 | <!-- <el-input v-model="scope.row.price" type="number" oninput="value=value.replace(/-/, '')" /> --> |
| 52 | <el-input-number v-model="scope.row.price" :controls="false" :min="0" :precision="2" :step="0.01" /> | 49 | <el-input-number v-model="scope.row.price" :controls="false" :min="0" :precision="2" :step="0.01" /> |
| 53 | </template> | 50 | </template> |
| 54 | </el-table-column> | 51 | </el-table-column> |
| 55 | - <el-table-column label="原价"> | 52 | + <el-table-column label="原价(/元)"> |
| 56 | <template slot-scope="scope"> | 53 | <template slot-scope="scope"> |
| 57 | <!-- <el-input v-model="scope.row.originalPrice" type="number" oninput="value=value.replace(/-/, '')" /> --> | 54 | <!-- <el-input v-model="scope.row.originalPrice" type="number" oninput="value=value.replace(/-/, '')" /> --> |
| 58 | <el-input-number v-model="scope.row.originalPrice" :controls="false" :min="0" :precision="2" :step="0.01" /> | 55 | <el-input-number v-model="scope.row.originalPrice" :controls="false" :min="0" :precision="2" :step="0.01" /> |
| @@ -131,76 +128,28 @@ | @@ -131,76 +128,28 @@ | ||
| 131 | </div> | 128 | </div> |
| 132 | </div> | 129 | </div> |
| 133 | </div> | 130 | </div> |
| 134 | - <div class="tableBtn greens" style="margin-left: 10px;" @click="addAttrValue(index)">添加</div> | 131 | + <el-button type="primary" style="margin-left: 10px;" @click="addAttrValue(index)">添加</el-button> |
| 135 | </div> | 132 | </div> |
| 136 | </el-form-item> | 133 | </el-form-item> |
| 137 | </div> | 134 | </div> |
| 138 | - <el-button class="add-attr-btn" style="background-color: #3F9B6A;color: #fff" @click="addSkuAttrList">添加规格</el-button> | ||
| 139 | - <el-table | ||
| 140 | - :data="skuList" | ||
| 141 | - :header-cell-style="{fontSize: '14px',color:'#0009',fontWeight: 'normal',backgroundColor:'#F2F3F5'}" | ||
| 142 | - > | ||
| 143 | - <el-table-column | ||
| 144 | - v-for="(skuAttr, index) in skuAttrName" | ||
| 145 | - :key="index" | ||
| 146 | - :label="skuAttr.skuName" | ||
| 147 | - > | ||
| 148 | - <template slot-scope="scope"> | ||
| 149 | - {{ | ||
| 150 | - scope.row.skuAttrCodeDTOList && | ||
| 151 | - scope.row.skuAttrCodeDTOList[index] | ||
| 152 | - | attrValueFilter(form.skuAttrList) | ||
| 153 | - }} | ||
| 154 | - </template> | ||
| 155 | - </el-table-column> | ||
| 156 | - <el-table-column label="售价"> | ||
| 157 | - <template slot-scope="scope"> | ||
| 158 | - <!-- <el-input v-model="scope.row.price" type="number" oninput="value=value.replace(/-/, '')" /> --> | ||
| 159 | - <el-input-number v-model="scope.row.price" :controls="false" :min="0" :precision="2" :step="0.01" /> | ||
| 160 | - </template> | ||
| 161 | - </el-table-column> | ||
| 162 | - <el-table-column label="原价"> | ||
| 163 | - <template slot-scope="scope"> | ||
| 164 | - <!-- <el-input v-model="scope.row.originalPrice" type="number" oninput="value=value.replace(/-/, '')" /> --> | ||
| 165 | - <el-input-number v-model="scope.row.originalPrice" :controls="false" :min="0" :precision="2" :step="0.01" /> | ||
| 166 | - </template> | ||
| 167 | - </el-table-column> | ||
| 168 | - <!-- <el-table-column label="成本"> | ||
| 169 | - <template slot-scope="scope"> | ||
| 170 | - <el-input-number v-model="scope.row.cost" :controls="false" :min="0" :precision="2" :step="0.01" /> | ||
| 171 | - </template> | ||
| 172 | - </el-table-column> --> | ||
| 173 | - <el-table-column label="库存"> | ||
| 174 | - <template slot-scope="scope"> | ||
| 175 | - <!-- <el-input v-model="scope.row.stockNumber" type="number" oninput="value=value.replace(/[^\d]/g,'')" /> --> | ||
| 176 | - <el-input-number v-model="scope.row.stockNumber" :controls="false" :min="0" :precision="0" /> | ||
| 177 | - </template> | ||
| 178 | - </el-table-column> | ||
| 179 | - <el-table-column label="重量(KG)"> | ||
| 180 | - <template slot-scope="scope"> | ||
| 181 | - <!-- <el-input v-model="scope.row.weight" type="number" oninput="value=value.replace(/-/, '')" /> --> | ||
| 182 | - <el-input-number v-model="scope.row.weight" :controls="false" :min="0" :precision="6" :step="0.01" /> | ||
| 183 | - </template> | ||
| 184 | - </el-table-column> | ||
| 185 | - <el-table-column label="国际条码"> | ||
| 186 | - <template slot-scope="scope"> | ||
| 187 | - <el-input v-model="scope.row.sku" /> | ||
| 188 | - </template> | ||
| 189 | - </el-table-column> | ||
| 190 | - <!-- <el-table-column label="操作"> | ||
| 191 | - <template slot-scope="scope"> | ||
| 192 | - <el-button type="text" @click="delAttrValue(scope.row,scope.$index,scope.row,scope)">删除</el-button> | ||
| 193 | - </template> | ||
| 194 | - </el-table-column> --> | ||
| 195 | - </el-table> | 135 | + <el-button class="add-attr-btn" type="primary" @click="addSkuAttrList">添加规格</el-button> |
| 136 | + | ||
| 196 | </div> | 137 | </div> |
| 197 | </div> | 138 | </div> |
| 139 | + </el-form-item> | ||
| 140 | + <!-- <el-form-item label="款式设置" > | ||
| 141 | + <el-radio-group v-model="form.attrStyle" @change="changeAttrStyle"> | ||
| 142 | + <el-radio :label="0">单款式</el-radio> | ||
| 143 | + <el-radio :label="1">多款式</el-radio> | ||
| 144 | + </el-radio-group> | ||
| 145 | + </el-form-item> --> | ||
| 146 | + | ||
| 198 | <el-dialog | 147 | <el-dialog |
| 199 | :append-to-body="true" | 148 | :append-to-body="true" |
| 200 | :visible.sync="dialogVisible" | 149 | :visible.sync="dialogVisible" |
| 150 | + class="check-image-dialog" | ||
| 201 | title="查看图片" | 151 | title="查看图片" |
| 202 | - center | ||
| 203 | - custom-class="bian_css" | 152 | + center="center" |
| 204 | > | 153 | > |
| 205 | <img width="100%" :src="dialogImageUrl" alt> | 154 | <img width="100%" :src="dialogImageUrl" alt> |
| 206 | </el-dialog> | 155 | </el-dialog> |
merchant-web-master/src/views/stockControl/inventory/index.vue
| 1 | <!-- --> | 1 | <!-- --> |
| 2 | <template> | 2 | <template> |
| 3 | <div style="padding: 0 10px;background-color:#f7f7f7;"> | 3 | <div style="padding: 0 10px;background-color:#f7f7f7;"> |
| 4 | - <div class="pending"> | 4 | + <div class="pending" v-if ="ontype == '1'"> |
| 5 | <!-- 搜索 --> | 5 | <!-- 搜索 --> |
| 6 | <div class="formSearch" style="margin-bottom:10px"> | 6 | <div class="formSearch" style="margin-bottom:10px"> |
| 7 | <el-form :inline="true" :model="formInline" class="demo-form-inline"> | 7 | <el-form :inline="true" :model="formInline" class="demo-form-inline"> |
| 8 | <el-form-item label="商品名称"> | 8 | <el-form-item label="商品名称"> |
| 9 | - <el-input v-model="formInline.search" placeholder="请输入商品名称" /> | 9 | + <el-input v-model="formInline.search" placeholder="请输入商品名称" /> |
| 10 | </el-form-item> | 10 | </el-form-item> |
| 11 | <el-form-item label="上架状态"> | 11 | <el-form-item label="上架状态"> |
| 12 | - <el-select v-model="formInline.shelveState" placeholder="请选择上架状态" > | 12 | + <el-select v-model="formInline.shelveState" placeholder="请选择上架状态"> |
| 13 | <el-option label="全部" :value="null" /> | 13 | <el-option label="全部" :value="null" /> |
| 14 | <el-option label="上架" value="1" /> | 14 | <el-option label="上架" value="1" /> |
| 15 | <el-option label="下架" value="0" /> | 15 | <el-option label="下架" value="0" /> |
| 16 | </el-select> | 16 | </el-select> |
| 17 | </el-form-item> | 17 | </el-form-item> |
| 18 | <el-form-item label="官方分类"> | 18 | <el-form-item label="官方分类"> |
| 19 | - <el-cascader | ||
| 20 | - | ||
| 21 | - v-model="formInline.classifyId" | ||
| 22 | - :options="categoryList" | ||
| 23 | - clearable | ||
| 24 | - :props="{ | 19 | + <el-cascader v-model="formInline.classifyId" :options="categoryList" clearable :props="{ |
| 25 | checkStrictly: true, | 20 | checkStrictly: true, |
| 26 | expandTrigger: 'hover', | 21 | expandTrigger: 'hover', |
| 27 | label:'categoryName', | 22 | label:'categoryName', |
| 28 | value:'id', | 23 | value:'id', |
| 29 | children:'childs' | 24 | children:'childs' |
| 30 | - }" | ||
| 31 | - /> | 25 | + }" /> |
| 32 | </el-form-item> | 26 | </el-form-item> |
| 33 | </el-form> | 27 | </el-form> |
| 34 | <div> | 28 | <div> |
| 35 | - <el-button style="background-color: #3F9B6A;color: #fff" @click="search" >查询</el-button> | ||
| 36 | - <el-button @click="clear" class="buttonHover" | 29 | + <el-button style="background-color: #3F9B6A;color: #fff" @click="search">查询</el-button> |
| 30 | + <el-button @click="clear" class="buttonHover" | ||
| 37 | style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;">重置</el-button> | 31 | style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;">重置</el-button> |
| 38 | </div> | 32 | </div> |
| 39 | 33 | ||
| 40 | </div> | 34 | </div> |
| 41 | <div style="margin-bottom:20px;"> | 35 | <div style="margin-bottom:20px;"> |
| 42 | - <el-button style="background-color: #3F9B6A;color: #fff" @click="rukdengji" >入库登记</el-button> | ||
| 43 | - <el-button style="background-color: #3F9B6A;color: #fff" @click="shopzuhe" >商品组合</el-button> | ||
| 44 | - <el-button style="background-color: #3F9B6A;color: #fff" @click="productDataExport" >导出商品</el-button> | 36 | + <!-- <el-button style="background-color: #3F9B6A;color: #fff" @click="rukdengji" >入库登记</el-button> --> |
| 37 | + <el-button style="background-color: #3F9B6A;color: #fff" @click="rukdengji">补货</el-button> | ||
| 38 | + <el-button style="background-color: #3F9B6A;color: #fff" @click="shopzuhe">商品组合</el-button> | ||
| 39 | + <el-button style="background-color: #3F9B6A;color: #fff" @click="productDataExport">导出商品</el-button> | ||
| 45 | </div> | 40 | </div> |
| 46 | <!-- 表格 --> | 41 | <!-- 表格 --> |
| 47 | <div class="tableBox"> | 42 | <div class="tableBox"> |
| 48 | - <el-table | ||
| 49 | - ref="multipleTable" | ||
| 50 | - :data="tableData" | ||
| 51 | - tooltip-effect="dark" | ||
| 52 | - @selection-change="handleSelectionChange" | ||
| 53 | - :header-cell-style="{fontSize: '14px',color:'#0009',fontWeight: 'normal',backgroundColor:'#F2F3F5'}" | ||
| 54 | - > | ||
| 55 | - <el-table-column | ||
| 56 | - type="selection" | ||
| 57 | - v-if="teble_sel" | ||
| 58 | - min-width="4%"> | 43 | + <el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" @selection-change="handleSelectionChange" |
| 44 | + :header-cell-style="{fontSize: '14px',color:'#0009',fontWeight: 'normal',backgroundColor:'#F2F3F5'}"> | ||
| 45 | + <el-table-column type="selection" v-if="teble_sel" min-width="4%"> | ||
| 59 | </el-table-column> | 46 | </el-table-column> |
| 60 | <el-table-column prop="productId" label="商品id" show-overflow-tooltip /> | 47 | <el-table-column prop="productId" label="商品id" show-overflow-tooltip /> |
| 61 | <el-table-column label="商品主图" width="150" align="center"> | 48 | <el-table-column label="商品主图" width="150" align="center"> |
| @@ -85,10 +72,10 @@ | @@ -85,10 +72,10 @@ | ||
| 85 | <el-table-column prop="reject" label="驳回原因" show-overflow-tooltip /> | 72 | <el-table-column prop="reject" label="驳回原因" show-overflow-tooltip /> |
| 86 | <el-table-column prop="registrationStatus" label="登记状态" show-overflow-tooltip> | 73 | <el-table-column prop="registrationStatus" label="登记状态" show-overflow-tooltip> |
| 87 | <template slot-scope="scope"> | 74 | <template slot-scope="scope"> |
| 88 | - <span v-if="scope.row.registrationStatus==''">未入库</span> | ||
| 89 | - <span v-if="scope.row.registrationStatus==1">已入库</span> | ||
| 90 | - </template> | ||
| 91 | - </el-table-column> | 75 | + <span v-if="scope.row.registrationStatus==''">未入库</span> |
| 76 | + <span v-if="scope.row.registrationStatus==1">已入库</span> | ||
| 77 | + </template> | ||
| 78 | + </el-table-column> | ||
| 92 | <el-table-column prop="createTime" label="创建时间" width="180" /> | 79 | <el-table-column prop="createTime" label="创建时间" width="180" /> |
| 93 | <el-table-column label="操作" width="200" fixed="right"> | 80 | <el-table-column label="操作" width="200" fixed="right"> |
| 94 | <template slot-scope="scope"> | 81 | <template slot-scope="scope"> |
| @@ -96,71 +83,49 @@ | @@ -96,71 +83,49 @@ | ||
| 96 | <div class="tableBtn greens" @click="edit(scope.row)">编辑</div> | 83 | <div class="tableBtn greens" @click="edit(scope.row)">编辑</div> |
| 97 | <div v-if="scope.row.shelveState==0" class="tableBtn greens" @click="down(scope.row)">上架</div> | 84 | <div v-if="scope.row.shelveState==0" class="tableBtn greens" @click="down(scope.row)">上架</div> |
| 98 | <div v-if="scope.row.shelveState==1" class="tableBtn greens" @click="down(scope.row)">下架</div> | 85 | <div v-if="scope.row.shelveState==1" class="tableBtn greens" @click="down(scope.row)">下架</div> |
| 99 | - <div v-if="scope.row.combinationId != '' && scope.row.stockNumber != 0" class="tableBtn greens" @click="chaiFen(scope.row)" >拆分</div> | ||
| 100 | - <div @click="setVipPrice(scope.row)" v-if="scope.row.shelveState==1" class="tableBtn greens" >设置会员价</div> | 86 | + <div v-if="scope.row.combinationId != '' && scope.row.stockNumber != 0" class="tableBtn greens" |
| 87 | + @click="chaiFen(scope.row)">拆分</div> | ||
| 88 | + <div @click="setVipPrice(scope.row)" v-if="scope.row.shelveState==1" class="tableBtn greens">设置会员价</div> | ||
| 101 | <div v-if="scope.row.shelveState!=1" class="tableBtn greens" @click="del(scope.row)">删除</div> | 89 | <div v-if="scope.row.shelveState!=1" class="tableBtn greens" @click="del(scope.row)">删除</div> |
| 102 | </div> | 90 | </div> |
| 103 | </template> | 91 | </template> |
| 104 | </el-table-column> | 92 | </el-table-column> |
| 105 | </el-table> | 93 | </el-table> |
| 106 | <div class="fenye"> | 94 | <div class="fenye"> |
| 107 | - <el-pagination | ||
| 108 | - :current-page="formInline.page" | ||
| 109 | - :page-sizes="[10, 20, 50, 100]" | ||
| 110 | - :page-size="10" | ||
| 111 | - background | ||
| 112 | - small | ||
| 113 | - layout="prev, pager, next,total" | ||
| 114 | - :total="total" | ||
| 115 | - @size-change="handleSizeChange" | ||
| 116 | - @current-change="handleCurrentChange" | ||
| 117 | - /> | 95 | + <el-pagination :current-page="formInline.page" :page-sizes="[10, 20, 50, 100]" :page-size="10" background |
| 96 | + small layout="prev, pager, next,total" :total="total" @size-change="handleSizeChange" | ||
| 97 | + @current-change="handleCurrentChange" /> | ||
| 118 | </div> | 98 | </div> |
| 119 | - <div style="padding: 5px 10px 5px 20px;border:1px solid #EBEEF5;display: flex;justify-content: space-between;margin-top: 10px;" v-if="teble_sel"> | ||
| 120 | - <div style="font-size: 14px;"> | ||
| 121 | - <span>已选择{{this.zuheNum}}项</span> | ||
| 122 | - <div | ||
| 123 | - class="tableBtn greens" | ||
| 124 | - style="color: #3F9B6A;font-size: 14px;margin-left: 10px;" | ||
| 125 | - @click="toggleSelection" | ||
| 126 | - >清楚选项</div> | ||
| 127 | - </div> | ||
| 128 | - <div> | ||
| 129 | - <el-button @click="zuheShop(index)" style="background-color: #3F9B6A;color: #fff;">{{index==1?'确定登记':'确定组合'}}</el-button> | ||
| 130 | - <el-button @click="selClose" class="buttonHover" | ||
| 131 | - style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;">取消</el-button> | ||
| 132 | - </div> | 99 | + <div |
| 100 | + style="padding: 5px 10px 5px 20px;border:1px solid #EBEEF5;display: flex;justify-content: space-between;margin-top: 10px;" | ||
| 101 | + v-if="teble_sel"> | ||
| 102 | + <div style="font-size: 14px;"> | ||
| 103 | + <span>已选择{{this.zuheNum}}项</span> | ||
| 104 | + <div class="tableBtn greens" style="color: #3F9B6A;font-size: 14px;margin-left: 10px;" | ||
| 105 | + @click="toggleSelection">清楚选项</div> | ||
| 106 | + </div> | ||
| 107 | + <div> | ||
| 108 | + <el-button @click="zuheShop(index)" | ||
| 109 | + style="background-color: #3F9B6A;color: #fff;">{{index==1?'确定登记':'确定组合'}}</el-button> | ||
| 110 | + <el-button @click="selClose" class="buttonHover" | ||
| 111 | + style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;">取消</el-button> | ||
| 112 | + </div> | ||
| 133 | </div> | 113 | </div> |
| 134 | </div> | 114 | </div> |
| 135 | </div> | 115 | </div> |
| 136 | 116 | ||
| 137 | <!-- 新增/修改商品弹窗 --> | 117 | <!-- 新增/修改商品弹窗 --> |
| 138 | - <el-dialog | ||
| 139 | - :title="!commId ? '新增商品' : '登记商品'" | ||
| 140 | - :visible.sync="commidyVisible" | ||
| 141 | - width="70%" | ||
| 142 | - center | ||
| 143 | - custom-class="bian_css" | ||
| 144 | - top="6vh" | ||
| 145 | - :close-on-click-modal="false" | ||
| 146 | - @before-close="closeModal" | ||
| 147 | - @close="closeModal" | ||
| 148 | - > | ||
| 149 | - <CommAdd | ||
| 150 | - ref="child" | ||
| 151 | - :show-tinymce="showTinymce" | ||
| 152 | - :product-id="commId" | ||
| 153 | - @cancel="cancelForm" | ||
| 154 | - :message="parentMessage" | ||
| 155 | - /> | ||
| 156 | - </el-dialog> | 118 | + <!-- <el-dialog :title="!commId ? '新增商品' : '登记商品'" :visible.sync="commidyVisible" width="70%" center |
| 119 | + custom-class="bian_css" top="6vh" :close-on-click-modal="false" @before-close="closeModal" @close="closeModal"> | ||
| 120 | + <CommAdd ref="child" :show-tinymce="showTinymce" :product-id="commId" @cancel="cancelForm" | ||
| 121 | + :message="parentMessage" /> | ||
| 122 | + </el-dialog> --> | ||
| 123 | + <div v-if ="ontype == '2'" class="pending"> | ||
| 124 | + | ||
| 125 | + <CommAdd v-if ="ontype == '2'" ref="child" :show-tinymce="showTinymce" :product-id="commId" @cancel="cancelForm" /> | ||
| 126 | + </div> | ||
| 157 | <!-- 设置会员价弹窗 --> | 127 | <!-- 设置会员价弹窗 --> |
| 158 | - <el-dialog | ||
| 159 | - title="设置会员价" | ||
| 160 | - :visible.sync="vipPriceVisible" | ||
| 161 | - width="50%" | ||
| 162 | - class="vipDialog" | ||
| 163 | - > | 128 | + <el-dialog title="设置会员价" :visible.sync="vipPriceVisible" width="50%" class="vipDialog"> |
| 164 | <el-form ref="form" label-width="80px"> | 129 | <el-form ref="form" label-width="80px"> |
| 165 | <el-form-item label="优惠方式"> | 130 | <el-form-item label="优惠方式"> |
| 166 | <el-radio-group v-model="mode"> | 131 | <el-radio-group v-model="mode"> |
| @@ -169,15 +134,15 @@ | @@ -169,15 +134,15 @@ | ||
| 169 | </el-radio-group> | 134 | </el-radio-group> |
| 170 | </el-form-item> | 135 | </el-form-item> |
| 171 | <div class="priceTable"> | 136 | <div class="priceTable"> |
| 172 | - <table > | ||
| 173 | - <tr > | ||
| 174 | - <th >规格</th> | ||
| 175 | - <th >售价</th> | 137 | + <table> |
| 138 | + <tr> | ||
| 139 | + <th>规格</th> | ||
| 140 | + <th>售价</th> | ||
| 176 | <th v-for="(item,index) in gradeList" :key="index"> | 141 | <th v-for="(item,index) in gradeList" :key="index"> |
| 177 | {{ item }} | 142 | {{ item }} |
| 178 | </th> | 143 | </th> |
| 179 | </tr> | 144 | </tr> |
| 180 | - <tr v-for="(item,index) in productData" :key="index" > | 145 | + <tr v-for="(item,index) in productData" :key="index"> |
| 181 | <td> | 146 | <td> |
| 182 | {{ item.value }} | 147 | {{ item.value }} |
| 183 | </td> | 148 | </td> |
| @@ -185,46 +150,59 @@ | @@ -185,46 +150,59 @@ | ||
| 185 | {{ item.price }} | 150 | {{ item.price }} |
| 186 | </td> | 151 | </td> |
| 187 | <td v-for="(itemJ,indexJ) in item.memberPrices" :key="indexJ" class="td-input"> | 152 | <td v-for="(itemJ,indexJ) in item.memberPrices" :key="indexJ" class="td-input"> |
| 188 | - <el-input v-model="itemJ.price" oninput="value=value.replace(/([^\d|\.])/g, '')" /> {{ mode==1?'折':'元' }} | 153 | + <el-input v-model="itemJ.price" oninput="value=value.replace(/([^\d|\.])/g, '')" /> |
| 154 | + {{ mode==1?'折':'元' }} | ||
| 189 | </td> | 155 | </td> |
| 190 | </tr> | 156 | </tr> |
| 191 | </table> | 157 | </table> |
| 192 | </div> | 158 | </div> |
| 193 | - <el-button style="background-color: #3F9B6A;color: #fff;" class="clearBtn" @click="clearProductMember">清除所有旧会员价</el-button> | 159 | + <el-button style="background-color: #3F9B6A;color: #fff;" class="clearBtn" |
| 160 | + @click="clearProductMember">清除所有旧会员价</el-button> | ||
| 194 | </el-form> | 161 | </el-form> |
| 195 | <span slot="footer" class="dialog-footer"> | 162 | <span slot="footer" class="dialog-footer"> |
| 196 | <el-button @click="vipPriceVisible = false" class="buttonHover" | 163 | <el-button @click="vipPriceVisible = false" class="buttonHover" |
| 197 | - style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;">取 消</el-button> | 164 | + style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;">取 消</el-button> |
| 198 | <el-button style="background-color: #3F9B6A;color: #fff;" @click="vipPriceSubmit">确 定</el-button> | 165 | <el-button style="background-color: #3F9B6A;color: #fff;" @click="vipPriceSubmit">确 定</el-button> |
| 199 | </span> | 166 | </span> |
| 200 | </el-dialog> | 167 | </el-dialog> |
| 201 | - <el-dialog | ||
| 202 | - title="入库登记" | ||
| 203 | - :visible.sync="rukuShow" | ||
| 204 | - width="60%" | ||
| 205 | - class="vipDialog" | ||
| 206 | - > | ||
| 207 | - <el-form ref="form" label-width="80px"> | ||
| 208 | - <el-form-item label="商品名称"> | ||
| 209 | - <el-select v-model="shopId" filterable placeholder="请选择"> | ||
| 210 | - <el-option | ||
| 211 | - v-for="item in tableData" | ||
| 212 | - :key="item.productId" | ||
| 213 | - :label="item.productName" | ||
| 214 | - :value="item.productId"> | ||
| 215 | - </el-option> | ||
| 216 | - </el-select> | ||
| 217 | - </el-form-item> | ||
| 218 | - <el-form-item label="是否登记"> | ||
| 219 | - <el-radio-group v-model="dengjiMsg" > | ||
| 220 | - <el-radio label="1">是</el-radio> | ||
| 221 | - <el-radio label="">否</el-radio> | ||
| 222 | - </el-radio-group> | ||
| 223 | - </el-form-item> | ||
| 224 | - </el-form> | 168 | + <!-- <el-dialog title="入库登记" :visible.sync="rukuShow" width="60%" class="vipDialog"> |
| 169 | + <el-form ref="form" label-width="80px"> | ||
| 170 | + <el-form-item label="商品名称"> | ||
| 171 | + <el-select v-model="shopId" filterable placeholder="请选择"> | ||
| 172 | + <el-option v-for="item in tableData" :key="item.productId" :label="item.productName" | ||
| 173 | + :value="item.productId"> | ||
| 174 | + </el-option> | ||
| 175 | + </el-select> | ||
| 176 | + </el-form-item> | ||
| 177 | + <el-form-item label="是否登记"> | ||
| 178 | + <el-radio-group v-model="dengjiMsg"> | ||
| 179 | + <el-radio label="1">是</el-radio> | ||
| 180 | + <el-radio label="">否</el-radio> | ||
| 181 | + </el-radio-group> | ||
| 182 | + </el-form-item> | ||
| 183 | + </el-form> | ||
| 184 | + <span slot="footer" class="dialog-footer"> | ||
| 185 | + <el-button @click="rukuShow = false" class="buttonHover" | ||
| 186 | + style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;">取 消</el-button> | ||
| 187 | + <el-button type="primary" @click="rukuCheck">确 定</el-button> | ||
| 188 | + </span> | ||
| 189 | + </el-dialog> --> | ||
| 190 | + <el-dialog title="补货" :visible.sync="rukuShow" width="60%" class="vipDialog"> | ||
| 191 | + <el-form ref="form" label-width="80px"> | ||
| 192 | + <el-form-item label="商品名称"> | ||
| 193 | + <el-select v-model="shopId" filterable placeholder="请选择" @change="getShopData"> | ||
| 194 | + <el-option v-for="item in tableData" :key="item.productId" :label="item.productName" | ||
| 195 | + :value="item.productId"> | ||
| 196 | + </el-option> | ||
| 197 | + </el-select> | ||
| 198 | + </el-form-item> | ||
| 199 | + <el-form-item label="数量"> | ||
| 200 | + <el-input-number v-model="num" :min="0" :max="9999" ></el-input-number> | ||
| 201 | + </el-form-item> | ||
| 202 | + </el-form> | ||
| 225 | <span slot="footer" class="dialog-footer"> | 203 | <span slot="footer" class="dialog-footer"> |
| 226 | <el-button @click="rukuShow = false" class="buttonHover" | 204 | <el-button @click="rukuShow = false" class="buttonHover" |
| 227 | - style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;">取 消</el-button> | 205 | + style="color: #606266;border: 1px solid #dddfe5;background-color: #fff;">取 消</el-button> |
| 228 | <el-button type="primary" @click="rukuCheck">确 定</el-button> | 206 | <el-button type="primary" @click="rukuCheck">确 定</el-button> |
| 229 | </span> | 207 | </span> |
| 230 | </el-dialog> | 208 | </el-dialog> |
| @@ -232,525 +210,610 @@ | @@ -232,525 +210,610 @@ | ||
| 232 | </template> | 210 | </template> |
| 233 | 211 | ||
| 234 | <script> | 212 | <script> |
| 235 | -import CommAdd from './addCommodity.vue' | ||
| 236 | -import { getBtnList, getToken } from '@/utils/auth' | ||
| 237 | -import { uploadUrl } from '@/utils/request' | ||
| 238 | -import { | ||
| 239 | - getClassifyGetAll, | ||
| 240 | - getClassifyDelete, | ||
| 241 | - getClassifyStart, | ||
| 242 | - downloadTemplate, | ||
| 243 | - importProduct, | ||
| 244 | - getClassify, | ||
| 245 | - getProductMembers, | ||
| 246 | - setProductMember, | ||
| 247 | - productExport, | ||
| 248 | - getBrandList, | ||
| 249 | - chFen, | ||
| 250 | - getClassifyUpdate | ||
| 251 | -} from '@/api/commodity' | ||
| 252 | -export default { | ||
| 253 | - components: { | ||
| 254 | - CommAdd | ||
| 255 | - }, | ||
| 256 | - data() { | ||
| 257 | - // 这里存放数据 | ||
| 258 | - return { | ||
| 259 | - showTinymce: false, | ||
| 260 | - btnList: '', | ||
| 261 | - activeName: 'first', | ||
| 262 | - formInline: { | ||
| 263 | - search: '', // 搜索字段 | ||
| 264 | - shelveState: '', // 上架状态 1-上架 0-不上架 null-全部 | ||
| 265 | - stock: '', // 库存状态 1-有库存 0-无库存 null-全部 | ||
| 266 | - classifyId: '', // 最下级分类id | ||
| 267 | - page: 1, // 当前页 | ||
| 268 | - pageSize: 10 | ||
| 269 | - }, | ||
| 270 | - batchAdd: false, | ||
| 271 | - total: 1, | ||
| 272 | - tableData: [], | ||
| 273 | - categoryList: [], | ||
| 274 | - UploadUrl: uploadUrl, | ||
| 275 | - headers: { | ||
| 276 | - 'Authorization-business': getToken() | ||
| 277 | - }, | ||
| 278 | - productId: 0, | ||
| 279 | - commidyVisible: false, | ||
| 280 | - commId: 0, | ||
| 281 | - brandList: [], | ||
| 282 | - zuheNum:0, | ||
| 283 | - | ||
| 284 | - parentMessage: '这是父组件传递给子组件的消息', | ||
| 285 | - canst:'' ,//组合商品ID | ||
| 286 | - index:1, | ||
| 287 | - dengji:[], | ||
| 288 | - vipPriceVisible: false, | ||
| 289 | - mode: 1, | ||
| 290 | - productData: [], | ||
| 291 | - gradeList: [], | ||
| 292 | - teble_sel:false, | ||
| 293 | - rukuShow:false, | ||
| 294 | - dengjiMsg:'', | ||
| 295 | - shopId:'' | ||
| 296 | - } | ||
| 297 | - }, | ||
| 298 | - computed: { | ||
| 299 | - }, | ||
| 300 | - mounted() { | ||
| 301 | - this.getBrandList() | ||
| 302 | - this.getAll(this.formInline) | ||
| 303 | - this.queryAllCategory() | ||
| 304 | - this.btnList = getBtnList() | ||
| 305 | - }, | ||
| 306 | - // 方法集合 | ||
| 307 | - methods: { | ||
| 308 | - msgList(list){ | ||
| 309 | - if(list && list!=''){ | ||
| 310 | - let strin = list.split(',') | ||
| 311 | - return strin[0] | ||
| 312 | - } | ||
| 313 | - }, | ||
| 314 | - async getBrandList() { | ||
| 315 | - const { data } = await getBrandList() | ||
| 316 | - this.brandList = data | ||
| 317 | - }, | ||
| 318 | - cancelForm() { | ||
| 319 | - this.commidyVisible = false | ||
| 320 | - this.formInline = { | ||
| 321 | - search: '', | ||
| 322 | - shelveState: '', | ||
| 323 | - stock: '', | ||
| 324 | - classifyId: '', | ||
| 325 | - page: 1, | ||
| 326 | - pageSize: 10 | ||
| 327 | - } | ||
| 328 | - this.getAll(this.formInline) | ||
| 329 | - this.closeModal() | ||
| 330 | - }, | ||
| 331 | - closeModal() { | ||
| 332 | - this.showTinymce = false | ||
| 333 | - this.$refs.child.last() | ||
| 334 | - this.$refs.child.reset() | 213 | + import CommAdd from './addCommodity.vue' |
| 214 | + import { | ||
| 215 | + getBtnList, | ||
| 216 | + getToken | ||
| 217 | + } from '@/utils/auth' | ||
| 218 | + import { | ||
| 219 | + uploadUrl | ||
| 220 | + } from '@/utils/request' | ||
| 221 | + import { | ||
| 222 | + getClassifyGetAll, | ||
| 223 | + getClassifyDelete, | ||
| 224 | + getClassifyStart, | ||
| 225 | + downloadTemplate, | ||
| 226 | + importProduct, | ||
| 227 | + getClassify, | ||
| 228 | + getProductMembers, | ||
| 229 | + setProductMember, | ||
| 230 | + productExport, | ||
| 231 | + getBrandList, | ||
| 232 | + chFen, | ||
| 233 | + getClassifyUpdate, | ||
| 234 | + getClassifyGetById | ||
| 235 | + } from '@/api/commodity' | ||
| 236 | + export default { | ||
| 237 | + components: { | ||
| 238 | + CommAdd | ||
| 335 | }, | 239 | }, |
| 336 | - btnClick(id) { | ||
| 337 | - if (id.permissionName === '新增商品') { | ||
| 338 | - this.add() | 240 | + data() { |
| 241 | + // 这里存放数据 | ||
| 242 | + return { | ||
| 243 | + ontype:'1', | ||
| 244 | + num:0, | ||
| 245 | + showTinymce: false, | ||
| 246 | + btnList: '', | ||
| 247 | + activeName: 'first', | ||
| 248 | + formInline: { | ||
| 249 | + search: '', // 搜索字段 | ||
| 250 | + shelveState: '', // 上架状态 1-上架 0-不上架 null-全部 | ||
| 251 | + stock: '', // 库存状态 1-有库存 0-无库存 null-全部 | ||
| 252 | + classifyId: '', // 最下级分类id | ||
| 253 | + page: 1, // 当前页 | ||
| 254 | + pageSize: 10 | ||
| 255 | + }, | ||
| 256 | + batchAdd: false, | ||
| 257 | + total: 1, | ||
| 258 | + tableData: [], | ||
| 259 | + categoryList: [], | ||
| 260 | + UploadUrl: uploadUrl, | ||
| 261 | + headers: { | ||
| 262 | + 'Authorization-business': getToken() | ||
| 263 | + }, | ||
| 264 | + productId: 0, | ||
| 265 | + commidyVisible: false, | ||
| 266 | + commId: 0, | ||
| 267 | + brandList: [], | ||
| 268 | + zuheNum: 0, | ||
| 269 | + | ||
| 270 | + parentMessage: '这是父组件传递给子组件的消息', | ||
| 271 | + canst: '', //组合商品ID | ||
| 272 | + index: 1, | ||
| 273 | + dengji: [], | ||
| 274 | + vipPriceVisible: false, | ||
| 275 | + mode: 1, | ||
| 276 | + productData: [], | ||
| 277 | + gradeList: [], | ||
| 278 | + teble_sel: false, | ||
| 279 | + rukuShow: false, | ||
| 280 | + dengjiMsg: '', | ||
| 281 | + shopId: '' | ||
| 339 | } | 282 | } |
| 340 | }, | 283 | }, |
| 341 | - handleSizeChange(val) { | ||
| 342 | - this.formInline.pageSize = val | ||
| 343 | - this.getAll(this.formInline) | ||
| 344 | - }, | ||
| 345 | - handleCurrentChange(val) { | ||
| 346 | - this.formInline.page = val | 284 | + computed: {}, |
| 285 | + mounted() { | ||
| 286 | + this.getBrandList() | ||
| 347 | this.getAll(this.formInline) | 287 | this.getAll(this.formInline) |
| 288 | + this.queryAllCategory() | ||
| 289 | + this.btnList = getBtnList() | ||
| 348 | }, | 290 | }, |
| 349 | - // 查询 | ||
| 350 | - search() { | ||
| 351 | - this.total = 1 | ||
| 352 | - this.formInline.page = 1 | ||
| 353 | - this.getAll(this.formInline) | ||
| 354 | - }, | ||
| 355 | - // 重置 | ||
| 356 | - clear() { | ||
| 357 | - this.formInline = { | ||
| 358 | - search: '', // 搜索字段 | ||
| 359 | - shelveState: '', // 上架状态 1-上架 0-不上架 null-全部 | ||
| 360 | - stock: '', // 库存状态 1-有库存 0-无库存 null-全部 | ||
| 361 | - classifyId: '', // 最下级分类id | ||
| 362 | - page: 1, // 当前页 | ||
| 363 | - pageSize: 10 | ||
| 364 | - } | ||
| 365 | - this.getAll(this.formInline) | ||
| 366 | - }, | ||
| 367 | - // 新增商品 | ||
| 368 | - add() { | ||
| 369 | - this.showTinymce = true | ||
| 370 | - if (this.commId) { | 291 | + // 方法集合 |
| 292 | + methods: { | ||
| 293 | + getShopData(e){ | ||
| 294 | + const targetProduct = this.tableData.find(item => item.productId === e) | ||
| 295 | + console.log(targetProduct) | ||
| 296 | + this.num = targetProduct.stockNumber | ||
| 297 | + }, | ||
| 298 | + msgList(list) { | ||
| 299 | + if (list && list != '') { | ||
| 300 | + let strin = list.split(',') | ||
| 301 | + return strin[0] | ||
| 302 | + } | ||
| 303 | + }, | ||
| 304 | + async getBrandList() { | ||
| 305 | + const { | ||
| 306 | + data | ||
| 307 | + } = await getBrandList() | ||
| 308 | + this.brandList = data | ||
| 309 | + }, | ||
| 310 | + cancelForm() { | ||
| 311 | + this.commidyVisible = false | ||
| 312 | + this.ontype = '1' | ||
| 313 | + this.formInline = { | ||
| 314 | + search: '', | ||
| 315 | + shelveState: '', | ||
| 316 | + stock: '', | ||
| 317 | + classifyId: '', | ||
| 318 | + page: 1, | ||
| 319 | + pageSize: 10 | ||
| 320 | + } | ||
| 321 | + this.getAll(this.formInline) | ||
| 322 | + this.closeModal() | ||
| 323 | + }, | ||
| 324 | + closeModal() { | ||
| 325 | + this.showTinymce = false | ||
| 326 | + this.$refs.child.last() | ||
| 371 | this.$refs.child.reset() | 327 | this.$refs.child.reset() |
| 372 | - } | ||
| 373 | - this.commidyVisible = true | ||
| 374 | - this.commId = 0 | ||
| 375 | - // this.$router.push({ name: 'addCommodity', params: { id: '1' }}) | ||
| 376 | - }, | ||
| 377 | - // 导出商品 | ||
| 378 | - async productDataExport() { | ||
| 379 | - this.$message({ | ||
| 380 | - message: '数据导出中,请勿重复操作!', | ||
| 381 | - type: 'success' | ||
| 382 | - }) | ||
| 383 | - const res = await productExport(this.formInline) | ||
| 384 | - if (!res) { return } | ||
| 385 | - const blob = new Blob([res], { type: 'application/vnd.ms-excel' }) | ||
| 386 | - const fileName = '商品数据明细表.xls' | ||
| 387 | - if ('download' in document.createElement('a')) { | ||
| 388 | - // 非IE下载 | ||
| 389 | - const elink = document.createElement('a') | ||
| 390 | - elink.download = fileName | ||
| 391 | - elink.href = URL.createObjectURL(blob) | ||
| 392 | - elink.style.display = 'none' | ||
| 393 | - document.body.appendChild(elink) | ||
| 394 | - elink.click() | ||
| 395 | - URL.revokeObjectURL(elink.href) // 释放URL 对象 | ||
| 396 | - document.body.removeChild(elink) | ||
| 397 | - } else { | ||
| 398 | - // IE10+下载 | ||
| 399 | - navigator.msSaveBlob(blob, fileName) | ||
| 400 | - } | ||
| 401 | - }, | ||
| 402 | - // 编辑商品 | ||
| 403 | - edit(row) { | ||
| 404 | - console.log(row) | ||
| 405 | - this.showTinymce = true | ||
| 406 | - this.commidyVisible = true | ||
| 407 | - this.commId = row.productId | ||
| 408 | - this.$nextTick(() => { | ||
| 409 | - this.$refs.child?.details() | ||
| 410 | - }) | ||
| 411 | - }, | ||
| 412 | - | ||
| 413 | - // 删除商品 | ||
| 414 | - del(row) { | ||
| 415 | - this.$confirm('选中数据将被永久删除, 是否继续?', '提示', { | ||
| 416 | - confirmButtonText: '确定', | ||
| 417 | - cancelButtonText: '取消', | ||
| 418 | - type: 'warning' | ||
| 419 | - }) | ||
| 420 | - .then(() => { | ||
| 421 | - getClassifyDelete({ productId: row.productId }).then(res => { | ||
| 422 | - if (res.code === '') { | ||
| 423 | - this.$message({ | ||
| 424 | - type: 'success', | ||
| 425 | - message: '删除成功!' | ||
| 426 | - }) | ||
| 427 | - this.getAll(this.formInline) | ||
| 428 | - } | ||
| 429 | - }) | 328 | + }, |
| 329 | + btnClick(id) { | ||
| 330 | + if (id.permissionName === '新增商品') { | ||
| 331 | + this.add() | ||
| 332 | + } | ||
| 333 | + }, | ||
| 334 | + handleSizeChange(val) { | ||
| 335 | + this.formInline.pageSize = val | ||
| 336 | + this.getAll(this.formInline) | ||
| 337 | + }, | ||
| 338 | + handleCurrentChange(val) { | ||
| 339 | + this.formInline.page = val | ||
| 340 | + this.getAll(this.formInline) | ||
| 341 | + }, | ||
| 342 | + // 查询 | ||
| 343 | + search() { | ||
| 344 | + this.total = 1 | ||
| 345 | + this.formInline.page = 1 | ||
| 346 | + this.getAll(this.formInline) | ||
| 347 | + }, | ||
| 348 | + // 重置 | ||
| 349 | + clear() { | ||
| 350 | + this.formInline = { | ||
| 351 | + search: '', // 搜索字段 | ||
| 352 | + shelveState: '', // 上架状态 1-上架 0-不上架 null-全部 | ||
| 353 | + stock: '', // 库存状态 1-有库存 0-无库存 null-全部 | ||
| 354 | + classifyId: '', // 最下级分类id | ||
| 355 | + page: 1, // 当前页 | ||
| 356 | + pageSize: 10 | ||
| 357 | + } | ||
| 358 | + this.getAll(this.formInline) | ||
| 359 | + }, | ||
| 360 | + // 新增商品 | ||
| 361 | + add() { | ||
| 362 | + this.showTinymce = true | ||
| 363 | + if (this.commId) { | ||
| 364 | + this.$refs.child.reset() | ||
| 365 | + } | ||
| 366 | + this.commidyVisible = true | ||
| 367 | + this.ontype = '2' | ||
| 368 | + this.commId = 0 | ||
| 369 | + // this.$router.push({ name: 'addCommodity', params: { id: '1' }}) | ||
| 370 | + }, | ||
| 371 | + // 导出商品 | ||
| 372 | + async productDataExport() { | ||
| 373 | + this.$message({ | ||
| 374 | + message: '数据导出中,请勿重复操作!', | ||
| 375 | + type: 'success' | ||
| 430 | }) | 376 | }) |
| 431 | - .catch(() => {}) | ||
| 432 | - }, | ||
| 433 | - // 商品上下架 | ||
| 434 | - async down(row) { | ||
| 435 | - console.log(row.shelveState) | ||
| 436 | - if (row.shelveState) { | ||
| 437 | - console.log(111) | ||
| 438 | - const res = await getClassifyStart({ | ||
| 439 | - productId: row.productId, | ||
| 440 | - shelveState: 0 | 377 | + const res = await productExport(this.formInline) |
| 378 | + if (!res) { | ||
| 379 | + return | ||
| 380 | + } | ||
| 381 | + const blob = new Blob([res], { | ||
| 382 | + type: 'application/vnd.ms-excel' | ||
| 441 | }) | 383 | }) |
| 442 | - if (res.code === '') { | ||
| 443 | - this.$message({ | ||
| 444 | - type: 'success', | ||
| 445 | - message: '下架成功!' | ||
| 446 | - }) | ||
| 447 | - this.getAll(this.formInline) | 384 | + const fileName = '商品数据明细表.xls' |
| 385 | + if ('download' in document.createElement('a')) { | ||
| 386 | + // 非IE下载 | ||
| 387 | + const elink = document.createElement('a') | ||
| 388 | + elink.download = fileName | ||
| 389 | + elink.href = URL.createObjectURL(blob) | ||
| 390 | + elink.style.display = 'none' | ||
| 391 | + document.body.appendChild(elink) | ||
| 392 | + elink.click() | ||
| 393 | + URL.revokeObjectURL(elink.href) // 释放URL 对象 | ||
| 394 | + document.body.removeChild(elink) | ||
| 395 | + } else { | ||
| 396 | + // IE10+下载 | ||
| 397 | + navigator.msSaveBlob(blob, fileName) | ||
| 448 | } | 398 | } |
| 449 | - } else { | ||
| 450 | - const res = await getClassifyStart({ | ||
| 451 | - productId: row.productId, | ||
| 452 | - shelveState: 1 | 399 | + }, |
| 400 | + // 编辑商品 | ||
| 401 | + edit(row) { | ||
| 402 | + console.log(row) | ||
| 403 | + this.showTinymce = true | ||
| 404 | + this.commidyVisible = true | ||
| 405 | + this.ontype = '2' | ||
| 406 | + this.commId = row.productId | ||
| 407 | + this.$nextTick(() => { | ||
| 408 | + this.$refs.child?.details() | ||
| 453 | }) | 409 | }) |
| 454 | - if (res.code === '') { | ||
| 455 | - this.$message({ | ||
| 456 | - type: 'success', | ||
| 457 | - message: '上架成功!' | 410 | + }, |
| 411 | + | ||
| 412 | + // 删除商品 | ||
| 413 | + del(row) { | ||
| 414 | + this.$confirm('选中数据将被永久删除, 是否继续?', '提示', { | ||
| 415 | + confirmButtonText: '确定', | ||
| 416 | + cancelButtonText: '取消', | ||
| 417 | + type: 'warning' | ||
| 458 | }) | 418 | }) |
| 459 | - this.getAll(this.formInline) | ||
| 460 | - } | ||
| 461 | - } | ||
| 462 | - }, | ||
| 463 | - // 初始化查询所有数据 | ||
| 464 | - async getAll(formInline) { | ||
| 465 | - this.formInline.classifyId = | ||
| 466 | - this.formInline.classifyId[2] || | ||
| 467 | - this.formInline.classifyId[1] || | ||
| 468 | - this.formInline.classifyId[0] || | ||
| 469 | - this.formInline.classifyId | ||
| 470 | - const res = await getClassifyGetAll(formInline) | ||
| 471 | - this.total = res.data.total | ||
| 472 | - this.tableData = res.data.list | ||
| 473 | - console.log(this.tableData) | ||
| 474 | - }, | ||
| 475 | - // 初始化查询所有分类 | ||
| 476 | - async queryAllCategory() { | ||
| 477 | - const res = await getClassify() | ||
| 478 | - this.categoryList = res.data | ||
| 479 | - this.handleRemoveEmptyChild(this.categoryList) | ||
| 480 | - }, | ||
| 481 | - handleRemoveEmptyChild(arr) { | ||
| 482 | - for (let i = 0; i < arr.length; i++) { | ||
| 483 | - if (arr[i].childs && Array.isArray(arr[i].childs)) { | ||
| 484 | - this.handleRemoveEmptyChild(arr[i].childs) | 419 | + .then(() => { |
| 420 | + getClassifyDelete({ | ||
| 421 | + productId: row.productId | ||
| 422 | + }).then(res => { | ||
| 423 | + if (res.code === '') { | ||
| 424 | + this.$message({ | ||
| 425 | + type: 'success', | ||
| 426 | + message: '删除成功!' | ||
| 427 | + }) | ||
| 428 | + this.getAll(this.formInline) | ||
| 429 | + } | ||
| 430 | + }) | ||
| 431 | + }) | ||
| 432 | + .catch(() => {}) | ||
| 433 | + }, | ||
| 434 | + // 商品上下架 | ||
| 435 | + async down(row) { | ||
| 436 | + console.log(row.shelveState) | ||
| 437 | + if (row.shelveState) { | ||
| 438 | + console.log(111) | ||
| 439 | + const res = await getClassifyStart({ | ||
| 440 | + productId: row.productId, | ||
| 441 | + shelveState: 0 | ||
| 442 | + }) | ||
| 443 | + if (res.code === '') { | ||
| 444 | + this.$message({ | ||
| 445 | + type: 'success', | ||
| 446 | + message: '下架成功!' | ||
| 447 | + }) | ||
| 448 | + this.getAll(this.formInline) | ||
| 449 | + } | ||
| 450 | + } else { | ||
| 451 | + const res = await getClassifyStart({ | ||
| 452 | + productId: row.productId, | ||
| 453 | + shelveState: 1 | ||
| 454 | + }) | ||
| 455 | + if (res.code === '') { | ||
| 456 | + this.$message({ | ||
| 457 | + type: 'success', | ||
| 458 | + message: '上架成功!' | ||
| 459 | + }) | ||
| 460 | + this.getAll(this.formInline) | ||
| 461 | + } | ||
| 485 | } | 462 | } |
| 486 | - if (arr[i].childs && Array.isArray(arr[i].childs) && arr[i].childs.length === 0) { | ||
| 487 | - delete arr[i].childs | 463 | + }, |
| 464 | + // 初始化查询所有数据 | ||
| 465 | + async getAll(formInline) { | ||
| 466 | + this.formInline.classifyId = | ||
| 467 | + this.formInline.classifyId[2] || | ||
| 468 | + this.formInline.classifyId[1] || | ||
| 469 | + this.formInline.classifyId[0] || | ||
| 470 | + this.formInline.classifyId | ||
| 471 | + const res = await getClassifyGetAll(formInline) | ||
| 472 | + this.total = res.data.total | ||
| 473 | + this.tableData = res.data.list | ||
| 474 | + console.log(this.tableData) | ||
| 475 | + }, | ||
| 476 | + // 初始化查询所有分类 | ||
| 477 | + async queryAllCategory() { | ||
| 478 | + const res = await getClassify() | ||
| 479 | + this.categoryList = res.data | ||
| 480 | + this.handleRemoveEmptyChild(this.categoryList) | ||
| 481 | + }, | ||
| 482 | + handleRemoveEmptyChild(arr) { | ||
| 483 | + for (let i = 0; i < arr.length; i++) { | ||
| 484 | + if (arr[i].childs && Array.isArray(arr[i].childs)) { | ||
| 485 | + this.handleRemoveEmptyChild(arr[i].childs) | ||
| 486 | + } | ||
| 487 | + if (arr[i].childs && Array.isArray(arr[i].childs) && arr[i].childs.length === 0) { | ||
| 488 | + delete arr[i].childs | ||
| 489 | + } | ||
| 488 | } | 490 | } |
| 489 | - } | ||
| 490 | - }, | ||
| 491 | - handleSelectionChange(val) { | ||
| 492 | - // console.log(val) | ||
| 493 | - if(this.index ==1){ | ||
| 494 | - if (val.length > 1) { | ||
| 495 | - // 清除之前的选择 | ||
| 496 | - this.$refs.multipleTable.clearSelection(); | ||
| 497 | - // 保留最后一个选中的项目 | ||
| 498 | - if (val.length > 0) { | ||
| 499 | - this.$refs.multipleTable.toggleRowSelection(val[val.length - 1], true); | ||
| 500 | - | ||
| 501 | - } | ||
| 502 | - } | ||
| 503 | - this.dengji = val | ||
| 504 | - }else{ | ||
| 505 | - let zuheId = '' | ||
| 506 | - for(let i=0;i<val.length;i++){ | ||
| 507 | - zuheId += val[i].productId + ',' | ||
| 508 | - } | ||
| 509 | - this.canst = zuheId | ||
| 510 | - this.zuheNum = val.length | ||
| 511 | - } | ||
| 512 | - }, | ||
| 513 | - //清除选项 | ||
| 514 | - toggleSelection() { | 491 | + }, |
| 492 | + handleSelectionChange(val) { | ||
| 493 | + // console.log(val) | ||
| 494 | + if (this.index == 1) { | ||
| 495 | + if (val.length > 1) { | ||
| 496 | + // 清除之前的选择 | ||
| 515 | this.$refs.multipleTable.clearSelection(); | 497 | this.$refs.multipleTable.clearSelection(); |
| 516 | - }, | ||
| 517 | - selClose(){ | ||
| 518 | - this.teble_sel = false | ||
| 519 | - }, | ||
| 520 | - //商品组合 | ||
| 521 | - shopzuhe(){ | ||
| 522 | - this.index = 2 | ||
| 523 | - this.teble_sel = true | ||
| 524 | - }, | ||
| 525 | - //确定组合 | ||
| 526 | - zuheShop(val){ | ||
| 527 | - if(this.index == 1){ | ||
| 528 | - this.edit(this.dengji[0]) | ||
| 529 | - }else{ | ||
| 530 | - this.parentMessage =this.canst.slice(0, -1) | ||
| 531 | - this.add() | 498 | + // 保留最后一个选中的项目 |
| 499 | + if (val.length > 0) { | ||
| 500 | + this.$refs.multipleTable.toggleRowSelection(val[val.length - 1], true); | ||
| 501 | + | ||
| 532 | } | 502 | } |
| 533 | - }, | ||
| 534 | - //拆分 | ||
| 535 | - chaiFen(row){ | ||
| 536 | - let _=this | ||
| 537 | - this.$confirm('是否拆分组合的商品', '提示', { | ||
| 538 | - confirmButtonText: '确定', | ||
| 539 | - cancelButtonText: '取消', | ||
| 540 | - type: 'warning' | ||
| 541 | - }) | ||
| 542 | - .then(() => { | ||
| 543 | - const formData = new FormData(); | ||
| 544 | - formData.append('id', row.productId); | ||
| 545 | - chFen(formData).then(res=>{ | ||
| 546 | - this.getAll(this.formInline) | ||
| 547 | - }) | ||
| 548 | - | ||
| 549 | - }) | ||
| 550 | - .catch(() => {}) | ||
| 551 | - | ||
| 552 | - }, | ||
| 553 | - //入库登记 | ||
| 554 | - rukdengji(){ | ||
| 555 | - this.rukuShow = true | ||
| 556 | - | ||
| 557 | - }, | ||
| 558 | - // 设置会员价 | ||
| 559 | - setVipPrice(row) { | ||
| 560 | - var _ = this | ||
| 561 | - this.productId = row.productId | ||
| 562 | - getProductMembers({ productId: row.productId }).then(res => { | ||
| 563 | - if (res.code === '') { | ||
| 564 | - _.productData = res.data | ||
| 565 | - if (_.productData && _.productData.length > 0) { | ||
| 566 | - _.gradeList = [] | ||
| 567 | - const _memberPrices = _.productData[0].memberPrices | ||
| 568 | - _memberPrices.forEach(function(item, i) { | ||
| 569 | - _.gradeList.push(item.memberLevelName) | ||
| 570 | - }) | ||
| 571 | - _.mode = _.productData[0].mode ? _.productData[0].mode : 1 | ||
| 572 | - _.vipPriceVisible = true | ||
| 573 | - } | ||
| 574 | - } | 503 | + } |
| 504 | + this.dengji = val | ||
| 505 | + } else { | ||
| 506 | + let zuheId = '' | ||
| 507 | + for (let i = 0; i < val.length; i++) { | ||
| 508 | + zuheId += val[i].productId + ',' | ||
| 509 | + } | ||
| 510 | + this.canst = zuheId | ||
| 511 | + this.zuheNum = val.length | ||
| 512 | + } | ||
| 513 | + }, | ||
| 514 | + //清除选项 | ||
| 515 | + toggleSelection() { | ||
| 516 | + this.$refs.multipleTable.clearSelection(); | ||
| 517 | + }, | ||
| 518 | + selClose() { | ||
| 519 | + this.teble_sel = false | ||
| 520 | + }, | ||
| 521 | + //商品组合 | ||
| 522 | + shopzuhe() { | ||
| 523 | + this.index = 2 | ||
| 524 | + this.teble_sel = true | ||
| 525 | + }, | ||
| 526 | + //确定组合 | ||
| 527 | + zuheShop(val) { | ||
| 528 | + if (this.index == 1) { | ||
| 529 | + this.edit(this.dengji[0]) | ||
| 530 | + } else { | ||
| 531 | + this.parentMessage = this.canst.slice(0, -1) | ||
| 532 | + this.add() | ||
| 533 | + } | ||
| 534 | + }, | ||
| 535 | + //拆分 | ||
| 536 | + chaiFen(row) { | ||
| 537 | + let _ = this | ||
| 538 | + this.$confirm('是否拆分组合的商品', '提示', { | ||
| 539 | + confirmButtonText: '确定', | ||
| 540 | + cancelButtonText: '取消', | ||
| 541 | + type: 'warning' | ||
| 542 | + }) | ||
| 543 | + .then(() => { | ||
| 544 | + const formData = new FormData(); | ||
| 545 | + formData.append('id', row.productId); | ||
| 546 | + chFen(formData).then(res => { | ||
| 547 | + this.getAll(this.formInline) | ||
| 575 | }) | 548 | }) |
| 576 | - }, | ||
| 577 | - // 设置会员价提交 | ||
| 578 | - vipPriceSubmit() { | ||
| 579 | - for (let i = 0; i < this.productData.length; i++) { | ||
| 580 | - this.productData[i].mode = this.mode | ||
| 581 | - for (let j = 0; j < this.productData[i].memberPrices.length; j++) { | ||
| 582 | - this.productData[i].memberPrices[j].mode = this.mode | ||
| 583 | - var _price = this.productData[i].memberPrices[j].price | ||
| 584 | - if (!_price) { | ||
| 585 | - this.$message({ | ||
| 586 | - type: 'warning', | ||
| 587 | - message: '会员价格不能为空!' | ||
| 588 | - }) | ||
| 589 | - return false | ||
| 590 | - } else if (this.productData[i].mode === 1) { | ||
| 591 | - if (_price <= 0 || _price >= 10) { | ||
| 592 | - this.$message({ | ||
| 593 | - type: 'warning', | ||
| 594 | - message: '会员折数必须大于0小于10!' | ||
| 595 | - }) | ||
| 596 | - return false | ||
| 597 | - } | ||
| 598 | - } else if (this.productData[i].mode === 2) { | ||
| 599 | - if (_price > this.productData[i].price) { | ||
| 600 | - this.$message({ | ||
| 601 | - type: 'warning', | ||
| 602 | - message: '会员价格不能大于原价!' | ||
| 603 | - }) | ||
| 604 | - return false | ||
| 605 | - } | ||
| 606 | - } | ||
| 607 | - } | 549 | + |
| 550 | + }) | ||
| 551 | + .catch(() => {}) | ||
| 552 | + | ||
| 553 | + }, | ||
| 554 | + //入库登记 | ||
| 555 | + rukdengji() { | ||
| 556 | + this.shopId = null; | ||
| 557 | + this.num = 0 | ||
| 558 | + this.rukuShow = true | ||
| 559 | + | ||
| 560 | + }, | ||
| 561 | + // 设置会员价 | ||
| 562 | + setVipPrice(row) { | ||
| 563 | + var _ = this | ||
| 564 | + this.productId = row.productId | ||
| 565 | + getProductMembers({ | ||
| 566 | + productId: row.productId | ||
| 567 | + }).then(res => { | ||
| 568 | + if (res.code === '') { | ||
| 569 | + _.productData = res.data | ||
| 570 | + if (_.productData && _.productData.length > 0) { | ||
| 571 | + _.gradeList = [] | ||
| 572 | + const _memberPrices = _.productData[0].memberPrices | ||
| 573 | + _memberPrices.forEach(function(item, i) { | ||
| 574 | + _.gradeList.push(item.memberLevelName) | ||
| 575 | + }) | ||
| 576 | + _.mode = _.productData[0].mode ? _.productData[0].mode : 1 | ||
| 577 | + _.vipPriceVisible = true | ||
| 608 | } | 578 | } |
| 609 | - setProductMember({ productId: this.productId, members: this.productData }).then(res => { | ||
| 610 | - if (res.code === '') { | 579 | + } |
| 580 | + }) | ||
| 581 | + }, | ||
| 582 | + // 设置会员价提交 | ||
| 583 | + vipPriceSubmit() { | ||
| 584 | + for (let i = 0; i < this.productData.length; i++) { | ||
| 585 | + this.productData[i].mode = this.mode | ||
| 586 | + for (let j = 0; j < this.productData[i].memberPrices.length; j++) { | ||
| 587 | + this.productData[i].memberPrices[j].mode = this.mode | ||
| 588 | + var _price = this.productData[i].memberPrices[j].price | ||
| 589 | + if (!_price) { | ||
| 590 | + this.$message({ | ||
| 591 | + type: 'warning', | ||
| 592 | + message: '会员价格不能为空!' | ||
| 593 | + }) | ||
| 594 | + return false | ||
| 595 | + } else if (this.productData[i].mode === 1) { | ||
| 596 | + if (_price <= 0 || _price >= 10) { | ||
| 611 | this.$message({ | 597 | this.$message({ |
| 612 | - type: 'success', | ||
| 613 | - message: '设置成功!' | 598 | + type: 'warning', |
| 599 | + message: '会员折数必须大于0小于10!' | ||
| 614 | }) | 600 | }) |
| 615 | - this.getAll(this.formInline) | ||
| 616 | - this.vipPriceVisible = false | 601 | + return false |
| 617 | } | 602 | } |
| 603 | + } else if (this.productData[i].mode === 2) { | ||
| 604 | + if (_price > this.productData[i].price) { | ||
| 605 | + this.$message({ | ||
| 606 | + type: 'warning', | ||
| 607 | + message: '会员价格不能大于原价!' | ||
| 608 | + }) | ||
| 609 | + return false | ||
| 610 | + } | ||
| 611 | + } | ||
| 612 | + } | ||
| 613 | + } | ||
| 614 | + setProductMember({ | ||
| 615 | + productId: this.productId, | ||
| 616 | + members: this.productData | ||
| 617 | + }).then(res => { | ||
| 618 | + if (res.code === '') { | ||
| 619 | + this.$message({ | ||
| 620 | + type: 'success', | ||
| 621 | + message: '设置成功!' | ||
| 618 | }) | 622 | }) |
| 619 | - }, | ||
| 620 | - // 清空会员价 | ||
| 621 | - clearProductMember() { | ||
| 622 | - console.log(this.productData, 'this.productData') | ||
| 623 | - this.$confirm('该商品所有旧设置的会员价将被清除, 是否继续?', '提示', { | ||
| 624 | - confirmButtonText: '确定', | ||
| 625 | - cancelButtonText: '取消', | ||
| 626 | - type: 'warning' | ||
| 627 | - }).then(() => { | ||
| 628 | - clearProductMember({ productId: this.productId }).then(res => { | ||
| 629 | - if (res.code === '') { | ||
| 630 | - this.productData.map(item => { | ||
| 631 | - item.memberPrices.map(itemChild => { | ||
| 632 | - itemChild.price = null | ||
| 633 | - }) | ||
| 634 | - }) | ||
| 635 | - this.$message.success('清除成功') | ||
| 636 | - // this.vipPriceVisible = false | ||
| 637 | - } | ||
| 638 | - }) | ||
| 639 | - }) | ||
| 640 | - }, | ||
| 641 | - async rukuCheck(){ | ||
| 642 | - const targetProduct = this.tableData.find(item => item.productId === this.shopId) | ||
| 643 | - targetProduct.registrationStatus = this.dengjiMsg | ||
| 644 | - await getClassifyUpdate(targetProduct) | ||
| 645 | - this.$message.success('保存成功') | ||
| 646 | - this.rukuShow = false | ||
| 647 | this.getAll(this.formInline) | 623 | this.getAll(this.formInline) |
| 624 | + this.vipPriceVisible = false | ||
| 648 | } | 625 | } |
| 626 | + }) | ||
| 627 | + }, | ||
| 628 | + // 清空会员价 | ||
| 629 | + clearProductMember() { | ||
| 630 | + console.log(this.productData, 'this.productData') | ||
| 631 | + this.$confirm('该商品所有旧设置的会员价将被清除, 是否继续?', '提示', { | ||
| 632 | + confirmButtonText: '确定', | ||
| 633 | + cancelButtonText: '取消', | ||
| 634 | + type: 'warning' | ||
| 635 | + }).then(() => { | ||
| 636 | + clearProductMember({ | ||
| 637 | + productId: this.productId | ||
| 638 | + }).then(res => { | ||
| 639 | + if (res.code === '') { | ||
| 640 | + this.productData.map(item => { | ||
| 641 | + item.memberPrices.map(itemChild => { | ||
| 642 | + itemChild.price = null | ||
| 643 | + }) | ||
| 644 | + }) | ||
| 645 | + this.$message.success('清除成功') | ||
| 646 | + // this.vipPriceVisible = false | ||
| 647 | + } | ||
| 648 | + }) | ||
| 649 | + }) | ||
| 650 | + }, | ||
| 651 | + async rukuCheck() { | ||
| 652 | + const res = await getClassifyGetById({ productId: this.shopId }) | ||
| 653 | + const form = res.data | ||
| 654 | + const params = {} | ||
| 655 | + if (res.data.names.length !== 0) { | ||
| 656 | + params.skuAttrList = res.data.names | ||
| 657 | + } | ||
| 658 | + params.skuList = form.skus | ||
| 659 | + params.attrStyle = res.data.skus[0].style | ||
| 660 | + params.imgs = res.data.images | ||
| 661 | + | ||
| 662 | + form.names = params.skuAttrList | ||
| 663 | + params.skuList.forEach(element => { | ||
| 664 | + element.style = params.attrStyle | ||
| 665 | + }) | ||
| 666 | + form.skus = params.skuList | ||
| 667 | + form.images = params.imgs | ||
| 668 | + form.deletes = params.deletes | ||
| 669 | + form.classifyId = Array.isArray(form.classifyId) ? form.classifyId[form.classifyId.length - 1] : form.classifyId | ||
| 670 | + form.productId = this.shopId | ||
| 671 | + console.log(form, 'form') | ||
| 672 | + if(form.skus.length>0) { | ||
| 673 | + form.skus[0].stockNumber = this.num | ||
| 674 | + } | ||
| 675 | + await getClassifyUpdate(form) | ||
| 676 | + this.$message.success('保存成功') | ||
| 677 | + this.rukuShow = false | ||
| 678 | + this.getAll(this.formInline) | ||
| 679 | + return | ||
| 680 | + | ||
| 681 | + const targetProduct = this.tableData.find(item => item.productId === this.shopId) | ||
| 682 | + // targetProduct.registrationStatus = this.dengjiMsg | ||
| 683 | + | ||
| 684 | + | ||
| 685 | + await getClassifyUpdate(targetProduct) | ||
| 686 | + this.$message.success('保存成功') | ||
| 687 | + this.rukuShow = false | ||
| 688 | + this.getAll(this.formInline) | ||
| 689 | + } | ||
| 690 | + } | ||
| 649 | } | 691 | } |
| 650 | -} | ||
| 651 | </script> | 692 | </script> |
| 652 | <style lang='scss' scoped> | 693 | <style lang='scss' scoped> |
| 653 | -//@import url(); 引入公共css类 | ||
| 654 | -@import url("../../../styles/elDialog.scss"); | ||
| 655 | -.pending { | ||
| 656 | - padding: 0 20px 20px 20px; | ||
| 657 | - background-color:#fff; | ||
| 658 | - | ||
| 659 | -} | ||
| 660 | -.fenye { | ||
| 661 | - margin-top: 20px; | ||
| 662 | - display: flex; | ||
| 663 | - justify-content: flex-end; | ||
| 664 | - position: relative; | ||
| 665 | -} | 694 | + //@import url(); 引入公共css类 |
| 695 | + @import url("../../../styles/elDialog.scss"); | ||
| 696 | + | ||
| 697 | + .pending { | ||
| 698 | + padding: 0 20px 20px 20px; | ||
| 699 | + background-color: #fff; | ||
| 700 | + | ||
| 701 | + } | ||
| 702 | + | ||
| 703 | + .fenye { | ||
| 704 | + margin-top: 20px; | ||
| 705 | + display: flex; | ||
| 706 | + justify-content: flex-end; | ||
| 707 | + position: relative; | ||
| 708 | + } | ||
| 709 | + | ||
| 666 | ::v-deep .el-pagination__total { | 710 | ::v-deep .el-pagination__total { |
| 667 | position: absolute; | 711 | position: absolute; |
| 668 | left: 10px; | 712 | left: 10px; |
| 669 | } | 713 | } |
| 714 | + | ||
| 670 | .formSearch { | 715 | .formSearch { |
| 671 | - display: flex; | ||
| 672 | - width: 100%; | ||
| 673 | - font-size: 14px; | ||
| 674 | - justify-content: space-between; | 716 | + display: flex; |
| 717 | + width: 100%; | ||
| 718 | + font-size: 14px; | ||
| 719 | + justify-content: space-between; | ||
| 720 | + } | ||
| 721 | + | ||
| 722 | + .clickMe { | ||
| 723 | + color: #3F9B6A; | ||
| 724 | + cursor: pointer; | ||
| 725 | + } | ||
| 726 | + | ||
| 727 | + .uploadDialog { | ||
| 728 | + | ||
| 729 | + // display: flex; | ||
| 730 | + // flex-direction: column; | ||
| 731 | + // justify-content: center; | ||
| 732 | + >>>.el-upload__tip { | ||
| 733 | + display: inline-block; | ||
| 734 | + width: 360px; | ||
| 735 | + margin: auto; | ||
| 675 | } | 736 | } |
| 676 | -.clickMe { | ||
| 677 | - color: #3F9B6A; | ||
| 678 | - cursor: pointer; | ||
| 679 | -} | ||
| 680 | -.uploadDialog{ | ||
| 681 | - // display: flex; | ||
| 682 | - // flex-direction: column; | ||
| 683 | - // justify-content: center; | ||
| 684 | - >>>.el-upload__tip{ | ||
| 685 | - display: inline-block; | ||
| 686 | - width: 360px; | ||
| 687 | - margin: auto; | ||
| 688 | } | 737 | } |
| 689 | -} | ||
| 690 | -.vipDialog{ | ||
| 691 | - .priceTable{ | ||
| 692 | - table{ | ||
| 693 | - width: 100%; | ||
| 694 | - text-align: center; | ||
| 695 | - border-left: 1px solid #EBEEF5; | ||
| 696 | - border-bottom: 1px solid #EBEEF5; | ||
| 697 | - font-size: 14px; | ||
| 698 | - color: #606266; | ||
| 699 | - border-collapse: collapse; | ||
| 700 | - tr{ | ||
| 701 | - border-top: 1px solid #EBEEF5; | ||
| 702 | - th{ | ||
| 703 | - padding: 12px 0; | ||
| 704 | - background: #F2F3F5; | ||
| 705 | - color: #0009; | ||
| 706 | - border-right: 1px solid #F2F3F5; | ||
| 707 | - } | ||
| 708 | - td{ | ||
| 709 | - padding: 12px 0; | ||
| 710 | - border-right: 1px solid #EBEEF5; | ||
| 711 | - &.td-input{ | ||
| 712 | - .el-input{ | 738 | + |
| 739 | + .vipDialog { | ||
| 740 | + .priceTable { | ||
| 741 | + table { | ||
| 742 | + width: 100%; | ||
| 743 | + text-align: center; | ||
| 744 | + border-left: 1px solid #EBEEF5; | ||
| 745 | + border-bottom: 1px solid #EBEEF5; | ||
| 746 | + font-size: 14px; | ||
| 747 | + color: #606266; | ||
| 748 | + border-collapse: collapse; | ||
| 749 | + | ||
| 750 | + tr { | ||
| 751 | + border-top: 1px solid #EBEEF5; | ||
| 752 | + | ||
| 753 | + th { | ||
| 754 | + padding: 12px 0; | ||
| 755 | + background: #F2F3F5; | ||
| 756 | + color: #0009; | ||
| 757 | + border-right: 1px solid #F2F3F5; | ||
| 758 | + } | ||
| 759 | + | ||
| 760 | + td { | ||
| 761 | + padding: 12px 0; | ||
| 762 | + border-right: 1px solid #EBEEF5; | ||
| 763 | + | ||
| 764 | + &.td-input { | ||
| 765 | + .el-input { | ||
| 766 | + width: 80px; | ||
| 767 | + margin-right: 0; | ||
| 768 | + } | ||
| 769 | + } | ||
| 770 | + | ||
| 771 | + &:nth-child(1), | ||
| 772 | + &:nth-child(2) { | ||
| 713 | width: 80px; | 773 | width: 80px; |
| 714 | - margin-right: 0; | ||
| 715 | } | 774 | } |
| 716 | - } | ||
| 717 | - &:nth-child(1),&:nth-child(2){ | ||
| 718 | - width: 80px; | ||
| 719 | - } | ||
| 720 | - .el-input{ | ||
| 721 | - width: 100px; | ||
| 722 | - margin-right: 10px; | 775 | + |
| 776 | + .el-input { | ||
| 777 | + width: 100px; | ||
| 778 | + margin-right: 10px; | ||
| 779 | + } | ||
| 723 | } | 780 | } |
| 724 | } | 781 | } |
| 725 | } | 782 | } |
| 726 | } | 783 | } |
| 784 | + | ||
| 785 | + .clearBtn { | ||
| 786 | + margin-top: 20px; | ||
| 787 | + } | ||
| 727 | } | 788 | } |
| 728 | - .clearBtn{ | ||
| 729 | - margin-top: 20px; | 789 | + |
| 790 | + ::v-deep .bian_css { | ||
| 791 | + margin: auto; | ||
| 792 | + max-height: 840px; | ||
| 793 | + overflow-y: auto; | ||
| 794 | + | ||
| 795 | + .el-dialog__body { | ||
| 796 | + padding: 0px; | ||
| 797 | + background-color: #fff; | ||
| 798 | + } | ||
| 799 | + | ||
| 800 | + .el-dialog__header { | ||
| 801 | + background-color: #fff; | ||
| 802 | + padding: 10px 20px 10px 20px; | ||
| 803 | + border-bottom: 1px solid #EFEFEF; | ||
| 804 | + } | ||
| 805 | + | ||
| 806 | + .el-dialog__title { | ||
| 807 | + font-size: 14px; | ||
| 808 | + color: #000000e6; | ||
| 809 | + } | ||
| 810 | + | ||
| 811 | + .el-date-table td.available:hover { | ||
| 812 | + background-color: #3F9B6A; | ||
| 813 | + } | ||
| 814 | + | ||
| 815 | + .el-date-table td.start-date span { | ||
| 816 | + background-color: #3F9B6A; | ||
| 817 | + } | ||
| 730 | } | 818 | } |
| 731 | -} | ||
| 732 | -::v-deep .bian_css{ | ||
| 733 | - margin:auto; | ||
| 734 | - max-height:840px; | ||
| 735 | - overflow-y: auto; | ||
| 736 | - .el-dialog__body { | ||
| 737 | - padding: 0px; | ||
| 738 | - background-color: #fff; | ||
| 739 | - } | ||
| 740 | - .el-dialog__header { | ||
| 741 | - background-color: #fff; | ||
| 742 | - padding:10px 20px 10px 20px; | ||
| 743 | - border-bottom: 1px solid #EFEFEF; | ||
| 744 | - } | ||
| 745 | - .el-dialog__title { | ||
| 746 | - font-size: 14px; | ||
| 747 | - color: #000000e6; | ||
| 748 | - } | ||
| 749 | - .el-date-table td.available:hover{ | ||
| 750 | - background-color:#3F9B6A; | ||
| 751 | - } | ||
| 752 | - .el-date-table td.start-date span{ | ||
| 753 | - background-color:#3F9B6A; | ||
| 754 | - } | ||
| 755 | - } | ||
| 756 | </style> | 819 | </style> |