sunny 2 yıl önce
ebeveyn
işleme
5ecedc2489

+ 6 - 11
.gitignore

@@ -1,17 +1,13 @@
 .DS_Store
-node_modules
-/dist
-
-
-# local env files
-.env.local
-.env.*.local
-
-# Log files
+node_modules/
+dist/
 npm-debug.log*
 yarn-debug.log*
 yarn-error.log*
-pnpm-debug.log*
+
+test/unit/coverage
+test/e2e/reports
+selenium-debug.log
 
 # Editor directories and files
 .idea
@@ -20,4 +16,3 @@ pnpm-debug.log*
 *.ntvs*
 *.njsproj
 *.sln
-*.sw?

BIN
dist.zip


+ 2 - 2
package.json

@@ -10,10 +10,10 @@
   "dependencies": {
     "core-js": "^3.8.3",
     "vue": "^2.6.14",
-    "vuex": "3.0.1",
     "axios": "0.17.1",
     "element-ui": "^2.15.12",
-    "vue-router": "^3.5.1"
+    "vue-router": "^3.5.1",
+    "js-cookie": "2.2.0"
   },
   "devDependencies": {
     "@babel/core": "^7.12.16",

+ 44 - 6
src/api/allApi.js

@@ -1,15 +1,25 @@
 import request from '@/utils/request'
-import https from '@/utils/https'
 
-export function authorize(query) {
-  return https({
-    url: '/oauth2api/authorize.if',
-    method: 'post',
+// 商品兑换列表
+export function integralList(query) {
+  return request({
+    url: '/admin/mall-sku/integral/user/list',
+    method: 'get',
     data: query
   })
 }
 
-export function list(query) {
+// 商品详情
+export function integralInfo(query) {
+  return request({
+    url: '/admin/mall-sku/integral/info',
+    method: 'get',
+    params: query
+  })
+}
+
+// 节日礼品兑换列表
+export function festivalList(query) {
   return request({
     url: '/admin/mall-sku/festival/user/list',
     method: 'post',
@@ -17,6 +27,34 @@ export function list(query) {
   })
 }
 
+// 节日礼品详情
+export function festivalInfo(query) {
+  return request({
+    url: '/admin/mall-sku/festival/info',
+    method: 'get',
+    param: query
+  })
+}
+// 兑换须知   商品兑换须知 goodsNotice 礼品兑换须知giftNotice
+export function notice(query) {
+  return request({
+    url: '/admin/news/mall/getNotice',
+    method: 'get',
+    data: query
+  })
+}
+
+//商品,节日礼品兑换
+export function start(data) {
+  return request({
+    url: '/admin/mall-order/start',
+    method: 'post',
+    data
+  })
+}
+
+
+
 export function createNews(data) {
   return request({
     url: '/news/createForDGTSiteNews',

BIN
src/assets/logo.png


+ 39 - 1
src/components/AppSidebar.vue

@@ -1,5 +1,6 @@
 <template>
-    <nav class="side-navigator-wrap">
+    <div class="index-nav" :class="{'index-nav-top':isActive}">
+        <nav class="side-navigator-wrap">
         <div class="nav-item-wrap">
             <div class="nav-item-content" :class="{ active: employeeDynamics }">
                 <router-link to="/home/employeeDynamics" class="nav-item">
@@ -27,6 +28,8 @@
         </div>
         
     </nav>
+    </div>
+    
 </template>
 <script lang="ts">
 export default {
@@ -36,6 +39,8 @@ export default {
         employeeDynamics: false,
         pointsMall: false,
         festiveEvents: false,
+        scrollTop: 0,
+        isActive:false,
     };
   },
   methods:{
@@ -59,6 +64,31 @@ export default {
             this.pointsMall = false;
             this.festiveEvents = true;
         }
+    },
+    // 保存滚动值,这是兼容的写法
+    handleScroll () {
+      this.scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
+          //变量scrollTop是滚动条滚动时,距离顶部的距离
+      var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
+    //   //变量windowHeight是可视区的高度
+    //   var windowHeight = document.documentElement.clientHeight || document.body.clientHeight;
+    //   //变量windowHeight是可视区的高度
+    //   var scrollHeight =document.documentElement.scrollHeight || document.body.scrollHeight;
+    //       //滚动条到底部的条件
+    //    if(scrollTop + windowHeight == scrollHeight){
+    //         //你要触发的方法
+    //     }
+    //     console.log(scrollTop);
+        if(scrollTop >= 80){
+            this.isActive = true
+        }
+    },
+
+    // 滚动条回到顶部
+    backTop () {
+      if (this.scrollTop > 10) {
+        document.documentElement.scrollTop = 0
+      }
     }
   },
   watch: {
@@ -67,6 +97,14 @@ export default {
   created() {
     this.getRoute();
   },
+  mounted () {
+    window.addEventListener('scroll', this.handleScroll, true)
+  },
+
+  destroyed () {
+    // 离开该页面需要移除这个监听的事件,不然会报错
+    window.removeEventListener('scroll', this.handleScroll)
+  }
 }
 </script>
 <style scoped>

+ 1 - 1
src/main.js

@@ -4,8 +4,8 @@ import router from './router'
 import ElementUI from 'element-ui';
 import 'element-ui/lib/theme-chalk/index.css';
 import './assets/css/global.css';
+import './permission' // permission control
 Vue.config.productionTip = false
-
 Vue.use(ElementUI);
 new Vue({
   router,

+ 17 - 7
src/permission.js

@@ -1,14 +1,24 @@
 import router from './router'
 
-import { getToken } from '@/utils/auth' // getToken from cookie
+import { getToken, setToken } from '@/utils/auth' // getToken from cookie
 
 //路由跳转之前
-router.beforeEach((to, from, next) => {
-  console.log(getToken);
-  if (!getToken()) {
-    return next('http://dgt.dgtis.com/oneportal/login');
-  }
-   next()
+router.beforeEach((to, _from, next) => {
+  const path = to.path;
+  const Authorization = to.query.Authorization
+  if (path=='/auth' && Authorization) {
+    setToken(Authorization);
+    // console.log(Authorization);
+    next({ path: '/' });
+  }else{
+    const token = getToken();
+    if( token && token != 'undefined' ){
+      next();
+    }else{
+      // window.location.href = 'http://dgt.dgtis.com/oneportal/login'
+      window.location.href = 'http://192.168.100.208:8080/oneportal/login'
+    }
+  }  
 })
 
 router.afterEach(() => {})

+ 2 - 1
src/router/index.js

@@ -23,7 +23,7 @@ const routes = [
         component: () => import('@/views/HomeView/PointsMall.vue')
       },
       {
-        path: '/home/pointsMall/redeem/:id',
+        path: '/home/pointsMall/redeem',
         component: () => import('@/views/HomeView/RedeemView.vue')
       },
       {
@@ -43,6 +43,7 @@ const routes = [
 ]
 
 const router = new VueRouter({
+  mode: 'history',
   linkActiveClass:'route-active',
   routes,
 })

+ 2 - 9
src/utils/auth.js

@@ -1,5 +1,3 @@
-import { authorize } from "@/api/allApi";
-
 import Cookies from 'js-cookie'
 
 const TokenKey = 'Admin-Token'
@@ -8,13 +6,8 @@ export function getToken() {
   return Cookies.get(TokenKey)
 }
 
-export function setToken() {
-  authorize({ clientId:'',response_type:'',redirect_uri:'http://192.168.100.137:8080/#/home/employeeDynamics'}).then(response => {
-    const token = response.data.data;
-    return Cookies.set(TokenKey, token);
-  }).catch(() => { 
-    return Cookies.set(TokenKey, '');
-  })
+export function setToken(token) {
+  return Cookies.set(TokenKey, token)
 }
 
 export function removeToken() {

+ 0 - 61
src/utils/https.js

@@ -1,61 +0,0 @@
-import axios from 'axios'
-import { Message, MessageBox } from 'element-ui'
-
-// create an axios instance
-const service = axios.create({
-  baseURL: 'http://dgt.dgtis.com/oneportal/', // api的base_url
-  timeout: 10000 // request timeout
-})
-
-// request interceptor
-service.interceptors.request.use(config => {
-  return config
-}, error => {
-  // Do something with request error
-  console.log(error) // for debug
-  Promise.reject(error)
-})
-
-// respone interceptor
-service.interceptors.response.use(
-  response => {
-    const res = response.data
-    let errmsg = res.errmsg;
-    if (res.errno !== 0) {
-      if(res.errno==303){
-        MessageBox.alert('没有权限登录系统,请输入重新登录', '已退出', {
-          confirmButtonText: '重新登录',
-          type: 'error'
-        }).then(() => {
-            location.reload()
-        })
-      }else if(errmsg !="" && errmsg !=null && res.errno != 401){//401是未登录
-        MessageBox.alert(errmsg,errmsg, {
-          confirmButtonText: '确定',
-          type: 'warning'
-        }).then(() => {
-          location.reload()
-        })
-      }else{
-        MessageBox.alert('超时自动退出系统,请重新登录', '已退出', {
-          confirmButtonText: '重新登录',
-          type: 'error'
-        }).then(() => {
-            location.reload()
-        })
-      }
-      return Promise.reject('error')
-    } else {
-      return response
-    }
-  }, error => {
-    console.log('err' + error)// for debug
-    Message({
-      message: '登录连接超时(后台不能连接,请联系系统管理员)',
-      type: 'error',
-      duration: 5 * 1000
-    })
-    return Promise.reject(error)
-  })
-
-export default service

+ 11 - 19
src/utils/request.js

@@ -1,5 +1,6 @@
 import axios from 'axios'
 import { Message, MessageBox } from 'element-ui'
+import { getToken } from '@/utils/auth'
 
 // create an axios instance
 const service = axios.create({
@@ -10,6 +11,9 @@ const service = axios.create({
 // request interceptor
 service.interceptors.request.use(config => {
   // Do something before request is sent
+  if (getToken()) {
+    config.headers['Authorization'] = getToken() // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
+  }
   return config
 }, error => {
   // Do something with request error
@@ -23,30 +27,18 @@ service.interceptors.response.use(
     const res = response.data
     let errmsg = res.errmsg;
     if (res.errno !== 0) {
-      if(res.errno==303){
-        MessageBox.alert('没有权限登录系统,请输入重新登录', '已退出', {
+      if(res.errno==503){
+        MessageBox.alert('超时自动退出系统,请重新登录', '已退出', {
           confirmButtonText: '重新登录',
           type: 'error'
         }).then(() => {
-        
-            location.reload()
-         
-        })
-      }else if(errmsg !="" && errmsg !=null && res.errno != 401){//401是未登录
-        MessageBox.alert(errmsg,errmsg, {
-          confirmButtonText: '确定',
-          type: 'warning'
-        }).then(() => {
-
+            location.href = 'http://192.168.100.208:8080/oneportal/login';
         })
       }else{
-        MessageBox.alert('超时自动退出系统,请重新登录', '已退出', {
-          confirmButtonText: '重新登录',
-          type: 'error'
-        }).then(() => {
-          
-            location.reload()
-         
+        Message({
+          message: errmsg,
+          type: 'error',
+          duration: 5 * 1000
         })
       }
       return Promise.reject('error')

+ 7 - 5
src/views/HomeView.vue

@@ -1,8 +1,6 @@
 <template>
   <div class="main-container">
-    <div class="index-nav">
-      <AppSidebar></AppSidebar>
-    </div>
+    <AppSidebar></AppSidebar>
     <router-view />
   </div>
 </template>
@@ -20,8 +18,8 @@ export default {
 <style scoped>
 .main-container{
   position: relative;
-    margin: 0 auto;
-    width: 100%;
+  margin: 0 auto;
+  width: 100%;
   max-width: 1200px;
   margin-top: 1.66rem;
   display: flex;
@@ -40,4 +38,8 @@ export default {
     max-height: calc(100vh - 101px);
     /* overflow-x: hidden; */
 }
+.index-nav-top{
+    top: 105px;
+    max-height: calc(100vh - 40px);
+}
 </style>

Dosya farkı çok büyük olduğundan ihmal edildi
+ 81 - 15
src/views/HomeView/PointsMall.vue


+ 39 - 2
src/views/HomeView/RedeemView.vue

@@ -61,7 +61,7 @@
                                 </div>
                             </div>
                         </td>
-                        <td>{{ data.stock }}</td>
+                        <td>{{ skuCount }}</td>
                         <td>{{ data.price }} 积分</td>
                         <td>{{ data.deliveryName }}</td>
                         <td class="finlly-price">
@@ -140,6 +140,7 @@
     </div>
 </template>
 <script>
+import { integralInfo, festivalInfo, start } from "@/api/allApi";
 export default {
     data() {
         var validPhone = (rule, value, callback) => {
@@ -156,6 +157,7 @@ export default {
             }
         };
         return {
+            skuCount:1,
             data:{
                 "skuId": 19,
                 "seq": "202304100004",
@@ -180,10 +182,12 @@ export default {
             dialogFormVisible:false,
             dialogMsgVisible:false,
             dataForm: {
+                skuId:'',
                 name: '张三',
                 phone: '13613885046',
                 email:'13613885046@qq.com',
                 address: '',
+                skuCount:1,
             },  
             rules: {
                 name: [
@@ -205,8 +209,28 @@ export default {
             formLabelWidth: '80px',
         };
     },
+    created(){
+        const skuId = this.$route.query.id;
+        const activeName = this.$route.query.activeName;
+        this.dataForm.skuId = skuId;
+        this.getInfo(skuId,activeName);
+    },
     methods: {
-
+        getInfo(skuId,activeName){
+            if(activeName=='goodsNotice'){
+                integralInfo({skuId:skuId}).then(response => {
+                    this.data = response.data.data;
+                }).catch(() => {
+                    this.data = {};
+                })
+            }else{
+                festivalInfo({skuId:skuId}).then(response => {
+                    this.data = response.data.data;
+                }).catch(() => {
+                    this.data = {};
+                })
+            }
+        },
         handleClickAddress(){
             this.dialogFormVisible = true;
         },
@@ -224,6 +248,19 @@ export default {
         },  
         handleClickExchange(){
             this.dialogMsgVisible = true;
+            const params = {
+                skuId:this.data.skuId,
+                skuCount:1,
+                skuType:this.data.skuId,
+                purchaserId:this.data.skuId,
+                contact:this.dataForm.name,
+                contactPhone:this.dataForm.phone,
+                contactAddr:this.dataForm.address,
+                contactEmail:this.dataForm.email,
+            }
+            start({params}).then(response => {
+                console.log(response.data.data);
+            }).catch(() => {})
         },
         handleClickOK(){
             this.dialogMsgVisible = false;

+ 5 - 5
yarn.lock

@@ -3783,6 +3783,11 @@ joi@^17.4.0:
     "@sideway/formula" "^3.0.1"
     "@sideway/pinpoint" "^2.0.0"
 
+js-cookie@2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.0.tgz#1b2c279a6eece380a12168b92485265b35b1effb"
+  integrity sha512-7YAJP/LPE/MhDjHIdfIiT665HUSumCwPN2hAmO6OJZ8V3o1mtz2HeQ8BKetEjkh+3nqGxYaq1vPMViUR8kaOXw==
+
 js-message@1.0.7:
   version "1.0.7"
   resolved "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz#fbddd053c7a47021871bb8b2c95397cc17c20e47"
@@ -5817,11 +5822,6 @@ vue@^2.6.14:
     "@vue/compiler-sfc" "2.7.14"
     csstype "^3.1.0"
 
-vuex@3.0.1:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.0.1.tgz#e761352ebe0af537d4bb755a9b9dc4be3df7efd2"
-  integrity sha512-wLoqz0B7DSZtgbWL1ShIBBCjv22GV5U+vcBFox658g6V0s4wZV9P4YjCNyoHSyIBpj1f29JBoNQIqD82cR4O3w==
-
 watchpack@^2.4.0:
   version "2.4.0"
   resolved "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d"