Преглед изворни кода

feat: #基础页面框架写入

loki пре 3 година
родитељ
комит
eeb5a4e119
59 измењених фајлова са 2945 додато и 407 уклоњено
  1. 110 93
      src/containers/ToolbarContainer.vue
  2. 17 17
      src/main.js
  3. 0 2
      src/permission.js
  4. 362 96
      src/router/index.js
  5. 0 1
      src/store/modules/permission.js
  6. 84 0
      src/views/baseManagement/bannerManagement/index.vue
  7. 22 0
      src/views/baseManagement/bannerManagement/toolbar.vue
  8. 83 0
      src/views/baseManagement/infoManagement/index.vue
  9. 34 0
      src/views/baseManagement/infoManagement/toolbar.vue
  10. 59 0
      src/views/baseManagement/problemFeedbackManagement/index.vue
  11. 35 0
      src/views/baseManagement/problemFeedbackManagement/toolbar.vue
  12. 59 0
      src/views/financialManagement/fundDetail/index.vue
  13. 35 0
      src/views/financialManagement/fundDetail/toolbar.vue
  14. 59 0
      src/views/financialManagement/orderManagement/index.vue
  15. 35 0
      src/views/financialManagement/orderManagement/toolbar.vue
  16. 78 0
      src/views/helpInfo/information/index.vue
  17. 29 0
      src/views/helpInfo/information/toolbar.vue
  18. 78 0
      src/views/helpInfo/issueType/index.vue
  19. 29 0
      src/views/helpInfo/issueType/toolbar.vue
  20. 78 0
      src/views/memberManagement/memberLever/index.vue
  21. 22 0
      src/views/memberManagement/memberLever/toolbar.vue
  22. 99 0
      src/views/memberManagement/memberList/index.vue
  23. 55 0
      src/views/memberManagement/memberList/toolbar.vue
  24. 0 7
      src/views/nested/menu1/index.vue
  25. 0 7
      src/views/nested/menu1/menu1-1/index.vue
  26. 0 7
      src/views/nested/menu1/menu1-2/index.vue
  27. 0 5
      src/views/nested/menu1/menu1-2/menu1-2-1/index.vue
  28. 0 5
      src/views/nested/menu1/menu1-2/menu1-2-2/index.vue
  29. 0 5
      src/views/nested/menu1/menu1-3/index.vue
  30. 0 5
      src/views/nested/menu2/index.vue
  31. 59 0
      src/views/photoManagement/eventsList/index.vue
  32. 35 0
      src/views/photoManagement/eventsList/toolbar.vue
  33. 59 0
      src/views/photoManagement/imageGoodsManagement/index.vue
  34. 35 0
      src/views/photoManagement/imageGoodsManagement/toolbar.vue
  35. 59 0
      src/views/photoManagement/uploadManagement/index.vue
  36. 35 0
      src/views/photoManagement/uploadManagement/toolbar.vue
  37. 74 0
      src/views/photographerManagement/photoVerify/index.vue
  38. 34 0
      src/views/photographerManagement/photoVerify/toolbar.vue
  39. 89 0
      src/views/photographerManagement/photographerVerify/index.vue
  40. 34 0
      src/views/photographerManagement/photographerVerify/toolbar.vue
  41. 89 0
      src/views/pointsManagement/pointsDetail/index.vue
  42. 34 0
      src/views/pointsManagement/pointsDetail/toolbar.vue
  43. 88 0
      src/views/pointsManagement/pointsSetting/index.vue
  44. 88 0
      src/views/sceneManagement/sceneList/index.vue
  45. 44 0
      src/views/sceneManagement/sceneList/toolbar.vue
  46. 79 0
      src/views/sceneManagement/sceneVerify/index.vue
  47. 43 0
      src/views/sceneManagement/sceneVerify/toolbar.vue
  48. 59 0
      src/views/statistics/downloadImage/index.vue
  49. 35 0
      src/views/statistics/downloadImage/toolbar.vue
  50. 59 0
      src/views/statistics/uploadImage/index.vue
  51. 35 0
      src/views/statistics/uploadImage/toolbar.vue
  52. 59 0
      src/views/statistics/withdrawalRecord/index.vue
  53. 35 0
      src/views/statistics/withdrawalRecord/toolbar.vue
  54. 83 0
      src/views/systemManagement/accountManagement/index.vue
  55. 34 0
      src/views/systemManagement/accountManagement/toolbar.vue
  56. 84 0
      src/views/systemManagement/roleManagement/index.vue
  57. 22 0
      src/views/systemManagement/roleManagement/toolbar.vue
  58. 0 79
      src/views/table/index.vue
  59. 0 78
      src/views/tree/index.vue

+ 110 - 93
src/containers/ToolbarContainer.vue

@@ -1,77 +1,84 @@
 <template>
-  <el-form label-position="right" label-width="0" :model="form">
-    <el-row :gutter="20">
-      <el-col
-        v-for="field in fields"
-        :key="field.name"
-        :span="field.col || 8"
-        class="h-70"
-      >
-        <el-form-item
-          :label="field.label"
-          :label-width="
-            field.labelWidth ? field.labelWidth : field.label && '80px'
-          "
+  <el-form
+    :class="fields.length > 0 ? 'm-10 p-20 br-10 bg-w' : ''"
+    label-position="right"
+    label-width="0"
+    :model="form"
+  >
+    <div class="f-sb-fs">
+      <el-row class="f-1" :gutter="20">
+        <el-col
+          v-for="field in fields"
+          :key="field.name"
+          :span="field.col || 8"
+          class="h-50"
         >
-          <!-- 输入文本 -->
-          <el-input
-            v-if="field.type === 'text'"
-            v-model="form[field.name]"
-            :clearable="true"
-            :placeholder="'请输入' + field.label"
-          />
-
-          <!-- 单选 -->
-          <el-select
-            v-if="field.type === 'select'"
-            v-model="form[field.name]"
-            :clearable="true"
-            :placeholder="'请选择' + field.label"
+          <el-form-item
+            :label="field.label"
+            :label-width="
+              field.labelWidth ? field.labelWidth : field.label && '80px'
+            "
           >
-            <el-option
-              v-for="item in field.options"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
+            <!-- 输入文本 -->
+            <el-input
+              v-if="field.type === 'text'"
+              v-model="form[field.name]"
+              :clearable="true"
+              :placeholder="'请输入' + field.label"
+            />
+
+            <!-- 单选 -->
+            <el-select
+              v-if="field.type === 'select'"
+              v-model="form[field.name]"
+              :clearable="true"
+              :placeholder="'请选择' + field.label"
             >
-            </el-option>
-          </el-select>
+              <el-option
+                v-for="item in field.options"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
 
-          <!-- 多选 -->
-          <el-select
-            v-if="field.type === 'multipleSelect'"
-            v-model="form[field.name]"
-            multiple
-            collapse-tags
-            :clearable="true"
-            :placeholder="'请选择' + field.label"
-          >
-            <el-option
-              v-for="item in field.options"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
+            <!-- 多选 -->
+            <el-select
+              v-if="field.type === 'multipleSelect'"
+              v-model="form[field.name]"
+              multiple
+              collapse-tags
+              :clearable="true"
+              :placeholder="'请选择' + field.label"
             >
-            </el-option>
-          </el-select>
+              <el-option
+                v-for="item in field.options"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
 
-          <!-- 时间选择器 -->
-          <el-date-picker
-            v-if="field.type === 'dateArray'"
-            v-model="form[field.name]"
-            type="datetimerange"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-          >
-          </el-date-picker>
-        </el-form-item>
-      </el-col>
-    </el-row>
-    <div class="f-fe-c prow-10">
-      <el-button v-if="showSearch" type="primary" @click="handleSubmit"
-        >查询</el-button
-      >
-      <el-button v-if="showReset" @click="handleReset">重置</el-button>
+            <!-- 时间选择器 -->
+            <el-date-picker
+              v-if="field.type === 'dateArray'"
+              v-model="form[field.name]"
+              type="datetimerange"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+            >
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <div class="f-fe-c pl-40">
+        <el-button v-if="showSearch" type="primary" @click="handleSubmit"
+          >查询</el-button
+        >
+        <el-button v-if="showReset" @click="handleReset">重置</el-button>
+      </div>
     </div>
   </el-form>
 </template>
@@ -147,38 +154,48 @@ export default {
     },
 
     getFormData() {
-      const filter = this.fields.reduce(
-        (init, { name, apiName, type, format }) => {
-          const values = this.form[name];
-          const key = apiName || name;
-          let temp = null;
+      const filter =
+        this.fields.length > 0
+          ? this.fields.reduce((init, { name, apiName, type, format }) => {
+              const values = this.form[name];
+              const key = apiName || name;
+              let temp = null;
 
-          if (type === 'dateArray') {
-            temp = [];
-            apiName.forEach((x, i) => {
-              temp.push(values && values[i]);
-            });
-          } else {
-            temp = values || values === 0 ? values : null;
-          }
-          const val = format ? format(values, temp) : temp;
-          if (typeof key === 'string') {
-            init[key] = val;
-          } else {
-            key.forEach((x, i) => {
-              init[x] = val[i];
-            });
-          }
-          return init;
-        }
-      );
+              if (type === 'dateArray') {
+                temp = [];
+                apiName.forEach((x, i) => {
+                  temp.push(values && values[i]);
+                });
+              } else {
+                temp = values || values === 0 ? values : null;
+              }
+              const val = format ? format(values, temp) : temp;
+              if (typeof key === 'string') {
+                init[key] = val;
+              } else {
+                key.forEach((x, i) => {
+                  init[x] = val[i];
+                });
+              }
+              return init;
+            })
+          : [];
     }
   }
 };
 </script>
 
 <style scoped lang="scss">
-.h-70 {
-  height: 70px;
+.f-1 {
+  flex: 1;
+}
+.h-50 {
+  height: 50px;
+}
+.el-select {
+  width: 100%;
+}
+.el-range-editor.el-input__inner {
+  width: 100%;
 }
 </style>

+ 17 - 17
src/main.js

@@ -1,19 +1,19 @@
-import Vue from 'vue'
+import Vue from 'vue';
 
-import 'normalize.css/normalize.css' // A modern alternative to CSS resets
+import 'normalize.css/normalize.css'; // A modern alternative to CSS resets
 
-import ElementUI from 'element-ui'
-import 'element-ui/lib/theme-chalk/index.css'
-import locale from 'element-ui/lib/locale/lang/en' // lang i18n
+import ElementUI from 'element-ui';
+import 'element-ui/lib/theme-chalk/index.css';
+import locale from 'element-ui/lib/locale/lang/en'; // lang i18n
 
-import '@/styles/index.scss' // global css
+import '@/styles/index.scss'; // global css
 
-import App from './App'
-import store from './store'
-import router from './router'
+import App from './App';
+import store from './store';
+import router from './router';
 
-import '@/icons' // icon
-import '@/permission' // permission control
+import '@/icons'; // icon
+import '@/permission'; // permission control
 
 import './components';
 import './containers';
@@ -27,20 +27,20 @@ import './containers';
  * please remove it before going online ! ! !
  */
 if (process.env.NODE_ENV === 'production') {
-  const { mockXHR } = require('../mock')
-  mockXHR()
+  const { mockXHR } = require('../mock');
+  mockXHR();
 }
 
 // set ElementUI lang to EN
-Vue.use(ElementUI, { locale })
+// Vue.use(ElementUI, { locale })
 // 如果想要中文版 element-ui,按如下方式声明
-// Vue.use(ElementUI)
+Vue.use(ElementUI, { size: 'small', zIndex: 3000 });
 
-Vue.config.productionTip = false
+Vue.config.productionTip = false;
 
 new Vue({
   el: '#app',
   router,
   store,
   render: h => h(App)
-})
+});

+ 0 - 2
src/permission.js

@@ -41,8 +41,6 @@ router.beforeEach(async (to, from, next) => {
             roles
           );
 
-          console.error(accessRoutes);
-
           // dynamically add accessible routes
           router.addRoutes(accessRoutes);
 

+ 362 - 96
src/router/index.js

@@ -61,155 +61,421 @@ export const constantRoutes = [
   },
 
   {
-    path: '/example',
+    path: '/form',
+    component: Layout,
+    children: [
+      {
+        path: 'index',
+        name: 'Form',
+        component: () => import('@/views/form/index'),
+        meta: {
+          title: 'Form',
+          icon: 'form'
+        }
+      }
+    ]
+  },
+  {
+    path: '/baseManagement',
+    component: Layout,
+    redirect: '/baseManagement/BannerManagement',
+    name: '基础管理',
+    meta: {
+      title: '基础管理',
+      icon: 'el-icon-s-help'
+    },
+    children: [
+      {
+        path: 'BannerManagement',
+        name: 'Banner管理',
+        component: () =>
+          import('@/views/baseManagement/bannerManagement/index'),
+        meta: {
+          title: 'Banner管理'
+          // icon: 'table'
+        }
+      },
+      {
+        path: 'InfoManagement',
+        name: '资讯管理',
+        component: () => import('@/views/baseManagement/infoManagement/index'),
+        meta: {
+          title: '资讯管理'
+          // icon: 'tree'
+        }
+      },
+      {
+        path: 'ProblemFeedbackManagement',
+        name: '问题反馈管理',
+        component: () =>
+          import('@/views/baseManagement/problemFeedbackManagement/index'),
+        meta: {
+          title: '问题反馈管理'
+          // icon: 'tree'
+        }
+      }
+    ]
+  },
+  {
+    path: '/photographerManagement',
     component: Layout,
-    redirect: '/example/table',
-    name: 'Example',
+    redirect: '/photographerManagement/PhotographerVerify',
+    name: '摄影师管理',
     meta: {
-      title: 'Example',
+      title: '摄影师管理',
       icon: 'el-icon-s-help'
     },
     children: [
       {
-        path: 'table',
-        name: 'Table',
-        component: () => import('@/views/table/index'),
+        path: 'PhotographerVerify',
+        name: '摄影师审核',
+        component: () =>
+          import('@/views/photographerManagement/photographerVerify/index'),
         meta: {
-          title: 'Table',
-          icon: 'table'
+          title: '摄影师审核'
+          // icon: 'table'
         }
       },
       {
-        path: 'tree',
-        name: 'Tree',
-        component: () => import('@/views/tree/index'),
+        path: 'PhotoVerify',
+        name: '照片管理',
+        component: () =>
+          import('@/views/photographerManagement/photoVerify/index'),
         meta: {
-          title: 'Tree',
-          icon: 'tree'
+          title: '照片管理'
+          // icon: 'tree'
         }
       }
     ]
   },
 
   {
-    path: '/form',
+    path: '/pointsManagement',
     component: Layout,
+    redirect: '/pointsManagement/PointsDetail',
+    name: '积分管理',
+    meta: {
+      title: '积分管理',
+      icon: 'el-icon-s-help'
+    },
     children: [
       {
-        path: 'index',
-        name: 'Form',
-        component: () => import('@/views/form/index'),
+        path: 'PointsDetail',
+        name: '积分明细',
+        component: () => import('@/views/pointsManagement/pointsDetail/index'),
         meta: {
-          title: 'Form',
-          icon: 'form'
+          title: '积分明细'
+          // icon: 'table'
+        }
+      },
+      {
+        path: 'PointsSetting',
+        name: '积分设置',
+        component: () => import('@/views/pointsManagement/pointsSetting/index'),
+        meta: {
+          title: '积分设置'
+          // icon: 'tree'
         }
       }
     ]
   },
 
-  // 404 page must be placed at the end !!!
   {
-    path: '*',
-    redirect: '/404',
-    hidden: true
-  }
-];
+    path: '/sceneManagement',
+    component: Layout,
+    redirect: '/sceneManagement/SceneList',
+    name: '场景管理',
+    meta: {
+      title: '场景管理',
+      icon: 'el-icon-s-help'
+    },
+    children: [
+      {
+        path: 'SceneList',
+        name: '场景列表',
+        component: () => import('@/views/sceneManagement/sceneList/index'),
+        meta: {
+          title: '场景列表'
+          // icon: 'table'
+        }
+      },
+      {
+        path: 'SceneVerify',
+        name: '场景审核',
+        component: () => import('@/views/sceneManagement/sceneVerify/index'),
+        meta: {
+          title: '场景审核'
+          // icon: 'tree'
+        }
+      }
+    ]
+  },
+
+  {
+    path: '/memberManagement',
+    component: Layout,
+    redirect: '/memberManagement/MemberLever',
+    name: '会员管理',
+    meta: {
+      title: '会员管理',
+      icon: 'el-icon-s-help'
+    },
+    children: [
+      {
+        path: 'MemberLever',
+        name: '会员等级',
+        component: () => import('@/views/memberManagement/memberLever/index'),
+        meta: {
+          title: '会员等级'
+          // icon: 'table'
+        }
+      },
+      {
+        path: 'MemberList',
+        name: '会员列表',
+        component: () => import('@/views/memberManagement/memberList/index'),
+        meta: {
+          title: '会员列表'
+          // icon: 'tree'
+        }
+      }
+    ]
+  },
+
+  {
+    path: '/helpInfo',
+    component: Layout,
+    redirect: '/helpInfo/IssueType',
+    name: '帮助信息',
+    meta: {
+      title: '帮助信息',
+      icon: 'el-icon-s-help'
+    },
+    children: [
+      {
+        path: 'IssueType',
+        name: '问题分类',
+        component: () => import('@/views/helpInfo/issueType/index'),
+        meta: {
+          title: '问题分类'
+          // icon: 'table'
+        }
+      },
+      {
+        path: 'Information',
+        name: '信息内容',
+        component: () => import('@/views/helpInfo/information/index'),
+        meta: {
+          title: '信息内容'
+          // icon: 'tree'
+        }
+      }
+    ]
+  },
 
-/**
- * asyncRoutes
- * the routes that need to be dynamically loaded based on user roles
- */
-export const asyncRoutes = [
   {
-    path: '/nested',
+    path: '/systemManagement',
     component: Layout,
-    redirect: '/nested/menu1',
-    name: 'Nested',
+    redirect: '/systemManagement/AccountManagement',
+    name: '系统管理',
     meta: {
-      title: 'Nested',
-      icon: 'nested'
+      title: '系统管理',
+      icon: 'el-icon-s-help'
     },
     children: [
       {
-        path: 'menu1',
-        component: () => import('@/views/nested/menu1/index'), // Parent router-view
-        name: 'Menu1',
-        meta: {
-          title: 'Menu1'
-        },
-        children: [
-          {
-            path: 'menu1-1',
-            component: () => import('@/views/nested/menu1/menu1-1'),
-            name: 'Menu1-1',
-            meta: {
-              title: 'Menu1-1'
-            }
-          },
-          {
-            path: 'menu1-2',
-            component: () => import('@/views/nested/menu1/menu1-2'),
-            name: 'Menu1-2',
-            meta: {
-              title: 'Menu1-2'
-            },
-            children: [
-              {
-                path: 'menu1-2-1',
-                component: () =>
-                  import('@/views/nested/menu1/menu1-2/menu1-2-1'),
-                name: 'Menu1-2-1',
-                meta: {
-                  title: 'Menu1-2-1'
-                }
-              },
-              {
-                path: 'menu1-2-2',
-                component: () =>
-                  import('@/views/nested/menu1/menu1-2/menu1-2-2'),
-                name: 'Menu1-2-2',
-                meta: {
-                  title: 'Menu1-2-2'
-                }
-              }
-            ]
-          },
-          {
-            path: 'menu1-3',
-            component: () => import('@/views/nested/menu1/menu1-3'),
-            name: 'Menu1-3',
-            meta: {
-              title: 'Menu1-3'
-            }
-          }
-        ]
+        path: 'AccountManagement',
+        name: '账号列表',
+        component: () =>
+          import('@/views/systemManagement/accountManagement/index'),
+        meta: {
+          title: '账号列表'
+          // icon: 'table'
+        }
       },
       {
-        path: 'menu2',
-        component: () => import('@/views/nested/menu2/index'),
-        name: 'Menu2',
+        path: 'RoleManagement',
+        name: '角色列表',
+        component: () =>
+          import('@/views/systemManagement/roleManagement/index'),
         meta: {
-          title: 'menu2'
+          title: '角色列表'
+          // icon: 'tree'
         }
       }
     ]
   },
 
   {
-    path: 'external-link',
+    path: '/photoManagement',
     component: Layout,
+    redirect: '/photoManagement/ImageGoodsManagement',
+    name: '图片库管理',
+    meta: {
+      title: '图片库管理',
+      icon: 'el-icon-s-help'
+    },
     children: [
       {
-        path: 'https://panjiachen.github.io/vue-element-admin-site/#/',
+        path: 'ImageGoodsManagement',
+        name: '照片商品管理',
+        component: () =>
+          import('@/views/photoManagement/imageGoodsManagement/index'),
+        meta: {
+          title: '照片商品管理'
+          // icon: 'table'
+        }
+      },
+      {
+        path: 'EventsList',
+        name: '活动列表',
+        component: () => import('@/views/photoManagement/eventsList/index'),
+        meta: {
+          title: '活动列表'
+          // icon: 'tree'
+        }
+      },
+      {
+        path: 'UploadManagement',
+        name: '上传照片管理',
+        component: () =>
+          import('@/views/photoManagement/uploadManagement/index'),
         meta: {
-          title: 'External Link',
-          icon: 'link'
+          title: '上传照片管理'
+          // icon: 'tree'
         }
       }
     ]
+  },
+
+  {
+    path: 'financialManagement',
+    component: Layout,
+    redirect: '/financialManagement/OrderManagement',
+    name: '财务管理',
+    meta: {
+      title: '财务管理',
+      icon: 'el-icon-s-help'
+    },
+    children: [
+      {
+        path: 'OrderManagement',
+        name: '订单列表',
+        component: () =>
+          import('@/views/financialManagement/orderManagement/index'),
+        meta: {
+          title: '订单列表'
+          // icon: 'table'
+        }
+      },
+      {
+        path: 'FundDetail',
+        name: '资金明细',
+        component: () => import('@/views/financialManagement/fundDetail/index'),
+        meta: {
+          title: '资金明细'
+          // icon: 'tree'
+        }
+      }
+    ]
+  },
+
+  {
+    path: 'statistics',
+    component: Layout,
+    redirect: '/statistics/DownloadImage',
+    name: '数据统计',
+    meta: {
+      title: '数据统计',
+      icon: 'el-icon-s-help'
+    },
+    children: [
+      {
+        path: 'DownloadImage',
+        name: '下载照片',
+        component: () => import('@/views/statistics/downloadImage/index'),
+        meta: {
+          title: '下载照片'
+          // icon: 'table'
+        }
+      },
+      {
+        path: 'UploadImage',
+        name: '上传照片',
+        component: () => import('@/views/statistics/uploadImage/index'),
+        meta: {
+          title: '上传照片'
+          // icon: 'tree'
+        }
+      },
+      {
+        path: 'WithdrawalRecord',
+        name: '提现记录',
+        component: () => import('@/views/statistics/withdrawalRecord/index'),
+        meta: {
+          title: '提现记录'
+          // icon: 'tree'
+        }
+      }
+    ]
+  },
+
+  // 404 page must be placed at the end !!!
+  {
+    path: '*',
+    redirect: '/404',
+    hidden: true
   }
 ];
 
+/**
+ * asyncRoutes
+ * the routes that need to be dynamically loaded based on user roles
+ */
+export const asyncRoutes = [
+  // {
+  //   path: '/example',
+  //   component: Layout,
+  //   redirect: '/example/table',
+  //   name: '基础管理',
+  //   meta: {
+  //     title: '基础管理',
+  //     icon: 'el-icon-s-help'
+  //   },
+  //   children: [
+  //     {
+  //       path: 'BannerManagement',
+  //       name: 'Banner管理',
+  //       component: () =>
+  //         import('@/views/baseManagement/bannerManagement/index'),
+  //       meta: {
+  //         title: 'Banner管理'
+  //         // icon: 'table'
+  //       }
+  //     },
+  //     {
+  //       path: 'InfoManagement',
+  //       name: '资讯管理',
+  //       component: () => import('@/views/baseManagement/infoManagement/index'),
+  //       meta: {
+  //         title: '资讯管理'
+  //         // icon: 'tree'
+  //       }
+  //     },
+  //     {
+  //       path: 'ProblemFeedbackManagement',
+  //       name: '问题反馈管理',
+  //       component: () =>
+  //         import('@/views/baseManagement/problemFeedbackManagement/index'),
+  //       meta: {
+  //         title: '问题反馈管理'
+  //         // icon: 'tree'
+  //       }
+  //     }
+  //   ]
+  // }
+];
+
 const createRouter = () =>
   new Router({
     // mode: 'history', // require service support

+ 0 - 1
src/store/modules/permission.js

@@ -48,7 +48,6 @@ const mutations = {
 
 const actions = {
   generateRoutes({ commit }, roles) {
-    console.warn(roles);
     return new Promise(resolve => {
       let accessedRoutes = asyncRoutes;
       // commit('SET_ROUTES', []);

+ 84 - 0
src/views/baseManagement/bannerManagement/index.vue

@@ -0,0 +1,84 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <div class="m-10 bg-w p-20 br-10">
+      <el-button type="primary" icon="el-icon-plus" @click="handleSubmit"
+        >新增</el-button
+      >
+      <base-table
+        :columns="columns"
+        :items="items"
+        :pagination="pagination"
+        :page-change="pageChange"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'BannerManagement',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'id',
+          name: 'ID',
+          width: '60'
+        },
+        {
+          key: 'photo',
+          name: '图片',
+          width: '240'
+        },
+        {
+          key: 'region',
+          name: '位置',
+          minWidth: '120'
+        },
+        {
+          key: 'region',
+          name: '标题',
+          minWidth: '180'
+        },
+        {
+          key: 'region',
+          name: '链接',
+          minWidth: '240',
+          showOverflowTooltip: true
+        },
+        {
+          key: 'region',
+          name: '排序',
+          width: '60'
+        },
+        {
+          key: 'region',
+          name: '状态',
+          width: '80'
+        },
+        {
+          key: 'action',
+          name: '操作',
+          width: '120'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 22 - 0
src/views/baseManagement/bannerManagement/toolbar.vue

@@ -0,0 +1,22 @@
+<template>
+  <toolbar-container
+    :fields="fields"
+    :showSearch="false"
+    :showReset="false"
+    v-on="$listeners"
+  />
+</template>
+
+<script>
+export default {
+  name: 'BannerManagementToolbar',
+
+  data() {
+    return {
+      fields: []
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 83 - 0
src/views/baseManagement/infoManagement/index.vue

@@ -0,0 +1,83 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <div class="m-10 bg-w p-20 br-10">
+      <el-button type="primary" icon="el-icon-plus" @click="handleSubmit"
+        >新增</el-button
+      >
+      <base-table
+        :columns="columns"
+        :items="items"
+        :pagination="pagination"
+        :page-change="pageChange"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'InfoManagement',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'id',
+          name: '标题',
+          minWidth: '240'
+        },
+        {
+          key: 'photo',
+          name: '作者',
+          width: '160'
+        },
+        {
+          key: 'region',
+          name: '发布时间',
+          minWidth: '180'
+        },
+        {
+          key: 'region',
+          name: '阅读',
+          width: '120'
+        },
+        {
+          key: 'region',
+          name: '点赞',
+          width: '120'
+        },
+        {
+          key: 'region',
+          name: '收藏',
+          width: '120'
+        },
+        {
+          key: 'region',
+          name: '状态',
+          width: '80'
+        },
+        {
+          key: 'action',
+          name: '操作',
+          width: '120'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 34 - 0
src/views/baseManagement/infoManagement/toolbar.vue

@@ -0,0 +1,34 @@
+<template>
+  <toolbar-container :fields="fields" v-on="$listeners" />
+</template>
+
+<script>
+export default {
+  name: 'InfoManagementToolbar',
+
+  data() {
+    return {
+      fields: [
+        {
+          type: 'text',
+          name: 'title',
+          label: '标题'
+        },
+        {
+          type: 'select',
+          name: 'status',
+          label: '状态'
+        },
+        {
+          type: 'dateArray',
+          name: 'date',
+          label: '发布日期',
+          apiName: ['start', 'end']
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 59 - 0
src/views/baseManagement/problemFeedbackManagement/index.vue

@@ -0,0 +1,59 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <base-table
+      class="m-10 bg-w p-20 br-10"
+      :columns="columns"
+      :items="items"
+      :pagination="pagination"
+      :page-change="pageChange"
+    />
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'ProblemFeedbackManagement',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'photo',
+          name: '用户名称',
+          width: '160'
+        },
+        {
+          key: 'region',
+          name: '手机号',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '反馈内容',
+          minWidth: '120'
+        },
+        {
+          key: 'region',
+          name: '反馈时间',
+          width: '180'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 35 - 0
src/views/baseManagement/problemFeedbackManagement/toolbar.vue

@@ -0,0 +1,35 @@
+<template>
+  <toolbar-container :fields="fields" v-on="$listeners" />
+</template>
+
+<script>
+export default {
+  name: 'ProblemFeedbackManagementToolbar',
+
+  data() {
+    return {
+      fields: [
+        {
+          type: 'text',
+          name: 'title',
+          label: '用户名称'
+        },
+        {
+          type: 'text',
+          name: 'status',
+          label: '用户手机号',
+          labelWidth: '100px'
+        },
+        {
+          type: 'dateArray',
+          name: 'date',
+          label: '反馈日期',
+          apiName: ['start', 'end']
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 59 - 0
src/views/financialManagement/fundDetail/index.vue

@@ -0,0 +1,59 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <base-table
+      class="m-10 bg-w p-20 br-10"
+      :columns="columns"
+      :items="items"
+      :pagination="pagination"
+      :page-change="pageChange"
+    />
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'FundDetail',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'photo',
+          name: '用户名称',
+          width: '160'
+        },
+        {
+          key: 'region',
+          name: '手机号',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '反馈内容',
+          minWidth: '120'
+        },
+        {
+          key: 'region',
+          name: '反馈时间',
+          width: '180'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 35 - 0
src/views/financialManagement/fundDetail/toolbar.vue

@@ -0,0 +1,35 @@
+<template>
+  <toolbar-container :fields="fields" v-on="$listeners" />
+</template>
+
+<script>
+export default {
+  name: 'FundDetailToolbar',
+
+  data() {
+    return {
+      fields: [
+        {
+          type: 'text',
+          name: 'title',
+          label: '用户名称'
+        },
+        {
+          type: 'text',
+          name: 'status',
+          label: '用户手机号',
+          labelWidth: '100px'
+        },
+        {
+          type: 'dateArray',
+          name: 'date',
+          label: '反馈日期',
+          apiName: ['start', 'end']
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 59 - 0
src/views/financialManagement/orderManagement/index.vue

@@ -0,0 +1,59 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <base-table
+      class="m-10 bg-w p-20 br-10"
+      :columns="columns"
+      :items="items"
+      :pagination="pagination"
+      :page-change="pageChange"
+    />
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'OrderManagement',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'photo',
+          name: '用户名称',
+          width: '160'
+        },
+        {
+          key: 'region',
+          name: '手机号',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '反馈内容',
+          minWidth: '120'
+        },
+        {
+          key: 'region',
+          name: '反馈时间',
+          width: '180'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 35 - 0
src/views/financialManagement/orderManagement/toolbar.vue

@@ -0,0 +1,35 @@
+<template>
+  <toolbar-container :fields="fields" v-on="$listeners" />
+</template>
+
+<script>
+export default {
+  name: 'OrderManagementToolbar',
+
+  data() {
+    return {
+      fields: [
+        {
+          type: 'text',
+          name: 'title',
+          label: '用户名称'
+        },
+        {
+          type: 'text',
+          name: 'status',
+          label: '用户手机号',
+          labelWidth: '100px'
+        },
+        {
+          type: 'dateArray',
+          name: 'date',
+          label: '反馈日期',
+          apiName: ['start', 'end']
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 78 - 0
src/views/helpInfo/information/index.vue

@@ -0,0 +1,78 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <div class="m-10 bg-w p-20 br-10">
+      <el-button type="primary" icon="el-icon-plus" @click="handleSubmit"
+        >新增</el-button
+      >
+      <base-table
+        :columns="columns"
+        :items="items"
+        :pagination="pagination"
+        :page-change="pageChange"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'Information',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'photo',
+          name: 'ID',
+          width: '160'
+        },
+        {
+          key: 'region',
+          name: '分类名称',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '排序',
+          minWidth: '120'
+        },
+        {
+          key: 'region',
+          name: '创建时间',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '备注',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '状态',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '操作',
+          width: '180'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 29 - 0
src/views/helpInfo/information/toolbar.vue

@@ -0,0 +1,29 @@
+<template>
+  <toolbar-container :fields="fields" v-on="$listeners" />
+</template>
+
+<script>
+export default {
+  name: 'InformationToolbar',
+
+  data() {
+    return {
+      fields: [
+        {
+          type: 'text',
+          name: 'title',
+          label: '分类名称'
+        },
+        {
+          type: 'select',
+          name: 'status',
+          label: '状态',
+          labelWidth: '100px'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 78 - 0
src/views/helpInfo/issueType/index.vue

@@ -0,0 +1,78 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <div class="m-10 bg-w p-20 br-10">
+      <el-button type="primary" icon="el-icon-plus" @click="handleSubmit"
+        >新增</el-button
+      >
+      <base-table
+        :columns="columns"
+        :items="items"
+        :pagination="pagination"
+        :page-change="pageChange"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'IssueType',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'photo',
+          name: 'ID',
+          width: '160'
+        },
+        {
+          key: 'region',
+          name: '分类名称',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '排序',
+          minWidth: '120'
+        },
+        {
+          key: 'region',
+          name: '创建时间',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '备注',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '状态',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '操作',
+          width: '180'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 29 - 0
src/views/helpInfo/issueType/toolbar.vue

@@ -0,0 +1,29 @@
+<template>
+  <toolbar-container :fields="fields" v-on="$listeners" />
+</template>
+
+<script>
+export default {
+  name: 'IssueTypeToolbar',
+
+  data() {
+    return {
+      fields: [
+        {
+          type: 'text',
+          name: 'title',
+          label: '分类名称'
+        },
+        {
+          type: 'select',
+          name: 'status',
+          label: '状态',
+          labelWidth: '100px'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 78 - 0
src/views/memberManagement/memberLever/index.vue

@@ -0,0 +1,78 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <div class="m-10 bg-w p-20 br-10">
+      <el-button type="primary" icon="el-icon-plus" @click="handleSubmit"
+        >新增</el-button
+      >
+      <base-table
+        :columns="columns"
+        :items="items"
+        :pagination="pagination"
+        :page-change="pageChange"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'MemberLever',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'id',
+          name: 'ID',
+          width: '60'
+        },
+        {
+          key: 'photo',
+          name: '等级名称',
+          width: '240'
+        },
+        {
+          key: 'region',
+          name: '会员年费',
+          minWidth: '120'
+        },
+        {
+          key: 'region',
+          name: '会员月费',
+          minWidth: '180'
+        },
+        {
+          key: 'region',
+          name: '商品优惠折扣',
+          minWidth: '240'
+        },
+        {
+          key: 'region',
+          name: '状态',
+          width: '80'
+        },
+        {
+          key: 'action',
+          name: '操作',
+          width: '120'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 22 - 0
src/views/memberManagement/memberLever/toolbar.vue

@@ -0,0 +1,22 @@
+<template>
+  <toolbar-container
+    :fields="fields"
+    :showSearch="false"
+    :showReset="false"
+    v-on="$listeners"
+  />
+</template>
+
+<script>
+export default {
+  name: 'MemberLeverToolbar',
+
+  data() {
+    return {
+      fields: []
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 99 - 0
src/views/memberManagement/memberList/index.vue

@@ -0,0 +1,99 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <base-table
+      class="m-10 bg-w p-20 br-10"
+      :columns="columns"
+      :items="items"
+      :pagination="pagination"
+      :page-change="pageChange"
+    />
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'MemberList',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'photo',
+          name: '会员ID',
+          width: '160'
+        },
+        {
+          key: 'region',
+          name: '头像',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '昵称',
+          minWidth: '120'
+        },
+        {
+          key: 'region',
+          name: '手机号码',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '性别',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '微信',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '邮箱',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '会员等级',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '角色',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '注册时间',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '状态',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '操作',
+          width: '180'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 55 - 0
src/views/memberManagement/memberList/toolbar.vue

@@ -0,0 +1,55 @@
+<template>
+  <toolbar-container :fields="fields" v-on="$listeners" />
+</template>
+
+<script>
+export default {
+  name: 'MemberListToolbar',
+
+  data() {
+    return {
+      fields: [
+        {
+          type: 'text',
+          name: 'title',
+          label: '会员ID'
+        },
+        {
+          type: 'text',
+          name: 'status',
+          label: '手机号',
+          labelWidth: '100px'
+        },
+        {
+          type: 'select',
+          name: 'date',
+          label: '性别'
+        },
+        {
+          type: 'select',
+          name: 'date',
+          label: '状态'
+        },
+        {
+          type: 'select',
+          name: 'date',
+          label: '角色'
+        },
+        {
+          type: 'select',
+          name: 'date',
+          label: '会员等级'
+        },
+        {
+          type: 'dateArray',
+          name: 'date',
+          label: '反馈日期',
+          apiName: ['start', 'end']
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 0 - 7
src/views/nested/menu1/index.vue

@@ -1,7 +0,0 @@
-<template>
-  <div style="padding:30px;">
-    <el-alert :closable="false" title="menu 1">
-      <router-view />
-    </el-alert>
-  </div>
-</template>

+ 0 - 7
src/views/nested/menu1/menu1-1/index.vue

@@ -1,7 +0,0 @@
-<template>
-  <div style="padding:30px;">
-    <el-alert :closable="false" title="menu 1-1" type="success">
-      <router-view />
-    </el-alert>
-  </div>
-</template>

+ 0 - 7
src/views/nested/menu1/menu1-2/index.vue

@@ -1,7 +0,0 @@
-<template>
-  <div style="padding:30px;">
-    <el-alert :closable="false" title="menu 1-2" type="success">
-      <router-view />
-    </el-alert>
-  </div>
-</template>

+ 0 - 5
src/views/nested/menu1/menu1-2/menu1-2-1/index.vue

@@ -1,5 +0,0 @@
-<template functional>
-  <div style="padding:30px;">
-    <el-alert :closable="false" title="menu 1-2-1" type="warning" />
-  </div>
-</template>

+ 0 - 5
src/views/nested/menu1/menu1-2/menu1-2-2/index.vue

@@ -1,5 +0,0 @@
-<template functional>
-  <div style="padding:30px;">
-    <el-alert :closable="false" title="menu 1-2-2" type="warning" />
-  </div>
-</template>

+ 0 - 5
src/views/nested/menu1/menu1-3/index.vue

@@ -1,5 +0,0 @@
-<template functional>
-  <div style="padding:30px;">
-    <el-alert :closable="false" title="menu 1-3" type="success" />
-  </div>
-</template>

+ 0 - 5
src/views/nested/menu2/index.vue

@@ -1,5 +0,0 @@
-<template>
-  <div style="padding:30px;">
-    <el-alert :closable="false" title="menu 2" />
-  </div>
-</template>

+ 59 - 0
src/views/photoManagement/eventsList/index.vue

@@ -0,0 +1,59 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <base-table
+      class="m-10 bg-w p-20 br-10"
+      :columns="columns"
+      :items="items"
+      :pagination="pagination"
+      :page-change="pageChange"
+    />
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'EventsList',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'photo',
+          name: '用户名称',
+          width: '160'
+        },
+        {
+          key: 'region',
+          name: '手机号',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '反馈内容',
+          minWidth: '120'
+        },
+        {
+          key: 'region',
+          name: '反馈时间',
+          width: '180'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 35 - 0
src/views/photoManagement/eventsList/toolbar.vue

@@ -0,0 +1,35 @@
+<template>
+  <toolbar-container :fields="fields" v-on="$listeners" />
+</template>
+
+<script>
+export default {
+  name: 'EventsListToolbar',
+
+  data() {
+    return {
+      fields: [
+        {
+          type: 'text',
+          name: 'title',
+          label: '用户名称'
+        },
+        {
+          type: 'text',
+          name: 'status',
+          label: '用户手机号',
+          labelWidth: '100px'
+        },
+        {
+          type: 'dateArray',
+          name: 'date',
+          label: '反馈日期',
+          apiName: ['start', 'end']
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 59 - 0
src/views/photoManagement/imageGoodsManagement/index.vue

@@ -0,0 +1,59 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <base-table
+      class="m-10 bg-w p-20 br-10"
+      :columns="columns"
+      :items="items"
+      :pagination="pagination"
+      :page-change="pageChange"
+    />
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'ImageGoodsManagement',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'photo',
+          name: '用户名称',
+          width: '160'
+        },
+        {
+          key: 'region',
+          name: '手机号',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '反馈内容',
+          minWidth: '120'
+        },
+        {
+          key: 'region',
+          name: '反馈时间',
+          width: '180'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 35 - 0
src/views/photoManagement/imageGoodsManagement/toolbar.vue

@@ -0,0 +1,35 @@
+<template>
+  <toolbar-container :fields="fields" v-on="$listeners" />
+</template>
+
+<script>
+export default {
+  name: 'ImageGoodsManagementToolbar',
+
+  data() {
+    return {
+      fields: [
+        {
+          type: 'text',
+          name: 'title',
+          label: '用户名称'
+        },
+        {
+          type: 'text',
+          name: 'status',
+          label: '用户手机号',
+          labelWidth: '100px'
+        },
+        {
+          type: 'dateArray',
+          name: 'date',
+          label: '反馈日期',
+          apiName: ['start', 'end']
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 59 - 0
src/views/photoManagement/uploadManagement/index.vue

@@ -0,0 +1,59 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <base-table
+      class="m-10 bg-w p-20 br-10"
+      :columns="columns"
+      :items="items"
+      :pagination="pagination"
+      :page-change="pageChange"
+    />
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'UploadManagement',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'photo',
+          name: '用户名称',
+          width: '160'
+        },
+        {
+          key: 'region',
+          name: '手机号',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '反馈内容',
+          minWidth: '120'
+        },
+        {
+          key: 'region',
+          name: '反馈时间',
+          width: '180'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 35 - 0
src/views/photoManagement/uploadManagement/toolbar.vue

@@ -0,0 +1,35 @@
+<template>
+  <toolbar-container :fields="fields" v-on="$listeners" />
+</template>
+
+<script>
+export default {
+  name: 'UploadManagementToolbar',
+
+  data() {
+    return {
+      fields: [
+        {
+          type: 'text',
+          name: 'title',
+          label: '用户名称'
+        },
+        {
+          type: 'text',
+          name: 'status',
+          label: '用户手机号',
+          labelWidth: '100px'
+        },
+        {
+          type: 'dateArray',
+          name: 'date',
+          label: '反馈日期',
+          apiName: ['start', 'end']
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 74 - 0
src/views/photographerManagement/photoVerify/index.vue

@@ -0,0 +1,74 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <base-table
+      class="m-10 bg-w p-20 br-10"
+      :columns="columns"
+      :items="items"
+      :pagination="pagination"
+      :page-change="pageChange"
+    />
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'PhotoVerify',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'photo',
+          name: '照片ID',
+          width: '160'
+        },
+        {
+          key: 'region',
+          name: '图片',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '上传者',
+          width: '120'
+        },
+        {
+          key: 'region',
+          name: '上传位置',
+          minWidth: '180'
+        },
+        {
+          key: 'region',
+          name: '上传时间',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '状态',
+          width: '180'
+        },
+        {
+          key: 'action',
+          name: '操作',
+          minWidth: '180'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 34 - 0
src/views/photographerManagement/photoVerify/toolbar.vue

@@ -0,0 +1,34 @@
+<template>
+  <toolbar-container :fields="fields" v-on="$listeners" />
+</template>
+
+<script>
+export default {
+  name: 'PhotoVerifyToolbar',
+
+  data() {
+    return {
+      fields: [
+        {
+          type: 'select',
+          name: 'title',
+          label: '上传位置'
+        },
+        {
+          type: 'select',
+          name: 'date',
+          label: '状态'
+        },
+        {
+          type: 'dateArray',
+          name: 'date',
+          label: '上传日期',
+          apiName: ['start', 'end']
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 89 - 0
src/views/photographerManagement/photographerVerify/index.vue

@@ -0,0 +1,89 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <base-table
+      class="m-10 bg-w p-20 br-10"
+      :columns="columns"
+      :items="items"
+      :pagination="pagination"
+      :page-change="pageChange"
+    />
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'PhotographerVerify',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'photo',
+          name: '会员ID',
+          width: '160'
+        },
+        {
+          key: 'region',
+          name: '申请者',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '姓名',
+          width: '120'
+        },
+        {
+          key: 'region',
+          name: '身份证号码',
+          minWidth: '180'
+        },
+        {
+          key: 'region',
+          name: '手机号',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '微信号',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '电子邮箱',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '常合作场景',
+          minWidth: '180'
+        },
+        {
+          key: 'region',
+          name: '状态',
+          minWidth: '180'
+        },
+        {
+          key: 'action',
+          name: '操作',
+          minWidth: '180'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 34 - 0
src/views/photographerManagement/photographerVerify/toolbar.vue

@@ -0,0 +1,34 @@
+<template>
+  <toolbar-container :fields="fields" v-on="$listeners" />
+</template>
+
+<script>
+export default {
+  name: 'PhotographerVerifyToolbar',
+
+  data() {
+    return {
+      fields: [
+        {
+          type: 'text',
+          name: 'title',
+          label: '申请者'
+        },
+        {
+          type: 'text',
+          name: 'status',
+          label: '用户手机号',
+          labelWidth: '100px'
+        },
+        {
+          type: 'select',
+          name: 'date',
+          label: '状态'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 89 - 0
src/views/pointsManagement/pointsDetail/index.vue

@@ -0,0 +1,89 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <base-table
+      class="m-10 bg-w p-20 br-10"
+      :columns="columns"
+      :items="items"
+      :pagination="pagination"
+      :page-change="pageChange"
+    />
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'PointsDetail',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'photo',
+          name: '会员ID',
+          width: '160'
+        },
+        {
+          key: 'region',
+          name: '申请者',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '姓名',
+          width: '120'
+        },
+        {
+          key: 'region',
+          name: '身份证号码',
+          minWidth: '180'
+        },
+        {
+          key: 'region',
+          name: '手机号',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '微信号',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '电子邮箱',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '常合作场景',
+          minWidth: '180'
+        },
+        {
+          key: 'region',
+          name: '状态',
+          minWidth: '180'
+        },
+        {
+          key: 'action',
+          name: '操作',
+          minWidth: '180'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 34 - 0
src/views/pointsManagement/pointsDetail/toolbar.vue

@@ -0,0 +1,34 @@
+<template>
+  <toolbar-container :fields="fields" v-on="$listeners" />
+</template>
+
+<script>
+export default {
+  name: 'PointsDetailToolbar',
+
+  data() {
+    return {
+      fields: [
+        {
+          type: 'text',
+          name: 'title',
+          label: '申请者'
+        },
+        {
+          type: 'text',
+          name: 'status',
+          label: '用户手机号',
+          labelWidth: '100px'
+        },
+        {
+          type: 'select',
+          name: 'date',
+          label: '状态'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 88 - 0
src/views/pointsManagement/pointsSetting/index.vue

@@ -0,0 +1,88 @@
+<template>
+  <div class="m-10 bg-w p-20 br-10">
+    <h1>积分设置</h1>
+    <el-form
+      ref="form"
+      :model="form"
+      label-width="280px"
+      label-position="top"
+      class="mrow-60"
+    >
+      <el-form-item label="积分抵现(设置多少积分抵一元人民币)">
+        <el-input v-model="form.name"></el-input>
+      </el-form-item>
+      <el-form-item label="活动区域">
+        <el-select v-model="form.region" placeholder="请选择活动区域">
+          <el-option label="区域一" value="shanghai"></el-option>
+          <el-option label="区域二" value="beijing"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="活动时间">
+        <el-col :span="11">
+          <el-date-picker
+            type="date"
+            placeholder="选择日期"
+            v-model="form.date1"
+            style="width: 100%;"
+          ></el-date-picker>
+        </el-col>
+        <el-col class="line" :span="2">-</el-col>
+        <el-col :span="11">
+          <el-time-picker
+            placeholder="选择时间"
+            v-model="form.date2"
+            style="width: 100%;"
+          ></el-time-picker>
+        </el-col>
+      </el-form-item>
+      <el-form-item label="即时配送">
+        <el-switch v-model="form.delivery"></el-switch>
+      </el-form-item>
+      <el-form-item label="活动性质">
+        <el-checkbox-group v-model="form.type">
+          <el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox>
+          <el-checkbox label="地推活动" name="type"></el-checkbox>
+          <el-checkbox label="线下主题活动" name="type"></el-checkbox>
+          <el-checkbox label="单纯品牌曝光" name="type"></el-checkbox>
+        </el-checkbox-group>
+      </el-form-item>
+      <el-form-item label="特殊资源">
+        <el-radio-group v-model="form.resource">
+          <el-radio label="线上品牌商赞助"></el-radio>
+          <el-radio label="线下场地免费"></el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="活动形式">
+        <el-input type="textarea" v-model="form.desc"></el-input>
+      </el-form-item>
+      <el-form-item class="f-fe-c">
+        <el-button type="primary" @click="onSubmit">立即创建</el-button>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'PointsSetting',
+
+  components: { toolbar },
+
+  data() {
+    return {
+      form: {
+        name: '',
+        region: '',
+        date1: '',
+        date2: '',
+        delivery: false,
+        type: [],
+        resource: '',
+        desc: ''
+      }
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 88 - 0
src/views/sceneManagement/sceneList/index.vue

@@ -0,0 +1,88 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <div class="m-10 bg-w p-20 br-10">
+      <el-button type="primary" icon="el-icon-plus" @click="handleSubmit"
+        >新增</el-button
+      >
+      <base-table
+        :columns="columns"
+        :items="items"
+        :pagination="pagination"
+        :page-change="pageChange"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'SceneList',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'photo',
+          name: 'ID',
+          width: '160'
+        },
+        {
+          key: 'region',
+          name: '机构名称',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: 'Logo',
+          width: '120'
+        },
+        {
+          key: 'region',
+          name: '所在地区',
+          minWidth: '180'
+        },
+        {
+          key: 'region',
+          name: '机构类型',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '申请人',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '手机号',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '状态',
+          minWidth: '180'
+        },
+        {
+          key: 'action',
+          name: '操作',
+          minWidth: '180'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 44 - 0
src/views/sceneManagement/sceneList/toolbar.vue

@@ -0,0 +1,44 @@
+<template>
+  <toolbar-container :fields="fields" v-on="$listeners" />
+</template>
+
+<script>
+export default {
+  name: 'sceneListToolbar',
+
+  data() {
+    return {
+      fields: [
+        {
+          type: 'text',
+          name: 'title',
+          label: '机构名称'
+        },
+        {
+          type: 'text',
+          name: 'status',
+          label: '所在地区',
+          labelWidth: '100px'
+        },
+        {
+          type: 'select',
+          name: 'date',
+          label: '状态'
+        },
+        {
+          type: 'select',
+          name: 'date',
+          label: '机构类型'
+        },
+        {
+          type: 'text',
+          name: 'title',
+          label: '手机号'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 79 - 0
src/views/sceneManagement/sceneVerify/index.vue

@@ -0,0 +1,79 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <base-table
+      class="m-10 bg-w p-20 br-10"
+      :columns="columns"
+      :items="items"
+      :pagination="pagination"
+      :page-change="pageChange"
+    />
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'SceneVerify',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'id',
+          name: '标题',
+          minWidth: '240'
+        },
+        {
+          key: 'photo',
+          name: '作者',
+          width: '160'
+        },
+        {
+          key: 'region',
+          name: '发布时间',
+          minWidth: '180'
+        },
+        {
+          key: 'region',
+          name: '阅读',
+          width: '120'
+        },
+        {
+          key: 'region',
+          name: '点赞',
+          width: '120'
+        },
+        {
+          key: 'region',
+          name: '收藏',
+          width: '120'
+        },
+        {
+          key: 'region',
+          name: '状态',
+          width: '80'
+        },
+        {
+          key: 'action',
+          name: '操作',
+          width: '120'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 43 - 0
src/views/sceneManagement/sceneVerify/toolbar.vue

@@ -0,0 +1,43 @@
+<template>
+  <toolbar-container :fields="fields" v-on="$listeners" />
+</template>
+
+<script>
+export default {
+  name: 'SceneVerifyToolbar',
+
+  data() {
+    return {
+      fields: [
+        {
+          type: 'text',
+          name: 'title',
+          label: '机构名称'
+        },
+        {
+          type: 'select',
+          name: 'status',
+          label: '所在地区'
+        },
+        {
+          type: 'select',
+          name: 'status',
+          label: '状态'
+        },
+        {
+          type: 'select',
+          name: 'status',
+          label: '机构类型'
+        },
+        {
+          type: 'text',
+          name: 'status',
+          label: '手机号'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 59 - 0
src/views/statistics/downloadImage/index.vue

@@ -0,0 +1,59 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <base-table
+      class="m-10 bg-w p-20 br-10"
+      :columns="columns"
+      :items="items"
+      :pagination="pagination"
+      :page-change="pageChange"
+    />
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'DownloadImage',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'photo',
+          name: '用户名称',
+          width: '160'
+        },
+        {
+          key: 'region',
+          name: '手机号',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '反馈内容',
+          minWidth: '120'
+        },
+        {
+          key: 'region',
+          name: '反馈时间',
+          width: '180'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 35 - 0
src/views/statistics/downloadImage/toolbar.vue

@@ -0,0 +1,35 @@
+<template>
+  <toolbar-container :fields="fields" v-on="$listeners" />
+</template>
+
+<script>
+export default {
+  name: 'DownloadImageToolbar',
+
+  data() {
+    return {
+      fields: [
+        {
+          type: 'text',
+          name: 'title',
+          label: '用户名称'
+        },
+        {
+          type: 'text',
+          name: 'status',
+          label: '用户手机号',
+          labelWidth: '100px'
+        },
+        {
+          type: 'dateArray',
+          name: 'date',
+          label: '反馈日期',
+          apiName: ['start', 'end']
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 59 - 0
src/views/statistics/uploadImage/index.vue

@@ -0,0 +1,59 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <base-table
+      class="m-10 bg-w p-20 br-10"
+      :columns="columns"
+      :items="items"
+      :pagination="pagination"
+      :page-change="pageChange"
+    />
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'UploadImage',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'photo',
+          name: '用户名称',
+          width: '160'
+        },
+        {
+          key: 'region',
+          name: '手机号',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '反馈内容',
+          minWidth: '120'
+        },
+        {
+          key: 'region',
+          name: '反馈时间',
+          width: '180'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 35 - 0
src/views/statistics/uploadImage/toolbar.vue

@@ -0,0 +1,35 @@
+<template>
+  <toolbar-container :fields="fields" v-on="$listeners" />
+</template>
+
+<script>
+export default {
+  name: 'UploadImageToolbar',
+
+  data() {
+    return {
+      fields: [
+        {
+          type: 'text',
+          name: 'title',
+          label: '用户名称'
+        },
+        {
+          type: 'text',
+          name: 'status',
+          label: '用户手机号',
+          labelWidth: '100px'
+        },
+        {
+          type: 'dateArray',
+          name: 'date',
+          label: '反馈日期',
+          apiName: ['start', 'end']
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 59 - 0
src/views/statistics/withdrawalRecord/index.vue

@@ -0,0 +1,59 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <base-table
+      class="m-10 bg-w p-20 br-10"
+      :columns="columns"
+      :items="items"
+      :pagination="pagination"
+      :page-change="pageChange"
+    />
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'WithdrawalRecord',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'photo',
+          name: '用户名称',
+          width: '160'
+        },
+        {
+          key: 'region',
+          name: '手机号',
+          width: '180'
+        },
+        {
+          key: 'region',
+          name: '反馈内容',
+          minWidth: '120'
+        },
+        {
+          key: 'region',
+          name: '反馈时间',
+          width: '180'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 35 - 0
src/views/statistics/withdrawalRecord/toolbar.vue

@@ -0,0 +1,35 @@
+<template>
+  <toolbar-container :fields="fields" v-on="$listeners" />
+</template>
+
+<script>
+export default {
+  name: 'WithdrawalRecordToolbar',
+
+  data() {
+    return {
+      fields: [
+        {
+          type: 'text',
+          name: 'title',
+          label: '用户名称'
+        },
+        {
+          type: 'text',
+          name: 'status',
+          label: '用户手机号',
+          labelWidth: '100px'
+        },
+        {
+          type: 'dateArray',
+          name: 'date',
+          label: '反馈日期',
+          apiName: ['start', 'end']
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 83 - 0
src/views/systemManagement/accountManagement/index.vue

@@ -0,0 +1,83 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <div class="m-10 bg-w p-20 br-10">
+      <el-button type="primary" icon="el-icon-plus" @click="handleSubmit"
+        >新增</el-button
+      >
+      <base-table
+        :columns="columns"
+        :items="items"
+        :pagination="pagination"
+        :page-change="pageChange"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'AccountManagement',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'id',
+          name: '标题',
+          minWidth: '240'
+        },
+        {
+          key: 'photo',
+          name: '作者',
+          width: '160'
+        },
+        {
+          key: 'region',
+          name: '发布时间',
+          minWidth: '180'
+        },
+        {
+          key: 'region',
+          name: '阅读',
+          width: '120'
+        },
+        {
+          key: 'region',
+          name: '点赞',
+          width: '120'
+        },
+        {
+          key: 'region',
+          name: '收藏',
+          width: '120'
+        },
+        {
+          key: 'region',
+          name: '状态',
+          width: '80'
+        },
+        {
+          key: 'action',
+          name: '操作',
+          width: '120'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 34 - 0
src/views/systemManagement/accountManagement/toolbar.vue

@@ -0,0 +1,34 @@
+<template>
+  <toolbar-container :fields="fields" v-on="$listeners" />
+</template>
+
+<script>
+export default {
+  name: 'AccountManagementToolbar',
+
+  data() {
+    return {
+      fields: [
+        {
+          type: 'text',
+          name: 'title',
+          label: '标题'
+        },
+        {
+          type: 'select',
+          name: 'status',
+          label: '状态'
+        },
+        {
+          type: 'dateArray',
+          name: 'date',
+          label: '发布日期',
+          apiName: ['start', 'end']
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 84 - 0
src/views/systemManagement/roleManagement/index.vue

@@ -0,0 +1,84 @@
+<template>
+  <div class="">
+    <toolbar @onSearch="filterData" />
+
+    <div class="m-10 bg-w p-20 br-10">
+      <el-button type="primary" icon="el-icon-plus" @click="handleSubmit"
+        >新增</el-button
+      >
+      <base-table
+        :columns="columns"
+        :items="items"
+        :pagination="pagination"
+        :page-change="pageChange"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+import toolbar from './toolbar';
+import mxFilterList from '@/mixins/filterList';
+
+export default {
+  name: 'RoleManagement',
+
+  components: { toolbar },
+
+  mixins: [
+    mxFilterList({
+      // fetchList: iGetList // 在下方data再声明一个 fetchList: iGetList 同等效果
+    })
+  ],
+
+  data() {
+    return {
+      columns: [
+        {
+          key: 'id',
+          name: 'ID',
+          width: '60'
+        },
+        {
+          key: 'photo',
+          name: '图片',
+          width: '240'
+        },
+        {
+          key: 'region',
+          name: '位置',
+          minWidth: '120'
+        },
+        {
+          key: 'region',
+          name: '标题',
+          minWidth: '180'
+        },
+        {
+          key: 'region',
+          name: '链接',
+          minWidth: '240',
+          showOverflowTooltip: true
+        },
+        {
+          key: 'region',
+          name: '排序',
+          width: '60'
+        },
+        {
+          key: 'region',
+          name: '状态',
+          width: '80'
+        },
+        {
+          key: 'action',
+          name: '操作',
+          width: '120'
+        }
+      ]
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 22 - 0
src/views/systemManagement/roleManagement/toolbar.vue

@@ -0,0 +1,22 @@
+<template>
+  <toolbar-container
+    :fields="fields"
+    :showSearch="false"
+    :showReset="false"
+    v-on="$listeners"
+  />
+</template>
+
+<script>
+export default {
+  name: 'RoleManagementToolbar',
+
+  data() {
+    return {
+      fields: []
+    };
+  }
+};
+</script>
+
+<style type="scss" scoped></style>

+ 0 - 79
src/views/table/index.vue

@@ -1,79 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-table
-      v-loading="listLoading"
-      :data="list"
-      element-loading-text="Loading"
-      border
-      fit
-      highlight-current-row
-    >
-      <el-table-column align="center" label="ID" width="95">
-        <template slot-scope="scope">
-          {{ scope.$index }}
-        </template>
-      </el-table-column>
-      <el-table-column label="Title">
-        <template slot-scope="scope">
-          {{ scope.row.title }}
-        </template>
-      </el-table-column>
-      <el-table-column label="Author" width="110" align="center">
-        <template slot-scope="scope">
-          <span>{{ scope.row.author }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="Pageviews" width="110" align="center">
-        <template slot-scope="scope">
-          {{ scope.row.pageviews }}
-        </template>
-      </el-table-column>
-      <el-table-column class-name="status-col" label="Status" width="110" align="center">
-        <template slot-scope="scope">
-          <el-tag :type="scope.row.status | statusFilter">{{ scope.row.status }}</el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column align="center" prop="created_at" label="Display_time" width="200">
-        <template slot-scope="scope">
-          <i class="el-icon-time" />
-          <span>{{ scope.row.display_time }}</span>
-        </template>
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-import { getList } from '@/api/table'
-
-export default {
-  filters: {
-    statusFilter(status) {
-      const statusMap = {
-        published: 'success',
-        draft: 'gray',
-        deleted: 'danger'
-      }
-      return statusMap[status]
-    }
-  },
-  data() {
-    return {
-      list: null,
-      listLoading: true
-    }
-  },
-  created() {
-    this.fetchData()
-  },
-  methods: {
-    fetchData() {
-      this.listLoading = true
-      getList().then(response => {
-        this.list = response.data.items
-        this.listLoading = false
-      })
-    }
-  }
-}
-</script>

+ 0 - 78
src/views/tree/index.vue

@@ -1,78 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-input v-model="filterText" placeholder="Filter keyword" style="margin-bottom:30px;" />
-
-    <el-tree
-      ref="tree2"
-      :data="data2"
-      :props="defaultProps"
-      :filter-node-method="filterNode"
-      class="filter-tree"
-      default-expand-all
-    />
-
-  </div>
-</template>
-
-<script>
-export default {
-
-  data() {
-    return {
-      filterText: '',
-      data2: [{
-        id: 1,
-        label: 'Level one 1',
-        children: [{
-          id: 4,
-          label: 'Level two 1-1',
-          children: [{
-            id: 9,
-            label: 'Level three 1-1-1'
-          }, {
-            id: 10,
-            label: 'Level three 1-1-2'
-          }]
-        }]
-      }, {
-        id: 2,
-        label: 'Level one 2',
-        children: [{
-          id: 5,
-          label: 'Level two 2-1'
-        }, {
-          id: 6,
-          label: 'Level two 2-2'
-        }]
-      }, {
-        id: 3,
-        label: 'Level one 3',
-        children: [{
-          id: 7,
-          label: 'Level two 3-1'
-        }, {
-          id: 8,
-          label: 'Level two 3-2'
-        }]
-      }],
-      defaultProps: {
-        children: 'children',
-        label: 'label'
-      }
-    }
-  },
-  watch: {
-    filterText(val) {
-      this.$refs.tree2.filter(val)
-    }
-  },
-
-  methods: {
-    filterNode(value, data) {
-      if (!value) return true
-      return data.label.indexOf(value) !== -1
-    }
-  }
-}
-</script>
-