snow 1 år sedan
förälder
incheckning
1e44deafcb

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/index.html


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/static/css/app.d43a5a24.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/static/js/app.4767c465.js


BIN
dist/static/js/app.4767c465.js.gz


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/static/js/app.fda424c2.js


BIN
dist/static/js/app.fda424c2.js.gz


+ 1 - 1
src/components/unusual/index.vue

@@ -6,7 +6,7 @@
           <p style="font-size:16px">未通过公众号授权</p>
           <p style="font-size:16px">请联系系统管理员</p>
         </div>
-        <div>
+        <div v-else>
           <p style="font-size:16px">登录已失效</p>
           <p style="font-size:16px">请返回数据导航重新进入</p>
         </div>

+ 2 - 1
src/pages/index.vue

@@ -18,7 +18,8 @@ export default {
         {label:'业绩报表', link:'/?path=results'},
         {label:'利润看板', link:'/?path=report'},
         {label:'应收账款', link:'/?path=accountsReceivable'},
-        {label:'数据统计', link:'/?path=newReport'}
+        {label:'订单情况', link:'/?path=newReport'},
+        {label:'库存情况', link:'/?path=stock'}
       ]
     }
   },

+ 238 - 0
src/pages/newReport copy.vue

@@ -0,0 +1,238 @@
+<template>
+  <div class="new-report" v-loading="state.loading" style="min-height:300px">
+    <div v-if="!state.error && isShow">
+      <div style="display:flex;justify-content:flex-end">
+        <period-date-picker :start="date[0]" :end="date[1]" size="mini" width="150px" @timeReturned="time($event)" />
+      </div>
+
+      <el-row gutter="20">
+        <el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
+          <p class="title">1.竞价咨询统计</p>
+          <consult :date="date" />
+
+          <p class="title">2.竞价空返统计</p>
+          <empty-return :date="date" />
+        </el-col>
+
+        <el-col :xs="24" :sm="16" :md="16" :lg="16" :xl="16">
+          <p class="title">3.无地址销售订单统计</p>
+          <not-deliver-good :date="date" />
+        </el-col>
+      </el-row>
+
+      <el-row :gutter="20">
+
+        <el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
+          <p class="title">4.竞价反馈统计</p>
+          <purchase-back :date="date" @getZXTotal="getZXTotal" />
+        </el-col>
+
+        <el-col :xs="24" :sm="16" :md="16" :lg="16" :xl="16">
+          <p class="title">5.销售订单统计</p>
+          <order :date="date" />
+        </el-col>
+      </el-row>
+
+      <el-row :gutter="20">
+        <!-- <el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
+
+        </el-col> -->
+
+        <el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
+          <p class="title">6.备库单统计</p>
+          <stock :date="date" />
+        </el-col>
+
+        <el-col :xs="24" :sm="16" :md="16" :lg="16" :xl="16">
+          <p class="title">7.采购订单统计</p>
+          <purchase :date="date" />
+        </el-col>
+      </el-row>
+
+      <el-row :gutter="20">
+        <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+          <p class="title">8.发货工单未发货时效统计</p>
+          <send-order :date="date" />
+        </el-col>
+
+        <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+          <p class="title">9.待采购备货统计</p>
+          <send-exp :date="date" />
+        </el-col>
+      </el-row>
+
+      <el-row :gutter="20">
+        <el-col :xs="24">
+          <p class="title">10.当日库存销售统计</p>
+          <the-sales :date="date" />
+        </el-col>
+      </el-row>
+    </div>
+
+    <template v-else-if="!state.loading">
+      <unusual-state :hasPermission="isShow" :message="state.message" path="newReport" />
+    </template>
+  </div>
+</template>
+
+<script>
+import NotDeliverGood from "../components/newReport/src/notDeliverGood.vue";
+import PurchaseBack from "../components/newReport/src/PurchaseBack.vue";
+import EmptyReturn from "../components/newReport/src/emptyReturn.vue";
+import SendOrder from "../components/newReport/src/sendOrder.vue";
+import TheSales from "../components/newReport/src/theSales.vue";
+import Purchase from "../components/newReport/src/purchase.vue";
+import PeriodDatePicker from "../components/period-date-picker";
+import Consult from '../components/newReport/src/consult.vue';
+import SendExp from "../components/newReport/src/sendExp.vue";
+import Order from '../components/newReport/src/order.vue';
+import Stock from "../components/newReport/src/Stock.vue";
+
+
+import dayjs from "dayjs"
+import UnusualState from "@/components/unusual/index.vue";
+import { getOpenid, getParameterByName, removeOpenid, setOpenid } from "../utils/auth";
+import userRequest from "@/api/index";
+
+export default {
+  name: "newReport",
+  components: {
+    PeriodDatePicker,
+    NotDeliverGood,
+    UnusualState,
+    PurchaseBack,
+    EmptyReturn,
+    SendOrder,
+    TheSales,
+    Purchase,
+    SendExp,
+    Consult,
+    Stock,
+    Order
+  },
+  data() {
+    return {
+      date: [],
+      zxTotal: 0,
+      isDisplay: false,
+      state:{
+        message: '',
+        error: false,
+        loading: false
+      }
+    };
+  },
+  mounted() {
+    document.title = "数据统计"
+    if(!getParameterByName('code')){ this.login() }else{
+      this.requestUserinfo()
+    }
+    const current = dayjs(new Date()).format("YYYY-MM-DD")
+    this.date = [current + " 00:00:00", current + " 23:59:59"]
+  },
+  methods: {
+    getZXTotal(zxTotal) {
+      this.zxTotal = zxTotal;
+    },
+    async time(e) {
+      const { startTime, endTime } = e;
+      this.start = startTime || "";
+      this.end = endTime || "";
+
+      const { start, end } = this;
+      if ((start !== "" && end === "") || (start === "" && end !== "")) {
+        this.$message.warning("时间区间不完整!");
+        this.date = []
+        return;
+      }
+
+      if(this.start && this.end){
+        this.date = [this.start + " 00:00:00", this.end + " 23:59:59"]
+      }else{
+        this.date = [this.start, this.end]
+      }
+
+    },
+    async requestUserinfo(){
+       this.state.loading = true;
+       const openid = getOpenid()
+       const code = getParameterByName('code')
+      //  const result = await userRequest.userinfo({ 
+      //     ...( openid ? { openid } :  { code })
+      //   })
+
+      const result ={
+      "code": 0,
+      "message": "获取成功",
+      "data": {
+		      "id": "1",
+		      "openid": "oOpc26KiZFBKIm7SB8knFGvov1qg",
+		      "mobile": "",
+		      "gender": "0",
+		      "nickname": "雪寒",
+		      "avatar": "",
+		      "subscribe_time": "2022-12-21 15:52:14",
+		      "addr": "\/\/",
+		      "status": "1",
+		      "is_show": ["1", "2", "4"],
+		      "companyArr": [{
+		      	"companyNo": "GS2302231125079621",
+		      	"companyName": "北京百辰荣达国际科贸有限公司",
+		      	"info": [1,2]
+		      }, {
+		      	"companyNo": "GS2302231323386950",
+		      	"companyName": "北京泓源广诚国际商贸有限公司",
+		      	"info": [1,2]
+		      }, {
+		      	"companyNo": "GS2304031312553746",
+		      	"companyName": "北京锦兴弘昌科技有限公司",
+		      	"info": [1, 2]
+		      }, {
+		      	"companyNo": "GS2302231124114965",
+		      	"companyName": "北京普润心堂商贸有限公司",
+		      	"info": [1, 2]
+		      }, {
+		      	"companyNo": "GS2203161855277894",
+		      	"companyName": "北京万宇恒通国际科贸有限公司",
+		      	"info": [1, 2]
+		      }],
+		      "addtime": "2023-04-10 18:11:07",
+		      "updatetime": "2023-05-09 16:22:33"
+      	}
+      }
+      
+        this.state.loading = false
+        switch(Number(result.code)){
+          case 0:
+           this.isShow =  (result.data.is_show || []).includes(4) || (result.data.is_show || []).includes('4')
+           setOpenid(result.data.openid)
+           break
+          default:
+           this.state.error = true
+           this.state.message = result.message
+           openid && removeOpenid()
+           break
+        }
+      },
+    login(){
+      const redirect_url = encodeURIComponent('http://stat.caixiao365.com/accountsReceivable')
+      var state = 'wx_' + Math.random().toString(36).substr(2, 15)
+      const scope = 'snsapi_userinfo'
+      const url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${config.appId}&redirect_uri=${redirect_url}&response_type=code&scope=${scope}&state=${state}#wechat_redirect`
+      window.location.href = url
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.new-report {
+  padding: 10px;
+  box-sizing: border-box;
+
+  .title {
+    padding-left: 5px;
+  }
+}
+</style>
+

+ 72 - 50
src/pages/newReport.vue

@@ -6,67 +6,49 @@
       </div>
 
       <el-row gutter="20">
-        <el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
-          <p class="title">1.竞价咨询统计</p>
-          <consult :date="date" />
-
-          <p class="title">2.竞价空返统计</p>
-          <empty-return :date="date" />
-        </el-col>
-
-        <el-col :xs="24" :sm="16" :md="16" :lg="16" :xl="16">
-          <p class="title">3.无地址销售订单统计</p>
-          <not-deliver-good :date="date" />
-        </el-col>
-      </el-row>
-
-      <el-row :gutter="20">
-
-        <el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
-          <p class="title">4.竞价反馈统计</p>
-          <purchase-back :date="date" @getZXTotal="getZXTotal" />
-        </el-col>
-
+        <el-row gutter="20">
+          <el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
+            <p class="title">1.竞价咨询统计</p>
+            <consult :date="date" />
+          </el-col>
+        
+          <el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
+            <p class="title">2.竞价反馈统计</p>
+            <purchase-back :date="date" @getZXTotal="getZXTotal" />
+          </el-col>
+        
+          <el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
+            <p class="title">3.竞价空返统计</p>
+            <empty-return :date="date" />
+          </el-col>
+        </el-row>
+
+      <!-- <el-row :gutter="20"> -->
         <el-col :xs="24" :sm="16" :md="16" :lg="16" :xl="16">
-          <p class="title">5.销售订单统计</p>
+          <p class="title">4.销售订单统计</p>
           <order :date="date" />
         </el-col>
-      </el-row>
-
-      <el-row :gutter="20">
-        <!-- <el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
-
-        </el-col> -->
 
         <el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
-          <p class="title">6.备库单统计</p>
+          <p class="title">5.备库单统计</p>
           <stock :date="date" />
         </el-col>
+      <!-- </el-row> -->
 
-        <el-col :xs="24" :sm="16" :md="16" :lg="16" :xl="16">
-          <p class="title">7.采购订单统计</p>
-          <purchase :date="date" />
-        </el-col>
-      </el-row>
+      <!-- <el-row :gutter="20"> -->
+      <!-- </el-row> -->
 
-      <el-row :gutter="20">
-        <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-          <p class="title">8.发货工单未发货时效统计</p>
-          <send-order :date="date" />
-        </el-col>
+      <!-- <el-row :gutter="20"> -->
+        <!-- :sm="12" :md="12" :lg="12" :xl="12" -->
+        <!-- :sm="12" :md="12" :lg="12" :xl="12" -->
+      <!-- </el-row> -->
 
-        <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-          <p class="title">9.待采购备货统计</p>
-          <send-exp :date="date" />
-        </el-col>
-      </el-row>
+      <!-- <el-row :gutter="20"> -->
+      <!-- </el-row> -->
 
-      <el-row :gutter="20">
-        <el-col :xs="24">
-          <p class="title">10.当日库存销售统计</p>
-          <the-sales :date="date" />
-        </el-col>
-      </el-row>
+    </el-row>
+
+      <!-- :sm="16" :md="16" :lg="16" :xl="16" -->
     </div>
 
     <template v-else-if="!state.loading">
@@ -160,6 +142,46 @@ export default {
        const result = await userRequest.userinfo({ 
           ...( openid ? { openid } :  { code })
         })
+
+      // const result ={
+      // "code": 0,
+      // "message": "获取成功",
+      // "data": {
+		  //     "id": "1",
+		  //     "openid": "oOpc26KiZFBKIm7SB8knFGvov1qg",
+		  //     "mobile": "",
+		  //     "gender": "0",
+		  //     "nickname": "雪寒",
+		  //     "avatar": "",
+		  //     "subscribe_time": "2022-12-21 15:52:14",
+		  //     "addr": "\/\/",
+		  //     "status": "1",
+		  //     "is_show": ["1", "2", "4"],
+		  //     "companyArr": [{
+		  //     	"companyNo": "GS2302231125079621",
+		  //     	"companyName": "北京百辰荣达国际科贸有限公司",
+		  //     	"info": [1,2]
+		  //     }, {
+		  //     	"companyNo": "GS2302231323386950",
+		  //     	"companyName": "北京泓源广诚国际商贸有限公司",
+		  //     	"info": [1,2]
+		  //     }, {
+		  //     	"companyNo": "GS2304031312553746",
+		  //     	"companyName": "北京锦兴弘昌科技有限公司",
+		  //     	"info": [1, 2]
+		  //     }, {
+		  //     	"companyNo": "GS2302231124114965",
+		  //     	"companyName": "北京普润心堂商贸有限公司",
+		  //     	"info": [1, 2]
+		  //     }, {
+		  //     	"companyNo": "GS2203161855277894",
+		  //     	"companyName": "北京万宇恒通国际科贸有限公司",
+		  //     	"info": [1, 2]
+		  //     }],
+		  //     "addtime": "2023-04-10 18:11:07",
+		  //     "updatetime": "2023-05-09 16:22:33"
+      // 	}
+      // }
       
         this.state.loading = false
         switch(Number(result.code)){

+ 205 - 0
src/pages/stock.vue

@@ -0,0 +1,205 @@
+<template>
+  <div class="new-report" v-loading="state.loading" style="min-height:300px">
+    <div v-if="!state.error && isShow">
+      <div style="display:flex;justify-content:flex-end">
+        <period-date-picker :start="date[0]" :end="date[1]" size="mini" width="150px" @timeReturned="time($event)" />
+      </div>
+    
+      <el-row :gutter="20">
+        <el-col :xs="24">
+          <p class="title">1.无地址销售订单统计</p>
+          <not-deliver-good :date="date" />
+        </el-col>
+
+        <el-col :xs="24">
+          <p class="title">2.采购订单统计</p>
+          <purchase :date="date" />
+        </el-col>
+
+        <!-- :sm="12" :md="12" :lg="12" :xl="12" -->
+        <el-col :xs="24">
+          <p class="title">3.发货工单未发货时效统计</p>
+          <send-order :date="date" />
+        </el-col>
+
+        <el-col :xs="24">
+          <p class="title">4.待采购备货统计</p>
+          <send-exp :date="date" />
+        </el-col>
+
+        <el-col :xs="24">
+          <p class="title">5.当日库存销售统计</p>
+          <the-sales :date="date" />
+        </el-col>
+
+        <!-- :sm="12" :md="12" :lg="12" :xl="12"> -->
+      </el-row>
+
+    </div>
+
+    <template v-else-if="!state.loading">
+      <unusual-state :hasPermission="isShow" :message="state.message" path="newReport" />
+    </template>
+  </div>
+</template>
+
+<script>
+import NotDeliverGood from "../components/newReport/src/notDeliverGood.vue";
+import PurchaseBack from "../components/newReport/src/PurchaseBack.vue";
+import EmptyReturn from "../components/newReport/src/emptyReturn.vue";
+import SendOrder from "../components/newReport/src/sendOrder.vue";
+import TheSales from "../components/newReport/src/theSales.vue";
+import Purchase from "../components/newReport/src/purchase.vue";
+import PeriodDatePicker from "../components/period-date-picker";
+import Consult from '../components/newReport/src/consult.vue';
+import SendExp from "../components/newReport/src/sendExp.vue";
+import Order from '../components/newReport/src/order.vue';
+import Stock from "../components/newReport/src/Stock.vue";
+
+
+import dayjs from "dayjs"
+import UnusualState from "@/components/unusual/index.vue";
+import { getOpenid, getParameterByName, removeOpenid, setOpenid } from "../utils/auth";
+import userRequest from "@/api/index";
+
+export default {
+  name: "newReport",
+  components: {
+    PeriodDatePicker,
+    NotDeliverGood,
+    UnusualState,
+    PurchaseBack,
+    EmptyReturn,
+    SendOrder,
+    TheSales,
+    Purchase,
+    SendExp,
+    Consult,
+    Stock,
+    Order
+  },
+  data() {
+    return {
+      date: [],
+      zxTotal: 0,
+      isDisplay: false,
+      state:{
+        message: '',
+        error: false,
+        loading: false
+      }
+    };
+  },
+  mounted() {
+    document.title = "库存统计"
+    if(!getParameterByName('code')){ this.login() }else{
+      this.requestUserinfo()
+    }
+    const current = dayjs(new Date()).format("YYYY-MM-DD")
+    this.date = [current + " 00:00:00", current + " 23:59:59"]
+  },
+  methods: {
+    getZXTotal(zxTotal) {
+      this.zxTotal = zxTotal;
+    },
+    async time(e) {
+      const { startTime, endTime } = e;
+      this.start = startTime || "";
+      this.end = endTime || "";
+
+      const { start, end } = this;
+      if ((start !== "" && end === "") || (start === "" && end !== "")) {
+        this.$message.warning("时间区间不完整!");
+        this.date = []
+        return;
+      }
+
+      if(this.start && this.end){
+        this.date = [this.start + " 00:00:00", this.end + " 23:59:59"]
+      }else{
+        this.date = [this.start, this.end]
+      }
+
+    },
+    async requestUserinfo(){
+       this.state.loading = true;
+       const openid = getOpenid()
+       const code = getParameterByName('code')
+       const result = await userRequest.userinfo({ 
+          ...( openid ? { openid } :  { code })
+        })
+
+      // const result ={
+      // "code": 0,
+      // "message": "获取成功",
+      // "data": {
+		  //     "id": "1",
+		  //     "openid": "oOpc26KiZFBKIm7SB8knFGvov1qg",
+		  //     "mobile": "",
+		  //     "gender": "0",
+		  //     "nickname": "雪寒",
+		  //     "avatar": "",
+		  //     "subscribe_time": "2022-12-21 15:52:14",
+		  //     "addr": "\/\/",
+		  //     "status": "1",
+		  //     "is_show": ["1", "2", "4", "5"],
+		  //     "companyArr": [{
+		  //     	"companyNo": "GS2302231125079621",
+		  //     	"companyName": "北京百辰荣达国际科贸有限公司",
+		  //     	"info": [1,2]
+		  //     }, {
+		  //     	"companyNo": "GS2302231323386950",
+		  //     	"companyName": "北京泓源广诚国际商贸有限公司",
+		  //     	"info": [1,2]
+		  //     }, {
+		  //     	"companyNo": "GS2304031312553746",
+		  //     	"companyName": "北京锦兴弘昌科技有限公司",
+		  //     	"info": [1, 2]
+		  //     }, {
+		  //     	"companyNo": "GS2302231124114965",
+		  //     	"companyName": "北京普润心堂商贸有限公司",
+		  //     	"info": [1, 2]
+		  //     }, {
+		  //     	"companyNo": "GS2203161855277894",
+		  //     	"companyName": "北京万宇恒通国际科贸有限公司",
+		  //     	"info": [1, 2]
+		  //     }],
+		  //     "addtime": "2023-04-10 18:11:07",
+		  //     "updatetime": "2023-05-09 16:22:33"
+      // 	}
+      // }
+      
+        this.state.loading = false
+        switch(Number(result.code)){
+          case 0:
+           this.isShow =  (result.data.is_show || []).includes(5) || (result.data.is_show || []).includes('5')
+           setOpenid(result.data.openid)
+           break
+          default:
+           this.state.error = true
+           this.state.message = result.message
+           openid && removeOpenid()
+           break
+        }
+      },
+    login(){
+      const redirect_url = encodeURIComponent('http://stat.caixiao365.com/accountsReceivable')
+      var state = 'wx_' + Math.random().toString(36).substr(2, 15)
+      const scope = 'snsapi_userinfo'
+      const url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${config.appId}&redirect_uri=${redirect_url}&response_type=code&scope=${scope}&state=${state}#wechat_redirect`
+      window.location.href = url
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.new-report {
+  padding: 10px;
+  box-sizing: border-box;
+
+  .title {
+    padding-left: 5px;
+  }
+}
+</style>

+ 3 - 1
src/router/index.js

@@ -3,6 +3,7 @@ import Login from "./../pages/login.vue"
 import AccountsReceivable from "./../pages/accountsReceivable.vue"
 import Results from "./../pages/results.vue"
 import NewReport from "./../pages/newReport.vue"
+import Stock from "./../pages/stock.vue"
 import Index from "../pages/index.vue"
 
 import { getParameterByName } from "../utils/auth"
@@ -13,7 +14,8 @@ const routes = [
   { path:'/login', component: Login},
   { path:'/newReport', component: NewReport},
   { path:'/results', component: Results},
-  { path:'/accountsReceivable', component: AccountsReceivable}
+  { path:'/accountsReceivable', component: AccountsReceivable},
+  { path:'/stock', component: Stock},
 ]
 
 const router = new VueRouter({routes ,mode:'hash'})

Vissa filer visades inte eftersom för många filer har ändrats