feat(dev): 更新环境配置并添加新功能
- 修改 .env 和 .env.dev 文件中的 VUE_APP_ADMIN 地址 - 在 package.json 中添加 vue-slick-carousel 依赖 - 新增服务列表和用户 token 相关 API - 更新请求拦截器,支持自动添加 token - 添加用户登录状态和 token 获取相关工具函数 - 新增轮播图组件和相关页面集成 - 重构部分代码结构,优化请求逻辑
This commit is contained in:
2
.env
2
.env
@@ -3,4 +3,4 @@ NODE_ENV = 'dev' // 如果是生产环境,请记得切换为production
|
||||
|
||||
# flag
|
||||
VUE_APP_FLAG='dev'
|
||||
VUE_APP_ADMIN='http://192.168.1.1:7006/'
|
||||
VUE_APP_ADMIN='http://localhost:7100'
|
||||
|
||||
2
.env.dev
2
.env.dev
@@ -3,4 +3,4 @@ NODE_ENV = 'dev' // 如果是生产环境,请记得切换为production
|
||||
|
||||
# flag
|
||||
VUE_APP_FLAG='dev'
|
||||
VUE_APP_ADMIN='http://192.168.1.1:7006/'
|
||||
VUE_APP_ADMIN='http://127.0.0.1:7100'
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
"vue-pdf": "^4.3.0",
|
||||
"vue-quill-editor": "^3.0.6",
|
||||
"vue-router": "^3.5.2",
|
||||
"vue-slick-carousel": "^1.0.6",
|
||||
"vuex": "^3.0.1",
|
||||
"weixin-js-sdk": "^1.4.0-test"
|
||||
},
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
import request from '@/assets/js/utils/request'
|
||||
import getUrl from '@/assets/js/utils/get-url'
|
||||
export default {
|
||||
//
|
||||
getUserInfo(data) {
|
||||
return request({
|
||||
url: getUrl('/api/userInfo', 'admin'),
|
||||
method: 'get',
|
||||
params: data,
|
||||
headers: {
|
||||
撒旦: '是说',
|
||||
撒大苏打: window,
|
||||
}
|
||||
})
|
||||
},
|
||||
}
|
||||
11
src/api/service-list/index.js
Normal file
11
src/api/service-list/index.js
Normal file
@@ -0,0 +1,11 @@
|
||||
import request from '@/assets/js/utils/request'
|
||||
import getUrl from '@/assets/js/utils/get-url'
|
||||
|
||||
// 获取服务列表
|
||||
export function fetchServiceList(data) {
|
||||
return request({
|
||||
url: getUrl('/sysUserEx/redirectlogin'),
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
11
src/api/user/token.js
Normal file
11
src/api/user/token.js
Normal file
@@ -0,0 +1,11 @@
|
||||
import request from '@/assets/js/utils/request'
|
||||
import getUrl from '@/assets/js/utils/get-url'
|
||||
|
||||
// 获取token
|
||||
export function fetchToken(data) {
|
||||
return request({
|
||||
url: getUrl('/sysUserEx/redirectlogin'),
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
@@ -1,9 +1,18 @@
|
||||
import config from '@/config'
|
||||
import urlMap from '@/config/urlMap'
|
||||
// import urlMap from '@/config/urlMap'
|
||||
|
||||
export default function getUrl(url, domainType = 'admin') {
|
||||
let domain = ''
|
||||
if (domainType === 'admin') {
|
||||
domain = config.admin
|
||||
} return domain + url
|
||||
let domain = process.env.VUE_APP_ADMIN || ''
|
||||
// if (domainType === 'admin') {
|
||||
// domain = config.admin
|
||||
// }
|
||||
// console.log(`request url is :`,domain+ url);
|
||||
|
||||
return domain + url
|
||||
}
|
||||
|
||||
export function getParamsFromUrl(url) {
|
||||
const search = new URL(url).search
|
||||
const params = new URLSearchParams(search)
|
||||
return params
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import axios from 'axios'
|
||||
import { Dialog, Toast } from 'vant'
|
||||
import { getToken, hasLogin } from './user-login'
|
||||
|
||||
// 创建axios实例
|
||||
const service = axios.create({
|
||||
@@ -7,9 +8,9 @@ const service = axios.create({
|
||||
})
|
||||
// request拦截器
|
||||
service.interceptors.request.use(
|
||||
config => {
|
||||
async config => {
|
||||
Toast.loading()
|
||||
config.headers['token'] = window.localStorage.getItem('token')
|
||||
!hasLogin() && (config.headers['sid'] = await getToken())
|
||||
return config
|
||||
},
|
||||
error => {
|
||||
@@ -19,7 +20,7 @@ service.interceptors.request.use(
|
||||
}
|
||||
)
|
||||
|
||||
// respone拦截器
|
||||
// response拦截器
|
||||
service.interceptors.response.use(
|
||||
response => {
|
||||
Toast.loading().clear()
|
||||
|
||||
8
src/assets/js/utils/user-login.js
Normal file
8
src/assets/js/utils/user-login.js
Normal file
@@ -0,0 +1,8 @@
|
||||
export function hasLogin() {
|
||||
return !!globalThis.localStorage.getItem('token')
|
||||
}
|
||||
|
||||
export async function getToken() {
|
||||
const token = globalThis.localStorage.getItem('token')
|
||||
if (token) return token
|
||||
}
|
||||
12
src/hooks/request/service-list.js
Normal file
12
src/hooks/request/service-list.js
Normal file
@@ -0,0 +1,12 @@
|
||||
import { ref } from 'vue'
|
||||
import { fetchServiceList as fetchList } from '../../api/service-list'
|
||||
|
||||
export function fetchServiceList() {
|
||||
const list = ref()
|
||||
|
||||
fetchList().then(res => {
|
||||
debugger
|
||||
list.value = res
|
||||
})
|
||||
return { list }
|
||||
}
|
||||
38
src/main.js
38
src/main.js
@@ -18,8 +18,13 @@ import 'quill/dist/quill.snow.css'
|
||||
import Bus from '@utils/bus'
|
||||
import { Toast, Form, Loading, Lazyload, Notify, Image, NavBar, Icon, Card, Field, Button } from 'vant'
|
||||
import generatedFormat from '@/assets/js/generatedFormat/index'
|
||||
import generatedApi from '@/api/generatedApi/index'
|
||||
// import generatedApi from '@/api/generatedApi/index'
|
||||
import generatedComponents from './generatedComponents'
|
||||
import { fetchToken } from './api/user/token'
|
||||
import { hasLogin } from './assets/js/utils/user-login'
|
||||
//权限控制
|
||||
import { permission } from '@/assets/js/utils/permission'
|
||||
import { getParamsFromUrl } from './assets/js/utils/get-url'
|
||||
|
||||
for (let item in generatedComponents) {
|
||||
Vue.component(item, generatedComponents[item])
|
||||
@@ -43,7 +48,7 @@ Vue.use(Image)
|
||||
//router or bridge jump
|
||||
Vue.prototype.$bus = new Bus()
|
||||
Vue.prototype.$generatedFormat = generatedFormat
|
||||
Vue.prototype.$generatedApi = generatedApi
|
||||
// Vue.prototype.$generatedApi = generatedApi
|
||||
Vue.prototype.$generatedDictList = generatedFormat.formatList
|
||||
Vue.prototype.$validatorItem = { ...validatorItem }
|
||||
Vue.prototype.$computeNumber = function computeNumber(a, type, b) {
|
||||
@@ -117,8 +122,7 @@ if (envFlag != 'prd') {
|
||||
// eslint-disable-next-line no-undef
|
||||
// eruda.init() //TODO 生产环境验证,打开调试工具
|
||||
}
|
||||
//权限控制
|
||||
import { permission } from '@/assets/js/utils/permission'
|
||||
|
||||
permission()
|
||||
//ios点击300毫秒时延
|
||||
FastClick.attach(document.body)
|
||||
@@ -134,3 +138,29 @@ const vm = new Vue({
|
||||
render: h => h(App)
|
||||
}).$mount('#app')
|
||||
window.page = vm
|
||||
|
||||
!hasLogin() &&
|
||||
fetchToken({
|
||||
apikey: 'a6sdngp99fd0zokkddusob7dd58e6f',
|
||||
customerNo: '12',
|
||||
id: '',
|
||||
name: 'test-user',
|
||||
openid: '12',
|
||||
sex: '1',
|
||||
status: 0,
|
||||
type: '1'
|
||||
})
|
||||
.then(res => {
|
||||
const { content } = res.contents
|
||||
const token = getParamsFromUrl(content).get('token')
|
||||
console.log(token, 'token')
|
||||
|
||||
globalThis.localStorage.setItem('token', token)
|
||||
})
|
||||
.catch(err => {
|
||||
const { content } = err.content
|
||||
const token = getParamsFromUrl(content).get('token')
|
||||
console.log(token, 'token')
|
||||
|
||||
globalThis.localStorage.setItem('token', token)
|
||||
})
|
||||
|
||||
24
src/views/home/components/swiper/swiper.vue
Normal file
24
src/views/home/components/swiper/swiper.vue
Normal file
@@ -0,0 +1,24 @@
|
||||
<template>
|
||||
<div>
|
||||
<VueSlickCarousel :arrows="true" :dots="false">
|
||||
<van-image v-for="item in list" :key="item.id" :src="item.imgUrl" />
|
||||
</VueSlickCarousel>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import VueSlickCarousel from 'vue-slick-carousel'
|
||||
import 'vue-slick-carousel/dist/vue-slick-carousel.css'
|
||||
import 'vue-slick-carousel/dist/vue-slick-carousel-theme.css'
|
||||
|
||||
export default {
|
||||
name: 'MyComponent',
|
||||
props: {
|
||||
list: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
}
|
||||
},
|
||||
components: { VueSlickCarousel },
|
||||
}
|
||||
</script>
|
||||
@@ -1,15 +1,25 @@
|
||||
<script>
|
||||
import { Image as VanImage, Icon } from 'vant';
|
||||
import { title as _title } from './hooks/home';
|
||||
import Swiper from './components/swiper/swiper.vue';
|
||||
|
||||
export default {
|
||||
name: "home",
|
||||
components: {
|
||||
VanImage,
|
||||
VanIcon: Icon
|
||||
VanIcon: Icon,
|
||||
SwiperBanner: Swiper
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
bannerList: [
|
||||
{
|
||||
imgUrl: "http://ncc.ebiz-digits.com:39527/gsc/IHRHN5/7b/04/63/7b0463aa135f4a1f922b5171bcec1d14/images/主页/u44.svg"
|
||||
},
|
||||
{
|
||||
imgUrl: "http://ncc.ebiz-digits.com:39527/gsc/IHRHN5/7b/04/63/7b0463aa135f4a1f922b5171bcec1d14/images/主页/u44.svg"
|
||||
}
|
||||
],
|
||||
title: _title,
|
||||
titleSrc: "http://ncc.ebiz-digits.com:39527/gsc/IHRHN5/7b/04/63/7b0463aa135f4a1f922b5171bcec1d14/images/主页/u26.png",
|
||||
bannerSrc: "http://ncc.ebiz-digits.com:39527/gsc/IHRHN5/7b/04/63/7b0463aa135f4a1f922b5171bcec1d14/images/主页/u44.svg",
|
||||
@@ -28,7 +38,8 @@ export default {
|
||||
</section>
|
||||
<!-- 轮播图部分 -->
|
||||
<section class="swiper">
|
||||
<van-image width="100%" :src="bannerSrc" />
|
||||
<!-- <van-image width="100%" :src="bannerSrc" /> -->
|
||||
<swiper-banner :list="bannerList" />
|
||||
</section>
|
||||
<!-- 服务提示语部分 -->
|
||||
<section class="tips">
|
||||
|
||||
@@ -65,12 +65,20 @@
|
||||
import { Popup, Search } from 'vant'
|
||||
import BScroll from 'better-scroll'
|
||||
import { shopList } from '@/views/service/js/mock/shop-list'
|
||||
|
||||
import { fetchServiceList } from "@/hooks/request/service-list"
|
||||
export default {
|
||||
components: {
|
||||
[Popup.name]: Popup,
|
||||
[Search.name]: Search,
|
||||
},
|
||||
setup() {
|
||||
const { list } = fetchServiceList()
|
||||
// return { list }
|
||||
|
||||
return {
|
||||
shopList: []
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
searchParams: '',
|
||||
@@ -86,7 +94,6 @@ export default {
|
||||
scrollY: 0, // 右侧滑动的时候距离顶部的值
|
||||
rightSide: [], // 所有右侧分类li的top组成的数组 (列表第一次显示后就不再变化)
|
||||
//模拟的商品数据
|
||||
shopList: shopList,
|
||||
isclick: false,
|
||||
selectId: '',
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user