snow 2 tahun lalu
induk
melakukan
4c673e11cd

File diff ditekan karena terlalu besar
+ 1 - 1
dist/index.html


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/css/app.0aa65dab.css


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/css/app.8f9ed79c.css


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/app.06a9ef08.js


TEMPAT SAMPAH
dist/static/js/app.06a9ef08.js.gz


File diff ditekan karena terlalu besar
+ 0 - 0
dist/static/js/app.6c1abe4b.js


TEMPAT SAMPAH
dist/static/js/app.6c1abe4b.js.gz


File diff ditekan karena terlalu besar
+ 10 - 0
dist/static/vue-router.min.js


TEMPAT SAMPAH
dist/static/vue-router.min.js.gz


File diff ditekan karena terlalu besar
+ 2 - 2
dist/static/vue.min.js


TEMPAT SAMPAH
dist/static/vue.min.js.gz


+ 25 - 0
package-lock.json

@@ -3200,6 +3200,16 @@
       "dev": true,
       "optional": true
     },
+    "bindings": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+      "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "file-uri-to-path": "1.0.0"
+      }
+    },
     "block-stream": {
       "version": "0.0.9",
       "resolved": "https://registry.npmmirror.com/block-stream/-/block-stream-0.0.9.tgz",
@@ -7398,6 +7408,13 @@
         }
       }
     },
+    "file-uri-to-path": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+      "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+      "dev": true,
+      "optional": true
+    },
     "filesize": {
       "version": "3.6.1",
       "resolved": "https://registry.npmmirror.com/filesize/-/filesize-3.6.1.tgz",
@@ -10425,6 +10442,7 @@
           "dev": true,
           "optional": true,
           "requires": {
+            "bindings": "^1.5.0",
             "nan": "^2.12.1"
           }
         },
@@ -18301,6 +18319,7 @@
           "dev": true,
           "optional": true,
           "requires": {
+            "bindings": "^1.5.0",
             "nan": "^2.12.1"
           }
         },
@@ -18725,6 +18744,7 @@
           "dev": true,
           "optional": true,
           "requires": {
+            "bindings": "^1.5.0",
             "nan": "^2.12.1"
           }
         },
@@ -19020,6 +19040,11 @@
       "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
       "dev": true
     },
+    "weixin-js-sdk": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/weixin-js-sdk/-/weixin-js-sdk-1.6.0.tgz",
+      "integrity": "sha512-3IYQH7aalJGFJrwdT3epvTdR1MboMiH7vIZ5BRL2eYOJ12BNah7csoMkmSZzkq1+l92sSq29XdTCVjCJoK2sBQ=="
+    },
     "whatwg-encoding": {
       "version": "1.0.5",
       "resolved": "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",

+ 2 - 1
package.json

@@ -21,7 +21,8 @@
     "js-base64": "^2.5.2",
     "js-cookie": "^2.2.0",
     "lrz": "^4.9.40",
-    "npm": "^7.13.0"
+    "npm": "^7.13.0",
+    "weixin-js-sdk": "^1.6.0"
   },
   "devDependencies": {
     "@babel/preset-env": "^7.14.2",

+ 1 - 0
public/index.html

@@ -6,6 +6,7 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge" />
     <meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover" />
     <script src="./static/vue.min.js" rel="preload" as="script"></script>
+    <script src="./static/vue-router.min.js" rel="preload" as="script"></script>
     <script src="./static/axios@0.21.0.min.js" rel="preload" as="script"></script>
     <title>报表</title>
     <style>

File diff ditekan karena terlalu besar
+ 10 - 0
public/static/vue-router.min.js


File diff ditekan karena terlalu besar
+ 2 - 2
public/static/vue.min.js


+ 4 - 232
src/App.vue

@@ -1,237 +1,9 @@
 <template>
-  <div id="app" v-cloak>
-    <div class="app-main">
-      <div class="app-main-zhunbeixuanzhuan">
-        <div class="app-main-xuanzhuan">
-          <div class="search clear">
-            <el-date-picker
-              v-model="currentDate"
-              class="fr picker"
-              :size="'small'"
-              :editable="false"
-              :clearable="false"
-              :picker-options="pickerOptions"
-              value-format="yyyy-MM-dd"
-              format="yyyy-MM-dd"
-
-              type="date"
-              align="right"
-              placeholder="选择日期"
-            >
-            </el-date-picker>
-          </div>
-
-          <ul class="myul">
-            <li style="margin-bottom:20px">
-              <wanyu-report :date="currentDate" />
-            </li>
-
-            <li style="margin-bottom:20px">
-              <department-report companyNo="GS2302231125079621" :date="currentDate" />
-            </li>
-
-            <li style="margin-bottom:20px">
-              <department-report companyNo="GS2302231124114965" :date="currentDate" />
-            </li>
-
-            <li style="margin-bottom:20px">
-              <department-report companyNo="GS2302231323386950" :date="currentDate" />
-            </li>
-          </ul>
-        </div>
-      </div>
-    </div>
-  </div>
+  <router-view />
 </template>
-<script>
 
+<script>
 export default {
-  data() {
-    return {
-      pickerOptions: {
-        disabledDate(time) {
-          return time.getTime() > Date.now();
-        }
-      },
-      currentDate: "",
-      companyNo: ''
-    };
-  },
-  async created() {
-    this.currentDate = this.transformTime();
-    // this.currentDate = '2023-03-31'
-    const { search } = window.location
-    if(search.indexOf('?') !== -1){
-      const query = {}
-      search.split('?')[1].split('&').forEach(item => {
-        const [key,value] = item.split('=')
-        query[key] = value
-      })
-
-      if(query.companyNo) this.companyNo = query.companyNo
-    }
-  },
-  methods: {
-    transformTime() {
-      let time = new Date();
-      let y = time.getFullYear();
-      let M = time.getMonth() + 1;
-      let d = time.getDate();
-      return y + "-" + (M < 10 ? "0" + M : M) + "-" + (d < 10 ? "0" + d : d);
-    }
-  }
-};
-</script>
-<style lang="scss">
-@mixin layout-dev {
-  position: fixed;
-  width: 100%;
-  height: 100%;
-  padding: 0;
-  margin: 0;
-  box-sizing: border-box;
-  overflow-y: auto
+  name:'App'
 }
-html {
-  @include layout-dev;
-
-  body {
-    @include layout-dev;
-    text-align: left;
-  }
-  .clear::after,
-  .clear::before {
-    content: "";
-    display: block;
-    clear: both;
-  }
-
-  #app {
-    @include layout-dev;
-
-    padding: 0;
-    .app-main {
-      width: 100%;
-      padding: 0;
-      margin: 0;
-      box-sizing: border-box;
-      .app-main-zhunbeixuanzhuan {
-        position: relative;
-        width: 100%;
-        height: 100%;
-        box-sizing: border-box;
-        .app-main-xuanzhuan {
-          position: absolute;
-          width: 100%;
-          height: 100%;
-          // bottom: 0px;
-          box-sizing: border-box;
-          padding: 16px;
-        }
-      }
-      .search {
-        position: relative;
-        padding: 0 0 12px 0;
-      }
-      .shengxia {
-        float: left;
-        height: 33px;
-        line-height: 32px;
-        width: calc(100% - 122px);
-      }
-      .picker{
-        width: 112px;
-      }
-      .fr {
-        float: right;
-      }
-      .fr.my-fr {
-        width: 112px;
-        line-height: 32px;
-        text-align: right;
-        i {
-          font-size: 17px;
-          height: 32px;
-          line-height: 32px;
-          color: #606266;
-          display: inline-block;
-          vertical-align: top;
-        }
-        span {
-          display: inline-block;
-          vertical-align: top;
-          color: #606266;
-          font-size: 14px;
-          padding: 0 0 0 5px;
-        }
-      }
-      .title {
-        text-align: center;
-        padding: 0 0 8px 0;
-      }
-      .el-table .el-table__header-wrapper table thead tr th {
-        background: #f5f7fa !important;
-      }
-      .el-date-editor.fr.el-input.el-input--small.el-input--prefix.el-input--suffix.el-date-editor--date {
-        .el-input__inner {
-          padding-right: 0 !important;
-        }
-      }
-      .el-drawer__wrapper {
-        #el-drawer__title {
-          margin: 0 !important;
-          display: none !important;
-        }
-        .el-drawer__body {
-          .demo-drawer__content_header {
-            padding: 20px 20px 0 !important;
-            font-size: 16px !important;
-            color: #72767b !important;
-          }
-          ul.demo-drawer__content_body {
-            width: 100% !important;
-            box-sizing: border-box !important;
-            li {
-              height: 23px !important;
-              line-height: 23px !important;
-              font-size: 14px !important;
-              color: #72767b !important;
-              box-sizing: border-box !important;
-            }
-            li.active_e {
-              height: 23px !important;
-              line-height: 23px !important;
-              color: #409eff !important;
-              font-size: 14px !important;
-              box-sizing: border-box !important;
-            }
-          }
-        }
-      }
-      .myul {
-        position: relative;
-        list-style-type: none;
-        padding: 0;
-        margin: 0;
-        box-sizing: border-box;
-        width: 100%;
-        .myli {
-          position: relative;
-          list-style-type: none;
-          padding: 0;
-          margin: 0;
-          width: 100%;
-        }
-      }
-      .el-table .warning-row {
-        background: #f5f7fa !important;
-        // background: oldlace !important;
-      }
-
-      .el-table .success-row {
-        background: #f0f9eb !important;
-      }
-    }
-  }
-}
-</style>
+</script>

+ 3 - 27
src/api/index.js

@@ -1,32 +1,8 @@
 // 物业管理员
 import http from "@/api/axios";
 import { baseApi, cxApi } from "@/config";
-const api = "Stats/";
+const api = "admin/";
 export default {
-  // 销售统计
-  list: (data, params) => http(baseApi + api + "yunshu", data, "post", params),
-  // 销售退货统计
-  rejected: (data, params) =>
-    http(baseApi + api + "tongji", data, "post", params),
-  // 退货统计
-  MReturn: (data, params) =>
-    http(baseApi + api + "tuihuo", data, "post", params),
-  // 退货统计
-  qrdcptj: (data, params) =>
-    http(baseApi + api + "qrdcptj", data, "post", params),
-  // 部门合并后的指标
-  departtj: (data, params) =>
-    http(baseApi + api + "departtj", data, "post", params),
-  // 部门合并后的指标(新)
-  statlist: (data, params) =>
-    http(cxApi + "admin/statlist", data, "post", params),
-  // 516退货
-  thlist: (data, params) =>
-    http(baseApi + api + "departth", data, "post", params),
-  // 2022月饼销售统计
-  salereport: (data, params) =>
-    http(cxApi + "/admin/salereport", data, "post", params),
-  // 2022月饼库存统计
-  bkreport: (data, params) =>
-    http(cxApi + "//admin/bkreport", data, "post", params),
+  // 获取微信授权信息...
+  signature: (data, params) => http(baseApi + api + "signature", data, "post", params),
 };

+ 4 - 4
src/components/reports/src/DepartmentReport.vue

@@ -22,7 +22,7 @@
     >
       <el-table-column prop="type" label="业绩类型" fixed="left" min-width="120">
         <template slot-scope="scope">
-          {{ mapReponseType[String(scope.row.type)] }}
+          {{ getTypeLabel(scope.row.type) }}
         </template>
       </el-table-column>
       <el-table-column label="本日销售额" min-width="120" align="center">
@@ -30,7 +30,6 @@
             {{ unit2TenThousand(scope.row.dayinfo.sale_total) }}
           </template>
       </el-table-column>
-
       <el-table-column label="本月销售额" min-width="120" align="center">
         <template slot-scope="scope">
             {{ unit2TenThousand(scope.row.monthinfo.msale_total) }}
@@ -42,7 +41,7 @@
 </template>
 
 <script>
-import { mapReponseType, addition, division, multiplication, unit2TenThousand, subtraction} from "./_utils"
+import { mapReponseType,getTypeLabel,addition, division, multiplication, unit2TenThousand, subtraction} from "./_utils"
 import asyncRequest from "@/api/report";
 import setHeight from "@/mixins/index";
 
@@ -63,7 +62,7 @@ export default {
       const { month,monthReturn ,total_tips} = this.total;
       /* 完成额 = 月销售额 - 月退货额 **/
       const completion = subtraction(month, monthReturn)
-       /* 完成率 = 完成额 / 月指标 **/
+      /* 完成率 = 完成额 / 月指标 **/
       const completionRate = multiplication(division(completion,total_tips) || 0, 100)
       return {
         /* 月指标 **/
@@ -103,6 +102,7 @@ export default {
     this.searchList();
   },
   methods: {
+    getTypeLabel,
     unit2TenThousand,
     tableRowClassName({ row, rowIndex }) {
       if ((row && row.child && row.child.length > 0) || rowIndex === 0) {

+ 9 - 11
src/components/reports/src/WanyuReport.vue

@@ -1,7 +1,6 @@
 <template>
   <div class="SalesReportRejectedNew">
     <h3 class="table-header">北京万宇恒通国际科贸有限公司业绩报表</h3>
-
     <el-table
       :data="tableData"
       v-loading="loading"
@@ -14,33 +13,30 @@
       :row-class-name="tableRowClassName"
       :tree-props="{ children: 'child', hasChildren: 'hasChildren' }"
     >
-      <el-table-column label="部门" fixed="left" min-width="120" prop="depart" />
+      <el-table-column label="部门" fixed="left" min-width="120" prop="depart">
+        <template slot-scope="scope">{{getCompanyLabel(scope.row.depart)}}</template>
+      </el-table-column>
       <el-table-column label="本日销售额" min-width="120" align="center">
          <template slot-scope="scope">
             {{ unit2TenThousand(scope.row.dayinfo.sale_total) }}
          </template>
       </el-table-column>
-
-
       <el-table-column label="本月金额" min-width="120" align="center">
         <el-table-column label="销售指标" align="center">
           <template slot-scope="scope">
             {{ unit2TenThousand(scope.row.total_tips) }}
           </template>
         </el-table-column>
-
         <el-table-column label="净销售" align="center">
           <template slot-scope="scope">
             {{ unit2TenThousand(scope.row.monthinfo.monthNetSales) }}
           </template>
         </el-table-column>
-
         <el-table-column label="净销售完成率" align="center">
           <template slot-scope="scope">
             {{ scope.row.monthinfo.monthProportion }}
           </template>
         </el-table-column>
-
       </el-table-column>
     </el-table>
   </div>
@@ -50,11 +46,12 @@
 import asyncRequest from "@/api/report";
 import setHeight from "@/mixins/index";
 import { 
-  addition, 
   unit2TenThousand,
   multiplication,
-  division, 
-  subtraction 
+  subtraction,
+  addition, 
+  division,
+getCompanyLabel
 } from "./_utils";
 
 export default {
@@ -90,7 +87,7 @@ export default {
         day: unit2TenThousand(day),
         month: unit2TenThousand(month),
         total_tips: unit2TenThousand(total_tips),
-        completionRate:multiplication(division(month,total_tips) || 0, 100) + '%'
+        completionRate: multiplication(division(month, total_tips) || 0, 100) + '%'
       }
     }
   },
@@ -106,6 +103,7 @@ export default {
     this.searchList();
   },
   methods: {
+    getCompanyLabel,
     unit2TenThousand,
     tableRowClassName({ row, rowIndex }) {
       if ((row && row.child && row.child.length > 0) || rowIndex === 0) {

+ 12 - 2
src/components/reports/src/_utils.js

@@ -1,9 +1,19 @@
 export const mapReponseType = {
-  '1':'直销',
+  '1':'自营',
   '2':'渠道',
-  '3':'采购供货'
+  '3':'供应商端'
 }
 
+export const mapResponseCompanyName = {
+  '泓源':'泓源广诚',
+  '普润':'普润心堂',
+  '百辰':'百辰荣达',
+  '平台':'平台部'
+}
+
+export const getTypeLabel = value => mapReponseType[String(value)]
+export const getCompanyLabel = value => mapResponseCompanyName[String(value)]
+
 /* 加法 **/ 
 export function addition(arg1, arg2) {
   var r1, r2, m;

+ 9 - 5
src/main.js

@@ -1,5 +1,8 @@
 import App from "./App.vue";
 import Components from "./components/reports";
+import * as filters from './filters' // global filters
+import router from "./router"
+
 import {
   Table,
   Select,
@@ -7,19 +10,20 @@ import {
   DatePicker
 } from 'element-ui';
 import 'element-ui/lib/theme-chalk/index.css';
-import * as filters from './filters' // global filters
+
+
 Vue.component(Table.name, Table);
 Vue.component(Select.name, Select);
 Vue.component(Option.name, Option);
 Vue.component(DatePicker.name, DatePicker);
 
-
+Vue.use(router)
 Vue.use(Components);
-Object.keys(filters).forEach(key => {
-  Vue.filter(key, filters[key])
-})
 
+Object.keys(filters).forEach(key => Vue.filter(key, filters[key]))
 Vue.config.productionTip = false;
+
 window.vm = new Vue({
+  router,
   render: h => h(App)
 }).$mount("#app");

+ 36 - 0
src/pages/login.vue

@@ -0,0 +1,36 @@
+<template>
+  <div class=""></div>
+</template>
+
+
+<script>
+import wx from 'weixin-js-sdk'
+import asyncRequest from "@/api/index"
+export default {
+  name:'login',
+  async mounted () {
+    try{
+      const result = await asyncRequest.signature({
+        url:window.location.href.split('#')[0]
+      })
+
+      // 配置微信JSSDK
+      wx.config({
+         debug: false,
+         appId: result.data.appId,
+         timestamp: result.data.timestamp,
+         nonceStr: result.data.nonceStr,
+         signature: result.data.signature,
+         jsApiList: ['checkJsApi', 'onMenuShareTimeline', 'onMenuShareAppMessage']
+      })
+      
+      wx.error(function (res) {
+        console.log(res.errMsg)
+      })
+
+    }catch(error){
+      console.log(error)
+    }
+  }
+}
+</script>

+ 232 - 0
src/pages/report.vue

@@ -0,0 +1,232 @@
+<template>
+  <div id="app" v-cloak>
+    <div class="app-main">
+      <div class="app-main-zhunbeixuanzhuan">
+        <div class="app-main-xuanzhuan">
+          <div class="search clear">
+            <el-date-picker
+              v-model="date"
+              class="fr picker"
+              :size="'small'"
+              :editable="false"
+              :clearable="false"
+              value-format="yyyy-MM-dd"
+              format="yyyy-MM-dd"
+              type="date"
+              align="right"
+              placeholder="选择日期"
+              :picker-options="{
+                disabledDate(time) {
+                  return time.getTime() > Date.now();
+                }
+              }"
+            >
+            </el-date-picker>
+          </div>
+
+          <ul class="myul">
+            <li style="margin-bottom:20px">
+              <wanyu-report :date="date" />
+            </li>
+            <li style="margin-bottom:20px">
+              <department-report companyNo="GS2302231125079621" :date="date" />
+            </li>
+            <li style="margin-bottom:20px">
+              <department-report companyNo="GS2302231124114965" :date="date" />
+            </li>
+            <li style="margin-bottom:20px">
+              <department-report companyNo="GS2302231323386950" :date="date" />
+            </li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+
+export default {
+  name:'report',
+  data() {
+    return {
+      date: "",
+    };
+  },
+  async created() {
+    this.date = this.transformTime();
+    // this.currentDate = '2023-03-31'
+    const { search } = window.location
+    if(search.indexOf('?') !== -1){
+      const query = {}
+      search.split('?')[1].split('&').forEach(item => {
+        const [key,value] = item.split('=')
+        query[key] = value
+      })
+
+      if(query.companyNo) this.companyNo = query.companyNo
+    }
+  },
+  methods: {
+    transformTime() {
+      let time = new Date();
+      let y = time.getFullYear();
+      let M = time.getMonth() + 1;
+      let d = time.getDate();
+      return y + "-" + (M < 10 ? "0" + M : M) + "-" + (d < 10 ? "0" + d : d);
+    }
+  }
+};
+</script>
+<style lang="scss">
+@mixin layout-dev {
+  position: fixed;
+  width: 100%;
+  height: 100%;
+  padding: 0;
+  margin: 0;
+  box-sizing: border-box;
+  overflow-y: auto
+}
+html {
+  @include layout-dev;
+
+  body {
+    @include layout-dev;
+    text-align: left;
+  }
+  .clear::after,
+  .clear::before {
+    content: "";
+    display: block;
+    clear: both;
+  }
+
+  #app {
+    @include layout-dev;
+
+    padding: 0;
+    .app-main {
+      width: 100%;
+      padding: 0;
+      margin: 0;
+      box-sizing: border-box;
+      .app-main-zhunbeixuanzhuan {
+        position: relative;
+        width: 100%;
+        height: 100%;
+        box-sizing: border-box;
+        .app-main-xuanzhuan {
+          position: absolute;
+          width: 100%;
+          height: 100%;
+          // bottom: 0px;
+          box-sizing: border-box;
+          padding: 16px;
+        }
+      }
+      .search {
+        position: relative;
+        padding: 0 0 12px 0;
+      }
+      .shengxia {
+        float: left;
+        height: 33px;
+        line-height: 32px;
+        width: calc(100% - 122px);
+      }
+      .picker{
+        width: 112px;
+      }
+      .fr {
+        float: right;
+      }
+      .fr.my-fr {
+        width: 112px;
+        line-height: 32px;
+        text-align: right;
+        i {
+          font-size: 17px;
+          height: 32px;
+          line-height: 32px;
+          color: #606266;
+          display: inline-block;
+          vertical-align: top;
+        }
+        span {
+          display: inline-block;
+          vertical-align: top;
+          color: #606266;
+          font-size: 14px;
+          padding: 0 0 0 5px;
+        }
+      }
+      .title {
+        text-align: center;
+        padding: 0 0 8px 0;
+      }
+      .el-table .el-table__header-wrapper table thead tr th {
+        background: #f5f7fa !important;
+      }
+      .el-date-editor.fr.el-input.el-input--small.el-input--prefix.el-input--suffix.el-date-editor--date {
+        .el-input__inner {
+          padding-right: 0 !important;
+        }
+      }
+      .el-drawer__wrapper {
+        #el-drawer__title {
+          margin: 0 !important;
+          display: none !important;
+        }
+        .el-drawer__body {
+          .demo-drawer__content_header {
+            padding: 20px 20px 0 !important;
+            font-size: 16px !important;
+            color: #72767b !important;
+          }
+          ul.demo-drawer__content_body {
+            width: 100% !important;
+            box-sizing: border-box !important;
+            li {
+              height: 23px !important;
+              line-height: 23px !important;
+              font-size: 14px !important;
+              color: #72767b !important;
+              box-sizing: border-box !important;
+            }
+            li.active_e {
+              height: 23px !important;
+              line-height: 23px !important;
+              color: #409eff !important;
+              font-size: 14px !important;
+              box-sizing: border-box !important;
+            }
+          }
+        }
+      }
+      .myul {
+        position: relative;
+        list-style-type: none;
+        padding: 0;
+        margin: 0;
+        box-sizing: border-box;
+        width: 100%;
+        .myli {
+          position: relative;
+          list-style-type: none;
+          padding: 0;
+          margin: 0;
+          width: 100%;
+        }
+      }
+      .el-table .warning-row {
+        background: #f5f7fa !important;
+        // background: oldlace !important;
+      }
+
+      .el-table .success-row {
+        background: #f0f9eb !important;
+      }
+    }
+  }
+}
+</style>

+ 12 - 0
src/router/index.js

@@ -0,0 +1,12 @@
+import Report from "./../pages/report.vue"
+
+const routes = [
+  { path: '/', component: Report},
+]
+
+const router = new VueRouter({
+  routes,
+  mode:'hash'
+})
+
+export default router

+ 41 - 0
src/utils/auth.js

@@ -0,0 +1,41 @@
+import wx from 'weixin-js-sdk'
+
+export let wxConfig = {}
+/* 获取微信授权签名 **/
+export async function getWechatSignature(){
+  try{
+    const result = await asyncRequest.signature({
+      url:window.location.href.split('#')[0]
+    })
+
+    wxConfig = result.data
+    // 配置微信JSSDK
+    wx.config({
+       debug: false,
+       appId: result.data.appId,
+       timestamp: result.data.timestamp,
+       nonceStr: result.data.nonceStr,
+       signature: result.data.signature,
+       jsApiList: ['checkJsApi', 'onMenuShareTimeline', 'onMenuShareAppMessage']
+    })
+    
+    wx.error(function (res) {
+      console.log(res.errMsg)
+    })
+
+  }catch(error){
+    console.log(error)
+  }
+}
+
+
+export function wechatLogin(){
+  wx.openAuth2({
+    appId:wxConfig.appId,
+    responseType:'code',
+    scope: 'snsapi_userinfo',
+    state: '',
+    style: '',
+    href: ''
+  })
+}

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini