feat(dev): 更新环境配置并添加新功能

- 修改 .env 和 .env.dev 文件中的 VUE_APP_ADMIN 地址
- 在 package.json 中添加 vue-slick-carousel 依赖
- 新增服务列表和用户 token 相关 API
- 更新请求拦截器,支持自动添加 token
- 添加用户登录状态和 token 获取相关工具函数
- 新增轮播图组件和相关页面集成
- 重构部分代码结构,优化请求逻辑
This commit is contained in:
huangze
2025-07-03 11:11:48 +08:00
parent 39b0a3908b
commit ce9b94ffd8
14 changed files with 144 additions and 35 deletions

2
.env
View File

@@ -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'

View File

@@ -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'

View File

@@ -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"
},

View File

@@ -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,
}
})
},
}

View 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
View 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
})
}

View File

@@ -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
}

View File

@@ -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()

View 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
}

View 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 }
}

View File

@@ -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)
})

View 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>

View File

@@ -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">

View File

@@ -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: '',
}