lrf 2 سال پیش
والد
کامیت
f8e56dfcac

+ 7 - 1
src/layout/data/menu.js

@@ -10,7 +10,7 @@ export const adminMenu = [
   {
     icon: 'icon-shouye',
     // path: '/',
-    name: '系统管理',
+    name: '平台管理',
     index: '2',
     type: '0',
     children: [
@@ -32,6 +32,12 @@ export const adminMenu = [
         name: '商品标签',
         index: '2-3',
       },
+      {
+        icon: 'icon-rencai',
+        path: '/system/coupon',
+        name: '优惠券管理',
+        index: '2-4',
+      },
     ],
   },
   {

+ 10 - 4
src/router/module/system.js

@@ -8,25 +8,31 @@ export default [
   {
     path: '/system/banner/detail',
     name: 'system_banner_detail',
-    meta: { title: '系统管理-广告图-维护信息' },
+    meta: { title: '平台管理-广告图-维护信息' },
     component: () => import(/* webpackChunkName: "system_banner_detail" */ '@/views/system/banner/detail.vue'),
   },
   {
     path: '/system/indexModule',
     name: 'system_indexModule',
-    meta: { title: '系统管理-首页图标设置' },
+    meta: { title: '平台管理-首页图标设置' },
     component: () => import(/* webpackChunkName: "system_indexModule" */ '@/views/system/indexModule/index.vue'),
   },
   {
     path: '/system/indexModule/detail',
     name: 'system_indexModule_detail',
-    meta: { title: '系统管理-首页图标设置-维护信息' },
+    meta: { title: '平台管理-首页图标设置-维护信息' },
     component: () => import(/* webpackChunkName: "system_indexModule_detail" */ '@/views/system/indexModule/detail.vue'),
   },
   {
     path: '/system/goodsTags',
     name: 'system_goodsTags',
-    meta: { title: '系统管理-首页图标设置' },
+    meta: { title: '平台管理-首页图标设置' },
     component: () => import(/* webpackChunkName: "system_goodsTags" */ '@/views/system/goodsTags/index.vue'),
   },
+  {
+    path: '/system/coupon',
+    name: 'system_coupon',
+    meta: { title: '平台管理-优惠券管理' },
+    component: () => import(/* webpackChunkName: "system_goodsTags" */ '@/views/system/coupon/index.vue'),
+  },
 ];

+ 4 - 2
src/store/index.js

@@ -15,8 +15,9 @@ import shop from './module/shop/shop';
 import selfShop from './module/shop/selfShop';
 import goods from './module/shop/goods';
 import goodsSpec from './module/shop/goodsSpec';
-import order from './module/shop/order';
-import orderDetail from './module/shop/orderDetail';
+import order from './module/trade/order';
+import orderDetail from './module/trade/orderDetail';
+import coupon from './module/trade/coupon';
 Vue.use(Vuex);
 
 export default new Vuex.Store({
@@ -36,5 +37,6 @@ export default new Vuex.Store({
     goodsSpec,
     order,
     orderDetail,
+    coupon,
   },
 });

+ 44 - 0
src/store/module/trade/coupon.js

@@ -0,0 +1,44 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+const _ = require('lodash');
+Vue.use(Vuex);
+const api = {
+  url: '/point/v1/api/coupon',
+};
+
+const state = () => ({});
+const mutations = {};
+
+const actions = {
+  async query({ commit }, { skip = 0, limit, ...info } = {}) {
+    const res = await this.$axios.$get(`${api.url}`, {
+      skip,
+      limit,
+      ...info,
+    });
+    return res;
+  },
+  async create({ commit }, payload) {
+    const res = await this.$axios.$post(`${api.url}`, payload);
+    return res;
+  },
+  async fetch({ commit }, payload) {
+    const res = await this.$axios.$get(`${api.url}/${payload}`);
+    return res;
+  },
+  async update({ commit }, payload) {
+    const id = _.get(payload, 'id', _.get(payload, '_id'));
+    const res = await this.$axios.$post(`${api.url}/${id}`, payload);
+    return res;
+  },
+  async delete({ commit }, payload) {
+    const res = await this.$axios.$delete(`${api.url}/${payload}`);
+    return res;
+  },
+};
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};

src/store/module/shop/order.js → src/store/module/trade/order.js


src/store/module/shop/orderDetail.js → src/store/module/trade/orderDetail.js


+ 1 - 1
src/views/dev/dict/data.vue

@@ -12,7 +12,7 @@
         </template>
       </data-search>
       <data-btn :fields="btnFields" @add="toAdd" />
-      <data-table ref="dataTable" :fields="fields" :opera="opera" :data="list" :total="total" @edit="toEdit" @delete="toDelete"> </data-table>
+      <data-table ref="dataTable" :fields="fields" :opera="opera" :data="list" :total="total" @edit="toEdit" @delete="toDelete" @query="search"> </data-table>
     </template>
     <template v-else>
       <el-row>

+ 1 - 1
src/views/dev/dict/index.vue

@@ -7,7 +7,7 @@
         </template>
       </data-search>
       <data-btn :fields="btnFields" @add="toAdd" />
-      <data-table ref="dataTable" :fields="fields" :opera="opera" :data="list" :total="total" @edit="toEdit" @delete="toDelete">
+      <data-table ref="dataTable" :fields="fields" :opera="opera" :data="list" :total="total" @edit="toEdit" @delete="toDelete" @query="search">
         <template #code="{ row, item }">
           <el-link type="primary" @click="toData(row)">{{ row[item.model] }}</el-link>
         </template>

+ 1 - 1
src/views/selfShop/goods/spec.vue

@@ -12,7 +12,7 @@
         </template>
       </data-search>
       <data-btn :fields="btnFields" @add="toAdd" />
-      <data-table ref="dataTable" :fields="fields" :opera="opera" :data="list" :total="total" @edit="toEdit" @delete="toDelete">
+      <data-table ref="dataTable" :fields="fields" :opera="opera" :data="list" :total="total" @edit="toEdit" @delete="toDelete" @query="search">
         <template #code="{ row, item }">
           <el-link type="primary" @click="toData(row)">{{ row[item.model] }}</el-link>
         </template>

+ 96 - 0
src/views/system/coupon/index.vue

@@ -0,0 +1,96 @@
+<template>
+  <div id="index">
+    <template v-if="view === 'list'">
+      <data-search :fields="searchFields" v-model="searchInfo" @query="search">
+        <template #status>
+          <el-option v-for="i in statusList" :key="i.model" :label="i.label" :value="i.value"></el-option>
+        </template>
+      </data-search>
+      <data-btn :fields="btnFields" @add="toAdd" />
+      <data-table ref="dataTable" :fields="fields" :opera="opera" :data="list" :total="total" @edit="toEdit" @delete="toDelete" @query="search">
+        <template #code="{ row, item }">
+          <el-link type="primary" @click="toData(row)">{{ row[item.model] }}</el-link>
+        </template>
+      </data-table>
+    </template>
+    <template v-else>
+      <el-row>
+        <el-col :span="24">
+          <el-button icon="el-icon-back" size="mini" @click="toBack()">返回</el-button>
+        </el-col>
+        <el-col :span="24">
+          <data-form :span="12" :fields="infoFields" :rules="rules" v-model="form" labelWidth="150px" @save="toSave">
+            <template #status>
+              <el-option v-for="i in statusList" :key="i.model" :label="i.label" :value="i.value"></el-option>
+            </template>
+          </data-form>
+        </el-col>
+      </el-row>
+    </template>
+  </div>
+</template>
+
+<script>
+const _ = require('lodash');
+import methodUtil from '@/util/opera';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions } = createNamespacedHelpers('coupon');
+const { mapActions: dictData } = createNamespacedHelpers('dictData');
+export default {
+  name: 'index',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      view: 'list',
+      fields: [
+        { label: '显示名称', model: 'label' },
+        { label: '标签编码', model: 'code', custom: true },
+        { label: '状态', model: 'status', format: (i) => (i === '0' ? '使用中' : '已禁用') },
+      ],
+      opera: [
+        { label: '修改', method: 'edit' },
+        { label: '删除', method: 'delete', confirm: true, type: 'danger' },
+      ],
+      list: [],
+      total: 0,
+      limit: 20,
+      btnFields: [{ label: '添加', method: 'add' }],
+      defaultSearch: {},
+      searchInfo: {},
+      searchFields: [
+        { label: '显示名称', model: 'label' },
+        { label: '标签编码', model: 'code' },
+        { label: '状态', model: 'status', type: 'select' },
+      ],
+      infoFields: [
+        { label: '显示名称', model: 'label' },
+        { label: '标签编码', model: 'code' },
+        { label: '状态', model: 'status', type: 'select' },
+      ],
+      rules: {},
+      form: {},
+      statusList: [],
+
+      levelList: [],
+    };
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  created() {
+    this.searchOthers();
+    this.search();
+  },
+  methods: {
+    ...mapActions(['query', 'fetch', 'create', 'update', 'delete']),
+    ...dictData({ getDict: 'query' }),
+    ..._.cloneDeep(methodUtil),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 1 - 1
src/views/system/goodsTags/index.vue

@@ -12,7 +12,7 @@
         </template>
       </data-search>
       <data-btn :fields="btnFields" @add="toAdd" />
-      <data-table ref="dataTable" :fields="fields" :opera="opera" :data="list" :total="total" @edit="toEdit" @delete="toDelete">
+      <data-table ref="dataTable" :fields="fields" :opera="opera" :data="list" :total="total" @edit="toEdit" @delete="toDelete" @query="search">
         <template #code="{ row, item }">
           <el-link type="primary" @click="toData(row)">{{ row[item.model] }}</el-link>
         </template>