Ver código fonte

Merge branch 'dev' into 'test'

Dev

See merge request quanshu/mp-ui-pc!134
hunagwb 3 anos atrás
pai
commit
3f468fda9c

+ 4 - 0
src/main.js

@@ -45,6 +45,10 @@ Vue.prototype.download = download
 Vue.prototype.handleTree = handleTree
 Vue.prototype.$numberFormat = numberFormat
 
+
+import echarts from 'echarts'
+Vue.prototype.$echarts = echarts
+
 // 处理时间的过滤器
 Vue.use(require('vue-moment'))
 import moment from 'moment'

+ 4 - 7
src/views/business/banner/components/BannerCreate.vue

@@ -1,7 +1,7 @@
 <template>
   <div>
     <el-dialog
-      title="添加banner"
+      :title="title"
       :visible.sync="dialogShow"
       width="800px"
       :before-close="close"
@@ -148,6 +148,9 @@ export default {
     };
   },
   computed: {
+    title() {
+      return this.bannerId ? '编辑banner' : '添加banner';
+    },
     bannerPicUrl: {
       get() {
         return this.form.picUrl ? this.form.picUrl.split(',').map(item => {
@@ -166,7 +169,6 @@ export default {
     this.getGoodsTagItems();
     if(this.bannerId){
       goodsBannerDetail({ bannerId: this.bannerId }).then(res => {
-        console.log('res', res)
         const { location, name, sort, picUrl, type, linkUrl, goodsTags } = res.data
         this.form = {
           location: JSON.parse(location).value,
@@ -192,11 +194,6 @@ export default {
       this.$refs["form"].clearValidate();
     },
 
-    // 添加图片
-    pictureSelect(data) {
-      this.form.picUrl = data;
-    },
-
     // 关闭弹框
     close() {
       this.$emit("close");

+ 1 - 1
src/views/business/banner/index.vue

@@ -209,7 +209,7 @@ export default {
       this.createShow = true;
     },
 
-    // 关闭发货弹框
+    // 关闭弹框
     close() {
       this.createShow = false;
       this.bannerId = "";

+ 44 - 29
src/views/business/category/components/CategoryCreate.vue

@@ -1,7 +1,7 @@
 <template>
   <div>
     <el-dialog
-      title="添加分类"
+      :title="title"
       :visible.sync="dialogShow"
       width="800px"
       :before-close="close"
@@ -25,18 +25,16 @@
         </el-form-item>
         <el-form-item label="分类图片" prop="picUrl">
           <image-upload
+            v-model="categoryPicUrl"
             :limit="1"
-            :value="form.picUrl"
-            :file-size="50"
-            :is-public="true"
-            @input="pictureSelect"
           />
         </el-form-item>
         <el-form-item label="是否显示" prop="isShow">
           <el-radio-group v-model="form.isShow" size="small">
-            <el-radio :label="1"></el-radio>
-            <el-radio :label="0"></el-radio>
+            <el-radio :label="1">显示</el-radio>
+            <el-radio :label="0">不显示</el-radio>
           </el-radio-group>
+          <div>选择“不显示”,则用户看不到该分类</div>
         </el-form-item>
       </el-form>
 
@@ -52,7 +50,7 @@
 </template>
 <script>
 import CustomFieldsMixin from "@/mixins/CustomFields";
-import { goodsCategoryCreate } from "@/api/business/category";
+import { goodsCategoryCreate, goodsCategoryDetail, goodsCategoryUpdate } from "@/api/business/category";
 export default {
   mixins: [CustomFieldsMixin],
   props: {
@@ -61,15 +59,16 @@ export default {
       type: Boolean,
       default: false,
     },
-  },
-  created() {
-
+    // 分类ID
+    categoryId: {
+      type: [String, Number],
+      default: null
+    }
   },
   data() {
     return {
       loading: false,
       form: {
-        picUrl: [],
         isShow: 1,
         sort: 0
       },
@@ -79,7 +78,6 @@ export default {
         ],
         picUrl: [
           {
-            type: "array",
             required: true,
             message: "请上传分类图片",
             trigger: "change",
@@ -99,17 +97,34 @@ export default {
       },
     };
   },
-  methods: {
-
-    changeType(){
-      this.$refs["form"].clearValidate();
-    },
-
-    // 添加图片
-    pictureSelect(data) {
-      this.form.picUrl = data;
+  computed: {
+    title() {
+      return this.categoryId ? '编辑分类' : '添加分类';
     },
-
+    categoryPicUrl: {
+      get() {
+        return this.form.picUrl ? this.form.picUrl.split(',').map(item => {
+          return {
+            fileName: item
+          }
+        }) : []
+      },
+      set(val) {
+        this.$set(this.form, 'picUrl', val.map(item => { return item.fileName }).toString())
+      }
+    }
+  },
+  created() {
+    if(this.categoryId){
+      goodsCategoryDetail({ categoryId: this.categoryId }).then(res => {
+        const { name, sort, picUrl, isShow } = res && res.data
+        this.form = {
+          name, sort, picUrl, isShow
+        }
+      })
+    }
+  },
+  methods: {
     // 关闭弹框
     close() {
       this.$emit("close");
@@ -135,14 +150,14 @@ export default {
 
     // 提交
     submitForm(form) {
-      let data = {
-        ... form,
-        picUrl: this.form.picUrl[0].fileName,
-      };
-      goodsCategoryCreate(data)
+      let request = this.categoryId ? goodsCategoryUpdate : goodsCategoryCreate
+      if(this.categoryId){
+        form.categoryId = this.categoryId
+      }
+      request(form)
         .then((res) => {
           if (res.code == 0) {
-            this.msgSuccess("添加成功");
+            this.msgSuccess(this.categoryId ? "修改成功" : '添加成功');
             this.close();
           }
         })

+ 13 - 2
src/views/business/category/index.vue

@@ -78,7 +78,10 @@
       <el-table-column label="操作" align="center">
         <template slot-scope="{ row }">
           <div>
-            <el-button v-hasPermi="['order:deliver:query']" type="text" disabled
+            <el-button
+              v-hasPermi="['business:category:edit']"
+              type="text"
+              @click="edit(row)"
               >编辑</el-button
             >
             <el-button
@@ -104,6 +107,7 @@
 
     <category-create
       v-if="createShow"
+      :category-id="categoryId"
       :dialog-show="createShow"
       @close="close"
     />
@@ -134,6 +138,7 @@ export default {
       total: 0,
       list: [],
       createShow: false,
+      categoryId: '',
     };
   },
   created() {
@@ -180,6 +185,11 @@ export default {
       });
     },
 
+    edit(item){
+      this.categoryId = item.categoryId
+      this.createShow = true;
+    },
+
     // 重置
     resetQuery() {
       this.pageParams.pageNum = 1
@@ -190,9 +200,10 @@ export default {
       this.createShow = true;
     },
 
-    // 关闭发货弹框
+    // 关闭弹框
     close() {
       this.createShow = false;
+      this.categoryId = ''
       this.getList();
     },
   },

+ 3 - 3
src/views/business/salesite/index.vue

@@ -102,7 +102,7 @@
      <!-- <el-table-column type="selection" width="55"  /> -->
       <el-table-column label="经销商编号" prop="channelId" width="100px"/>
       <el-table-column label="经销商名称" show-overflow-tooltip  prop="name" max-width="100px" />
-      <el-table-column label="手机号码"  prop="mobile" />
+      <el-table-column label="手机号码"  prop="mobile" width="120px"/>
       <el-table-column label="佣金比例" prop="commRate">
         <template slot-scope="{ row, column }">
            <span>{{row.commRate}}%</span>
@@ -330,8 +330,8 @@ export default {
       this.value = val;
       if (val) { //val存在
         this.channelList = this.channelCopyList.filter((item) => {
-          // console.log("dataFilter item"+JSON.stringify(item))
-          if (!!~item.mobile.indexOf(val) || !!~item.mobile.toUpperCase().indexOf(val.toUpperCase())) {
+          if (!!~item.mobile.indexOf(val) || !!~item.mobile.toUpperCase().indexOf(val.toUpperCase())
+                 || !!~item.name.indexOf(val) || !!~item.name.indexOf(val)) {
              return true
           }
         })

+ 152 - 0
src/views/business/tag/components/TagCreate.vue

@@ -0,0 +1,152 @@
+<template>
+  <div>
+    <el-dialog
+      :title="title"
+      :visible.sync="dialogShow"
+      width="800px"
+      :before-close="close"
+    >
+      <el-form :model="form" ref="form" :rules="rules" label-width="100px">
+        <el-form-item label="标签名称" prop="name">
+          <el-input
+            v-model="form.name"
+            style="width: 300px"
+            size="small"
+            placeholder="请输入标签名称"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="排序" prop="sort">
+          <el-input
+            v-model.number="form.sort"
+            style="width: 300px"
+            size="small"
+            placeholder="请输入排序"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="是否显示" prop="isShow">
+          <el-radio-group v-model="form.isShow" size="small">
+            <el-radio :label="1">显示</el-radio>
+            <el-radio :label="0">不显示</el-radio>
+          </el-radio-group>
+          <div>选择“不显示”,则用户看不到该标签</div>
+        </el-form-item>
+      </el-form>
+
+      <!-- 按钮 -->
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="close">取 消</el-button>
+        <el-button type="primary" :disabled="loading" @click="saveClick"
+          >确 定</el-button
+        >
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import CustomFieldsMixin from "@/mixins/CustomFields";
+import { goodsTagCreate, goodsTagDetail, goodsTagUpdate } from "@/api/business/tag";
+export default {
+  mixins: [CustomFieldsMixin],
+  props: {
+    // 弹框显示
+    dialogShow: {
+      type: Boolean,
+      default: false,
+    },
+    // 标签ID
+    tagId: {
+      type: [String, Number],
+      default: null
+    }
+  },
+  data() {
+    return {
+      loading: false,
+      form: {
+        isShow: 1,
+        sort: 0
+      },
+      rules: {
+        name: [
+          { required: true, message: "请输入标签名称", trigger: "blur" },
+        ],
+        sort: [
+          { required: true, message: "请输入排序", trigger: "blur" },
+          {
+            pattern: /^([0-9]\d*)$/,
+            message: "请输入合法的数字",
+            trigger: ["blur", "change"],
+          },
+        ],
+        isShow:  [
+          { required: true, message: "请选择", trigger: "change" },
+        ],
+      },
+    };
+  },
+  computed: {
+    title() {
+      return this.tagId ? '编辑标签' : '添加标签';
+    },
+  },
+  created() {
+    if(this.tagId){
+      goodsTagDetail({ tagId: this.tagId }).then(res => {
+        const { name, sort, isShow } = res && res.data
+        this.form = {
+          name, sort, isShow
+        }
+      })
+    }
+  },
+  methods: {
+    // 关闭弹框
+    close() {
+      this.$emit("close");
+      this.loading = false;
+      this.$refs["form"].resetFields();
+    },
+
+    // 确认
+    saveClick() {
+      this.loading = true;
+      const subForm = this.$refs["form"];
+      subForm.validate((valid) => {
+        if (valid) {
+          this.submitForm(this.form);
+        } else {
+          this.loading = false;
+          // 提示第一个error
+          this.getFormErrorMessage(subForm);
+          return false;
+        }
+      });
+    },
+
+    // 提交
+    submitForm(form) {
+      let request = this.tagId ? goodsTagUpdate : goodsTagCreate
+      if(this.tagId){
+        form.tagId = this.tagId
+      }
+      request(form)
+        .then((res) => {
+          if (res.code == 0) {
+            this.msgSuccess(this.tagId ? "修改成功" : '添加成功');
+            this.close();
+          }
+        })
+        .catch(() => {
+          this.loading = false;
+        });
+    },
+  },
+};
+</script>
+<style scoped>
+.channel {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+</style>

+ 187 - 6
src/views/business/tag/index.vue

@@ -1,19 +1,200 @@
 <template>
   <div class="app-container">
+    <!-- <el-form
+      :model="queryParams"
+      ref="queryForm"
+      :inline="true"
+      v-show="showSearch"
+      label-width="90px"
+    >
+      <el-form-item label="位置">
+        <el-select
+          v-model="queryParams.location"
+          placeholder="请选择位置"
+          clearable
+          @change="queryParams.pageNum = 1;getList()"
+        >
+          <el-option
+            :label="item.dictLabel"
+            :value="item.dictValue"
+            v-for="(item, index) in bannerLocationList"
+            :key="index"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button
+          type="primary"
+          icon="el-icon-search"
+          size="mini"
+          @click="handleQuery"
+          >搜索</el-button
+        >
+        <el-button icon="el-icon-refresh" size="mini" @click="getList(true)"
+          >重置</el-button
+        >
+      </el-form-item>
+    </el-form> -->
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['business:ticket:add']"
+          >添加标签</el-button
+        >
+      </el-col>
+      <right-toolbar
+        :showSearch.sync="showSearch"
+        @queryTable="getList()"
+      ></right-toolbar>
+    </el-row>
+    <!-- 列表 -->
+    <el-table ref="table" v-loading="loading" :data="list">
+      <el-table-column label="标签名称" prop="name" />
+      <el-table-column label="是否在兑换大厅显示" prop="status" align="center">
+        <template slot-scope="{ row }">
+          <el-tag :type="row.isShow === 1 ? 'success' : 'info'">{{
+            row.isShow === 1 ? "显示" : "不显示"
+          }}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="排序" align="center">
+        <template slot-scope="{ row }">
+          <div>{{ row.sort }}</div>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center">
+        <template slot-scope="{ row }">
+          <div>
+            <el-button
+              v-hasPermi="['business:tag:edit']"
+              type="text"
+              @click="edit(row)"
+              >编辑</el-button
+            >
+            <el-button
+              v-hasPermi="['business:tag:remove']"
+              type="text"
+              class="del"
+              @click="del(row)"
+              >删除</el-button
+            >
+          </div>
+        </template>
+      </el-table-column>
+    </el-table>
 
+    <!-- 分页 -->
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="pageParams.pageNum"
+      :limit.sync="pageParams.pageSize"
+      @pagination="getList"
+    />
+
+    <tag-create
+      v-if="createShow"
+      :tag-id="tagId"
+      :dialog-show="createShow"
+      @close="close"
+    />
   </div>
 </template>
 <script>
+import { publicFileGetUrl } from "@/api/common";
+import {
+  goodsTagList,
+  goodsTagRemove,
+} from "@/api/business/tag";
+import TagCreate from "./components/TagCreate";
 export default {
-  name: 'ListTag',
-  components: {},
+  name: "ListTag",
+  components: {
+    TagCreate,
+  },
   data() {
-    return {};
+    return {
+      loading: false,
+      showSearch: true,
+      queryParams: {},
+      pageParams: {
+        pageNum: 1,
+        pageSize: 10,
+      },
+      // 总条数
+      total: 0,
+      list: [],
+      createShow: false,
+      tagId: '',
+    };
   },
-  created(){
-    
+  created() {
+    this.getList();
+  },
+  methods: {
+    getList() {
+      this.loading = true;
+      goodsTagList(
+        "pageNum=" +
+          this.pageParams.pageNum +
+          "&pageSize=" +
+          this.pageParams.pageSize +
+          "&",
+        this.queryParams
+      )
+        .then((res) => {
+          this.loading = false;
+          if (res.code == 0) {
+            this.total = res.total;
+            this.list = res.rows;
+          }
+        })
+        .catch(() => {
+          this.loading = false;
+        });
+    },
+
+    del(item) {
+      this.$confirm(`确认删除标签 “${item.name}” 吗?`, "删除标签", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      }).then(() => {
+        goodsTagRemove({ tagId: item.tagId }).then((res) => {
+          if (res.code === 0) {
+            this.$message.success("操作已完成!");
+            this.getList();
+          }
+        });
+      });
+    },
+
+    edit(item){
+      this.tagId = item.tagId
+      this.createShow = true;
+    },
+
+    // 重置
+    resetQuery() {
+      this.pageParams.pageNum = 1
+      this.getList();
+    },
+
+    handleAdd() {
+      this.createShow = true;
+    },
+
+    // 关闭弹框
+    close() {
+      this.createShow = false;
+      this.tagId = ''
+      this.getList();
+    },
   },
-  methods: {},
 };
 </script>
 <style>

+ 863 - 13
src/views/index.vue

@@ -1,9 +1,298 @@
 <template>
-  <div class="coontent">
+  <div ref="workbench" class="crm-workbench">
+    <div >
+      <div class="brief-box">
+        <div class="brief-title">
+          <span class="icon wk wk-briefing" />
+          <span class="text">数据驾驶舱(今日实时数据)</span>
+        </div>
+        <div class="brief">
+          <flexbox
+            :span="2"
+            class="brief-item">
+            <flexbox class="brief-item__body">
+              <div class="info">
+                <div class="title">
+                 实时交易金额
+                </div>
+                <div
+                  class="number">
+                  ¥ {{daily.payAmt && daily.payAmt.today || 0}}
+                </div>
+               <div class="brief-item__others">
+                 <div class="text">
+                   较昨天
+                 </div>
+                 <div class="rate text-one-line">
+                   <span class="rate__num">
+                      <span v-if="(daily.payAmt && daily.payAmt.yesterday || 0) > 0 ">
+                          <span v-if="((daily.payAmt && daily.payAmt.today || 0) - daily.payAmt.yesterday) == 0" class="el-icon-sort rate__icon" />
+                          <span v-if="((daily.payAmt && daily.payAmt.today || 0) - daily.payAmt.yesterday) > 0" class="el-icon-sort-up rate__icon" style="color: red;" />
+                          <span v-if="((daily.payAmt && daily.payAmt.today || 0) - daily.payAmt.yesterday) < 0" class="el-icon-sort-down rate__icon" style="color: blue;" />
+                           {{((daily.payAmt && daily.payAmt.today || 0) - daily.payAmt.yesterday) / daily.payAmt.yesterday }}
+                      </span>
+                      <span v-if="(daily.payAmt && daily.payAmt.yesterday || 0) == 0">
+                          <span v-if="(daily.payAmt && daily.payAmt.today || 0) == 0" class="el-icon-sort rate__icon" />
+                          <span v-if="(daily.payAmt && daily.payAmt.today || 0) > 0" class="el-icon-sort-up rate__icon" style="color: red;" />
+                           {{(daily.payAmt && daily.payAmt.today || 0) > 0 ? 100 : 0 }}
+                      </span>
+                      %
+                    </span>
+                 </div>
+               </div>
+              </div>
+            </flexbox>
+          </flexbox>
+
+          <flexbox
+            :span="2"
+            class="brief-item">
+            <flexbox class="brief-item__body">
+              <div class="info">
+                <div class="title">
+                 交易用户
+                </div>
+                <div
+                  class="number">
+                  {{daily.payUser && daily.payUser.today || 0}}
+                </div>
+               <div class="brief-item__others">
+                 <div class="text">
+                   较昨天
+                 </div>
+                 <div class="rate text-one-line">
+                   <span class="rate__num">
+                     <span v-if="(daily.payUser && daily.payUser.yesterday || 0) > 0 ">
+                          <span v-if="((daily.payUser && daily.payUser.today || 0) - daily.payUser.yesterday) == 0" class="el-icon-sort rate__icon" />
+                          <span v-if="((daily.payUser && daily.payUser.today || 0) - daily.payUser.yesterday) > 0" class="el-icon-sort-up rate__icon" style="color: red;" />
+                          <span v-if="((daily.payUser && daily.payUser.today || 0) - daily.payUser.yesterday) < 0" class="el-icon-sort-down rate__icon" style="color: blue;" />
+                          {{((daily.payUser && daily.payUser.today || 0) - daily.payUser.yesterday) / daily.payUser.yesterday }}
+                     </span>
+                     <span v-if="(daily.payUser && daily.payUser.yesterday || 0) == 0">
+                          <span v-if="(daily.payUser && daily.payUser.today || 0) == 0" class="el-icon-sort rate__icon" />
+                          <span v-if="(daily.payUser && daily.payUser.today || 0) > 0" class="el-icon-sort-up rate__icon" style="color: red;" />
+                          {{(daily.payUser && daily.payUser.today || 0) > 0 ? 100 : 0 }}
+                     </span>
+                     %
+                   </span>
+                 </div>
+               </div>
+              </div>
+            </flexbox>
+          </flexbox>
+
+         <flexbox
+            :span="2"
+            class="brief-item">
+            <flexbox class="brief-item__body">
+              <div class="info">
+                <div class="title">
+                 盲票销售张数
+                </div>
+                <div
+                  class="number">
+                  {{daily.ticketNum && daily.ticketNum.today || 0}}
+                </div>
+               <div class="brief-item__others">
+                 <div class="text">
+                   较昨天
+                 </div>
+                 <div class="rate text-one-line">
+                   <span class="rate__num">
+                     <span v-if="(daily.ticketNum && daily.ticketNum.yesterday || 0) > 0 ">
+                          <span v-if="((daily.ticketNum && daily.ticketNum.today || 0) - daily.ticketNum.yesterday) == 0" class="el-icon-sort rate__icon" />
+                          <span v-if="((daily.ticketNum && daily.ticketNum.today || 0) - daily.ticketNum.yesterday) > 0" class="el-icon-sort-up rate__icon" style="color: red;" />
+                          <span v-if="((daily.ticketNum && daily.ticketNum.today || 0) - daily.ticketNum.yesterday) < 0" class="el-icon-sort-down rate__icon" style="color: blue;" />
+                          {{((daily.ticketNum && daily.ticketNum.today || 0) - daily.ticketNum.yesterday) / daily.ticketNum.yesterday }}
+                     </span>
+                     <span v-if="(daily.ticketNum && daily.ticketNum.yesterday || 0) == 0">
+                         <span v-if="(daily.ticketNum && daily.ticketNum.today || 0) == 0" class="el-icon-sort rate__icon" />
+                         <span v-if="(daily.ticketNum && daily.ticketNum.today || 0) > 0" class="el-icon-sort-up rate__icon" style="color: red;" />
+                          {{(daily.ticketNum && daily.ticketNum.today || 0) > 0 ? 100 : 0 }}
+                     </span>
+                     %
+                   </span>
+
+                 </div>
+               </div>
+              </div>
+            </flexbox>
+          </flexbox>
+
+          <flexbox
+            :span="2"
+            class="brief-item">
+            <flexbox class="brief-item__body">
+              <div class="info">
+                <div class="title">
+                 新增经销商
+                </div>
+                <div
+                  class="number">
+                  {{daily.newSite && daily.newSite.today || 0}}
+                </div>
+               <div class="brief-item__others">
+                 <div class="text">
+                   较昨天
+                 </div>
+                 <div class="rate text-one-line">
+                   <span class="rate__num">
+                     <span v-if="(daily.newSite && daily.newSite.yesterday || 0) > 0 ">
+                          <span v-if="((daily.newSite && daily.newSite.today || 0) - daily.newSite.yesterday) == 0" class="el-icon-sort rate__icon" />
+                          <span v-if="((daily.newSite && daily.newSite.today || 0) - daily.newSite.yesterday) > 0" class="el-icon-sort-up rate__icon" style="color: red;" />
+                          <span v-if="((daily.newSite && daily.newSite.today || 0) - daily.newSite.yesterday) < 0" class="el-icon-sort-down rate__icon" style="color: blue;" />
+                          {{((daily.newSite && daily.newSite.today || 0) - daily.newSite.yesterday) / daily.newSite.yesterday }}
+                     </span>
+                     <span v-if="(daily.newSite && daily.newSite.yesterday || 0) == 0">
+                          <span v-if="(daily.newSite && daily.newSite.today || 0) == 0" class="el-icon-sort rate__icon" />
+                          <span v-if="(daily.newSite && daily.newSite.today || 0) > 0" class="el-icon-sort-up rate__icon" style="color: red;" />
+                          {{(daily.newSite && daily.newSite.today || 0) > 0 ? 100 : 0 }}
+                     </span>
+                     %
+                   </span>
+                 </div>
+               </div>
+              </div>
+            </flexbox>
+          </flexbox>
+        </div>
+        <!-- 交易金额 -->
+        <div class="brief-box">
+          <div class="brief-title">
+            <span class="icon wk wk-briefing" />
+            <span class="text">交易金额</span>
+            <span style="margin-left: 15px;">
+              <el-date-picker
+                v-model="timeArr1"
+                style="line-height: 30px;width: 250px;"
+                type="daterange"
+                size="small"
+                range-separator="至"
+                start-placeholder="开始日期"
+                end-placeholder="结束日期"
+                value-format="yyyy-MM-dd"
+                :picker-options="pickerOptions1"
+                @change="dateSelect1"
+              >
+              </el-date-picker>
+            </span>
+
+            <el-select
+              v-model="queryParams1.level"
+              placeholder="请选择统计粒度"
+              style="width: 160px;height: 30px;line-height: 30px;float: right;"
+              filterable
+              @change="getPayAmtList()">
+               <el-option value="day" label="日粒度">日粒度</el-option>
+               <el-option value="week" label="周粒度">周粒度</el-option>
+               <el-option value="month" label="月粒度">月粒度</el-option>
+            </el-select>
+          </div>
+          <div class="brief">
+             <div ref="echart1" style="width: 100%;height: 250px;"></div>
+          </div>
+        </div>
+        <!-- 交易用户 -->
+        <div class="brief-box">
+          <div class="brief-title">
+            <span class="icon wk wk-briefing" />
+            <span class="text">交易用户</span>
+            <span style="margin-left: 15px;">
+              <el-date-picker
+                v-model="timeArr2"
+                style="line-height: 30px;width: 250px;"
+                type="daterange"
+                size="small"
+                range-separator="至"
+                start-placeholder="开始日期"
+                end-placeholder="结束日期"
+                value-format="yyyy-MM-dd"
+                :picker-options="pickerOptions2"
+                @change="dateSelect2"
+              >
+              </el-date-picker>
+            </span>
 
+            <el-select
+              v-model="queryParams2.level"
+              placeholder="请选择统计粒度"
+              style="width: 160px;height: 30px;line-height: 30px;float: right;"
+              filterable
+              @change="getPayUserCntList()">
+               <el-option value="day" label="日粒度">日粒度</el-option>
+               <el-option value="week" label="周粒度">周粒度</el-option>
+               <el-option value="month" label="月粒度">月粒度</el-option>
+            </el-select>
+          </div>
+          <div class="brief">
+             <div ref="echart2" style="width: 100%;height: 250px;"></div>
+          </div>
+        </div>
+        <!-- 票组销售Top10 -->
+        <div class="brief-box">
+          <div class="brief-title">
+            <span class="icon wk wk-briefing" />
+            <span class="text">票组销售Top10</span>
+            <span style="margin-left: 15px;">
+              <el-date-picker
+                v-model="timeArr3"
+                style="line-height: 30px;width: 250px;"
+                type="daterange"
+                size="small"
+                range-separator="至"
+                start-placeholder="开始日期"
+                end-placeholder="结束日期"
+                value-format="yyyy-MM-dd"
+                :picker-options="pickerOptions3"
+                @change="dateSelect3"
+              >
+              </el-date-picker>
+            </span>
+          </div>
+          <div class="brief">
+             <div ref="echart3" style="width: 100%;height: 250px;"></div>
+          </div>
+        </div>
+        <!-- 经销商销售Top10 -->
+        <div class="brief-box">
+          <div class="brief-title">
+            <span class="icon wk wk-briefing" />
+            <span class="text">经销商交易额Top10</span>
+            <span style="margin-left: 15px;">
+              <el-date-picker
+                v-model="timeArr4"
+                style="line-height: 30px;width: 250px;"
+                type="daterange"
+                size="small"
+                range-separator="至"
+                start-placeholder="开始日期"
+                end-placeholder="结束日期"
+                value-format="yyyy-MM-dd"
+                :picker-options="pickerOptions4"
+                @change="dateSelect4"
+              >
+              </el-date-picker>
+            </span>
+          </div>
+          <div class="brief">
+             <div ref="echart4" style="width: 100%;height: 250px;"></div>
+          </div>
+        </div>
+
+
+      </div>
+    </div>
   </div>
 </template>
 
+
+<!--
+<template>
+  <div class="coontent">
+      <div ref="echart1" style="width: 100%;height: 250px;"></div>
+  </div>
+</template> -->
+
 <script>
 import { getDailyData,getPayAmtList, getPayUserCntList, getTicketBoxTop, getTicketSiteTop} from "@/api/admin/index";
 import echarts from "echarts"
@@ -13,13 +302,193 @@ import { numberFormat, getTimeResult } from "@/utils/util";
 export default {
   data() {
     return {
-
+      daily:{},
+      chartObj1:null,
+      chartObj2:null,
+      chartObj3:null,
+      chartObj4:null,
+      axisOption1: null,
+      axisOption2: null,
+      axisOption3: null,
+      axisOption4: null,
+      queryParams1:{
+        days:7,
+        level:"day"
+      },
+      queryParams2:{
+        days:7,
+        level:"day"
+      },
+      queryParams3:{
+        days:7
+      },
+      queryParams4:{
+        days:7
+      },
+      timeArr1: [],
+      pickerOptions1: {
+         shortcuts: [{
+          text: '最近7天',
+          onClick(picker) {
+          const end = new Date();
+          const start = new Date();
+          start.setTime(start.getTime() - 3600 * 1000 * 24 * (7-1));
+          picker.$emit('pick', [start, end]);
+          }
+        },
+        {
+          text: '最近30天',
+          onClick(picker) {
+          const end = new Date();
+          const start = new Date();
+          start.setTime(start.getTime() - 3600 * 1000 * 24 * (30-1));
+          picker.$emit('pick', [start, end]);
+          }
+        },
+        {
+          text: '最近三个月',
+          onClick(picker) {
+          const end = new Date();
+          const start = new Date();
+          start.setTime(start.getTime() - 3600 * 1000 * 24 * (90-1));
+          picker.$emit('pick', [start, end]);
+          }
+        },
+        {
+          text: '最近六个月',
+          onClick(picker) {
+          const end = new Date();
+          const start = new Date();
+          start.setTime(start.getTime() - 3600 * 1000 * 24 * (180-1));
+          picker.$emit('pick', [start, end]);
+          }
+        }]
+      },
+      timeArr2: [],
+      pickerOptions2: {
+         shortcuts: [{
+          text: '最近7天',
+          onClick(picker) {
+          const end = new Date();
+          const start = new Date();
+          start.setTime(start.getTime() - 3600 * 1000 * 24 * (7-1));
+          picker.$emit('pick', [start, end]);
+          }
+        },
+        {
+          text: '最近30天',
+          onClick(picker) {
+          const end = new Date();
+          const start = new Date();
+          start.setTime(start.getTime() - 3600 * 1000 * 24 * (30-1));
+          picker.$emit('pick', [start, end]);
+          }
+        },
+        {
+          text: '最近三个月',
+          onClick(picker) {
+          const end = new Date();
+          const start = new Date();
+          start.setTime(start.getTime() - 3600 * 1000 * 24 * (90-1));
+          picker.$emit('pick', [start, end]);
+          }
+        },
+        {
+          text: '最近六个月',
+          onClick(picker) {
+          const end = new Date();
+          const start = new Date();
+          start.setTime(start.getTime() - 3600 * 1000 * 24 * (180-1));
+          picker.$emit('pick', [start, end]);
+          }
+        }]
+      },
+      timeArr3: [],
+      pickerOptions3: {
+         shortcuts: [{
+          text: '最近7天',
+          onClick(picker) {
+          const end = new Date();
+          const start = new Date();
+          start.setTime(start.getTime() - 3600 * 1000 * 24 * (7-1));
+          picker.$emit('pick', [start, end]);
+          }
+        },
+        {
+          text: '最近30天',
+          onClick(picker) {
+          const end = new Date();
+          const start = new Date();
+          start.setTime(start.getTime() - 3600 * 1000 * 24 * (30-1));
+          picker.$emit('pick', [start, end]);
+          }
+        },
+        {
+          text: '最近三个月',
+          onClick(picker) {
+          const end = new Date();
+          const start = new Date();
+          start.setTime(start.getTime() - 3600 * 1000 * 24 * (90-1));
+          picker.$emit('pick', [start, end]);
+          }
+        },
+        {
+          text: '最近六个月',
+          onClick(picker) {
+          const end = new Date();
+          const start = new Date();
+          start.setTime(start.getTime() - 3600 * 1000 * 24 * (180-1));
+          picker.$emit('pick', [start, end]);
+          }
+        }]
+      },
+      timeArr4: [],
+      pickerOptions4: {
+         shortcuts: [{
+          text: '最近7天',
+          onClick(picker) {
+          const end = new Date();
+          const start = new Date();
+          start.setTime(start.getTime() - 3600 * 1000 * 24 * (7-1));
+          picker.$emit('pick', [start, end]);
+          }
+        },
+        {
+          text: '最近30天',
+          onClick(picker) {
+          const end = new Date();
+          const start = new Date();
+          start.setTime(start.getTime() - 3600 * 1000 * 24 * (30-1));
+          picker.$emit('pick', [start, end]);
+          }
+        },
+        {
+          text: '最近三个月',
+          onClick(picker) {
+          const end = new Date();
+          const start = new Date();
+          start.setTime(start.getTime() - 3600 * 1000 * 24 * (90-1));
+          picker.$emit('pick', [start, end]);
+          }
+        },
+        {
+          text: '最近六个月',
+          onClick(picker) {
+          const end = new Date();
+          const start = new Date();
+          start.setTime(start.getTime() - 3600 * 1000 * 24 * (180-1));
+          picker.$emit('pick', [start, end]);
+          }
+        }]
+      }
     };
   },
   mounted: function () {
-    this.$nextTick(function () {
 
-    });
+    this.initChart()
+    // this.$nextTick(function () {
+
+    // });
   },
 
   computed: {
@@ -28,17 +497,109 @@ export default {
 
   created() {
     this.getDailyData()
-    //this.getPayAmtList()
-   //this.getPayUserCntList()
-    this.getTicketBoxTop()
-    this.getTicketSiteTop()
   },
   methods: {
 
+    initChart(){
+      // 初始化echarts实例
+      this.chartObj1 = echarts.init(this.$refs.echart1);
+      // 绘制图表
+      this.axisOption1 = {
+        title: {
+          text: ''
+        },
+        tooltip: {},
+        xAxis: {
+          data: []
+        },
+        yAxis: {},
+        series: [
+          {
+            name: '交易金额',
+            type: 'line',
+            smooth: true,
+            data: []
+          }
+        ]
+      }
+      this.chartObj1.setOption(this.axisOption1, true)
+
+      this.chartObj2 = echarts.init(this.$refs.echart2);
+      // 绘制图表
+      this.axisOption2 = {
+        title: {
+          text: ''
+        },
+        tooltip: {},
+        xAxis: {
+          data: []
+        },
+        yAxis: {},
+        series: [
+          {
+            name: '交易用户',
+            type: 'line',
+            smooth: true,
+            data: []
+          }
+        ]
+      }
+      this.chartObj2.setOption(this.axisOption2, true)
+
+      this.chartObj3 = echarts.init(this.$refs.echart3);
+      // 绘制图表
+      this.axisOption3 = {
+        title: {
+          text: ''
+        },
+        tooltip: {},
+        xAxis: {
+          data: []
+        },
+        yAxis: {},
+        series: [
+          {
+            name: '销售金额',
+            type: 'bar',
+            data: []
+          }
+        ]
+      }
+      this.chartObj3.setOption(this.axisOption3, true)
+
+
+      this.chartObj4 = echarts.init(this.$refs.echart4);
+      // 绘制图表
+      this.axisOption4 = {
+        title: {
+          text: ''
+        },
+        tooltip: {},
+        xAxis: {
+          data: []
+        },
+        yAxis: {},
+        series: [
+          {
+            name: '销售金额',
+            type: 'bar',
+            data: []
+          }
+        ]
+      }
+      this.chartObj4.setOption(this.axisOption4, true)
+
+      this.getPayAmtList()
+      this.getPayUserCntList()
+      this.getTicketBoxTop()
+      this.getTicketSiteTop()
+    },
+
     // 统计今日实时交易金额、交易用户、盲票销售张数、新增经销商数量
     getDailyData() {
       getDailyData({}).then(res => {
           console.log("getDailyData == "+JSON.stringify(res));
+          this.daily = res.data
       }).catch(() => {
         this.loading = false
       })
@@ -46,8 +607,19 @@ export default {
 
     // 统计交易金额(带粒度)
     getPayAmtList() {
-      getPayAmtList({level:"days",days:30}).then(res => {
+      getPayAmtList(this.queryParams1).then(res => {
           console.log("getPayAmtList == "+JSON.stringify(res));
+          let list = res.data || []
+          const xAxisData = []
+          const yAxisData = []
+          for (let index = 0; index < list.length; index++) {
+            const element = list[index]
+            xAxisData.push(element.x)
+            yAxisData.push(element.y)
+          }
+          this.axisOption1.xAxis.data = xAxisData
+          this.axisOption1.series[0].data = yAxisData
+          this.chartObj1.setOption(this.axisOption1, true)
       }).catch(() => {
         this.loading = false
       })
@@ -55,8 +627,19 @@ export default {
 
     //统计交易用户数(带粒度)
     getPayUserCntList() {
-      getPayUserCntList({level:"week",days:30}).then(res => {
+      getPayUserCntList(this.queryParams2).then(res => {
           console.log("getPayUserCntList == "+JSON.stringify(res));
+          let list = res.data || []
+          const xAxisData = []
+          const yAxisData = []
+          for (let index = 0; index < list.length; index++) {
+            const element = list[index]
+            xAxisData.push(element.x)
+            yAxisData.push(element.y)
+          }
+          this.axisOption2.xAxis.data = xAxisData
+          this.axisOption2.series[0].data = yAxisData
+          this.chartObj2.setOption(this.axisOption2, true)
       }).catch(() => {
         this.loading = false
       })
@@ -64,8 +647,19 @@ export default {
 
     // 统计票组销售TOP10
     getTicketBoxTop() {
-      getTicketBoxTop({days:30}).then(res => {
+      getTicketBoxTop(this.queryParams3).then(res => {
           console.log("getTicketBoxTop == "+JSON.stringify(res));
+          let list = res.data || []
+          const xAxisData = []
+          const yAxisData = []
+          for (let index = 0; index < list.length; index++) {
+            const element = list[index]
+            xAxisData.push(element.x)
+            yAxisData.push(element.y)
+          }
+          this.axisOption3.xAxis.data = xAxisData
+          this.axisOption3.series[0].data = yAxisData
+          this.chartObj3.setOption(this.axisOption3, true)
       }).catch(() => {
         this.loading = false
       })
@@ -73,13 +667,84 @@ export default {
 
     // 统计经销商交易额TOP10
     getTicketSiteTop() {
-      getTicketSiteTop({days:30}).then(res => {
+      getTicketSiteTop(this.queryParams4).then(res => {
           console.log("getTicketSiteTop == "+JSON.stringify(res));
+          let list = res.data || []
+          const xAxisData = []
+          const yAxisData = []
+          for (let index = 0; index < list.length; index++) {
+            const element = list[index]
+            xAxisData.push(element.x)
+            yAxisData.push(element.y)
+          }
+          this.axisOption4.xAxis.data = xAxisData
+          this.axisOption4.series[0].data = yAxisData
+          this.chartObj4.setOption(this.axisOption4, true)
       }).catch(() => {
         this.loading = false
       })
     },
 
+    // 选择时间
+    dateSelect1(e) {
+      if (e) {
+        this.queryParams1.startTime = e[0];
+        this.queryParams1.endTime = e[1];
+        this.queryParams1.days = 0;
+        this.getPayAmtList();
+      } else {
+        this.queryParams1.startTime = "";
+        this.queryParams1.endTime = "";
+        this.queryParams1.days = 7;
+        this.getPayAmtList();
+      }
+    },
+
+    // 选择时间
+    dateSelect2(e) {
+      if (e) {
+        this.queryParams2.startTime = e[0];
+        this.queryParams2.endTime = e[1];
+        this.queryParams2.days = 0;
+        this.getPayUserCntList();
+      } else {
+        this.queryParams2.startTime = "";
+        this.queryParams2.endTime = "";
+        this.queryParams2.days = 7;
+        this.getPayUserCntList();
+      }
+    },
+
+    // 选择时间
+    dateSelect3(e) {
+      if (e) {
+        this.queryParams3.startTime = e[0];
+        this.queryParams3.endTime = e[1];
+        this.queryParams3.days = 0;
+        this.getTicketBoxTop();
+      } else {
+        this.queryParams3.startTime = "";
+        this.queryParams3.endTime = "";
+        this.queryParams3.days = 7;
+        this.getTicketBoxTop();
+      }
+    },
+
+    // 选择时间
+    dateSelect4(e) {
+      if (e) {
+        this.queryParams4.startTime = e[0];
+        this.queryParams4.endTime = e[1];
+        this.queryParams4.days = 0;
+        this.getTicketSiteTop();
+      } else {
+        this.queryParams4.startTime = "";
+        this.queryParams4.endTime = "";
+        this.queryParams4.days = 7;
+        this.getTicketSiteTop();
+      }
+    },
+
   },
 };
 </script>
@@ -87,6 +752,191 @@ export default {
 
 </style>
 
-<style rel="stylesheet/scss" lang="scss" scoped>
 
+
+<style rel="stylesheet/scss" scoped lang="scss">
+  .crm-workbench {
+    width: 100%;
+    min-width: 1200px;
+    height: 100%;
+    padding: 15px 20px 20px;
+    position: relative;
+
+    &__body {
+      height: 100%;
+      overflow: auto;
+      padding-top: 55px;
+    }
+
+    .head {
+      position: absolute;
+      padding: 15px 20px;
+      top: 0;
+      right: 0;
+      left: 0;
+      background: #f5f6f9;
+      z-index: 1;
+
+      &__body {
+        position: relative;
+        .user-box {
+          width: unset;
+          height: 36px;
+          padding: 4px 7px;
+          border: 1px solid #E1E1E1;
+          border-radius: 3px;
+          background-color: white;
+          margin-right: 20px;
+          display: flex;
+          cursor: pointer;
+          .user-icon {
+            background: #ddd;
+            color: white;
+            padding: 5px 6px;
+            border-radius: 50%;
+          }
+          .username {
+            font-size: 12px;
+            margin: 0 8px;
+          }
+        }
+
+
+      .sort-btn {
+          position: absolute;
+          right: 0;
+          top: 0;
+        }
+      }
+    }
+
+    .brief-box {
+      width: 100%;
+      background-color: white;
+      border: 1px solid #e6e6e6;
+      border-radius: 3px;
+      margin-top: 10px;
+      .brief-title {
+        background-color: #ddd;
+        padding: 0px 10px 0;
+        height: 35px;
+        line-height: 35px;
+        .icon {
+          color: #50CF9E;
+          font-size: 18px;
+        }
+        .text {
+          font-size: 16px;
+          font-weight: bold;
+          margin-left: 5px;
+        }
+      }
+      .brief {
+        width: 100%;
+        padding: 10px 10px 10px 10px;
+        display: flex;
+        align-items: center;
+        justify-content: flex-start;
+        flex-wrap: wrap;
+        .brief-item {
+          cursor: pointer;
+          width: calc(25% - 20px);
+          height: 125px;
+          box-shadow: 0 0 16px 0 rgba(0,0,0,0.08);
+          border-radius: 3px;
+          padding: 15px 0px;
+          margin: 10px;
+          .brief-item__body {
+            flex: 1;
+            overflow: hidden;
+            .icon-box {
+              width: 36px;
+              height: 36px;
+              line-height: 36px;
+              text-align: center;
+              border-radius: 50%;
+              margin-right: 10px;
+              margin-left: 15px;
+              flex-shrink: 0;
+
+              .icon {
+                color: white;
+                font-size: 19px;
+              }
+            }
+            .info {
+              overflow: hidden;
+              padding-left: 10px;
+              .title {
+                font-size: 13px;
+              }
+              .number {
+                font-size: 23px;
+                font-weight: bold;
+                line-height: 1;
+                margin-top: 8px;
+                margin-right: 5px;
+                // white-space: nowrap;
+                // text-overflow: ellipsis;
+                overflow: hidden;
+              }
+            }
+          }
+          .brief-item__others {
+            // position: relative;
+            margin-top: 15px;
+            width: 100px;
+           // text-align: center;
+            padding: 0 3px;
+            overflow: hidden;
+
+            .text {
+              font-size: 12px;
+             // margin-left: -5px;
+            }
+            .rate {
+              font-size: 14px;
+              color: #2BBF24;
+              margin-top: 8px;
+
+              .rate__icon {
+                font-size: 12px;
+              }
+              &.bottom {
+                color: #2BBF24;
+              }
+              &.top {
+                color: #F24B4B;
+              }
+            }
+          }
+          &:hover {
+            box-shadow: 0 0 16px 0 rgba(0,0,0,0.2);
+          }
+        }
+      }
+    }
+
+    .section {
+      margin-top: 18px;
+      .left {
+        width: calc(60.5% - 20px);
+        margin-right: 20px;
+        &-content {
+          height: 400px;
+        }
+      }
+      .right {
+        width: 39.5%;
+        &-content {
+          height: 400px;
+        }
+      }
+
+      .left-content + .left-content,
+      .right-content + .right-content {
+        margin-top: 18px;
+      }
+    }
+  }
 </style>