Procházet zdrojové kódy

商品列表添加商品,编辑商品

david před 2 roky
rodič
revize
5d4f2b0b5a
6 změnil soubory, kde provedl 363 přidání a 5 odebrání
  1. 32 0
      src/api/shop.js
  2. 2 1
      src/lang/en.js
  3. 2 1
      src/lang/zh.js
  4. 6 1
      src/router/index.js
  5. 319 0
      src/views/shop/goods-add.vue
  6. 2 2
      src/views/shop/index.vue

+ 32 - 0
src/api/shop.js

@@ -57,6 +57,38 @@ export function editGoodsData(query) {
   })
 }
 
+// 添加商品,获取参数配置
+export function getAddGoodsConfig(query) {
+  return request({
+    url: '/v1/shop/goods-add',
+    method: 'get',
+    data: query,
+    params: query
+  })
+}
+
+// 添加商品,获取上传token
+export function getUploadToken(query) {
+  return request({
+    url: '/v1/shop/upload',
+    method: 'get',
+    data: query,
+    params: query
+  })
+}
+
+// 添加商品,提交到后台
+export function addGoods(query) {
+  return request({
+    url: '/v1/shop/goods-add',
+    method: 'post',
+    data: query
+  })
+}
+
+
+
+
 
 
 

+ 2 - 1
src/lang/en.js

@@ -236,7 +236,8 @@ export default {
     reset: '重置',
     exportExcel:'Export Excel',
     desc: '描述',
-    upload: 'Upload'
+    upload: 'Upload',
+    modifyData:'Modifying data',
   },
 
   filter: {

+ 2 - 1
src/lang/zh.js

@@ -237,7 +237,8 @@ export default {
     reset: '重置',
     desc: '描述',
     exportExcel:'导出Excel',
-    upload: '上传'
+    upload: '上传',
+    modifyData:'正在修改数据',
   },
 
   filter: {

+ 6 - 1
src/router/index.js

@@ -156,7 +156,12 @@ export const constantRoutes = [
         path: '/shop/index', // 商品列表
         component: () => import('@/views/shop/index'),
         name: 'shop_index',
-      }
+      },
+      {
+        path: '/shop/goods-add', // 商品添加
+        component: () => import('@/views/shop/goods-add'),
+        name: 'shop_goods-add',
+      },
     ]
   },
   {

+ 319 - 0
src/views/shop/goods-add.vue

@@ -0,0 +1,319 @@
+<template>
+    <div v-loading="loading">
+        <div class="white-box">
+            <el-form ref="form"  label-width="auto" class="form-page">
+                <el-form-item :label="$t('shop.productName')"><!-- 商品名称 -->
+                    <el-input v-model="form.goodsName"></el-input>
+                </el-form-item>
+                <el-form-item :label="$t('shop.memberDiscount')"><!-- 会员折扣 -->
+                    <el-input v-model="form.sellDiscount"></el-input>
+                </el-form-item>
+                <el-form-item :label="$t('shop.productType')"><!-- 商品类型 -->
+                    <el-checkbox  v-for="(value,key) in GiftTypeArr" v-model="form.giftType[key-1]" :key="key" >{{value.name}}</el-checkbox>
+                </el-form-item>
+                <el-form-item :label="$t('shop.bvSplit')">
+                  <el-select v-model="form.pvSplit" placeholder="">
+                    <el-option
+                      v-for="item in pvSplitOptions"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value">
+                    </el-option>
+                  </el-select>
+                </el-form-item>
+                <el-form-item :label="$t('shop.productCategory')"><!-- 商品分类 -->
+                    <el-select v-model="form.categoryType" placeholder="">
+                        <el-option v-for="item in categoryType" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item :label="$t('shop.productCode')"><!-- 商品编号 -->
+                    <el-input v-model="form.goodsNo"></el-input>
+                </el-form-item>
+                <el-form-item :label="$t('shop.unit')"><!-- 单位 -->
+                    <el-input v-model="form.unit"></el-input>
+                </el-form-item>
+                <el-form-item :label="$t('shop.taxRate')"><!-- 税率 -->
+                  <el-input v-model="form.taxRate">
+                    <template slot="append">%</template>
+                  </el-input>
+                </el-form-item>
+                <el-form-item :label="$t('shop.uSPrice')" p>
+                    <el-input v-model="form.sellPriceStandard"></el-input>
+                </el-form-item>
+                <el-form-item :label="$t('shop.salesPrice')">
+                    <el-input v-model="form.sellPrice"></el-input>
+                </el-form-item>
+                <el-form-item :label="$t('shop.marketPrice')">
+                  <el-input v-model="form.marketPrice"></el-input>
+                </el-form-item>
+                <el-form-item :label="$t('shop.priceBV')" v-show="pvDisabled"><!-- 价格BV -->
+                    <el-input v-model="form.pricePv"></el-input>
+                </el-form-item>
+                <el-form-item :label="$t('shop.inventory')"><!-- 库存 -->
+                    <el-input v-model="form.storeNums"></el-input>
+                </el-form-item>
+                <el-form-item :label="$t('shop.productDetails')"><!-- 商品详情 -->
+                    <el-input
+                            type="textarea"
+                            :rows="2"
+                            :placeholder="$t('shop.enterContentNotice')"
+                            v-model="form.content">
+                    </el-input><!-- 请输入内容 -->
+                </el-form-item>
+                <el-form-item :label="$t('shop.order')"><!-- 排序 -->
+                    <el-input v-model="form.sort"></el-input>
+                </el-form-item>
+                <el-form-item :label="$t('shop.uploadImages')"><!-- 上传图片 -->
+                    <div class='up_load'>
+                        <!-- <leo-uploader
+                            @on-success='upLoadSuccess'
+                            :request-route="'shop/upload'"
+                        ></leo-uploader> -->
+                        <Upload
+                            :request-route="'v1/shop/upload'"
+                            width="400px"
+                            height="160px"
+                            @on-success="upLoadSuccess"
+                            ></Upload>
+                    </div>
+                </el-form-item>
+                <el-form-item>
+                    <el-button type="primary" @click="addSubmit" :loading="submitButtonStat">{{ $t('table.add') }}<!-- 添加 --></el-button>
+                </el-form-item>
+            </el-form>
+        </div>
+    </div>
+</template>
+
+<script>
+import baseInfo from '@/utils/baseInfo'
+import Upload from '@/components/Upload'
+import { getAddGoodsConfig, getUploadToken, addGoods } from '@/api/shop'
+
+export default {
+  name: 'goods-add',
+  components: {Upload},
+  mounted () {
+    this.getData()
+    this.getFileToken()
+  },
+  data () {
+    return {
+      dialogImageUrl: '',
+      dialogVisible: false,
+      disabled: false,
+      loading: false,
+      file: null,
+      uploadToken: '',
+      pvSplitOptions: [
+        {
+          value: '0',
+          label: this.$t('common.no')
+        },
+        {
+          value: '1',
+          label: this.$t('common.yes')
+        }],
+      form: {
+        goodsName: '',
+        type: '',
+        giftType: [false, false, false, false],
+        sellType: [false, false],
+        goodsNo: '',
+        unit: '',
+        marketPrice: '',
+        sellPrice: '',
+        pvSplit: '0',
+        pricePv: '',
+        point: '',
+        storeNums: '',
+        content: '',
+        sort: '',
+        discount: '',
+        cover: '',
+        textarea: '',
+        sellDiscount: '',
+        categoryType: '',
+        sellPriceStandard: '',
+        taxRate: 0
+      },
+      submitButtonStat: false,
+      goodsType: [],
+      GiftTypeArr: [],
+      categoryType: [],
+      sellType: null,
+      width: '100px',
+      height: '100px',
+      pvDisabled: true,
+      exchangeRate: baseInfo.exchangeRate()
+    }
+  },
+  watch: {
+    dialogVisible (newVal, oldVal) {
+      console.log(newVal, oldVal)
+    },
+    // 监听商品分类,控制PV是否展示
+    'form.categoryType': {
+      deep: true,
+      handler (modern, origin) {
+        this.pvDisabled = (parseInt(modern) === 1)
+      }
+    }
+    // 监听商品标准价格,自动计算销售价格
+    // 'form.sellPriceStandard': {
+    //     deep: true,
+    //     handler(modern, origin) {
+    //         this.form.sellPrice = modern * this.exchangeRate
+    //     }
+    // },
+  },
+  methods: {
+    handleRemove (file) {
+      console.log(file)
+    },
+    upLoadSuccess (file) {
+      this.form.cover = file
+    },
+    handlePictureCardPreview (file) {
+      this.dialogImageUrl = file.url
+      this.dialogVisible = true
+      this.file = file
+      // console.log(file);
+    },
+    handleDownload (file) {
+      console.log(file)
+    },
+    getFileToken () {
+        getUploadToken().then(response => {
+            this.uploadToken = response.data
+        }).catch(err => {
+            this.$message({
+                message: this.$t('common.modifyData'),
+                type: 'info'
+            })
+        }) 
+    },
+    getData (page, pageSize) {
+      getAddGoodsConfig(this.filterModel).then(response => {
+        this.categoryType = response.data.categoryType
+        this.goodsType = response.data.goodsType
+        this.GiftTypeArr = response.data.giftType
+        this.sellType = response.data.sellType
+      }).catch(err => {
+        this.$message({
+          message: err, 
+          type: 'error'
+        })
+      })
+    },
+    addSubmit () {
+      this.submitButtonStat = true
+      let path = 'shop/goods-add'
+      let sen_gift = []
+      this.form.giftType.map((item, index) => {
+        if (item) {
+          sen_gift.push((index + 1).toString())
+        }
+      })
+
+      let postData = {
+        goodsName: this.form.goodsName,
+        sellDiscount: this.form.sellDiscount,
+        discount: this.form.type.discount,
+        type: this.form.type,
+        giftType: sen_gift,
+        // sellType: sellType,
+        sellType: this.form.sellType,
+        pvSplit: this.form.pvSplit,
+        categoryType: this.form.categoryType,
+        goodsNo: this.form.goodsNo,
+        unit: this.form.unit,
+        marketPrice: this.form.marketPrice,
+        sellPrice: this.form.sellPrice,
+        sellPriceStandard: this.form.sellPriceStandard,
+        pricePv: this.form.pricePv,
+        // point: this.form.point,
+        storeNums: this.form.storeNums,
+        content: this.form.content,
+        sort: this.form.sort,
+        cover: this.form.cover,
+        taxRate: this.form.taxRate
+      }
+      addGoods(postData).then(response => {
+        this.$message({
+          message: response.data,
+          type: 'success'
+        })
+        this.submitButtonStat = false
+        this.$router.go(-1)
+      }).catch(err => {
+        this.$message({
+          message: err,
+          type: 'error'
+        })
+        this.submitButtonStat = false
+      })
+    //   return network.postData(path, postData).then(response => {
+    //     this.$message({
+    //       message: response,
+    //       type: 'success'
+    //     })
+    //     this.submitButtonStat = false
+    //     this.$router.go(-1)
+    //   }).catch(() => {
+    //     this.submitButtonStat = false
+    //   })
+    }
+  }
+}
+</script>
+
+<style scoped>
+/* 小于760 */
+ @media (max-width:759px) {
+    
+    /deep/ .el-input {
+        width: 100% !important;
+    }
+    /deep/ .el-select {
+        width: 100% !important;
+    }
+
+    /deep/ .el-textarea {
+        width: 100% !important;
+    }
+    /deep/ .image-uploader {
+        width: 100% !important;
+    }
+    /deep/ i.el-icon-plus.uploader-icon {
+        width:100% !important;
+    }
+    /deep/ .form-page {
+        width:100%;
+        padding-left: 1%;
+    }
+    /deep/ img { 
+        width: 100% !important;
+        height: 100% !important;
+    }
+} 
+
+@media (min-width:760px) {
+    /deep/ .el-input {
+        width: 400px !important;
+    }
+    /deep/ .el-select {
+        width: 400px !important;
+    }
+    /deep/ .el-textarea {
+        width: 400px !important;
+    }
+    /deep/ .upload-container {
+        width: 400px !important;
+    }
+    /deep/ .form-page {
+        width:100%;
+        padding-left: 10%;
+    }
+}
+</style>

+ 2 - 2
src/views/shop/index.vue

@@ -211,11 +211,11 @@
         pvSplitOptions: [
           {
             value: '0',
-            label: 'No'
+            label: this.$t('common.no')
           },
           {
             value: '1',
-            label: 'Yes'
+            label: this.$t('common.yes')
           }],
         form: {
           // sellType: [],