mo 2 年 前
コミット
e8a2001f8f

+ 1 - 1
config/index.js

@@ -3,7 +3,7 @@
 // see http://vuejs-templates.github.io/webpack for documentation.
 
 const path = require('path')
-const proxyUrl = 'http://dev.colexiu.com'
+const proxyUrl = 'https://dev.colexiu.com'
 module.exports = {
   dev: {
 

+ 30 - 0
package-lock.json

@@ -1769,6 +1769,16 @@
         }
       }
     },
+    "clean-deep": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/clean-deep/-/clean-deep-3.4.0.tgz",
+      "integrity": "sha512-Lo78NV5ItJL/jl+B5w0BycAisaieJGXK1qYi/9m4SjR8zbqmrUtO7Yhro40wEShGmmxs/aJLI/A+jNhdkXK8mw==",
+      "requires": {
+        "lodash.isempty": "^4.4.0",
+        "lodash.isplainobject": "^4.0.6",
+        "lodash.transform": "^4.6.0"
+      }
+    },
     "cli-cursor": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
@@ -2520,6 +2530,11 @@
       "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
       "dev": true
     },
+    "dayjs": {
+      "version": "1.11.2",
+      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.2.tgz",
+      "integrity": "sha512-F4LXf1OeU9hrSYRPTTj/6FbO4HTjPKXvEIC1P2kcnFurViINCVk3ZV0xAS3XVx9MkMsXbbqlK6hjseaYbgKEHw=="
+    },
     "de-indent": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
@@ -5616,6 +5631,16 @@
       "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
       "dev": true
     },
+    "lodash.isempty": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz",
+      "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4="
+    },
+    "lodash.isplainobject": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+      "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
+    },
     "lodash.memoize": {
       "version": "4.1.2",
       "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
@@ -5628,6 +5653,11 @@
       "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=",
       "dev": true
     },
+    "lodash.transform": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz",
+      "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A="
+    },
     "lodash.uniq": {
       "version": "4.5.0",
       "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",

+ 2 - 0
package.json

@@ -11,6 +11,8 @@
   },
   "dependencies": {
     "axios": "^0.18.0",
+    "clean-deep": "^3.4.0",
+    "dayjs": "^1.11.2",
     "echarts": "^4.2.0-rc.2",
     "element-ui": "^2.3.7",
     "js-cookie": "^2.2.0",

+ 7 - 8
src/api/login.js

@@ -1,13 +1,11 @@
 import request from '@/utils/request'
 
-export function login(username, password) {
+export function login(data) {
   return request({
-    url: '/admin/login/token',
+    url: '/api-auth/usernameLogin',
     method: 'post',
-    data: {
-      username,
-      password
-    }
+    data,
+    requestType:'form'
   })
 }
 
@@ -21,8 +19,9 @@ export function getInfo() {
 // api-admin/teacherAuthEntryRecord/page
 export function logout() {
   return request({
-    url: '/admin/logout',
-    method: 'post'
+    url: '/api-auth/exit',
+    method: 'post',
+    requestType: 'form'
   })
 }
 

+ 6 - 2
src/store/modules/user.js

@@ -27,11 +27,15 @@ const user = {
   actions: {
     // 登录
     Login({ commit }, userInfo) {
+
       const username = userInfo.username.trim()
       return new Promise((resolve, reject) => {
-        login(username, userInfo.password).then(response => {
+        login({username,password:userInfo.password,clientId: 'system',
+          clientSecret: 'system'}).then(response => {
           const data = response.data
-          const tokenStr = data.tokenHead+data.token
+          const tokenStr = data.authentication.token_type +
+          ' ' +
+         data.authentication.access_token
           setToken(tokenStr)
           commit('SET_TOKEN', tokenStr)
           resolve()

+ 3 - 0
src/utils/auth.js

@@ -7,9 +7,12 @@ export function getToken() {
 }
 
 export function setToken(token) {
+  Session.set('token',token)
   return Cookies.set(TokenKey, token)
+
 }
 
 export function removeToken() {
+  Session.set('token','')
   return Cookies.remove(TokenKey)
 }

+ 20 - 4
src/utils/request.js

@@ -2,11 +2,13 @@ import axios from 'axios'
 import { Message, MessageBox } from 'element-ui'
 import store from '../store'
 import { getToken } from '@/utils/auth'
+import cleanDeep from 'clean-deep'
+import qs from 'qs'
 
 // 创建axios实例
 const service = axios.create({
   baseURL: process.env.BASE_API, // api的base_url
-  timeout: 15000 // 请求超时时间
+  timeout: 30000 // 请求超时时间
 })
 
 // request拦截器
@@ -15,10 +17,25 @@ service.interceptors.request.use(config => {
     config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
   }
   if(config.url.indexOf('/api-mall-admin')== -1){
-    if(config.url.indexOf('/api-admin')== -1){
+    if(config.url.indexOf('/api-admin')== -1 && config.url.indexOf('/api-auth')== -1){
       config.url = '/api-mall-admin'+config.url
     }
   }
+  // 是否进行数据过滤
+  const noCleanDeep = config.noCleanDeep || false
+  if (config.requestType === 'form') {
+    config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
+    config.data = qs.stringify(
+      noCleanDeep ? config.data : cleanDeep(config.data)
+    )
+  } else if (config.requestType === 'multipart') {
+    config.headers['Content-Type'] = 'multipart/form-data'
+  } else {
+    config.data = noCleanDeep ? config.data : cleanDeep(config.data)
+  }
+  config.params = noCleanDeep
+    ? qs.stringify(config.data)
+    : cleanDeep(config.params)
   return config
 }, error => {
   // Do something with request error
@@ -34,10 +51,9 @@ service.interceptors.response.use(
   */
 
     const res = response.data
-    console.log(window.location)
     if (res.code !== 200) {
       Message({
-        message: res.message,
+        message: res.msg,
         type: 'error',
         duration: 3 * 1000
       })

+ 24 - 0
src/views/home/api.js

@@ -0,0 +1,24 @@
+import request from '@/utils/request'
+
+
+// 获取首页静态数据
+export function getHomeStatistical(data) {
+  return request({
+    url: '/statistical/home',
+    method: 'get',
+    params: data,
+    // requestType:'form'
+  })
+}
+
+// 订单数据
+export function getOrderStatisticall(data) {
+  return request({
+    url: '/statistical/orderStatistical',
+    method: 'post',
+    data
+    // params: data,
+    // requestType:'form'
+  })
+}
+

+ 357 - 252
src/views/home/index.vue

@@ -32,118 +32,139 @@
       <el-row :gutter="20">
         <el-col :span="6">
           <div class="total-frame">
-            <img :src="img_home_order" class="total-icon">
+            <img :src="img_home_order" class="total-icon" />
             <div class="total-title">今日订单总数</div>
-            <div class="total-value">200</div>
+            <div class="total-value">{{ staticeDate.todayOrderNum }}</div>
           </div>
         </el-col>
         <el-col :span="6">
           <div class="total-frame">
-            <img :src="img_home_today_amount" class="total-icon">
+            <img :src="img_home_today_amount" class="total-icon" />
             <div class="total-title">今日销售总额</div>
-            <div class="total-value">¥5000.00</div>
+            <div class="total-value">¥{{ staticeDate.todayOrderAmount }}</div>
           </div>
         </el-col>
         <el-col :span="6">
           <div class="total-frame">
-            <img :src="img_home_yesterday_amount" class="total-icon">
+            <img :src="img_home_yesterday_amount" class="total-icon" />
             <div class="total-title">昨日销售总额</div>
-            <div class="total-value">¥5000.00</div>
+            <div class="total-value">
+              ¥{{ staticeDate.yesterdayOrderAmount }}
+            </div>
           </div>
         </el-col>
         <!--<el-col :span="6">-->
-          <!--<div class="total-frame">-->
-            <!--<svg-icon icon-class="total-week" class="total-icon">-->
-            <!--</svg-icon>-->
-            <!--<div class="total-title">近7天销售总额</div>-->
-            <!--<div class="total-value">¥50000.00</div>-->
-          <!--</div>-->
+        <!--<div class="total-frame">-->
+        <!--<svg-icon icon-class="total-week" class="total-icon">-->
+        <!--</svg-icon>-->
+        <!--<div class="total-title">近7天销售总额</div>-->
+        <!--<div class="total-value">¥50000.00</div>-->
+        <!--</div>-->
         <!--</el-col>-->
       </el-row>
     </div>
-    <!-- <el-card class="mine-layout">
-      <div style="text-align: center">
-        <img width="150px" height="150px" src="http://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/banner/qrcode_for_macrozheng_258.jpg">
-      </div>
-      <div style="text-align: center">mall全套学习教程连载中!</div>
-      <div style="text-align: center;margin-top: 5px"><span class="color-main">关注公号</span>,第一时间获取。</div>
-    </el-card> -->
     <div class="un-handle-layout">
       <div class="layout-title">待处理事务</div>
       <div class="un-handle-content">
         <el-row :gutter="20">
           <el-col :span="8">
-            <div class="un-handle-item">
+            <div class="un-handle-item" @click="gotoOrder(0)">
               <span class="font-medium">待付款订单</span>
-              <span style="float: right" class="color-danger">(10)</span>
+              <span style="float: right" class="color-danger"
+                >({{ staticeDate.waitPayOrder }})</span
+              >
             </div>
           </el-col>
           <el-col :span="8">
-            <div class="un-handle-item">
+            <div class="un-handle-item"  @click="gotoOrder(3)">
               <span class="font-medium">已完成订单</span>
-              <span style="float: right" class="color-danger">(10)</span>
+              <span style="float: right" class="color-danger"
+                >({{ staticeDate.successOrder }})</span
+              >
             </div>
           </el-col>
           <el-col :span="8">
-            <div class="un-handle-item">
+            <div class="un-handle-item" @click="gotoOrder(2)">
               <span class="font-medium">待确认收货订单</span>
-              <span style="float: right" class="color-danger">(10)</span>
+              <span style="float: right" class="color-danger"
+                >({{ staticeDate.waitReceiptOrder }})</span
+              >
             </div>
           </el-col>
         </el-row>
         <el-row :gutter="20">
           <el-col :span="8">
-            <div class="un-handle-item">
+            <div class="un-handle-item"  @click="gotoOrder(1)">
               <span class="font-medium">待发货订单</span>
-              <span style="float: right" class="color-danger">(10)</span>
+              <span style="float: right" class="color-danger"
+                >({{ staticeDate.waitOutOrder }})</span
+              >
             </div>
           </el-col>
           <el-col :span="8">
-            <div class="un-handle-item">
-              <span class="font-medium">新缺货登记</span>
-              <span style="float: right" class="color-danger">(10)</span>
+            <div class="un-handle-item" @click="gotoShop">
+              <span class="font-medium">缺货登记</span>
+              <span style="float: right" class="color-danger"
+                >({{ staticeDate.outStockProduct }})</span
+              >
             </div>
           </el-col>
           <el-col :span="8">
-            <div class="un-handle-item">
+              <!-- 待处理 -->
+            <div class="un-handle-item"  @click="gotoBack(0)">
               <span class="font-medium">待处理退款申请</span>
-              <span style="float: right" class="color-danger">(10)</span>
+              <span style="float: right" class="color-danger"
+                >({{ staticeDate.waitDisposeRefund }})</span
+              >
             </div>
           </el-col>
         </el-row>
         <el-row :gutter="20">
           <el-col :span="8">
-            <div class="un-handle-item">
+            <div class="un-handle-item" @click="gotoOrder(1)">
               <span class="font-medium">已发货订单</span>
-              <span style="float: right" class="color-danger">(10)</span>
+              <span style="float: right" class="color-danger"
+                >({{ staticeDate.outOrder }})</span
+              >
             </div>
           </el-col>
           <el-col :span="8">
-            <div class="un-handle-item">
+            <!-- 退货中 -->
+            <div class="un-handle-item" @click="gotoBack(1)">
               <span class="font-medium">待处理退货订单</span>
-              <span style="float: right" class="color-danger">(10)</span>
+              <span style="float: right" class="color-danger"
+                >({{ staticeDate.waitDisposeRefundOrder }})</span
+              >
             </div>
           </el-col>
-          <el-col :span="8">
+          <!-- <el-col :span="8">
             <div class="un-handle-item">
               <span class="font-medium">广告位即将到期</span>
-              <span style="float: right" class="color-danger">(10)</span>
+              <span style="float: right" class="color-danger">({{staticeDate.waitDisposeRefund}})</span>
             </div>
-          </el-col>
+          </el-col> -->
         </el-row>
       </div>
     </div>
     <div class="overview-layout">
       <el-row :gutter="20">
-        <el-col :span="12">
+        <el-col :span="24">
           <div class="out-border">
             <div class="layout-title">商品总览</div>
             <div style="padding: 40px">
               <el-row>
-                <el-col :span="6" class="color-danger overview-item-value">100</el-col>
-                <el-col :span="6" class="color-danger overview-item-value">400</el-col>
-                <el-col :span="6" class="color-danger overview-item-value">50</el-col>
-                <el-col :span="6" class="color-danger overview-item-value">500</el-col>
+                <el-col :span="6" class="color-danger overview-item-value">{{
+                  staticeDate.delisted
+                }}</el-col>
+                <el-col :span="6" class="color-danger overview-item-value">{{
+                  staticeDate.shelves
+                }}</el-col>
+                <el-col :span="6" class="color-danger overview-item-value">{{
+                  staticeDate.outStock
+                }}</el-col>
+                <el-col :span="6" class="color-danger overview-item-value">{{
+                  staticeDate.productNum
+                }}</el-col>
               </el-row>
               <el-row class="font-medium">
                 <el-col :span="6" class="overview-item-title">已下架</el-col>
@@ -154,15 +175,23 @@
             </div>
           </div>
         </el-col>
-        <el-col :span="12">
+        <!-- <el-col :span="12">
           <div class="out-border">
             <div class="layout-title">用户总览</div>
             <div style="padding: 40px">
               <el-row>
-                <el-col :span="6" class="color-danger overview-item-value">100</el-col>
-                <el-col :span="6" class="color-danger overview-item-value">200</el-col>
-                <el-col :span="6" class="color-danger overview-item-value">1000</el-col>
-                <el-col :span="6" class="color-danger overview-item-value">5000</el-col>
+                <el-col :span="6" class="color-danger overview-item-value"
+                  >{{staticeDate.productNum}}</el-col
+                >
+                <el-col :span="6" class="color-danger overview-item-value"
+                  >{{staticeDate.productNum}}</el-col
+                >
+                <el-col :span="6" class="color-danger overview-item-value"
+                  >{{staticeDate.productNum}}</el-col
+                >
+                <el-col :span="6" class="color-danger overview-item-value"
+                  >{{staticeDate.productNum}}</el-col
+                >
               </el-row>
               <el-row class="font-medium">
                 <el-col :span="6" class="overview-item-title">今日新增</el-col>
@@ -172,7 +201,7 @@
               </el-row>
             </div>
           </div>
-        </el-col>
+        </el-col> -->
       </el-row>
     </div>
     <div class="statistics-layout">
@@ -181,43 +210,51 @@
         <el-col :span="4">
           <div style="padding: 20px">
             <div>
-              <div style="color: #909399;font-size: 14px">本月订单总数</div>
-              <div style="color: #606266;font-size: 24px;padding: 10px 0">10000</div>
+              <div style="color: #909399; font-size: 14px">本月订单总数</div>
+              <div style="color: #606266; font-size: 24px; padding: 10px 0">
+                {{orderStatistis.monthOrderCount}}
+              </div>
               <div>
-                <span class="color-success" style="font-size: 14px">+10%</span>
-                <span style="color: #C0C4CC;font-size: 14px">同比上月</span>
+                <span class="color-success" style="font-size: 14px">{{orderStatistis.monthOrderCountProportion}}%</span>
+                <span style="color: #c0c4cc; font-size: 14px">同比上月</span>
               </div>
             </div>
-            <div style="margin-top: 20px;">
-              <div style="color: #909399;font-size: 14px">本周订单总数</div>
-              <div style="color: #606266;font-size: 24px;padding: 10px 0">1000</div>
+            <div style="margin-top: 20px">
+              <div style="color: #909399; font-size: 14px">本周订单总数</div>
+              <div style="color: #606266; font-size: 24px; padding: 10px 0">
+                {{orderStatistis.weekOrderCount}}
+              </div>
               <div>
-                <span class="color-danger" style="font-size: 14px">-10%</span>
-                <span style="color: #C0C4CC;font-size: 14px">同比上周</span>
+                <span class="color-danger" style="font-size: 14px"> {{orderStatistis.weekOrderCountProportion}}%</span>
+                <span style="color: #c0c4cc; font-size: 14px">同比上周</span>
               </div>
             </div>
-            <div style="margin-top: 20px;">
-              <div style="color: #909399;font-size: 14px">本月销售总额</div>
-              <div style="color: #606266;font-size: 24px;padding: 10px 0">100000</div>
+            <div style="margin-top: 20px">
+              <div style="color: #909399; font-size: 14px">本月销售总额</div>
+              <div style="color: #606266; font-size: 24px; padding: 10px 0">
+                 {{orderStatistis.monthOrderAmount}}
+              </div>
               <div>
-                <span class="color-success" style="font-size: 14px">+10%</span>
-                <span style="color: #C0C4CC;font-size: 14px">同比上月</span>
+                <span class="color-success" style="font-size: 14px"> {{orderStatistis.monthOrderAmountProportion}}%</span>
+                <span style="color: #c0c4cc; font-size: 14px">同比上月</span>
               </div>
             </div>
-            <div style="margin-top: 20px;">
-              <div style="color: #909399;font-size: 14px">本周销售总额</div>
-              <div style="color: #606266;font-size: 24px;padding: 10px 0">50000</div>
+            <div style="margin-top: 20px">
+              <div style="color: #909399; font-size: 14px">本周销售总额</div>
+              <div style="color: #606266; font-size: 24px; padding: 10px 0">
+                   {{orderStatistis.weekOrderAmount}}
+              </div>
               <div>
-                <span class="color-danger" style="font-size: 14px">-10%</span>
-                <span style="color: #C0C4CC;font-size: 14px">同比上周</span>
+                <span class="color-danger" style="font-size: 14px"> {{orderStatistis.weekOrderAmountProportion}}%</span>
+                <span style="color: #c0c4cc; font-size: 14px">同比上周</span>
               </div>
             </div>
           </div>
         </el-col>
         <el-col :span="20">
-          <div style="padding: 10px;border-left:1px solid #DCDFE6">
+          <div style="padding: 10px; border-left: 1px solid #dcdfe6">
             <el-date-picker
-              style="float: right;z-index: 1"
+              style="float: right; z-index: 1"
               size="small"
               v-model="orderCountDate"
               type="daterange"
@@ -226,8 +263,12 @@
               range-separator="至"
               start-placeholder="开始日期"
               end-placeholder="结束日期"
+              format="yyyy-MM-dd"
+              value-format="yyyy-MM-dd"
               @change="handleDateChange"
-              :picker-options="pickerOptions">
+              :picker-options="pickerOptions"
+              :clearable="false"
+            >
             </el-date-picker>
             <div>
               <ve-line
@@ -235,7 +276,8 @@
                 :legend-visible="false"
                 :loading="loading"
                 :data-empty="dataEmpty"
-                :settings="chartSettings"></ve-line>
+                :settings="chartSettings"
+              ></ve-line>
             </div>
           </div>
         </el-col>
@@ -245,210 +287,273 @@
 </template>
 
 <script>
-  import {str2Date} from '@/utils/date';
-  import img_home_order from '@/assets/images/home_order.png';
-  import img_home_today_amount from '@/assets/images/home_today_amount.png';
-  import img_home_yesterday_amount from '@/assets/images/home_yesterday_amount.png';
-  const DATA_FROM_BACKEND = {
-    columns: ['date', 'orderCount','orderAmount'],
-    rows: [
-      {date: '2018-11-01', orderCount: 10, orderAmount: 1093},
-      {date: '2018-11-02', orderCount: 20, orderAmount: 2230},
-      {date: '2018-11-03', orderCount: 33, orderAmount: 3623},
-      {date: '2018-11-04', orderCount: 50, orderAmount: 6423},
-      {date: '2018-11-05', orderCount: 80, orderAmount: 8492},
-      {date: '2018-11-06', orderCount: 60, orderAmount: 6293},
-      {date: '2018-11-07', orderCount: 20, orderAmount: 2293},
-      {date: '2018-11-08', orderCount: 60, orderAmount: 6293},
-      {date: '2018-11-09', orderCount: 50, orderAmount: 5293},
-      {date: '2018-11-10', orderCount: 30, orderAmount: 3293},
-      {date: '2018-11-11', orderCount: 20, orderAmount: 2293},
-      {date: '2018-11-12', orderCount: 80, orderAmount: 8293},
-      {date: '2018-11-13', orderCount: 100, orderAmount: 10293},
-      {date: '2018-11-14', orderCount: 10, orderAmount: 1293},
-      {date: '2018-11-15', orderCount: 40, orderAmount: 4293}
-    ]
-  };
-  export default {
-    name: 'home',
-    data() {
-      return {
-        pickerOptions: {
-          shortcuts: [{
-            text: '最近一周',
+import { str2Date } from "@/utils/date";
+import dayjs from "dayjs";
+import img_home_order from "@/assets/images/home_order.png";
+import img_home_today_amount from "@/assets/images/home_today_amount.png";
+import img_home_yesterday_amount from "@/assets/images/home_yesterday_amount.png";
+import { getHomeStatistical, getOrderStatisticall } from "./api";
+export default {
+  name: "home",
+  data() {
+    return {
+      pickerOptions: {
+        shortcuts: [
+          {
+            text: "最近一周",
             onClick(picker) {
-              const end = new Date();
-              let start = new Date();
-              start.setFullYear(2018);
-              start.setMonth(10);
-              start.setDate(1);
-              end.setTime(start.getTime() + 3600 * 1000 * 24 * 7);
-              picker.$emit('pick', [start, end]);
-            }
-          }, {
-            text: '最近一月',
+              const start = dayjs(new Date())
+                .add(-1, "week")
+                .startOf("week")
+                .add(1, "day")
+                .valueOf();
+
+              const end = dayjs(new Date())
+                .add(-1, "week")
+                .endOf("week")
+                .add(1, "day")
+                .valueOf();
+
+              picker.$emit("pick", [new Date(start), new Date(end)]);
+            },
+          },
+          {
+            text: "最近一月",
             onClick(picker) {
-              const end = new Date();
-              let start = new Date();
-              start.setFullYear(2018);
-              start.setMonth(10);
-              start.setDate(1);
-              end.setTime(start.getTime() + 3600 * 1000 * 24 * 30);
-              picker.$emit('pick', [start, end]);
-            }
-          }]
-        },
-        orderCountDate: '',
-        chartSettings: {
-          xAxisType: 'time',
-          area:true,
-          axisSite: { right: ['orderAmount']},
-        labelMap: {'orderCount': '订单数量', 'orderAmount': '订单金额'}},
-        chartData: {
-          columns: [],
-          rows: []
-        },
-        loading: false,
-        dataEmpty: false,
-        img_home_order,
-        img_home_today_amount,
-        img_home_yesterday_amount
+              const start = dayjs(new Date()).startOf("month").valueOf();
+              const end = dayjs(new Date()).valueOf();
+              var now = dayjs().format("DD"); // 判断今天几号
+              picker.$emit("pick", [new Date(start), new Date(end)]);
+            },
+          },
+        ],
+      },
+      orderCountDate: "",
+      chartSettings: {
+        // xAxisType: "time",
+        area: true,
+        axisSite: { right: ["orderAmount"] },
+        labelMap: { orderNum: "订单数量", orderAmount: "订单金额" },
+      },
+      chartData: {
+        columns: [],
+        rows: [],
+      },
+      loading: false,
+      dataEmpty: false,
+      img_home_order,
+      img_home_today_amount,
+      img_home_yesterday_amount,
+      staticeDate: {
+        delisted: 0,
+        outOrder: 0,
+        outStock: 0,
+        outStockProduct: 0,
+        productNum: 0,
+        shelves: 0,
+        successOrder: 0,
+        todayOrderAmount: 0,
+        todayOrderNum: 0,
+        waitDisposeRefund: 0,
+        waitDisposeRefundOrder: 0,
+        waitOutOrder: 0,
+        waitPayOrder: 0,
+        waitReceiptOrder: 0,
+        yesterdayOrderAmount: 0,
+        yesterdayOrderNum: 0,
+      },
+      orderStatistis: {
+        monthOrderAmount: 0,
+        monthOrderAmountProportion: 0,
+        monthOrderCount: 0,
+        monthOrderCountProportion: 0,
+        orderStatisticalList: [],
+        weekOrderAmount: 0,
+        weekOrderAmountProportion: 0,
+        weekOrderCount: 0,
+        weekOrderCountProportion: 0,
+      },
+    };
+  },
+  created() {
+    this.initOrderCountDate();
+    this.getData();
+  },
+  mounted() {
+    this.getHomeStatisticalDate();
+  },
+
+  methods: {
+    async getHomeStatisticalDate() {
+      try {
+        const res = await getHomeStatistical();
+        this.staticeDate = { ...res.data };
+      } catch (e) {
+        console.log(e);
       }
     },
-    created(){
-      this.initOrderCountDate();
+    handleDateChange() {
       this.getData();
     },
-    methods:{
-      handleDateChange(){
-        this.getData();
-      },
-      initOrderCountDate(){
-        let start = new Date();
-        start.setFullYear(2018);
-        start.setMonth(10);
-        start.setDate(1);
-        const end = new Date();
-        end.setTime(start.getTime() + 1000 * 60 * 60 * 24 * 7);
-        this.orderCountDate=[start,end];
-      },
-      getData(){
-        setTimeout(() => {
+    initOrderCountDate() {
+      let start = new Date();
+      // start.setFullYear(2018);
+      // start.setMonth(10);
+      start.setDate(1);
+      start = dayjs(start).format("YYYY-MM-DD");
+      const end = dayjs(new Date()).format("YYYY-MM-DD");
+      // end.setTime(start.getTime() + 1000 * 60 * 60 * 24 * 7);
+      this.orderCountDate = [start, end];
+    },
+    async getData() {
+      try {
+        const res = await getOrderStatisticall({
+          startDate: this.orderCountDate[0],
+          endDate: this.orderCountDate[1],
+        });
+        this.orderStatistis = {...res.data}
           this.chartData = {
-            columns: ['date', 'orderCount','orderAmount'],
-            rows: []
-          };
-          for(let i=0;i<DATA_FROM_BACKEND.rows.length;i++){
-            let item=DATA_FROM_BACKEND.rows[i];
-            let currDate=str2Date(item.date);
-            let start=this.orderCountDate[0];
-            let end=this.orderCountDate[1];
-            if(currDate.getTime()>=start.getTime()&&currDate.getTime()<=end.getTime()){
-              this.chartData.rows.push(item);
-            }
-          }
-          this.dataEmpty = false;
-          this.loading = false
-        }, 1000)
+          columns: ["date", "orderNum", "orderAmount"],
+          rows: [],
+        };
+        for (let i = 0; i < this.orderStatistis.orderStatisticalList.length; i++) {
+          let item = this.orderStatistis.orderStatisticalList[i];
+           this.chartData.rows.push(item);
+        }
+        this.dataEmpty = false;
+        this.loading = false;
+      } catch (e) {
+        console.log(e);
       }
+      // setTimeout(() => {
+      //   this.chartData = {
+      //     columns: ["date", "orderCount", "orderAmount"],
+      //     rows: [],
+      //   };
+      //   for (let i = 0; i < DATA_FROM_BACKEND.rows.length; i++) {
+      //     let item = DATA_FROM_BACKEND.rows[i];
+      //     let currDate = str2Date(item.date);
+      //     let start = this.orderCountDate[0];
+      //     let end = this.orderCountDate[1];
+      //     if (
+      //       currDate.getTime() >= start.getTime() &&
+      //       currDate.getTime() <= end.getTime()
+      //     ) {
+      //       this.chartData.rows.push(item);
+      //     }
+      //   }
+      //   this.dataEmpty = false;
+      //   this.loading = false;
+      // }, 1000);
+    },
+    gotoOrder(status){
+      this.$router.push({name:'order',params:{status}})
+    },
+    gotoShop(){
+        this.$router.push({name:'product'})
+    },
+    gotoBack(status){
+       this.$router.push({name:'returnApply',params:{status}})
     }
-  }
+  },
+};
 </script>
 
 <style scoped>
-  .app-container {
-    margin-top: 40px;
-    margin-left: 120px;
-    margin-right: 120px;
-  }
+.app-container {
+  margin-top: 40px;
+  margin-left: 120px;
+  margin-right: 120px;
+}
 
-  .address-layout {
-  }
+.address-layout {
+}
 
-  .total-layout {
-    margin-top: 20px;
-  }
+.total-layout {
+  margin-top: 20px;
+}
 
-  .total-frame {
-    border: 1px solid #DCDFE6;
-    padding: 20px;
-    height: 100px;
-  }
+.total-frame {
+  border: 1px solid #dcdfe6;
+  padding: 20px;
+  height: 100px;
+}
 
-  .total-icon {
-    color: #409EFF;
-    width: 60px;
-    height: 60px;
-  }
+.total-icon {
+  color: #409eff;
+  width: 60px;
+  height: 60px;
+}
 
-  .total-title {
-    position: relative;
-    font-size: 16px;
-    color: #909399;
-    left: 70px;
-    top: -50px;
-  }
+.total-title {
+  position: relative;
+  font-size: 16px;
+  color: #909399;
+  left: 70px;
+  top: -50px;
+}
 
-  .total-value {
-    position: relative;
-    font-size: 18px;
-    color: #606266;
-    left: 70px;
-    top: -40px;
-  }
+.total-value {
+  position: relative;
+  font-size: 18px;
+  color: #606266;
+  left: 70px;
+  top: -40px;
+}
 
-  .un-handle-layout {
-    margin-top: 20px;
-    border: 1px solid #DCDFE6;
-  }
+.un-handle-layout {
+  margin-top: 20px;
+  border: 1px solid #dcdfe6;
+}
 
-  .layout-title {
-    color: #606266;
-    padding: 15px 20px;
-    background: #F2F6FC;
-    font-weight: bold;
-  }
+.layout-title {
+  color: #606266;
+  padding: 15px 20px;
+  background: #f2f6fc;
+  font-weight: bold;
+}
 
-  .un-handle-content {
-    padding: 20px 40px;
-  }
+.un-handle-content {
+  padding: 20px 40px;
+}
 
-  .un-handle-item {
-    border-bottom: 1px solid #EBEEF5;
-    padding: 10px;
-  }
+.un-handle-item {
+  cursor: pointer;
+  border-bottom: 1px solid #ebeef5;
+  padding: 10px;
+}
 
-  .overview-layout {
-    margin-top: 20px;
-  }
+.overview-layout {
+  margin-top: 20px;
+}
 
-  .overview-item-value {
-    font-size: 24px;
-    text-align: center;
-  }
+.overview-item-value {
+  font-size: 24px;
+  text-align: center;
+}
 
-  .overview-item-title {
-    margin-top: 10px;
-    text-align: center;
-  }
+.overview-item-title {
+  margin-top: 10px;
+  text-align: center;
+}
 
-  .out-border {
-    border: 1px solid #DCDFE6;
-  }
+.out-border {
+  border: 1px solid #dcdfe6;
+}
 
-  .statistics-layout {
-    margin-top: 20px;
-    border: 1px solid #DCDFE6;
-  }
-  .mine-layout {
-    position: absolute;
-    right: 140px;
-    top: 107px;
-    width: 250px;
-    height: 235px;
-  }
-  .address-content{
-    padding: 20px;
-    font-size: 18px
-  }
+.statistics-layout {
+  margin-top: 20px;
+  border: 1px solid #dcdfe6;
+}
+.mine-layout {
+  position: absolute;
+  right: 140px;
+  top: 107px;
+  width: 250px;
+  height: 235px;
+}
+.address-content {
+  padding: 20px;
+  font-size: 18px;
+}
 </style>

+ 17 - 5
src/views/layout/components/Navbar.vue

@@ -5,6 +5,7 @@
     <el-dropdown class="avatar-container" trigger="click">
       <div class="avatar-wrapper">
         <img class="user-avatar" :src="avatar">
+        <p class="user-name">{{name}}</p>
         <i class="el-icon-caret-bottom"></i>
       </div>
       <el-dropdown-menu class="user-dropdown" slot="dropdown">
@@ -34,9 +35,12 @@ export default {
   computed: {
     ...mapGetters([
       'sidebar',
-      'avatar'
+      'avatar',
+      'name'
     ])
   },
+  mounted(){
+  },
   methods: {
     toggleSideBar() {
       this.$store.dispatch('ToggleSideBar')
@@ -73,19 +77,27 @@ export default {
     position: absolute;
     right: 35px;
     .avatar-wrapper {
+      display: flex;
+      flex-direction: row;
+      align-items: center;
       cursor: pointer;
-      margin-top: 5px;
+      // margin-top: 5px;
       position: relative;
+      .user-name {
+        margin: 0px 5px;
+
+      }
       .user-avatar {
         width: 40px;
         height: 40px;
         border-radius: 10px;
+        position: relative;
+        top:-4px;
       }
       .el-icon-caret-bottom {
-        position: absolute;
-        right: -20px;
-        top: 25px;
+        line-height: 50px;
         font-size: 12px;
+        margin-left: 5px;
       }
     }
   }

+ 4 - 4
src/views/login/index.vue

@@ -81,7 +81,7 @@
         }
       };
       const validatePass = (rule, value, callback) => {
-        if (value.length < 3) {
+        if (value.length < 6) {
           callback(new Error('密码不能小于3位'))
         } else {
           callback()
@@ -107,10 +107,10 @@
       this.loginForm.username = getCookie("username");
       this.loginForm.password = getCookie("password");
       if(this.loginForm.username === undefined||this.loginForm.username==null||this.loginForm.username===''){
-        this.loginForm.username = 'admin';
+        this.loginForm.username = '15071003551';
       }
       if(this.loginForm.password === undefined||this.loginForm.password==null){
-        this.loginForm.password = '';
+        this.loginForm.password = 'a123456';
       }
     },
     methods: {
@@ -135,7 +135,7 @@
               setCookie("username",this.loginForm.username,15);
               setCookie("password",this.loginForm.password,15);
               this.$router.push({path: '/'})
-            }).catch(() => {
+            }).catch((e) => {
               this.loading = false
             })
           } else {

+ 3 - 0
src/views/oms/apply/index.vue

@@ -179,6 +179,9 @@
       }
     },
     created(){
+        if (this.$route.params.status + "") {
+      this.listQuery.status = this.$route.params.status;
+    }
       this.getList();
     },
     filters:{

+ 4 - 0
src/views/oms/order/index.vue

@@ -269,6 +269,10 @@
     },
     created() {
       this.getList();
+      // console.log(this.$route)
+      if(this.$route.params.status+''){
+        this.listQuery.status = this.$route.params.status
+      }
     },
     filters: {
       formatCreateTime(time) {

+ 500 - 418
src/views/pms/product/index.vue

@@ -1,4 +1,5 @@
-<template> 
+<template>
+   
   <div class="app-container">
     <el-card class="filter-container" shadow="never">
       <div>
@@ -8,48 +9,74 @@
           style="float: right"
           @click="handleSearchList()"
           type="primary"
-          size="small">
+          size="small"
+        >
           查询结果
         </el-button>
         <el-button
-          style="float: right;margin-right: 15px"
+          style="float: right; margin-right: 15px"
           @click="handleResetSearch()"
-          size="small">
+          size="small"
+        >
           重置
         </el-button>
       </div>
       <div style="margin-top: 15px">
-        <el-form :inline="true" :model="listQuery" size="small" label-width="140px">
+        <el-form
+          :inline="true"
+          :model="listQuery"
+          size="small"
+          label-width="140px"
+        >
           <el-form-item label="输入搜索:">
-            <el-input style="width: 203px" v-model="listQuery.keyword" placeholder="商品名称"></el-input>
+            <el-input
+              style="width: 203px"
+              v-model="listQuery.keyword"
+              placeholder="商品名称"
+            ></el-input>
           </el-form-item>
           <el-form-item label="商品货号:">
-            <el-input style="width: 203px" v-model="listQuery.productSn" placeholder="商品货号"></el-input>
+            <el-input
+              style="width: 203px"
+              v-model="listQuery.productSn"
+              placeholder="商品货号"
+            ></el-input>
           </el-form-item>
           <el-form-item label="商品分类:">
             <el-cascader
               clearable
               v-model="selectProductCateValue"
-              :options="productCateOptions">
+              :options="productCateOptions"
+            >
             </el-cascader>
           </el-form-item>
           <el-form-item label="商品品牌:">
-            <el-select v-model="listQuery.brandId" placeholder="请选择品牌" clearable>
+            <el-select
+              v-model="listQuery.brandId"
+              placeholder="请选择品牌"
+              clearable
+            >
               <el-option
                 v-for="item in brandOptions"
                 :key="item.value"
                 :label="item.label"
-                :value="item.value">
+                :value="item.value"
+              >
               </el-option>
             </el-select>
           </el-form-item>
           <el-form-item label="上架状态:">
-            <el-select v-model="listQuery.publishStatus" placeholder="全部" clearable>
+            <el-select
+              v-model="listQuery.publishStatus"
+              placeholder="全部"
+              clearable
+            >
               <el-option
                 v-for="item in publishStatusOptions"
                 :key="item.value"
                 :label="item.label"
-                :value="item.value">
+                :value="item.value"
+              >
               </el-option>
             </el-select>
           </el-form-item>
@@ -69,77 +96,93 @@
     <el-card class="operate-container" shadow="never">
       <i class="el-icon-tickets"></i>
       <span>数据列表</span>
-      <el-button
-        class="btn-add"
-        @click="handleAddProduct()"
-        size="mini">
+      <el-button class="btn-add" @click="handleAddProduct()" size="mini">
         添加
       </el-button>
     </el-card>
     <div class="table-container">
-      <el-table ref="productTable"
-                :data="list"
-                style="width: 100%"
-                @selection-change="handleSelectionChange"
-                v-loading="listLoading"
-                border>
-        <el-table-column type="selection" width="60" align="center"></el-table-column>
+      <el-table
+        ref="productTable"
+        :data="list"
+        style="width: 100%"
+        @selection-change="handleSelectionChange"
+        v-loading="listLoading"
+        border
+      >
+        <el-table-column
+          type="selection"
+          width="60"
+          align="center"
+        ></el-table-column>
         <el-table-column label="编号" width="100" align="center">
-          <template slot-scope="scope">{{scope.row.id}}</template>
+          <template slot-scope="scope">{{ scope.row.id }}</template>
         </el-table-column>
         <el-table-column label="商品图片" width="120" align="center">
-          <template slot-scope="scope"><img style="height: 80px" :src="scope.row.pic"></template>
+          <template slot-scope="scope"
+            ><img style="height: 80px" :src="scope.row.pic"
+          /></template>
         </el-table-column>
         <el-table-column label="商品名称" align="center">
           <template slot-scope="scope">
-            <p>{{scope.row.name}}</p>
-            <p>品牌:{{scope.row.brandName}}</p>
+            <p>{{ scope.row.name }}</p>
+            <p>品牌:{{ scope.row.brandName }}</p>
           </template>
         </el-table-column>
         <el-table-column label="价格/货号" width="120" align="center">
           <template slot-scope="scope">
-            <p>价格:¥{{scope.row.price}}</p>
-            <p>货号:{{scope.row.productSn}}</p>
+            <p>价格:¥{{ scope.row.price }}</p>
+            <p>货号:{{ scope.row.productSn }}</p>
           </template>
         </el-table-column>
         <el-table-column label="标签" width="140" align="center">
           <template slot-scope="scope">
-            <p>上架:
+            <p>
+              上架:
               <el-switch
                 @change="handlePublishStatusChange(scope.$index, scope.row)"
                 :active-value="1"
                 :inactive-value="0"
-                v-model="scope.row.publishStatus">
+                v-model="scope.row.publishStatus"
+              >
               </el-switch>
             </p>
-            <p>新品:
+            <p>
+              新品:
               <el-switch
                 @change="handleNewStatusChange(scope.$index, scope.row)"
                 :active-value="1"
                 :inactive-value="0"
-                v-model="scope.row.newStatus">
+                v-model="scope.row.newStatus"
+              >
               </el-switch>
             </p>
-            <p>推荐:
+            <p>
+              推荐:
               <el-switch
                 @change="handleRecommendStatusChange(scope.$index, scope.row)"
                 :active-value="1"
                 :inactive-value="0"
-                v-model="scope.row.recommandStatus">
+                v-model="scope.row.recommandStatus"
+              >
               </el-switch>
             </p>
           </template>
         </el-table-column>
         <el-table-column label="排序" width="100" align="center">
-          <template slot-scope="scope">{{scope.row.sort}}</template>
+          <template slot-scope="scope">{{ scope.row.sort }}</template>
         </el-table-column>
         <el-table-column label="SKU库存" width="100" align="center">
           <template slot-scope="scope">
-            <el-button type="primary" icon="el-icon-edit" @click="handleShowSkuEditDialog(scope.$index, scope.row)" circle></el-button>
+            <el-button
+              type="primary"
+              icon="el-icon-edit"
+              @click="handleShowSkuEditDialog(scope.$index, scope.row)"
+              circle
+            ></el-button>
           </template>
         </el-table-column>
         <el-table-column label="销量" width="100" align="center">
-          <template slot-scope="scope">{{scope.row.sale}}</template>
+          <template slot-scope="scope">{{ scope.row.sale }}</template>
         </el-table-column>
         <!-- <el-table-column label="审核状态" width="100" align="center">
           <template slot-scope="scope">
@@ -157,16 +200,19 @@
             <p>
               <el-button
                 size="mini"
-                @click="handleShowProduct(scope.$index, scope.row)">查看
+                @click="handleShowProduct(scope.$index, scope.row)"
+                >查看
               </el-button>
               <el-button
                 size="mini"
-                @click="handleUpdateProduct(scope.$index, scope.row)">编辑
+                @click="handleUpdateProduct(scope.$index, scope.row)"
+                >编辑
               </el-button>
-                <el-button
+              <el-button
                 size="mini"
                 type="danger"
-                @click="handleDelete(scope.$index, scope.row)">删除
+                @click="handleDelete(scope.$index, scope.row)"
+                >删除
               </el-button>
             </p>
             <p>
@@ -174,21 +220,19 @@
                 size="mini"
                 @click="handleShowLog(scope.$index, scope.row)">日志
               </el-button> -->
-
             </p>
           </template>
         </el-table-column>
       </el-table>
     </div>
     <div class="batch-operate-container">
-      <el-select
-        size="small"
-        v-model="operateType" placeholder="批量操作">
+      <el-select size="small" v-model="operateType" placeholder="批量操作">
         <el-option
           v-for="item in operates"
           :key="item.value"
           :label="item.label"
-          :value="item.value">
+          :value="item.value"
+        >
         </el-option>
       </el-select>
       <el-button
@@ -196,7 +240,8 @@
         class="search-button"
         @click="handleBatchOperate()"
         type="primary"
-        size="small">
+        size="small"
+      >
         确定
       </el-button>
     </div>
@@ -207,59 +252,62 @@
         @current-change="handleCurrentChange"
         layout="total, sizes,prev, pager, next,jumper"
         :page-size="listQuery.pageSize"
-        :page-sizes="[5,10,15]"
+        :page-sizes="[5, 10, 15]"
         :current-page.sync="listQuery.pageNum"
-        :total="total">
+        :total="total"
+      >
       </el-pagination>
     </div>
     <el-dialog
       title="编辑货品信息"
       :visible.sync="editSkuInfo.dialogVisible"
-      width="40%">
+      width="40%"
+    >
       <span>商品货号:</span>
-      <span>{{editSkuInfo.productSn}}</span>
-      <el-input placeholder="按sku编号搜索" v-model="editSkuInfo.keyword" size="small" style="width: 50%;margin-left: 20px">
-        <el-button slot="append" icon="el-icon-search" @click="handleSearchEditSku"></el-button>
+      <span>{{ editSkuInfo.productSn }}</span>
+      <el-input
+        placeholder="按sku编号搜索"
+        v-model="editSkuInfo.keyword"
+        size="small"
+        style="width: 50%; margin-left: 20px"
+      >
+        <el-button
+          slot="append"
+          icon="el-icon-search"
+          @click="handleSearchEditSku"
+        ></el-button>
       </el-input>
-      <el-table style="width: 100%;margin-top: 20px"
-                :data="editSkuInfo.stockList"
-                border>
-        <el-table-column
-          label="SKU编号"
-          align="center">
+      <el-table
+        style="width: 100%; margin-top: 20px"
+        :data="editSkuInfo.stockList"
+        border
+      >
+        <el-table-column label="SKU编号" align="center">
           <template slot-scope="scope">
             <el-input v-model="scope.row.skuCode"></el-input>
           </template>
         </el-table-column>
         <el-table-column
-          v-for="(item,index) in editSkuInfo.productAttr"
+          v-for="(item, index) in editSkuInfo.productAttr"
           :label="item.name"
           :key="item.id"
-          align="center">
+          align="center"
+        >
           <template slot-scope="scope">
-            {{getProductSkuSp(scope.row,index)}}
+            {{ getProductSkuSp(scope.row, index) }}
           </template>
         </el-table-column>
-        <el-table-column
-          label="销售价格"
-          width="80"
-          align="center">
+        <el-table-column label="销售价格" width="80" align="center">
           <template slot-scope="scope">
             <el-input v-model="scope.row.price"></el-input>
           </template>
         </el-table-column>
-        <el-table-column
-          label="商品库存"
-          width="80"
-          align="center">
+        <el-table-column label="商品库存" width="80" align="center">
           <template slot-scope="scope">
             <el-input v-model="scope.row.stock"></el-input>
           </template>
         </el-table-column>
-        <el-table-column
-          label="库存预警值"
-          width="100"
-          align="center">
+        <el-table-column label="库存预警值" width="100" align="center">
           <template slot-scope="scope">
             <el-input v-model="scope.row.lowStock"></el-input>
           </template>
@@ -267,384 +315,418 @@
       </el-table>
       <span slot="footer" class="dialog-footer">
         <el-button @click="editSkuInfo.dialogVisible = false">取 消</el-button>
-        <el-button type="primary" @click="handleEditSkuConfirm">确 定</el-button>
+        <el-button type="primary" @click="handleEditSkuConfirm"
+          >确 定</el-button
+        >
       </span>
     </el-dialog>
   </div>
 </template>
 <script>
-  import {
-    fetchList,
-    updateDeleteStatus,
-    updateNewStatus,
-    updateRecommendStatus,
-    updatePublishStatus
-  } from '@/api/product'
-  import {fetchList as fetchSkuStockList,update as updateSkuStockList} from '@/api/skuStock'
-  import {fetchList as fetchProductAttrList} from '@/api/productAttr'
-  import {fetchList as fetchBrandList} from '@/api/brand'
-  import {fetchListWithChildren} from '@/api/productCate'
+import {
+  fetchList,
+  updateDeleteStatus,
+  updateNewStatus,
+  updateRecommendStatus,
+  updatePublishStatus,
+} from "@/api/product";
+import {
+  fetchList as fetchSkuStockList,
+  update as updateSkuStockList,
+} from "@/api/skuStock";
+import { fetchList as fetchProductAttrList } from "@/api/productAttr";
+import { fetchList as fetchBrandList } from "@/api/brand";
+import { fetchListWithChildren } from "@/api/productCate";
 
-  const defaultListQuery = {
-    keyword: null,
-    pageNum: 1,
-    pageSize: 5,
-    publishStatus: null,
-    verifyStatus: null,
-    productSn: null,
-    productCategoryId: null,
-    brandId: null
-  };
-  export default {
-    name: "productList",
-    data() {
-      return {
-        editSkuInfo:{
-          dialogVisible:false,
-          productId:null,
-          productSn:'',
-          productAttributeCategoryId:null,
-          stockList:[],
-          productAttr:[],
-          keyword:null
+const defaultListQuery = {
+  keyword: null,
+  pageNum: 1,
+  pageSize: 5,
+  publishStatus: null,
+  verifyStatus: null,
+  productSn: null,
+  productCategoryId: null,
+  brandId: null,
+};
+export default {
+  name: "productList",
+  data() {
+    return {
+      editSkuInfo: {
+        dialogVisible: false,
+        productId: null,
+        productSn: "",
+        productAttributeCategoryId: null,
+        stockList: [],
+        productAttr: [],
+        keyword: null,
+      },
+      operates: [
+        {
+          label: "商品上架",
+          value: "publishOn",
         },
-        operates: [
-          {
-            label: "商品上架",
-            value: "publishOn"
-          },
-          {
-            label: "商品下架",
-            value: "publishOff"
-          },
-          {
-            label: "设为推荐",
-            value: "recommendOn"
-          },
-          {
-            label: "取消推荐",
-            value: "recommendOff"
-          },
-          {
-            label: "设为新品",
-            value: "newOn"
-          },
-          {
-            label: "取消新品",
-            value: "newOff"
-          },
-          {
-            label: "转移到分类",
-            value: "transferCategory"
-          },
-          {
-            label: "移入回收站",
-            value: "recycle"
-          }
-        ],
-        operateType: null,
-        listQuery: Object.assign({}, defaultListQuery),
-        list: null,
-        total: null,
-        listLoading: true,
-        selectProductCateValue: null,
-        multipleSelection: [],
-        productCateOptions: [],
-        brandOptions: [],
-        publishStatusOptions: [{
+        {
+          label: "商品下架",
+          value: "publishOff",
+        },
+        {
+          label: "设为推荐",
+          value: "recommendOn",
+        },
+        {
+          label: "取消推荐",
+          value: "recommendOff",
+        },
+        {
+          label: "设为新品",
+          value: "newOn",
+        },
+        {
+          label: "取消新品",
+          value: "newOff",
+        },
+        {
+          label: "转移到分类",
+          value: "transferCategory",
+        },
+        {
+          label: "移入回收站",
+          value: "recycle",
+        },
+      ],
+      operateType: null,
+      listQuery: Object.assign({}, defaultListQuery),
+      list: null,
+      total: null,
+      listLoading: true,
+      selectProductCateValue: null,
+      multipleSelection: [],
+      productCateOptions: [],
+      brandOptions: [],
+      publishStatusOptions: [
+        {
           value: 1,
-          label: '上架'
-        }, {
+          label: "上架",
+        },
+        {
           value: 0,
-          label: '下架'
-        }],
-        verifyStatusOptions: [{
+          label: "下架",
+        },
+      ],
+      verifyStatusOptions: [
+        {
           value: 1,
-          label: '审核通过'
-        }, {
+          label: "审核通过",
+        },
+        {
           value: 0,
-          label: '未审核'
-        }]
+          label: "未审核",
+        },
+      ],
+    };
+  },
+  created() {
+
+    this.getList();
+    this.getBrandList();
+    this.getProductCateList();
+  },
+  watch: {
+    selectProductCateValue: function (newValue) {
+      if (newValue != null && newValue.length == 2) {
+        this.listQuery.productCategoryId = newValue[1];
+      } else {
+        this.listQuery.productCategoryId = null;
       }
     },
-    created() {
-      this.getList();
-      this.getBrandList();
-      this.getProductCateList();
-    },
-    watch: {
-      selectProductCateValue: function (newValue) {
-        if (newValue != null && newValue.length == 2) {
-          this.listQuery.productCategoryId = newValue[1];
-        } else {
-          this.listQuery.productCategoryId = null;
-        }
-
+  },
+  filters: {
+    verifyStatusFilter(value) {
+      if (value === 1) {
+        return "审核通过";
+      } else {
+        return "未审核";
       }
     },
-    filters: {
-      verifyStatusFilter(value) {
-        if (value === 1) {
-          return '审核通过';
-        } else {
-          return '未审核';
-        }
+  },
+  methods: {
+    getProductSkuSp(row, index) {
+      let spData = JSON.parse(row.spData);
+      if (spData != null && index < spData.length) {
+        return spData[index].value;
+      } else {
+        return null;
       }
     },
-    methods: {
-      getProductSkuSp(row, index) {
-        let spData = JSON.parse(row.spData);
-        if(spData!=null&&index<spData.length){
-          return spData[index].value;
-        }else{
-          return null;
+    getList() {
+      this.listLoading = true;
+      fetchList(this.listQuery).then((response) => {
+        this.listLoading = false;
+        this.list = response.data.list;
+        this.total = response.data.total;
+      });
+    },
+    getBrandList() {
+      fetchBrandList({ pageNum: 1, pageSize: 100 }).then((response) => {
+        this.brandOptions = [];
+        let brandList = response.data.list;
+        for (let i = 0; i < brandList.length; i++) {
+          this.brandOptions.push({
+            label: brandList[i].name,
+            value: brandList[i].id,
+          });
         }
-      },
-      getList() {
-        this.listLoading = true;
-        fetchList(this.listQuery).then(response => {
-          this.listLoading = false;
-          this.list = response.data.list;
-          this.total = response.data.total;
-        });
-      },
-      getBrandList() {
-        fetchBrandList({pageNum: 1, pageSize: 100}).then(response => {
-          this.brandOptions = [];
-          let brandList = response.data.list;
-          for (let i = 0; i < brandList.length; i++) {
-            this.brandOptions.push({label: brandList[i].name, value: brandList[i].id});
-          }
-        });
-      },
-      getProductCateList() {
-        fetchListWithChildren().then(response => {
-          let list = response.data;
-          this.productCateOptions = [];
-          for (let i = 0; i < list.length; i++) {
-            let children = [];
-            if (list[i].children != null && list[i].children.length > 0) {
-              for (let j = 0; j < list[i].children.length; j++) {
-                children.push({label: list[i].children[j].name, value: list[i].children[j].id});
-              }
+      });
+    },
+    getProductCateList() {
+      fetchListWithChildren().then((response) => {
+        let list = response.data;
+        this.productCateOptions = [];
+        for (let i = 0; i < list.length; i++) {
+          let children = [];
+          if (list[i].children != null && list[i].children.length > 0) {
+            for (let j = 0; j < list[i].children.length; j++) {
+              children.push({
+                label: list[i].children[j].name,
+                value: list[i].children[j].id,
+              });
             }
-            this.productCateOptions.push({label: list[i].name, value: list[i].id, children: children});
           }
-        });
-      },
-      handleShowSkuEditDialog(index,row){
-        this.editSkuInfo.dialogVisible=true;
-        this.editSkuInfo.productId=row.id;
-        this.editSkuInfo.productSn=row.productSn;
-        this.editSkuInfo.productAttributeCategoryId = row.productAttributeCategoryId;
-        this.editSkuInfo.keyword=null;
-        fetchSkuStockList(row.id,{keyword:this.editSkuInfo.keyword}).then(response=>{
-          this.editSkuInfo.stockList=response.data;
-        });
-        if(row.productAttributeCategoryId!=null){
-          fetchProductAttrList(row.productAttributeCategoryId,{type:0}).then(response=>{
-            this.editSkuInfo.productAttr=response.data.list;
+          this.productCateOptions.push({
+            label: list[i].name,
+            value: list[i].id,
+            children: children,
           });
         }
-      },
-      handleSearchEditSku(){
-        fetchSkuStockList(this.editSkuInfo.productId,{keyword:this.editSkuInfo.keyword}).then(response=>{
-          this.editSkuInfo.stockList=response.data;
-        });
-      },
-      handleEditSkuConfirm(){
-        if(this.editSkuInfo.stockList==null||this.editSkuInfo.stockList.length<=0){
-          this.$message({
-            message: '暂无sku信息',
-            type: 'warning',
-            duration: 1000
-          });
-          return
+      });
+    },
+    handleShowSkuEditDialog(index, row) {
+      this.editSkuInfo.dialogVisible = true;
+      this.editSkuInfo.productId = row.id;
+      this.editSkuInfo.productSn = row.productSn;
+      this.editSkuInfo.productAttributeCategoryId =
+        row.productAttributeCategoryId;
+      this.editSkuInfo.keyword = null;
+      fetchSkuStockList(row.id, { keyword: this.editSkuInfo.keyword }).then(
+        (response) => {
+          this.editSkuInfo.stockList = response.data;
         }
-        this.$confirm('是否要进行修改', '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
-          type: 'warning'
-        }).then(()=>{
-          updateSkuStockList(this.editSkuInfo.productId,this.editSkuInfo.stockList).then(response=>{
-            this.$message({
-              message: '修改成功',
-              type: 'success',
-              duration: 1000
-            });
-            this.editSkuInfo.dialogVisible=false;
-          });
+      );
+      if (row.productAttributeCategoryId != null) {
+        fetchProductAttrList(row.productAttributeCategoryId, { type: 0 }).then(
+          (response) => {
+            this.editSkuInfo.productAttr = response.data.list;
+          }
+        );
+      }
+    },
+    handleSearchEditSku() {
+      fetchSkuStockList(this.editSkuInfo.productId, {
+        keyword: this.editSkuInfo.keyword,
+      }).then((response) => {
+        this.editSkuInfo.stockList = response.data;
+      });
+    },
+    handleEditSkuConfirm() {
+      if (
+        this.editSkuInfo.stockList == null ||
+        this.editSkuInfo.stockList.length <= 0
+      ) {
+        this.$message({
+          message: "暂无sku信息",
+          type: "warning",
+          duration: 1000,
         });
-      },
-      handleSearchList() {
-        this.listQuery.pageNum = 1;
-        this.getList();
-      },
-      handleAddProduct() {
-        this.$router.push({path:'/pms/addProduct'});
-      },
-      handleBatchOperate() {
-        if(this.operateType==null){
+        return;
+      }
+      this.$confirm("是否要进行修改", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      }).then(() => {
+        updateSkuStockList(
+          this.editSkuInfo.productId,
+          this.editSkuInfo.stockList
+        ).then((response) => {
           this.$message({
-            message: '请选择操作类型',
-            type: 'warning',
-            duration: 1000
+            message: "修改成功",
+            type: "success",
+            duration: 1000,
           });
-          return;
+          this.editSkuInfo.dialogVisible = false;
+        });
+      });
+    },
+    handleSearchList() {
+      this.listQuery.pageNum = 1;
+      this.getList();
+    },
+    handleAddProduct() {
+      this.$router.push({ path: "/pms/addProduct" });
+    },
+    handleBatchOperate() {
+      if (this.operateType == null) {
+        this.$message({
+          message: "请选择操作类型",
+          type: "warning",
+          duration: 1000,
+        });
+        return;
+      }
+      if (this.multipleSelection == null || this.multipleSelection.length < 1) {
+        this.$message({
+          message: "请选择要操作的商品",
+          type: "warning",
+          duration: 1000,
+        });
+        return;
+      }
+      this.$confirm("是否要进行该批量操作?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      }).then(() => {
+        let ids = [];
+        for (let i = 0; i < this.multipleSelection.length; i++) {
+          ids.push(this.multipleSelection[i].id);
         }
-        if(this.multipleSelection==null||this.multipleSelection.length<1){
-          this.$message({
-            message: '请选择要操作的商品',
-            type: 'warning',
-            duration: 1000
-          });
-          return;
+        switch (this.operateType) {
+          case this.operates[0].value:
+            this.updatePublishStatus(1, ids);
+            break;
+          case this.operates[1].value:
+            this.updatePublishStatus(0, ids);
+            break;
+          case this.operates[2].value:
+            this.updateRecommendStatus(1, ids);
+            break;
+          case this.operates[3].value:
+            this.updateRecommendStatus(0, ids);
+            break;
+          case this.operates[4].value:
+            this.updateNewStatus(1, ids);
+            break;
+          case this.operates[5].value:
+            this.updateNewStatus(0, ids);
+            break;
+          case this.operates[6].value:
+            break;
+          case this.operates[7].value:
+            this.updateDeleteStatus(1, ids);
+            break;
+          default:
+            break;
         }
-        this.$confirm('是否要进行该批量操作?', '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
-          type: 'warning'
-        }).then(() => {
-          let ids=[];
-          for(let i=0;i<this.multipleSelection.length;i++){
-            ids.push(this.multipleSelection[i].id);
-          }
-          switch (this.operateType) {
-            case this.operates[0].value:
-              this.updatePublishStatus(1,ids);
-              break;
-            case this.operates[1].value:
-              this.updatePublishStatus(0,ids);
-              break;
-            case this.operates[2].value:
-              this.updateRecommendStatus(1,ids);
-              break;
-            case this.operates[3].value:
-              this.updateRecommendStatus(0,ids);
-              break;
-            case this.operates[4].value:
-              this.updateNewStatus(1,ids);
-              break;
-            case this.operates[5].value:
-              this.updateNewStatus(0,ids);
-              break;
-            case this.operates[6].value:
-              break;
-            case this.operates[7].value:
-              this.updateDeleteStatus(1,ids);
-              break;
-            default:
-              break;
-          }
-          this.getList();
-        });
-      },
-      handleSizeChange(val) {
-        this.listQuery.pageNum = 1;
-        this.listQuery.pageSize = val;
-        this.getList();
-      },
-      handleCurrentChange(val) {
-        this.listQuery.pageNum = val;
         this.getList();
-      },
-      handleSelectionChange(val) {
-        this.multipleSelection = val;
-      },
-      handlePublishStatusChange(index, row) {
-        let ids = [];
-        ids.push(row.id);
-        this.updatePublishStatus(row.publishStatus, ids);
-      },
-      handleNewStatusChange(index, row) {
-        let ids = [];
-        ids.push(row.id);
-        this.updateNewStatus(row.newStatus, ids);
-      },
-      handleRecommendStatusChange(index, row) {
+      });
+    },
+    handleSizeChange(val) {
+      this.listQuery.pageNum = 1;
+      this.listQuery.pageSize = val;
+      this.getList();
+    },
+    handleCurrentChange(val) {
+      this.listQuery.pageNum = val;
+      this.getList();
+    },
+    handleSelectionChange(val) {
+      this.multipleSelection = val;
+    },
+    handlePublishStatusChange(index, row) {
+      let ids = [];
+      ids.push(row.id);
+      this.updatePublishStatus(row.publishStatus, ids);
+    },
+    handleNewStatusChange(index, row) {
+      let ids = [];
+      ids.push(row.id);
+      this.updateNewStatus(row.newStatus, ids);
+    },
+    handleRecommendStatusChange(index, row) {
+      let ids = [];
+      ids.push(row.id);
+      this.updateRecommendStatus(row.recommandStatus, ids);
+    },
+    handleResetSearch() {
+      this.selectProductCateValue = [];
+      this.listQuery = Object.assign({}, defaultListQuery);
+    },
+    handleDelete(index, row) {
+      this.$confirm("是否要进行删除操作?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      }).then(() => {
         let ids = [];
         ids.push(row.id);
-        this.updateRecommendStatus(row.recommandStatus, ids);
-      },
-      handleResetSearch() {
-        this.selectProductCateValue = [];
-        this.listQuery = Object.assign({}, defaultListQuery);
-      },
-      handleDelete(index, row){
-        this.$confirm('是否要进行删除操作?', '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
-          type: 'warning'
-        }).then(() => {
-          let ids = [];
-          ids.push(row.id);
-          this.updateDeleteStatus(1,ids);
-        });
-      },
-      handleUpdateProduct(index,row){
-        this.$router.push({path:'/pms/updateProduct',query:{id:row.id}});
-      },
-      handleShowProduct(index,row){
-             this.$router.push({path:'/pms/detailProduct',query:{id:row.id}});
-        // console.log("handleShowProduct",row);
-      },
-      handleShowVerifyDetail(index,row){
-        console.log("handleShowVerifyDetail",row);
-      },
-      handleShowLog(index,row){
-        console.log("handleShowLog",row);
-      },
-      updatePublishStatus(publishStatus, ids) {
-        let params = new URLSearchParams();
-        params.append('ids', ids);
-        params.append('publishStatus', publishStatus);
-        updatePublishStatus(params).then(response => {
-          this.$message({
-            message: '修改成功',
-            type: 'success',
-            duration: 1000
-          });
+        this.updateDeleteStatus(1, ids);
+      });
+    },
+    handleUpdateProduct(index, row) {
+      this.$router.push({ path: "/pms/updateProduct", query: { id: row.id } });
+    },
+    handleShowProduct(index, row) {
+      this.$router.push({ path: "/pms/detailProduct", query: { id: row.id } });
+      // console.log("handleShowProduct",row);
+    },
+    handleShowVerifyDetail(index, row) {
+      console.log("handleShowVerifyDetail", row);
+    },
+    handleShowLog(index, row) {
+      console.log("handleShowLog", row);
+    },
+    updatePublishStatus(publishStatus, ids) {
+      let params = new URLSearchParams();
+      params.append("ids", ids);
+      params.append("publishStatus", publishStatus);
+      updatePublishStatus(params).then((response) => {
+        this.$message({
+          message: "修改成功",
+          type: "success",
+          duration: 1000,
         });
-      },
-      updateNewStatus(newStatus, ids) {
-        let params = new URLSearchParams();
-        params.append('ids', ids);
-        params.append('newStatus', newStatus);
-        updateNewStatus(params).then(response => {
-          this.$message({
-            message: '修改成功',
-            type: 'success',
-            duration: 1000
-          });
+      });
+    },
+    updateNewStatus(newStatus, ids) {
+      let params = new URLSearchParams();
+      params.append("ids", ids);
+      params.append("newStatus", newStatus);
+      updateNewStatus(params).then((response) => {
+        this.$message({
+          message: "修改成功",
+          type: "success",
+          duration: 1000,
         });
-      },
-      updateRecommendStatus(recommendStatus, ids) {
-        let params = new URLSearchParams();
-        params.append('ids', ids);
-        params.append('recommendStatus', recommendStatus);
-        updateRecommendStatus(params).then(response => {
-          this.$message({
-            message: '修改成功',
-            type: 'success',
-            duration: 1000
-          });
+      });
+    },
+    updateRecommendStatus(recommendStatus, ids) {
+      let params = new URLSearchParams();
+      params.append("ids", ids);
+      params.append("recommendStatus", recommendStatus);
+      updateRecommendStatus(params).then((response) => {
+        this.$message({
+          message: "修改成功",
+          type: "success",
+          duration: 1000,
         });
-      },
-      updateDeleteStatus(deleteStatus, ids) {
-        let params = new URLSearchParams();
-        params.append('ids', ids);
-        params.append('deleteStatus', deleteStatus);
-        updateDeleteStatus(params).then(response => {
-          this.$message({
-            message: '删除成功',
-            type: 'success',
-            duration: 1000
-          });
+      });
+    },
+    updateDeleteStatus(deleteStatus, ids) {
+      let params = new URLSearchParams();
+      params.append("ids", ids);
+      params.append("deleteStatus", deleteStatus);
+      updateDeleteStatus(params).then((response) => {
+        this.$message({
+          message: "删除成功",
+          type: "success",
+          duration: 1000,
         });
-        this.getList();
-      }
-    }
-  }
+      });
+      this.getList();
+    },
+  },
+};
 </script>
 <style></style>