فهرست منبع

Add store points settings

Elbert Chen 2 سال پیش
والد
کامیت
93bc67a08b

+ 4 - 1
admin/vue.config.js

@@ -39,7 +39,10 @@ const vueConfig = {
     // webpack plugins
     plugins: [
       // Ignore all locale files of moment.js
-      new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/)
+      new webpack.IgnorePlugin({
+        resourceRegExp: /^\.\/locale$/,
+        contextRegExp: /moment$/
+      })
     ],
     // if prod, add externals
     externals: isProd ? assetsCDN.externals : {}

BIN
store/dist.zip → store/dist 2.zip


+ 1 - 0
store/package.json

@@ -65,6 +65,7 @@
     "opencollective-postinstall": "^2.0.2",
     "vue-svg-icon-loader": "^2.1.1",
     "vue-template-compiler": "^2.6.10",
+    "webpack": "^4.0.0",
     "webpack-bundle-analyzer": "^4.5.0",
     "webpack-cli": "^4.10.0",
     "webpack-theme-color-replacer": "^1.3.12"

+ 4 - 4
store/src/api/memberCenter/kimmyDeduct/index.js

@@ -10,7 +10,7 @@ const api = {
   audit: '/members.DeductionManual/audit',
   edit: '/members.DeductionManual/edit',
   userDetail: '/user/details',
-  actionsList: '/members.MemberCards/actionsList',
+  actionsList: '/members.MemberCards/actionsList'
 }
 /**
  * 金米粒手工扣减列表
@@ -55,7 +55,7 @@ const api = {
 /**
  * 金米粒手工扣减编辑
  */
- export function edit(data) {
+ export function edit (data) {
   return axios({
     url: api.edit,
     method: 'post',
@@ -65,7 +65,7 @@ const api = {
 /**
  * 用户信息
  */
- export function userDetail(params) {
+ export function userDetail (params) {
   return axios({
     url: api.userDetail,
     method: 'get',
@@ -81,4 +81,4 @@ const api = {
     method: 'get',
     params
   })
-}
+}

+ 0 - 0
store/src/api/setting/point.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 170 - 131
store/src/config/router.config.js


+ 43 - 42
store/src/views/goods/Create.vue

@@ -20,6 +20,7 @@
                 <a-select-option value="10">普通商品</a-select-option>
                 <a-select-option value="20">赠品</a-select-option>
                 <a-select-option value="30">搭配套餐商品</a-select-option>
+                <a-select-option value="40">积分兑换商品</a-select-option>
               </a-select>
             </a-form-item>
             <a-form-item label="商品名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
@@ -77,7 +78,7 @@
                   v-for="(item, index) in formData.providerList"
                   :key="index"
                   :value="item.provider_id"
-                  >{{ item.provider_name }}</a-select-option
+                >{{ item.provider_name }}</a-select-option
                 >
               </a-select>
               <div class="form-item-help">
@@ -119,7 +120,7 @@
                   v-for="(item, index) in formData.deliveryList"
                   :key="index"
                   :value="item.delivery_id"
-                  >{{ item.name }}</a-select-option
+                >{{ item.name }}</a-select-option
                 >
               </a-select>
               <div class="form-item-help">
@@ -402,31 +403,31 @@ import storage from 'store'
 const comboColumns = [
   {
     title: '商品ID',
-    dataIndex: 'goods_id',
+    dataIndex: 'goods_id'
   },
   {
     title: '商品名称',
-    dataIndex: 'goods_name',
+    dataIndex: 'goods_name'
   },
   {
     title: '规格名称',
     dataIndex: 'goods_props',
-    scopedSlots: { customRender: 'goods_props' },
+    scopedSlots: { customRender: 'goods_props' }
   },
   {
     title: '商品SKU',
-    dataIndex: 'goods_sku_no',
+    dataIndex: 'goods_sku_no'
   },
   {
     title: '售价',
     dataIndex: 'goods_price',
-    scopedSlots: { customRender: 'goods_price' },
+    scopedSlots: { customRender: 'goods_price' }
   },
   {
     title: '操作',
     dataIndex: 'action',
-    scopedSlots: { customRender: 'action' },
-  },
+    scopedSlots: { customRender: 'action' }
+  }
 ]
 export default {
   components: {
@@ -435,9 +436,9 @@ export default {
     InputNumberGroup,
     MultiSpec,
     SettingGoods,
-    SelectRegion,
+    SelectRegion
   },
-  data() {
+  data () {
     return {
       // 默认的标签索引
       tabKey: 0,
@@ -455,11 +456,11 @@ export default {
       comboColumns,
       comboData: [],
       rebate: 10, // 换算折扣
-      priceShow: true,
+      priceShow: true
     }
   },
   // 初始化数据
-  created() {
+  created () {
     this.isLoading = true
     // 获取form所需的数据
     GoodsModel.getFromData().then(() => {
@@ -467,13 +468,13 @@ export default {
     })
   },
   methods: {
-    changeGoodsSkuNo(e) {
+    changeGoodsSkuNo (e) {
       e.target.value = e.target.value.replace(/\s+/g, '')
       e.target.value = e.target.value.replace(/[\u4E00-\u9FA5]/g, '')
       e.target.value = e.target.value.toUpperCase()
     },
     // 手动强制更新页面
-    onForceUpdate(bool = false) {
+    onForceUpdate (bool = false) {
       this.$forceUpdate()
       // bool为true时再执行一次 $forceUpdate, 特殊情况下需执行两次,原因如下:
       // 第一次执行 $forceUpdate时, 新元素绑定v-decorator无法获取到form.getFieldValue
@@ -484,12 +485,12 @@ export default {
     },
 
     // 切换tab选项卡
-    handleTabs(key) {
+    handleTabs (key) {
       this.tabKey = key
     },
 
     // 刷新分类列表
-    onReloadCategoryList() {
+    onReloadCategoryList () {
       this.isLoading = true
       GoodsModel.getCategoryList().then(() => {
         this.isLoading = false
@@ -497,7 +498,7 @@ export default {
     },
 
     // 刷新服务与承诺列表
-    onReloadServiceList() {
+    onReloadServiceList () {
       this.isLoading = true
       GoodsModel.getServiceList().then(() => {
         this.isLoading = false
@@ -505,7 +506,7 @@ export default {
     },
 
     // 刷新配送模板列表
-    onReloadDeliveryList() {
+    onReloadDeliveryList () {
       this.isLoading = true
       GoodsModel.getDeliveryList().then(() => {
         this.isLoading = false
@@ -513,7 +514,7 @@ export default {
     },
 
     // 刷新供应商列表
-    onReloadProviderList() {
+    onReloadProviderList () {
       this.isLoading = true
       GoodsModel.getProviderList().then(() => {
         this.isLoading = false
@@ -523,11 +524,11 @@ export default {
     /**
      * 确认按钮
      */
-    handleSubmit(e) {
+    handleSubmit (e) {
       e.preventDefault()
       // 表单验证
       const {
-        form: { validateFields },
+        form: { validateFields }
       } = this
       validateFields((errors, values) => {
         // 定位到错误的tab选项卡
@@ -540,11 +541,11 @@ export default {
             this.$message.error('请选择套餐搭配的关联商品', 1.5)
             return
           }
-          let comboArr = []
+          const comboArr = []
           this.comboData.forEach((item) => {
             comboArr.push({
               rel_goods_id: item.goods_id,
-              rel_goods_sku_id: item.goods_sku_id,
+              rel_goods_sku_id: item.goods_sku_id
             })
           })
           values.packageSkuData = comboArr
@@ -579,7 +580,7 @@ export default {
     /**
      * 定位到错误的tab选项卡
      */
-    onTargetTabError(errors) {
+    onTargetTabError (errors) {
       // 表单字段与tabKey对应关系
       // 只需要必填字段就可
       const tabsFieldsMap = [
@@ -592,11 +593,11 @@ export default {
           'unit',
           'cascader',
           'storage',
-          'supplier',
+          'supplier'
         ],
         ['spec_type', 'goods_price', 'line_price', 'goods_sku_no', 'specs'],
         ['content'],
-        ['alone_grade_equity'],
+        ['alone_grade_equity']
       ]
       const field = Object.keys(errors).shift()
       for (const key in tabsFieldsMap) {
@@ -610,17 +611,17 @@ export default {
     /**
      * 提交到后端api
      */
-    onFormSubmit(values) {
-      let that = this
+    onFormSubmit (values) {
+      const that = this
       if (values.spec_type == 10) {
         if (Number(values.goods_weight) > Number(values.goods_gross_weight)) {
           that.$message.error('商品净重量不能大于商品毛重量', 2)
           return
         }
       } else {
-        let skuList = values.specData.skuList
+        const skuList = values.specData.skuList
         for (let i = 0; i < skuList.length; i++) {
-          let item = skuList[i]
+          const item = skuList[i]
           if (item.image_id == 0) {
             that.$message.error('商品规格预览图不能为空', 2)
             return
@@ -650,11 +651,11 @@ export default {
         })
     },
     // 添加套餐关联商品
-    addComob() {
+    addComob () {
       this.$refs.SettingGoods.open(this.comboData)
     },
-    handleSettingGoods() {
-      let selectList = storage.get('selectList')
+    handleSettingGoods () {
+      const selectList = storage.get('selectList')
       selectList.forEach((item) => {
         this.comboData.push({
           goods_id: item.goods_id,
@@ -662,24 +663,24 @@ export default {
           goods_sku_no: item.goods_sku_no,
           goods_name: item.goods_name,
           goods_price: item.goods_price,
-          goods_props: item.goods_props,
+          goods_props: item.goods_props
         })
       })
     },
     // 删除关联商品
-    deleteCombo(index) {
+    deleteCombo (index) {
       const app = this
       const modal = this.$confirm({
         title: '提示',
         content: '确认删除吗?',
         okText: '确定',
         cancelText: '取消',
-        onOk() {
+        onOk () {
           app.comboData.splice(index, 1)
-        },
+        }
       })
     },
-    changeGoodsPrice(e) {
+    changeGoodsPrice (e) {
       if (!e || !this.form.getFieldValue('line_price')) {
         this.priceShow = false
         this.rebate = 0
@@ -688,7 +689,7 @@ export default {
       this.priceShow = true
       this.rebate = ((e / Number(this.form.getFieldValue('line_price'))) * 10).toFixed(2)
     },
-    changeLinePrice(e) {
+    changeLinePrice (e) {
       if (!e || !this.form.getFieldValue('goods_price')) {
         this.priceShow = false
         this.rebate = 0
@@ -698,8 +699,8 @@ export default {
         this.priceShow = true
         this.rebate = ((Number(this.form.getFieldValue('goods_price')) / e) * 10).toFixed(2)
       }
-    },
-  },
+    }
+  }
 }
 </script>
 <style lang="less" scoped>

+ 27 - 26
store/src/views/memberCenter/kimmyDeduct/Index.vue

@@ -4,7 +4,7 @@
       type="primary"
       @click="handleCreate"
       class="addPoster"
-      v-if="isSuper === 1 ||  role=='activity-zy-audit'"
+      v-if="isSuper === 1 || role=='activity-zy-audit'"
     >新建手工扣减单</a-button>
     <!-- 搜索板块 -->
     <a-row class="row-item-search">
@@ -12,10 +12,10 @@
         <a-form-item label="扣减单号">
           <a-input class="inputW150" v-decorator="['number']" placeholder="请输入扣减单号" />
         </a-form-item>
-         <a-form-item label="申请时间">
-            <a-range-picker class="inputW240" format="YYYY-MM-DD" v-decorator="['betweenTime']" />
-          </a-form-item>
-           <a-form-item label="会员ID">
+        <a-form-item label="申请时间">
+          <a-range-picker class="inputW240" format="YYYY-MM-DD" v-decorator="['betweenTime']" />
+        </a-form-item>
+        <a-form-item label="会员ID">
           <a-input class="inputW150" v-decorator="['userId']" placeholder="请输入会员ID" />
         </a-form-item>
         <a-form-item label="审核状态">
@@ -44,12 +44,13 @@
       bordered
     >
       <span slot="start_time" slot-scope="text">
-        <p>{{text}}</p>
+        <p>{{ text }}</p>
       </span>
       <!-- 审核状态 -->
       <span slot="audit_status" slot-scope="text">
-        <p :class="[text == 0 ? 'audit_status_red' : text == 1 ? 'audit_status_black' : 'c-p']"
-        >{{text == 0 ? '待审核' : text == 1 ? '审核通过' : '已拒绝'}}</p>
+        <p
+          :class="[text == 0 ? 'audit_status_red' : text == 1 ? 'audit_status_black' : 'c-p']"
+        >{{ text == 0 ? '待审核' : text == 1 ? '审核通过' : '已拒绝' }}</p>
       </span>
       <!-- 操作项 -->
       <div class="actions" slot="action" slot-scope="text, item">
@@ -60,7 +61,7 @@
     </s-table>
     <!-- 启用禁用弹框 -->
     <a-modal :title="openTitle" :visible="openVisible" @cancel="openCancel" @ok="openOk">
-      <p>{{openContent}}</p>
+      <p>{{ openContent }}</p>
     </a-modal>
   </a-card>
 </template>
@@ -109,7 +110,7 @@ export default {
   components: {
     STable
   },
-  data() {
+  data () {
     return {
       // 当前表单元素
       searchForm: this.$form.createForm(this),
@@ -134,10 +135,10 @@ export default {
     }
   },
   // 初始化数据
-  created() {
+  created () {
     if (this.$store.getters.roles) {
       this.isSuper = this.$store.getters.roles.isSuper
-      let permissions = this.$store.getters.roles.permissions
+      const permissions = this.$store.getters.roles.permissions
       permissions.forEach(item => {
         if (
           item.permissionId == '/memberCenter/kimmyDeduct/index' &&
@@ -150,7 +151,7 @@ export default {
     }
   },
   methods: {
-    handleSearch(e) {
+    handleSearch (e) {
       e.preventDefault()
       this.searchForm.validateFields((error, values) => {
         if (!error) {
@@ -159,7 +160,7 @@ export default {
         }
       })
     },
-    reloadList() {
+    reloadList () {
       this.searchForm.resetFields()
       this.queryParam = {}
       this.handleRefresh(true)
@@ -168,11 +169,11 @@ export default {
      * 刷新列表
      * @param Boolean bool 强制刷新到第一页
      */
-    handleRefresh(bool = false) {
+    handleRefresh (bool = false) {
       this.$refs.table.refresh(bool)
       this.selectedRowKeys = []
     },
-    handleOpen(item) {
+    handleOpen (item) {
       this.openVisible = true
       this.record = item
       if (item.status == 0) {
@@ -183,9 +184,9 @@ export default {
         this.openContent = '确认后活动暂停,前端不展示活动信息'
       }
     },
-    openOk() {
+    openOk () {
       this.isLoading = true
-      let status = this.record.status == 1 ? 0 : 1
+      const status = this.record.status == 1 ? 0 : 1
       Api.status({ id: this.record.id, status: status })
         .then(result => {
           // 显示成功
@@ -198,21 +199,21 @@ export default {
           this.isLoading = false
         })
     },
-    openCancel() {
+    openCancel () {
       this.openVisible = false
     },
-    //新建手工扣减单
-    handleCreate() {
+    // 新建手工扣减单
+    handleCreate () {
       this.$router.push({ path: './create' })
     },
-    //编辑手工扣减单
-    handleEdit(item) {
+    // 编辑手工扣减单
+    handleEdit (item) {
       this.$router.push({ path: './edit', query: { editState: 1, id: item.id } })
     },
-    // 去审核 || 查看详情 
-    handleLook(item) {
+    // 去审核 || 查看详情
+    handleLook (item) {
       this.$router.push({ path: './details', query: { id: item.id } })
-    },
+    }
   }
 }
 </script>

+ 126 - 0
store/src/views/setting/Point.vue

@@ -0,0 +1,126 @@
+<template>
+  <a-card :bordered="false">
+    <div class="card-title">{{ $route.meta.title }}</div>
+    <a-spin :spinning="isLoading">
+      <a-form :form="form" @submit="handleSubmit">
+        <a-form-item label="订单金额兑换积分比例" :labelCol="labelCol" :wrapperCol="wrapperCol" required>
+          <a-input v-decorator="[`pointSetting.points_rate`]" />
+        </a-form-item>
+        <a-form-item label="积分兑换商品金额比例" :labelCol="labelCol" :wrapperCol="wrapperCol" required>
+          <a-input v-decorator="[`pointSetting.points_2_money`]" />
+        </a-form-item>
+
+        <a-form-item :wrapper-col="{ span: wrapperCol.span, offset: labelCol.span }">
+          <a-button type="primary" html-type="submit">提交</a-button>
+        </a-form-item>
+      </a-form>
+    </a-spin>
+  </a-card>
+</template>
+
+<script>
+import { isEmpty } from '@/utils/util'
+import * as Api from '@/api/setting/store'
+
+export default {
+  data () {
+    return {
+      // 当前设置项的key
+      key: 'points_rate',
+      // 标签布局属性
+      labelCol: { span: 4 },
+      // 输入框布局属性
+      wrapperCol: { span: 10 },
+      // loading状态
+      isLoading: false,
+      // 当前表单元素
+      form: this.$form.createForm(this),
+      // 当前记录详情
+      record: {},
+      pointSetting: {
+        points_rate: 0,
+        points_2_money: 0
+      }
+    }
+  },
+  // 初始化数据
+  created () {
+    // 获取当前详情记录
+    this.getDetail()
+  },
+  methods: {
+    // 获取当前详情记录
+    getDetail () {
+      this.isLoading = true
+      Api.detail(this.key)
+        .then((result) => {
+          // 当前记录
+          this.record = result.data.values
+          // 设置默认值
+          this.setFieldsValue()
+        })
+        .finally((result) => {
+          this.isLoading = false
+        })
+    },
+
+    /**
+     * 设置默认值
+     */
+    setFieldsValue () {
+      const { record, $nextTick, form } = this
+      !isEmpty(form.getFieldsValue()) &&
+        $nextTick(() => {
+          form.setFieldsValue({
+            pointSetting: record
+          })
+        })
+    },
+
+    /**
+     * 确认按钮
+     */
+    handleSubmit (e) {
+      e.preventDefault()
+      // 表单验证
+      const {
+        form: { validateFields }
+      } = this
+      validateFields((errors, values) => {
+        // 提交到后端api
+        !errors && this.onFormSubmit(values)
+      })
+    },
+
+    /**
+     * 提交到后端api
+     */
+    onFormSubmit (values) {
+      this.isLoading = true
+      Api.update(this.key, { form: values })
+        .then((result) => {
+          // 显示提示信息
+          this.$message.success(result.message, 1.5)
+        })
+        .finally((result) => {
+          this.isLoading = false
+        })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+.ant-form-item {
+  margin-bottom: 10px;
+}
+/deep/.ant-form-item-control {
+  padding-left: 10px;
+
+  .ant-form-item-control {
+    padding-left: 0;
+  }
+}
+.ant-divider {
+  margin-top: 50px !important;
+}
+</style>

+ 8 - 6
store/vue.config.js

@@ -4,7 +4,7 @@ const GitRevisionPlugin = require('git-revision-webpack-plugin')
 const GitRevision = new GitRevisionPlugin()
 const buildDate = JSON.stringify(new Date().toLocaleString())
 const createThemeColorReplacerPlugin = require('./config/plugin.config')
-const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
+const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
 
 function resolve (dir) {
   return path.join(__dirname, dir)
@@ -32,7 +32,7 @@ const assetsCDN = {
     '//lib.baomitu.com/vue/2.6.10/vue.min.js',
     '//lib.baomitu.com/vue-router/3.1.3/vue-router.min.js',
     '//lib.baomitu.com/vuex/3.1.1/vuex.min.js',
-    '//lib.baomitu.com/axios/0.19.0/axios.min.js',
+    '//lib.baomitu.com/axios/0.19.0/axios.min.js'
   ]
 }
 
@@ -45,7 +45,10 @@ const vueConfig = {
     // webpack plugins
     plugins: [
       // Ignore all locale files of moment.js
-      new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
+      new webpack.IgnorePlugin({
+        resourceRegExp: /^\.\/locale$/,
+        contextRegExp: /moment$/
+      }),
       new BundleAnalyzerPlugin()
       // new webpack.DefinePlugin({
       //   APP_VERSION: `"${require('./package.json').version}"`,
@@ -58,8 +61,7 @@ const vueConfig = {
   },
 
   chainWebpack: (config) => {
-    config.resolve.alias
-      .set('@$', resolve('src'))
+    config.resolve.alias.set('@$', resolve('src'))
 
     const svgRule = config.module.rule('svg')
     svgRule.uses.clear()
@@ -80,7 +82,7 @@ const vueConfig = {
     // if prod is on
     // assets require on cdn
     if (isProd) {
-      config.plugin('html').tap(args => {
+      config.plugin('html').tap((args) => {
         args[0].cdn = assetsCDN
         return args
       })

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است