hmp hace 4 años
padre
commit
22fb494472

+ 50 - 0
src/api/distribution/distribution.js

@@ -0,0 +1,50 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/cyzh-distribution/distribution/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/cyzh-distribution/distribution/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/cyzh-distribution/distribution/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/cyzh-distribution/distribution/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/cyzh-distribution/distribution/submit',
+    method: 'post',
+    data: row
+  })
+}
+

+ 50 - 0
src/api/helprecord/helprecord.js

@@ -0,0 +1,50 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/cyzh-helpRecord/helprecord/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/cyzh-helpRecord/helprecord/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/cyzh-helpRecord/helprecord/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/cyzh-helpRecord/helprecord/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/cyzh-helpRecord/helprecord/submit',
+    method: 'post',
+    data: row
+  })
+}
+

+ 50 - 0
src/api/mall/mall.js

@@ -0,0 +1,50 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/ldt-mall/mall/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/ldt-mall/mall/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/ldt-mall/mall/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/ldt-mall/mall/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/ldt-mall/mall/submit',
+    method: 'post',
+    data: row
+  })
+}
+

+ 50 - 0
src/api/pointsactivity/pointsactivity.js

@@ -0,0 +1,50 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/ldt-pointsActivity/pointsactivity/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/ldt-pointsActivity/pointsactivity/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/ldt-pointsActivity/pointsactivity/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/ldt-pointsActivity/pointsactivity/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/ldt-pointsActivity/pointsactivity/submit',
+    method: 'post',
+    data: row
+  })
+}
+

+ 50 - 0
src/api/production/production.js

@@ -0,0 +1,50 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/cyzh-production/production/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/cyzh-production/production/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/cyzh-production/production/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/cyzh-production/production/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/cyzh-production/production/submit',
+    method: 'post',
+    data: row
+  })
+}
+

+ 50 - 0
src/api/shop/shop.js

@@ -0,0 +1,50 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/ldt-shop/shop/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/ldt-shop/shop/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/ldt-shop/shop/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/ldt-shop/shop/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/ldt-shop/shop/submit',
+    method: 'post',
+    data: row
+  })
+}
+

+ 50 - 0
src/api/useractivitystatistical/useractivitystatistical.js

@@ -0,0 +1,50 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/cyzh-userActivityStatistical/useractivitystatistical/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/cyzh-userActivityStatistical/useractivitystatistical/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/cyzh-userActivityStatistical/useractivitystatistical/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/cyzh-userActivityStatistical/useractivitystatistical/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/cyzh-userActivityStatistical/useractivitystatistical/submit',
+    method: 'post',
+    data: row
+  })
+}
+

+ 28 - 1
src/router/views/index.js

@@ -21,7 +21,34 @@ export default [{
     },
     component: () =>
       import( /* webpackChunkName: "views" */ '@/views/wel/dashboard')
-  }]
+  },
+  {
+      path: "useractivitystatistical",
+      name: '查看选手',
+      component: () =>
+        import( /* webpackChunkName: "page" */ '@/views/useractivitystatistical/useractivitystatistical'),
+    },
+    {
+        path: "production",
+        name: '查看作品',
+        component: () =>
+          import( /* webpackChunkName: "page" */ '@/views/production/production'),
+      },
+    {
+        path: "hitRecord",
+        name: '打榜记录',
+        component: () =>
+          import( /* webpackChunkName: "page" */ '@/views/hitRecord/hitRecord'),
+      },
+      {
+          path: "reawrdRecord",
+          name: '打赏记录',
+          component: () =>
+            import( /* webpackChunkName: "page" */ '@/views/reawrdRecord/reawrdRecord'),
+        },
+
+
+  ]
 }, {
   path: '/test',
   component: Layout,

+ 119 - 49
src/views/activity/activity.vue

@@ -1,6 +1,6 @@
 <template>
   <basic-container>
-    <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" :permission="permissionList"
+    <avue-crud id="activity"  :option="option" :table-loading="loading" :data="data" :page.sync="page" :permission="permissionList"
       :before-open="beforeOpen" v-model="form" ref="crud" @row-update="rowUpdate" @row-save="rowSave" @row-del="rowDel"
       @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
       @row-click="rowClick"
@@ -17,22 +17,64 @@
         </el-button>
       </template>
 
-      <template slot="activityStatus" slot-scope="scope">
-        <el-tag v-if="scope.row.activityStatus==0">未开始</el-tag>
-        <el-tag v-if="scope.row.activityStatus==1">进行中</el-tag>
-        <el-tag v-if="scope.row.activityStatus==2">已结束</el-tag>
-      </template>
-
       <template slot="enable" slot-scope="scope">
         <el-switch disabled v-model="scope.row.enable"   :active-value="1" :inactive-value="0"></el-switch>
       </template>
 
+      <template slot-scope="scope" slot="activityTime">
+        <div style="margin: 20px 0;">
+          报名截止:{{scope.row.applyEndTime}}
+        </div>
+        <div style="margin: 20px 0;">
+          活动开始:{{scope.row.beginTime}}
+        </div>
+        <div style="margin: 20px 0;">
+          活动结束:{{scope.row.endTime}}
+        </div>
+      </template>
+
+      <template slot-scope="scope" slot="cover">
+        <el-image
+            style="width: 100%; height: 100%"
+            :src="scope.row.cover"
+            :preview-src-list="[scope.row.cover]">
+          </el-image>
+      </template>
+
+      <template slot-scope="scope" slot="poster">
+        <el-image
+            style="width: 100px; height: 120px;overflow-y: hidden;"
+            :src="scope.row.poster"
+            fit="cover"
+            :preview-src-list="[scope.row.poster]">
+          </el-image>
+      </template>
+
+      <template slot-scope="scope" slot="showData">
+            参与人数:<div style="background-color: #3296fa;color: white; border-radius: 5px; margin:10px; padding:0 10px 0 10px ; display:inline;">{{scope.row.applyNum}}</div><br>
+            礼物总值:<div style="background-color: #5bc0de;color: white; border-radius: 5px; margin:10px; padding:0 10px 0 10px ; display:inline;">{{ +scope.row.totalCash}}</div><br>
+            打榜数量:<div style="background-color: #5bc0de;color: white; border-radius: 5px; margin:10px; padding:0 10px 0 10px ; display:inline;">{{scope.row.hitNum}}</div><br>
+            打赏数量:<div style="background-color: #99cf99;color: white; border-radius: 5px; margin:10px; padding:0 10px 0 10px ; display:inline;">{{scope.row.rewardNum}}</div><br>
+      </template>
+
 
       <!-- 操作菜单 -->
       <template slot-scope="scope" slot="menu">
         <el-button type="text" size="small" icon="el-icon-edit" plain class="none-border"
           @click.stop="handleEdit(scope.row)">编辑
         </el-button>
+        <el-button type="text" size="small" icon="el-icon-view" plain class="none-border"
+          @click.stop="view(scope.row.id,'查看选手')">查看选手
+        </el-button>
+        <el-button type="text" size="small" icon="el-icon-view" plain class="none-border"
+          @click.stop="view(scope.row.id,'查看作品')">查看作品
+        </el-button>
+        <el-button type="text" size="small" icon="el-icon-view" plain class="none-border"
+          @click.stop="view(scope.row.id,'打榜记录')">打榜记录
+        </el-button>
+        <el-button type="text" size="small" icon="el-icon-view" plain class="none-border"
+          @click.stop="view(scope.row.id,'打赏记录')">打赏记录
+        </el-button>
       </template>
     </avue-crud>
 
@@ -59,8 +101,9 @@
           name:'',
           beginTime:'',
           endTime:'',
-          activityStatus:0,
+          applyEndTime:'',
           description:'',
+          visitBase:0,
           tagIds:[]
         },
         data2:{
@@ -75,7 +118,7 @@
            productionTitle:'',
            introductionTitle:'',
            ticketDays:1,
-           ticketPoints:1
+           ticketHotValue:1
         },
         data4:{
           presentIds:[]
@@ -103,8 +146,26 @@
           addBtn:false,
           selection: true,
           labelWidth: 150,
+          size:"medium",
           dialogClickModal: false,
-          column: [{
+          column: [
+            {
+              label: "封面图",
+              prop: "cover",
+              width: 150,
+              type: "upload",
+              solt:true,
+              listType: "picture-img",
+              action: '/api/putObject',
+              propsHttp: {
+                url: 'data'
+              },
+              rules: [{
+                required: true,
+                message: "请输入活动封面图",
+                trigger: "blur"
+              }]
+            },{
               label: "活动主题",
               prop: "name",
               rules: [{
@@ -113,9 +174,26 @@
                 trigger: "blur"
               }]
             },
+            {
+              label:"活动时间",
+              slot:true,
+              width: 200,
+              editDisplay:false,
+              addDisplay:false,
+              prop:"activityTime"
+            },
+            {
+              label:"数据",
+              slot:true,
+              width: 180,
+              editDisplay:false,
+              addDisplay:false,
+              prop:"showData"
+            },
             {
               label: "活动开始时间",
               width: 140,
+              hide:true,
               prop: "beginTime",
               type: 'datetime',
               format: "yyyy-MM-dd hh:mm:ss",
@@ -129,6 +207,7 @@
             {
               label: "活动结束时间",
               width: 140,
+              hide:true,
               prop: "endTime",
               type: 'datetime',
               format: "yyyy-MM-dd hh:mm:ss",
@@ -140,27 +219,16 @@
               }]
             },
             {
-              label: "活动状态",
-              width: 100,
-              prop: "activityStatus",
-              type: 'select',
-              slot: true,
-              dicData: [{
-                  label: '未开始',
-                  value: 0
-                },
-                {
-                  label: '进行中',
-                  value: 1
-                },
-                {
-                  label: '已结束',
-                  value: 2
-                },
-              ],
+              label: "报名结束时间",
+              width: 140,
+              hide:true,
+              prop: "applyEndTime",
+              type: 'datetime',
+              format: "yyyy-MM-dd hh:mm:ss",
+              valueFormat: "yyyy-MM-dd hh:mm:ss",
               rules: [{
                 required: true,
-                message: "请选择活动状态",
+                message: "请输入报名结束时间",
                 trigger: "blur"
               }]
             },
@@ -192,6 +260,7 @@
             {
               label: "活动海报",
               prop: "poster",
+              slot:true,
               dataType: 'string',
               listType: 'picture-img',
               propsHttp: {
@@ -205,24 +274,11 @@
                 trigger: "blur"
               }]
             },
-            {
-              label: "活动封面图",
-              prop: "cover",
-              type: "upload",
-              listType: "picture-img",
-              action: '/api/putObject',
-              propsHttp: {
-                url: 'data'
-              },
-              rules: [{
-                required: true,
-                message: "请输入活动封面图",
-                trigger: "blur"
-              }]
-            },
+
             {
               label: "活动轮播图",
               prop: "ads",
+              hide:true,
               dataType: 'string',
               listType: 'picture-card',
               propsHttp: {
@@ -300,8 +356,9 @@
           name:'',
           beginTime:'',
           endTime:'',
-          activityStatus:0,
+          applyEndTime:'',
           description:'',
+          visitBase:0,
           tagIds:[]
         }
         this.data2={
@@ -316,7 +373,7 @@
            productionTitle:'',
            introductionTitle:'',
            ticketDays:1,
-           ticketPoints:1
+           ticketHotValue:1
         }
         this.data4={
           presentIds:[]
@@ -329,8 +386,9 @@
           name:item.name,
           beginTime:item.beginTime,
           endTime:item.endTime,
-          activityStatus:item.activityStatus,
+          applyEndTime:item.applyEndTime,
           description:item.description,
+          visitBase:item.visitBase,
           tagIds:item.tagIds
         }
         this.data2={
@@ -345,7 +403,7 @@
            productionTitle:item.productionTitle,
            introductionTitle:item.introductionTitle,
            ticketDays:item.ticketDays,
-           ticketPoints:item.ticketPoints
+           ticketHotValue:item.ticketHotValue
         }
         this.data4={
           presentIds:item.presentIds
@@ -473,10 +531,22 @@
           this.loading = false;
           this.selectionClear();
         });
-      }
+      },
+      view(id,name){
+        this.$router.push({
+          name,
+          query: {
+            id
+          }
+        })
+      },
     }
   };
 </script>
 
 <style>
+/* #activity
+    .el-table__row{
+      height: 200px;
+    } */
 </style>

+ 14 - 13
src/views/activity/comps/activity-add.vue

@@ -13,7 +13,7 @@
       <!-- 基本信息 -->
       <el-card style="margin-top: 40px;" v-if="active==0">
         <div style="margin-top: 30px;">
-          <el-form ref="form1" :model="form1" :rules="rules1" label-width="100px">
+          <el-form ref="form1" :model="form1" :rules="rules1" label-width="120px">
             <el-form-item label="活动主题" prop="name">
               <el-input v-model="form1.name"></el-input>
             </el-form-item>
@@ -35,18 +35,19 @@
                 </el-form-item>
               </el-col>
             </el-form-item>
+            <el-form-item prop="applyEndTime" label="报名结束时间" required>
+              <el-date-picker type="datetime" placeholder="请选择报名结束时间" v-model="form1.applyEndTime" style="width: 100%;"
+                format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss">
+              </el-date-picker>
+            </el-form-item>
             <el-form-item label="活动标签" prop="tagIds">
               <el-select style="width: 100%;" size="medium" v-model="form1.tagIds" multiple placeholder="请选择活动标签">
                 <el-option v-for="item in tagList" :key="item.id" :label="item.name" :value="item.id">
                 </el-option>
               </el-select>
             </el-form-item>
-            <el-form-item label="活动状态" prop="activityStatus">
-              <el-radio-group v-model="form1.activityStatus">
-                <el-radio :label="0">未开始</el-radio>
-                <el-radio :label="1">进行中</el-radio>
-                <el-radio :label="2">已结束</el-radio>
-              </el-radio-group>
+            <el-form-item label="作品基础浏览量" prop="visitBase">
+              <el-input v-model="form1.visitBase" ></el-input>
             </el-form-item>
             <el-form-item label="活动简介" prop="description">
               <el-input type="textarea" v-model="form1.description"></el-input>
@@ -149,8 +150,8 @@
               <el-form-item prop="ticketDays" label="每个用户一天可以投多少票">
                 <el-input-number v-model="form3.ticketDays" :min="1" label="票"></el-input-number>
               </el-form-item>
-              <el-form-item prop="ticketPoints" label="一票等于多少积分">
-                <el-input-number v-model="form3.ticketPoints" :min="1" :max="10" label="积分"></el-input-number>
+              <el-form-item prop="ticketHotValue" label="一票等于多少热力值">
+                <el-input-number v-model="form3.ticketHotValue" :min="1" :max="10" label="积分"></el-input-number>
               </el-form-item>
             </el-form>
           </div>
@@ -308,14 +309,14 @@
             message: '请选择活动结束时间',
             trigger: 'blur'
           }, ],
-          tagIds: [{
+          applyEndTime: [{
             required: true,
-            message: '请选择活动标签',
+            message: '请选择报名结束时间',
             trigger: 'blur'
           }, ],
-          activityStatus: [{
+          tagIds: [{
             required: true,
-            message: '请选择活动状态',
+            message: '请选择活动标签',
             trigger: 'blur'
           }, ],
           description: [{

+ 218 - 0
src/views/distribution/distribution.vue

@@ -0,0 +1,218 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.distribution_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/distribution/distribution";
+  import {mapGetters} from "vuex";
+
+  export default {
+    data() {
+      return {
+        form: {},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          height:'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          selection: true,
+          dialogClickModal: false,
+          column: [
+            {
+              label: "配送方式",
+              prop: "mode",
+              rules: [{
+                required: true,
+                message: "请输入配送方式",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "价格",
+              prop: "price",
+              rules: [{
+                required: true,
+                message: "请输入价格",
+                trigger: "blur"
+              }]
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.distribution_add, false),
+          viewBtn: this.vaildData(this.permission.distribution_view, false),
+          delBtn: this.vaildData(this.permission.distribution_delete, false),
+          editBtn: this.vaildData(this.permission.distribution_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 321 - 0
src/views/hitRecord/hitRecord.vue

@@ -0,0 +1,321 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.helprecord_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+
+      <template slot="senderInfo" slot-scope="scope">
+        <div style="display: flex;">
+          <div style="display: flex;justify-content: center;align-items: center;">
+            <el-avatar size="large" :src="scope.row.sender.avatar"></el-avatar>
+          </div>
+           <div style="padding: 10px;">
+             <div >昵称:{{scope.row.sender.nickName}}</div>
+             <div>手机:{{scope.row.sender.phone}}</div>
+           </div>
+        </div>
+      </template>
+
+      <template slot="receiverInfo" slot-scope="scope">
+        <div style="display: flex;">
+          <div style="display: flex;justify-content: center;align-items: center;">
+            <el-avatar size="large" :src="scope.row.receiver.avatar"></el-avatar>
+          </div>
+           <div style="padding: 10px;">
+             <div >昵称:{{scope.row.receiver.nickName}}</div>
+             <div>手机:{{scope.row.receiver.phone}}</div>
+           </div>
+        </div>
+      </template>
+
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/helprecord/helprecord";
+  import {mapGetters} from "vuex";
+
+  export default {
+    data() {
+      return {
+        menu:false,
+        form: {},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          height:'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          selection: true,
+          dialogClickModal: false,
+          column: [
+            {
+              width:120,
+              label: "活动名称",
+              prop: "activityName",
+            },
+            {
+              hide:true,
+              label: "作品id",
+              prop: "productId",
+              rules: [{
+                required: true,
+                message: "请输入作品id",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "助力人信息",
+              prop: "senderInfo",
+              slot:true
+            },
+            {
+              label: "被助力人信息",
+              prop: "receiverInfo",
+              slot:true
+            },
+            {
+              label: "打榜类型",
+              width:100,
+              prop: "type",
+              dicData: [{
+                  label: '打榜作品',
+                  value: 0
+                },
+                {
+                  label: '打榜作者',
+                  value: 2
+                }
+              ]
+            },
+            {
+              label: "打榜时间",
+              prop: "createTime",
+            },
+            {
+              label: "礼物id",
+              hide:true,
+              prop: "presentId",
+              rules: [{
+                required: true,
+                message: "请输入礼物id",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "打赏的礼物数量",
+              hide:true,
+              prop: "count",
+              rules: [{
+                required: true,
+                message: "请输入打赏的礼物数量",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "打赏礼物的总价格",
+              hide:true,
+              prop: "totalCash",
+              rules: [{
+                required: true,
+                message: "请输入打赏礼物的总价格",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "打赏礼物的总积分值",
+              hide:true,
+              prop: "totalPointsValue",
+              rules: [{
+                required: true,
+                message: "请输入打赏礼物的总积分值",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "助力热力值",
+              width:100,
+              prop: "totalHotValue",
+              rules: [{
+                required: true,
+                message: "请输入助力总热力值",
+                trigger: "blur"
+              }]
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.helprecord_add, false),
+          viewBtn: this.vaildData(this.permission.helprecord_view, false),
+          delBtn: this.vaildData(this.permission.helprecord_delete, false),
+          editBtn: this.vaildData(this.permission.helprecord_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        this.query.activityId = this.$route.query.id;
+        this.query.typeSub=1
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 1 - 10
src/views/loginuser/loginuser.vue

@@ -157,16 +157,7 @@
                 message: "请输入总热力",
                 trigger: "blur"
               }]
-            },
-            {
-              label: "活动id",
-              prop: "activityId",
-              rules: [{
-                required: true,
-                message: "请输入活动id",
-                trigger: "blur"
-              }]
-            },
+            }
           ]
         },
         data: []

+ 290 - 0
src/views/mall/mall.vue

@@ -0,0 +1,290 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.mall_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/mall/mall";
+  import {mapGetters} from "vuex";
+
+  export default {
+    data() {
+      return {
+        form: {},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          height:'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          selection: true,
+          dialogClickModal: false,
+          column: [
+            {
+              label: "商城名称",
+              prop: "name",
+              rules: [{
+                required: true,
+                message: "请输入商城名称",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "省",
+              prop: "province",
+              rules: [{
+                required: true,
+                message: "请输入省",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "省编码",
+              prop: "provinceCode",
+              rules: [{
+                required: true,
+                message: "请输入省编码",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "市",
+              prop: "city",
+              rules: [{
+                required: true,
+                message: "请输入市",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "市编码",
+              prop: "cityCode",
+              rules: [{
+                required: true,
+                message: "请输入市编码",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "地区",
+              prop: "area",
+              rules: [{
+                required: true,
+                message: "请输入地区",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "地区编码",
+              prop: "areaCode",
+              rules: [{
+                required: true,
+                message: "请输入地区编码",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "详细地址",
+              prop: "address",
+              rules: [{
+                required: true,
+                message: "请输入详细地址",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "经度",
+              prop: "longitude",
+              rules: [{
+                required: true,
+                message: "请输入经度",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "纬度",
+              prop: "latitude",
+              rules: [{
+                required: true,
+                message: "请输入纬度",
+                trigger: "blur"
+              }]
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.mall_add, false),
+          viewBtn: this.vaildData(this.permission.mall_view, false),
+          delBtn: this.vaildData(this.permission.mall_delete, false),
+          editBtn: this.vaildData(this.permission.mall_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 209 - 0
src/views/pointsactivity/pointsactivity.vue

@@ -0,0 +1,209 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.pointsactivity_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/pointsactivity/pointsactivity";
+  import {mapGetters} from "vuex";
+
+  export default {
+    data() {
+      return {
+        form: {},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          height:'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          selection: true,
+          dialogClickModal: false,
+          column: [
+            {
+              label: "活动名称",
+              prop: "name",
+              rules: [{
+                required: true,
+                message: "请输入活动名称",
+                trigger: "blur"
+              }]
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.pointsactivity_add, false),
+          viewBtn: this.vaildData(this.permission.pointsactivity_view, false),
+          delBtn: this.vaildData(this.permission.pointsactivity_delete, false),
+          editBtn: this.vaildData(this.permission.pointsactivity_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 348 - 0
src/views/production/production.vue

@@ -0,0 +1,348 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.production_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+
+      <template slot="userInfo" slot-scope="scope">
+        <div style="display: flex;">
+          <div style="display: flex;justify-content: center;align-items: center;">
+            <el-avatar size="large" :src="scope.row.loginWebVO.avatar"></el-avatar>
+          </div>
+           <div style="padding: 10px;">
+             <div >昵称:{{scope.row.loginWebVO.nickName}}</div>
+             <div>手机:{{scope.row.loginWebVO.phone}}</div>
+           </div>
+        </div>
+      </template>
+
+      <template slot="rank" slot-scope="scope">
+        <el-tag effect="dark">
+          {{scope.row.loginWebVO.rank}}
+        </el-tag>
+      </template>
+
+      <template  slot="urls" slot-scope="scope">
+        <el-button @click="viewUrls(scope.row.urls)" type="primary" size="mini" plain>查看</el-button>
+      </template>
+    </avue-crud>
+
+    <el-dialog  title="浏览" :visible.sync="maskshow" :append-to-body="true">
+      <el-carousel :interval="5000" arrow="always" style="margin:20px 0">
+          <el-carousel-item style="display: flex;justify-content: center;align-items: center;" v-for="item in urls" :key="item">
+            <el-image :src="item.url" v-if="item.type==0"></el-image>
+            <video :src="item.url" v-if="item.type==1" :controls="true" :autoplay="true"></video>
+          </el-carousel-item>
+        </el-carousel>
+    </el-dialog>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/production/production";
+  import {mapGetters} from "vuex";
+
+  export default {
+    data() {
+      return {
+        maskshow:false,
+        urls:[],
+
+        form: {},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          menu:false,
+          memuLeft:true,
+          height:'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          delBtn:true,
+          selection: true,
+          dialogClickModal: false,
+          column: [
+            {
+              hide:true,
+              label: "用户id",
+              prop: "userId",
+              rules: [{
+                required: true,
+                message: "请输入用户id",
+                trigger: "blur"
+              }]
+            },
+            {
+              label:"用户信息",
+              slot:true,
+              width: 200,
+              prop:"userInfo"
+            },
+            {
+              label: "排名",
+              prop: "rank",
+              slot:true
+            },
+            {
+              label: "活动id",
+              prop: "activityId",
+              hide:true,
+              rules: [{
+                required: true,
+                message: "请输入活动id",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "参赛名字",
+              prop: "personName",
+              rules: [{
+                required: true,
+                message: "请输入参赛名字",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "作品名称",
+              prop: "title",
+              rules: [{
+                required: true,
+                message: "请输入作品名称",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "个人介绍/个人宣言",
+              prop: "introduce",
+              rules: [{
+                required: true,
+                message: "请输入个人介绍/个人宣言",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "基本信息",
+              prop: "personType",
+              rules: [{
+                required: true,
+                message: "请输入基本信息",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "作品资源",
+              slot:true,
+              prop: "urls",
+              rules: [{
+                required: true,
+                message: "请输入作品资源",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "作品热力值",
+              prop: "hotValue",
+              rules: [{
+                required: true,
+                message: "请输入作品热力值",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "作品封面",
+              prop: "cover",
+              rules: [{
+                required: true,
+                message: "请输入作品封面",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "总浏览人数",
+              prop: "visitTotal",
+              rules: [{
+                required: true,
+                message: "请输入总浏览人数",
+                trigger: "blur"
+              }]
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.production_add, false),
+          viewBtn: this.vaildData(this.permission.production_view, false),
+          delBtn: this.vaildData(this.permission.production_delete, false),
+          editBtn: this.vaildData(this.permission.production_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        this.query.activityId = this.$route.query.id;
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      },
+      viewUrls(urls){
+        this.maskshow=true
+        this.urls=urls
+      }
+    }
+  };
+</script>
+
+<style scoped>
+
+</style>

+ 341 - 0
src/views/reawrdRecord/reawrdRecord.vue

@@ -0,0 +1,341 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.helprecord_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+
+      <template slot="senderInfo" slot-scope="scope">
+        <div style="display: flex;">
+          <div style="display: flex;justify-content: center;align-items: center;">
+            <el-avatar size="large" :src="scope.row.sender.avatar"></el-avatar>
+          </div>
+           <div style="padding: 10px;">
+             <div >昵称:{{scope.row.sender.nickName}}</div>
+             <div>手机:{{scope.row.sender.phone}}</div>
+           </div>
+        </div>
+      </template>
+
+      <template slot="receiverInfo" slot-scope="scope">
+        <div style="display: flex;">
+          <div style="display: flex;justify-content: center;align-items: center;">
+            <el-avatar size="large" :src="scope.row.receiver.avatar"></el-avatar>
+          </div>
+           <div style="padding: 10px;">
+             <div >昵称:{{scope.row.receiver.nickName}}</div>
+             <div>手机:{{scope.row.receiver.phone}}</div>
+           </div>
+        </div>
+      </template>
+
+      <template slot="presentInfo" slot-scope="scope">
+        <div style="display: flex;">
+          <div style="display: flex;justify-content: center;align-items: center;">
+            <el-image :preview-src-list="[scope.row.present.icon]" style="width: 50px;height: 50px;" :src="scope.row.present.icon"></el-image>
+          </div>
+           <div style="padding: 10px;margin-left: 20px;">
+             <div>名称:{{scope.row.present.name}}</div>
+             <div>价格:{{scope.row.present.price}}</div>
+             <div>热力值:{{scope.row.present.hotValue}}</div>
+             <div>积分值:{{scope.row.present.pointsValue}}</div>
+           </div>
+        </div>
+      </template>
+
+
+
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/helprecord/helprecord";
+  import {mapGetters} from "vuex";
+
+  export default {
+    data() {
+      return {
+        form: {},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          menu:false,
+          height:'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          selection: true,
+          dialogClickModal: false,
+          menuRight:false,
+          column: [
+            {
+              width:120,
+              label: "活动名称",
+              prop: "activityName",
+            },
+            {
+              label: "作品名称",
+              prop: "productionName",
+              rules: [{
+                required: true,
+                message: "请输入作品id",
+                trigger: "blur"
+              }]
+            },
+            {
+              width:188,
+              label: "助力人信息",
+              prop: "senderInfo",
+              slot:true
+            },
+            {
+              width:188,
+              label: "被助力人信息",
+              prop: "receiverInfo",
+              slot:true
+            },
+            {
+              label: "打赏类型",
+              width:90,
+              prop: "type",
+              dicData: [{
+                  label: '打赏作品',
+                  value: 1
+                },
+                {
+                  label: '打赏作者',
+                  value: 3
+                }
+              ]
+            },
+            {
+              width:235,
+              label: "打赏礼物信息",
+              prop: "presentInfo",
+              slot:true
+            },
+            {
+              label: "打赏礼物",
+              hide:true,
+              prop: "present",
+              rules: [{
+                required: true,
+                message: "请输入礼物id",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "礼物数量",
+              width:80,
+              prop: "count",
+              rules: [{
+                required: true,
+                message: "请输入打赏的礼物数量",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "礼物的总价格",
+              width:100,
+              prop: "totalCash",
+              rules: [{
+                required: true,
+                message: "请输入打赏礼物的总价格",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "获取积分值",
+              width:100,
+              prop: "totalPointsValue",
+            },
+            {
+              label: "助力热力值",
+              width:100,
+              prop: "totalHotValue",
+              rules: [{
+                required: true,
+                message: "请输入助力总热力值",
+                trigger: "blur"
+              }]
+            },
+            {
+              width:130,
+              label: "打赏时间",
+              prop: "createTime",
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.helprecord_add, false),
+          viewBtn: this.vaildData(this.permission.helprecord_view, false),
+          delBtn: this.vaildData(this.permission.helprecord_delete, false),
+          editBtn: this.vaildData(this.permission.helprecord_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        this.query.activityId = this.$route.query.id;
+        this.query.typeSub=2
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 282 - 0
src/views/shop/shop.vue

@@ -0,0 +1,282 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.shop_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/shop/shop";
+  import {mapGetters} from "vuex";
+
+  export default {
+    data() {
+      return {
+        form: {},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          height:'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          selection: true,
+          dialogClickModal: false,
+          labelWidth:130,
+          column: [
+            {
+              label: "所属商场",
+              prop: "mallId",
+              type: "select",
+              dicUrl: "/api/ldt-mall/mall/list?size=500",
+              props: {
+                label: "name",
+                value: "id"
+              },
+              dicFormatter: (res) => {
+                return res.data.records
+              },
+              rules: [{
+                required: true,
+                message: "请选择所属商场",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "商户名",
+              prop: "name",
+              rules: [{
+                required: true,
+                message: "请输入商户名",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "评分",
+              prop: "score",
+              rules: [{
+                required: true,
+                message: "请输入评分",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "封面",
+              prop: "cover",
+              rules: [{
+                required: true,
+                message: "请输入封面",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "销量",
+              prop: "sales",
+              rules: [{
+                required: true,
+                message: "请输入销量",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "标语,逗号分割",
+              prop: "slogan",
+              rules: [{
+                required: true,
+                message: "请输入标语,逗号分割",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "经度",
+              prop: "longitude",
+              rules: [{
+                required: true,
+                message: "请输入经度",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "纬度",
+              prop: "latitude",
+              rules: [{
+                required: true,
+                message: "请输入纬度",
+                trigger: "blur"
+              }]
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.shop_add, false),
+          viewBtn: this.vaildData(this.permission.shop_view, false),
+          delBtn: this.vaildData(this.permission.shop_delete, false),
+          editBtn: this.vaildData(this.permission.shop_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 292 - 0
src/views/useractivitystatistical/useractivitystatistical.vue

@@ -0,0 +1,292 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :page.sync="page"
+               :permission="permissionList"
+               :before-open="beforeOpen"
+               v-model="form"
+               ref="crud"
+               @row-update="rowUpdate"
+               @row-save="rowSave"
+               @row-del="rowDel"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button type="danger"
+                   size="small"
+                   icon="el-icon-delete"
+                   plain
+                   v-if="permission.useractivitystatistical_delete"
+                   @click="handleDelete">删 除
+        </el-button>
+      </template>
+      <template slot="userInfo" slot-scope="scope">
+        <div style="display: flex;">
+          <div style="display: flex;justify-content: center;align-items: center;">
+            <el-avatar size="large" :src="scope.row.loginWebVO.avatar"></el-avatar>
+          </div>
+           <div style="padding: 10px;">
+             <div >昵称:{{scope.row.loginWebVO.nickName}}</div>
+             <div>手机:{{scope.row.loginWebVO.phone}}</div>
+           </div>
+        </div>
+      </template>
+      <template slot="rank" slot-scope="scope">
+        <el-tag effect="dark">
+          {{scope.row.loginWebVO.rank}}
+        </el-tag>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import {getList, getDetail, add, update, remove} from "@/api/useractivitystatistical/useractivitystatistical";
+  import {mapGetters} from "vuex";
+
+  export default {
+    data() {
+      return {
+        form: {},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          menu:false,
+          height:'auto',
+          calcHeight: 30,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: true,
+          selection: true,
+          dialogClickModal: false,
+          column: [
+            {
+              hide:true,
+              label: "用户id",
+              prop: "userId",
+              rules: [{
+                required: true,
+                message: "请输入用户id",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "选手信息",
+              prop: "userInfo",
+              slot:true
+            },
+            {
+              label: "排名",
+              prop: "rank",
+              slot:true
+            },
+            {
+              hide:true,
+              label: "活动id",
+              prop: "activityId",
+              rules: [{
+                required: true,
+                message: "请输入活动id",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "活动可用热力值",
+              prop: "usableHotValue",
+              rules: [{
+                required: true,
+                message: "请输入可用热力值",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "活动总热力值",
+              prop: "totalHotValue",
+              rules: [{
+                required: true,
+                message: "请输入总热力值",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "活动可用积分",
+              prop: "usablePointsValue",
+              rules: [{
+                required: true,
+                message: "请输入可用积分",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "活动总积分",
+              prop: "totalPointsValue",
+              rules: [{
+                required: true,
+                message: "请输入总积分",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "用户在此活动收到的总现金",
+              prop: "totalCash",
+              rules: [{
+                required: true,
+                message: "请输入用户在此活动收到的总现金",
+                trigger: "blur"
+              }]
+            },
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.useractivitystatistical_add, false),
+          viewBtn: this.vaildData(this.permission.useractivitystatistical_view, false),
+          delBtn: this.vaildData(this.permission.useractivitystatistical_delete, false),
+          editBtn: this.vaildData(this.permission.useractivitystatistical_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+    methods: {
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      currentChange(currentPage){
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize){
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+          this.selectionClear();
+        });
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 1 - 1
vue.config.js

@@ -26,7 +26,7 @@ module.exports = {
     proxy: {
       '/api': {
         //本地服务接口地址
-        target: 'http://localhost',
+        target: 'http://localhost:9612',
         //远程演示服务地址,可用于直接启动项目
         //target: 'https://saber.bladex.vip/api',
         ws: true,