123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561 |
- <template>
- <div class="app-container goods-add">
- <el-divider content-position="left">商品信息</el-divider>
- <el-form ref="addItem" :rules="rules" :model="addData" label-width="130px">
- <el-row :gutter="40" style="width: 500px">
- <el-col :span="23">
- <el-form-item label="商品类型:" prop="type">
- <el-radio-group v-model="addData.type" :disabled="addData.goodsId ? true : false" @input="typeChange">
- <el-radio :label="1">实物商品</el-radio>
- <el-radio :label="2">卡密商品</el-radio>
- <el-radio :label="3">采购商品</el-radio>
- </el-radio-group>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="40" style="width: 600px">
- <el-col :span="23">
- <el-form-item label="商品名称:" prop="title">
- <el-input v-model="addData.title" placeholder="请输入商品名称"/>
- </el-form-item>
- </el-col>
- <el-col :span="23">
- <el-form-item label="商品主图:" prop="picUrl">
- <Upload v-model="mainPicUrl" :limit="10"/>
- <div class="tip">第一张图片将作为商品列表图片,最多上传10张,多张图片之间可随意调整位置,支持jpg、png格式,推荐750*750px;</div>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="40" style="width: 500px">
- <el-col :span="23">
- <el-form-item label="支持盲豆兑换:" prop="exchangeShow">
- <!-- <el-switch-->
- <!-- v-model="addData.exchangeShow"-->
- <!-- :active-value="1"-->
- <!-- :inactive-value="0"-->
- <!-- />-->
- <!-- <div class="tip">关闭则不再兑换大厅显示,不支持盲豆兑换。</div>-->
- <el-radio-group v-model="addData.exchangeShow">
- <el-radio :label="0">不支持</el-radio>
- <el-radio :label="1" :disabled="addData.type == '3'">支持</el-radio>
- <el-radio :label="2" :disabled="addData.type == '3'">盲票商品</el-radio>
- </el-radio-group>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="40" style="width: 500px">
- <el-col :span="23">
- <el-form-item label="商品分类:" prop="categoryId">
- <el-cascader
- v-model="addData.categoryId" clearable
- :options="goodsCategoryItemsList"
- :props="{ expandTrigger: 'hover', value: 'categoryId',label: 'name', children: 'goodsCategoryList', }"></el-cascader>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="40" style="width: 500px">
- <el-col :span="23">
- <el-form-item label="供应商:" prop="supplierId">
- <el-select
- v-model="addData.supplierId"
- placeholder="请选择供应商"
- filterable
- clearable
- >
- <el-option :label="item.name" :value="item.id" v-for="(item, index) in SupplierList" :key="index"/>
- </el-select>
- <a style="margin-left: 20px;color: #1890FF;" @click="handleAdd">添加供应商</a>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="40" style="width: 600px" v-if="addData.type == '3'">
- <el-col :span="23">
- <el-form-item label="关联采购优惠券:" prop="refId">
- <el-select
- v-model="addData.refId" :disabled="addData.goodsId ? true : false"
- placeholder="请选择采购优惠券"
- filterable
- clearable>
- <el-option :label="item.title" :value="item.couponId" v-for="(item, index) in CouponList" :key="index">
- <div>
- <span style="float: left; width: 130px; overflow: hidden; text-overflow: ellipsis;">{{ item.title }} </span>
- <span style="float: left; width: 110px; overflow: hidden; text-overflow: ellipsis;">¥{{ $numberFormat(item.discount) }}</span>
- <span style="float: right;">{{ item.channelSharedRate }}%</span>
- </div>
- </el-option>
- </el-select>
- <div class="tip">根据优惠券名称查询(优惠券名称--价格--门店承担比例)</div>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="40" style="width: 500px">
- <el-col :span="23">
- <el-form-item label="商品采购链接:">
- <el-input v-model="addData.shoppingLink" placeholder="请输入商品采购链接"/>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="40" style="width: 500px">
- <el-col :span="23">
- <el-form-item label="商品标签:">
- <el-select
- v-model="addData.tagIds"
- placeholder="请选择商品标签"
- multiple
- clearable
- >
- <el-option :label="item.name" :value="item.tagId" v-for="(item, index) in goodsTagItemsList"
- :key="index"/>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="23">
- <el-form-item label="商家信息:">
- <Upload v-model="MerchantInformation" :limit="10"/>
- <div class="tip">上传商家营业执照</div>
- </el-form-item>
- </el-col>
- </el-row>
- <el-divider content-position="left">价格库存</el-divider>
- <el-row>
- <el-col :span="23">
- <el-form-item label="启用多SKU:" v-if="addData.type == '1' || addData.type == '3'">
- <el-switch
- v-model="addData.multiSku"
- :active-value="1"
- :inactive-value="0"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="22" v-if="addData.type != 3">
- <el-form-item prop="skuList">
- <Spec ref="spec" @valid="update" :multiSku="addData.multiSku"/>
- </el-form-item>
- </el-col>
- <el-col :span="22" v-else>
- <el-form-item prop="skuList">
- <SpeTwo ref="spec" @valid="update" :multiSku="addData.multiSku"/>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row v-if="addData.multiSku === 0" :gutter="40" style="width: 600px">
- <el-col :span="23">
- <el-form-item label="价格:" prop="value">
- <el-input v-model="addData.value" type="number" placeholder="请输入商品价格">
- <template slot="append">元</template>
- </el-input>
- </el-form-item>
- </el-col>
- <el-col :span="23">
- <el-form-item label="采购成本:" prop="purchaseCost" v-if="addData.type == '3'">
- <el-input v-model="addData.purchaseCost" type="number" placeholder="请输入采购成本">
- <template slot="append">元</template>
- </el-input>
- <div class="tip">注:指展示给经销商采购的成本,即商品的结算价格</div>
- </el-form-item>
- </el-col>
- <el-col :span="23">
- <el-form-item label="零售价:" prop="purchasePrice" v-if="addData.type == '3'">
- <el-input v-model="addData.purchasePrice" type="number" placeholder="请输入零售价">
- <template slot="append">元</template>
- </el-input>
- <div class="tip">注:指商品铺设给经销商的价格,仅作记录</div>
- </el-form-item>
- </el-col>
- <el-col :span="23">
- <el-form-item label="盲豆兑换数量:" prop="exchangePrice">
- <el-input v-model="addData.exchangePrice" type="number" placeholder="请输入盲豆数量">
- <template slot="append">盲豆</template>
- </el-input>
- </el-form-item>
- </el-col>
- <el-col :span="23">
- <el-form-item label="回收折扣:" prop="discountRate">
- <el-input v-model="addData.discountRate" type="number" placeholder="请输入回收折扣">
- <template slot="append">%</template>
- </el-input>
- </el-form-item>
- </el-col>
- <el-col :span="23">
- <el-form-item label="盲豆划线价:">
- <el-input v-model="addData.originPrice" type="number" placeholder="请输入盲豆数量">
- <template slot="append">盲豆</template>
- </el-input>
- </el-form-item>
- </el-col>
- <el-col :span="23">
- <el-form-item label="商品成本:" prop="cost">
- <el-input v-model="addData.cost" type="number" placeholder="请输入商品成本">
- <template slot="append">元</template>
- </el-input>
- </el-form-item>
- </el-col>
- <el-col :span="23">
- <el-form-item label="商品编码:" prop="goodsCode">
- <el-input v-model="addData.goodsCode" type="text" placeholder="请输入商品编码">
- </el-input>
- </el-form-item>
- </el-col>
- <el-col :span="23">
- <el-form-item label="库存:" prop="quantity" v-if="addData.type == '1' || addData.type == '3'">
- <el-input v-model="addData.quantity" type="number" placeholder="请输入商品库存">
- <template slot="append">件</template>
- </el-input>
- </el-form-item>
- </el-col>
- <el-col :span="23">
- <el-form-item label="卡密使用链接:" v-if="addData.type == '2'">
- <el-input v-model="addData.useLink" placeholder="请输入商品采购链接"/>
- </el-form-item>
- </el-col>
- </el-row>
- <!-- <el-divider content-position="left">商品详情</el-divider> -->
- <el-row>
- <el-col :span="22">
- <el-form-item label="商品详情" prop="description">
- <wang-editor ref="editor" v-model="addData.description"/>
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- <br>
- <el-row>
- <el-col :span="24" style="text-align: center">
- <el-button type="info" @click="$router.replace('/goods/list')">取消</el-button>
- <el-button type="primary" @click="updateItem()">保存</el-button>
- </el-col>
- </el-row>
- <add-supplier
- v-if="createShow"
- :dialog-show="createShow"
- @close="close"
- />
- </div>
- </template>
- <script>
- import Upload from '@/components/DragImageUpload'
- import WangEditor from '@/components/WangEditor'
- import Spec from './components/spec'
- import SpeTwo from './components/spec2'
- import TinyEditor from '@/components/TinyEditor'
- import {getGoodsDetail, addGoods} from '@/api/business/goods'
- import {getCouponAllList} from '@/api/business/coupon'
- import {goodsCategoryListTree} from '@/api/business/category'
- import {getSupplierList} from '@/api/business/supplier'
- import {goodsTagItems} from '@/api/business/tag'
- import {publicFileGetUrl} from "@/api/common"
- import {accDiv, accMul} from '@/utils/util'
- import AddSupplier from "../supplier/components/addSupplier";
- export default {
- name: 'GoodsAdd',
- components: {
- TinyEditor,
- WangEditor,
- Upload,
- Spec,
- SpeTwo,
- AddSupplier,
- },
- data() {
- return {
- IMG_URL: publicFileGetUrl,
- id: this.$route.query.id,
- goodsCategoryItemsList: [],
- SupplierList: [],
- CouponList: [],
- goodsTagItemsList: [],
- addData: {
- type: 1,
- multiSku: 0,
- description: '',
- originPrice: 0,
- exchangeShow: 0,
- },
- createShow: false,
- rules: {
- title: [{required: true, message: '请输入商品名称', trigger: 'blur'}],
- picUrl: [{required: true, message: '请上传商品图片', trigger: 'change'}],
- categoryId: [{required: true, message: '请选择商品分类', trigger: 'change'}],
- supplierId: [{required: true, message: '请选择供应商', trigger: 'change'}],
- exchangeShow: [{required: true, message: '请选择是否支持盲豆兑换', trigger: 'change'}],
- multiSku: [{required: true, message: '请选择SKU类型', trigger: 'change'}],
- refId: [{required: true, message: '请选择关联采购优惠券', trigger: 'change'}],
- value: [
- {required: true, message: '请输入商品价格', trigger: 'blur'},
- {
- pattern: /^([1-9]\d*(\.\d{1,2})?|([0](\.([0][1-9]|[1-9]\d{0,1}))))$/,
- message: "请输入正确的金额,最多两位小数",
- trigger: ["blur", "change"]
- }
- ],
- purchaseCost: [
- {required: true, message: '请输入采购成本', trigger: 'blur'},
- {
- pattern: /^([1-9]\d*(\.\d{1,2})?|([0](\.([0][1-9]|[1-9]\d{0,1}))))$/,
- message: "请输入正确的金额,最多两位小数",
- trigger: ["blur", "change"]
- }
- ],
- purchasePrice: [
- {required: true, message: '请输入零售价', trigger: 'blur'},
- {
- pattern: /^([1-9]\d*(\.\d{1,2})?|([0](\.([0][1-9]|[1-9]\d{0,1}))))$/,
- message: "请输入正确的金额,最多两位小数",
- trigger: ["blur", "change"]
- }
- ],
- exchangePrice: [
- {required: true, message: '请输入盲豆数量', trigger: 'blur'},
- {pattern: /^([1-9]\d*)$/, message: "请输入正确盲豆数量", trigger: ["blur", "change"]}
- ],
- discountRate: [
- {required: true, message: '请输入回收折扣', trigger: 'blur'},
- {
- pattern:
- /^([0-9]\d*(\.\d{1,2})?|([0](\.([0][1-9]|[1-9]\d{0,1}))))$/,
- message: "请输入合法的数字,最多两位小数",
- trigger: ["blur", "change"],
- },
- ],
- cost: [
- {required: false, message: '请输入商品成本', trigger: 'blur'},
- {
- pattern: /^([1-9]\d*(\.\d{1,2})?|([0](\.([0][1-9]|[1-9]\d{0,1}))))$/,
- message: "请输入正确的金额,最多两位小数",
- trigger: ["blur", "change"]
- }
- ],
- quantity: [
- {required: true, message: '请输入库存', trigger: 'blur'},
- {pattern: /^([1-9]\d*)$/, message: "请输入正确的数字", trigger: ["blur", "change"]}
- ],
- description: [{required: true, message: '请输入商品详情', trigger: 'blur'}]
- },
- }
- },
- computed: {
- mainPicUrl: {
- get() {
- return this.addData.picUrl ? this.addData.picUrl.split(',').map(item => {
- return {
- fileName: item
- }
- }) : []
- },
- set(val) {
- this.$set(this.addData, 'picUrl', val.map(item => {
- return item.fileName
- }).toString())
- }
- },
- MerchantInformation: {
- get() {
- return this.addData.merchantInfo ? this.addData.merchantInfo.split(',').map(item => {
- return {
- fileName: item
- }
- }) : []
- },
- set(val) {
- this.$set(this.addData, 'merchantInfo', val.map(item => {
- return item.fileName
- }).toString())
- }
- }
- },
- created() {
- this.getGoodsCategoryItems()
- this.getSupplierItems()
- this.getGoodsTagItems()
- this.getCouponList()
- if (this.id) {
- getGoodsDetail(this.id).then(res => {
- const {
- goodsId,
- title,
- type,
- goodsCode,
- picUrl,
- merchantInfo,
- exchangeShow,
- multiSku,
- value,
- refId,
- exchangePrice,
- purchaseCost,
- purchasePrice,
- originPrice,
- discountRate,
- cost,
- quantity,
- description,
- skuList,
- categoryId,
- supplierId,
- shoppingLink,
- tagIds,
- useLink
- } = res.data
- this.addData = {
- value: accDiv(value, 100),
- purchaseCost: type == '3' ? accDiv(purchaseCost, 100) : '',
- purchasePrice: type == '3' ? accDiv(purchasePrice, 100) : '',
- cost: cost == '' || cost == null ? '' : accDiv(cost, 100),
- goodsId,
- title,
- type,
- refId: refId ? Number(refId): '',
- goodsCode,
- picUrl,
- merchantInfo,
- exchangeShow,
- multiSku,
- exchangePrice,
- discountRate,
- originPrice,
- quantity,
- description,
- skuList,
- categoryId,
- supplierId,
- shoppingLink,
- tagIds,
- useLink
- }
- if (description) {
- this.$refs.editor.setContent(description)
- }
- if (multiSku && skuList instanceof Array && skuList.length > 0) {
- this.$nextTick(() => {
- this.$refs.spec.setSkuList(skuList)
- })
- }
- })
- }
- },
- methods: {
- typeChange(e) {
- if(e == 2) {
- this.addData.quantity = ''
- this.addData.multiSku = 0
- this.addData.purchaseCost = ''
- this.addData.purchasePrice = ''
- this.addData.refId = ''
- }else if(e == 1){
- this.addData.useLink = ''
- this.addData.purchaseCost = ''
- this.addData.purchasePrice = ''
- this.addData.refId = ''
- }else if(e == 3){
- this.addData.useLink = ''
- this.addData.exchangeShow = 0
- }
- },
- // 获取采购优惠券下拉列表
- getCouponList() {
- let data = {
- type: 4,
- status: "on",
- isExcludePurchaseCoupon: true,
- }
- if(this.addData.goodsId) {
- data.refId = this.addData.refId
- }
- getCouponAllList(data).then(response => {
- this.CouponList = response.rows || [];
- });
- },
- getGoodsCategoryItems() {
- goodsCategoryListTree("", {}).then(res => {
- this.goodsCategoryItemsList = res && res.rows
- })
- },
- //获取供应商
- getSupplierItems() {
- getSupplierList('', {name: ""}).then(res => {
- this.SupplierList = res && res.rows
- })
- },
- handleAdd() {
- this.createShow = true;
- },
- close() {
- this.createShow = false;
- this.getSupplierItems()
- },
- getGoodsTagItems() {
- goodsTagItems({}).then(res => {
- this.goodsTagItemsList = res && res.data
- })
- },
- updateItem() {
- if (this.addData.multiSku == 1) {
- this.$refs.spec.getSkuList()
- } else {
- this.update()
- }
- },
- update(skuList) {
- this.$refs.addItem.validate((valid, items) => {
- if (valid) {
- this.addData.skuList = skuList
- const {value, type, categoryId, purchaseCost, purchasePrice, cost, exchangePrice, description, ...rest} = this.addData
- addGoods({
- ...rest, ...{
- value: accMul(value, 100),
- purchaseCost: type == '3' ? accMul(purchaseCost, 100) : '',
- purchasePrice: type == '3' ? accMul(purchasePrice, 100) : '',
- cost: cost == '' || cost == null ? '' : accMul(cost, 100),
- exchangePrice: accMul(exchangePrice, 1),
- description: encodeURI(description),
- categoryId: categoryId[1],
- type,
- }
- }).then(res => {
- if (res.code === 0) {
- this.$message({
- message: this.addData.goodsId ? '修改成功!' : '添加成功!',
- type: 'success'
- })
- this.$store.dispatch('tagsView/delView', this.$route)
- this.$router.go(-1)
- }
- })
- } else {
- if (items && Object.keys(items).length > 0) {
- this.$message({
- message: items[Object.keys(items)[0]][0].message,
- type: 'warning'
- })
- }
- }
- })
- }
- }
- }
- </script>
- <style lang="scss">
- .goods-add {
- .tip {
- font-size: 12px;
- color: #999;
- }
- .el-divider {
- .is-left {
- color: #409EFF;
- font-size: 20px;
- font-weight: bolder;
- left: 10px;
- }
- }
- }
- </style>
|