# dami
## Project setup
```
yarn install
```
### Compiles and hot-reloads for development
```
yarn run serve
```
### Compiles and minifies for production
```
yarn run build
```
### Run your tests
```
yarn run test
```
### Lints and fixes files
```
yarn run lint
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).
### 功能介绍
1. 搜索相关Item详情
2. Item地点通过百度地图展示
3. 通过Item评论辨别当前Item质量
### 项目部分组件展示
1. 面包屑组件
```javascript
<template>
<el-breadcrumb class="app-breadcrumb" separator=">">
<transition-group name="breadcrumb">
<el-breadcrumb-item
v-for="(item, i) in levelList"
:key="item.path"
>
<!-- 不能跳转:路由没有配置重定向或者当前项已经是最后一项 -->
<span
v-if="item.redirect === 'noredirect' || i === levelList.length - 1"
class="no-redirect"
>{{item.meta.title}}</span>
<a v-else @click.prevent="handleLink(item)">{{item.meta.title}}</a>
</el-breadcrumb-item>
</transition-group>
</el-breadcrumb>
</template>
<script>
import pathToRegexp from "path-to-regexp"
export default {
name: "MBreadCrumb",
data () {
return {
levelList: []
};
},
watch: {
// 观察$route变化
$route: {
handler(route){
this.getBreadcrumb()
},
immediate: true
}
},
methods: {
getBreadcrumb() {
// /mine/orderlist
// ['/', '/mine', '/mine/orderlist']
// 面包屑仅显示包含meta.title 和 item.meta.breadcrumb 不为false的路由
let matched = this.$route.matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb === true)
// 不是以/mine开头的
if(!this.isHome(matched[0])){
matched = [{path: "/mine", redirect: "/mine", meta: {title: "我的大觅"}}].concat(matched)
}
/* // 以/mine/orderlist
if(matched[1].path === '/mine/orderlist'){
matched.splice(1, 0, {path: "/mine/trade/orderlist", redirect: "/mine/trade/orderlist", meta: {title: "交易中心"}})
}
// 以/mine/personal || /mine/ticketbuyer
if(matched[1].path === '/mine/personal' || matched[1].path === '/mine/ticketbuyer'){
matched.splice(1, 0, {path: "/mine/account/personal", redirect: "/mine/account/personal", meta: {title: "账户中心"}})
} */
this.levelList = matched
},
isHome(route){
const name = route && route.name
if(!name){
return false
}
return name.trim().toLocaleLowerCase() === 'mine'.toLocaleLowerCase()
},
pathCompile(path){
const {params} = this.$route
var toPath = pathToRegexp.compile(path)
return toPath(params)
},
handleLink(item){
const {redirect, path} = item
// 相同路径
if(path === this.$route.path || redirect === this.$route.path){
return
}
if(redirect){
this.$router.push(redirect)
return
}
// 编译path 避免存在路径参数
this.$router.push(this.pathCompile(path))
}
},
}
</script>
<style lang="less" scoped>
.app-breadcrumb.el-breadcrumb {
display: inline-block;
font-size: 14px;
}
.app-breadcrumb{
width: 100%;
border: 1px solid #efefef;
height: 38px;
padding: 0 15px;
box-sizing: border-box;
padding-right: 0;
line-height: 38px;
color: #333;
margin-bottom: 15px;
background: linear-gradient(top, #efefef, #fff);
}
.app-breadcrumb.el-breadcrumb .no-redirect {
color: #97a8be;
cursor: text;
}
/* breadcrumb transition */
.breadcrumb-enter-active,
.breadcrumb-leave-active {
transition: all .5s;
}
.breadcrumb-enter,
.breadcrumb-leave-active {
opacity: 0;
transform: translateX(20px);
}
.breadcrumb-move {
transition: all .5s;
}
.breadcrumb-leave-active {
position: absolute;
}
</style>
```
2. axios 封装
```javascript
/*
* @Description:
* @Version: 2.0
* @Autor: Darren
* @Date: 2020-01-13 14:19:40
* @LastEditors : Darren
* @LastEditTime : 2020-02-11 10:36:00
*/
import axios from 'axios'
import jsonp from 'jsonp'
import qs from 'qs'
import store from '@/store'
import router from '@/router'
import { Message, MessageBox } from 'element-ui'
import { TOKEN_KEY } from '@/config'
const timeout = 10000
const jsonpConfig = {
timeout,
}
const axiosConfig = {
timeout,
// withCredentials: false
}
switch (process.env.NODE_ENV) {
case 'production':
axios.defaults.baseURL = 'https://www.anqistudy.com/dami'
break
case 'test':
axios.default.baseURL =
'https://www.easy-mock.com/mock/5e1ad3810e3372179ec5b3e8/dami/api'
break
case 'localhost':
axios.default.baseURL = 'http://localhost:5000/api/dami'
default:
axios.default.baseURL = 'http://localhost:7001' // 注意最后这里要改成你当前后端运行地址
}
/* 拦截器 */
axios.interceptors.request.use(
config => {
const token = window.localStorage.getItem(TOKEN_KEY)
// 设置URL白名单 性能问题
if (token) {
config.headers.common['Authorization'] = 'Bearer ' + token
}
return config
},
err => {
Message({
type: 'error',
message: err.message,
})
}
)
axios.interceptors.response.use(
response => {
// 设置白名单
let { data, config } = response
// 一般错误拦截
if (data && data.code !== 0 && data.code !== 666) {
Message.error(data.message)
return
}
// 篡改路由地址
if (data && data.code !== 0 && data.code === 777) {
Message.error(data.message)
router.push("/")
return
}
if (data.code === 0 && config.url === '/api/user/login') {
localStorage.setItem(TOKEN_KEY, data.data.token)
}
// token过期了
if (data.code === 666) {
const path = router.app.$route.fullPath
Message.error(data.message)
router.replace(`/login?redirect=${path}`)
return
}
return data
},
err => {
console.log('response err', err)
Message.error(err.message)
}
)
export default (method = 'GET', url, option = {}) => {
// 默认是post / delete / patch
let isPost = true
const config = option.config || {}
delete option.config
/* 在线测试 */
// url = axios.default.baseURL + url
method = (method || '').toUpperCase()
/* 这些方法不用直接携带data的哦 */
if (['GET', 'HEAD', 'DELETE', 'JSONP'].indexOf(method) > -1) {
if (axios.defaults.baseURL === 'http://localhost:8080/api') {
console.log('skip')
return
}
const query = qs.stringify(option.data, {
addQueryPrefix: true,
})
isPost = false
if (url.indexOf('?') > -1) {
url += query.replace('?', '&')
} else {
url += query
}
}
/* JSONP 请求 */
if (method === 'JSONP') {
return new Promise((resolve, reject) => {
jsonp(url, {...jsonpConfig, ...config }, (err, data) => {
if (err) return reject(err)
resolve(data)
})
})
}
const makeConfig = { method, url }
if (isPost) {
makeConfig.data = option
}
return axios({
...axiosConfig,
...makeConfig,
...config,
/* headers: {
"Content-Type": "application/json"
} */
})
}
```
### 未来规划和展望
1. 希望添加oauth2.0授权登录
2. 添加历史浏览记录
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
毕业设计是高等教育阶段学生在完成学业前所进行的一项重要学术任务,旨在检验学生通过学习所获得的知识、技能以及对特定领域的深刻理解能力。这项任务通常要求学生运用所学专业知识,通过独立研究和创新,完成一个实际问题的解决方案或者开展一项有价值的项目。 首先,毕业设计的选择通常由学生根据个人兴趣、专业方向以及实际需求来确定。学生需要在导师的指导下明确研究目标、问题陈述,确立研究的范围和深度。毕业设计可以包括文献综述、需求分析、方案设计、实施与测试等多个阶段,以确保整个过程的科学性和系统性。 其次,毕业设计的完成通常需要学生具备一定的独立思考和解决问题的能力。在研究过程中,学生可能需要采用各种研究方法,如实验、调查、案例分析等,以获取必要的数据和信息。通过这些活动,学生能够培养扎实的专业技能,提升解决实际问题的实际能力。 第三,毕业设计的撰写是整个过程的重要组成部分。学生需要将研究过程、方法、结果以及结论等详细记录在毕业论文中,以展示其研究的全貌和成果。同时,撰写毕业设计还有助于提高学生的学术写作水平,培养清晰、逻辑的表达能力。 最后,毕业设计的评价通常由导师和相关专业人士进行。评价标准包括研究的创新性、实用性、方法的科学性以及论文的质量等方面。学生在毕业设计中获得的成绩也将直接影响其最终的学业成绩和学位授予。 总的来说,毕业设计是高等教育中的一项重要环节,通过此过程,学生不仅能够巩固所学知识,还能培养独立思考和解决问题的能力,为将来的职业发展奠定坚实的基础。
资源推荐
资源详情
资源评论
收起资源包目录
vue.js pc dami 戏剧售票.zip (195个子文件)
reset.css 3KB
category.css 977B
is-select.css 850B
category.min.css 787B
is-select.min.css 705B
iconfont.css 591B
hot.css 181B
hot.min.css 140B
.env.development 153B
siteseal_gd_3.gif 4KB
.gitignore 216B
index.html 974B
favicon.ico 4KB
big3.jpg 384KB
pic2.jpg 332KB
pic1.jpg 285KB
pic3.jpg 162KB
big2.jpg 116KB
loginImg.jpg 93KB
cardimg5.jpg 78KB
cardimg5.jpg 78KB
cardimg5.jpg 78KB
big1.jpg 71KB
big5.jpg 62KB
cardimg4.jpg 47KB
cardimg4.jpg 47KB
cardimg4.jpg 47KB
avatar10.jpg 43KB
bg.jpg 40KB
cardimg2.jpg 39KB
cardimg2.jpg 39KB
cardimg2.jpg 39KB
big4.jpg 37KB
cardimg1.jpg 35KB
cardimg1.jpg 35KB
cardimg1.jpg 35KB
cardimg3.jpg 33KB
cardimg3.jpg 33KB
cardimg3.jpg 33KB
cardimg6.jpg 32KB
cardimg6.jpg 32KB
cardimg6.jpg 32KB
avatar06.jpg 23KB
avatar05.jpg 15KB
avatar03.jpg 13KB
avatar07.jpg 13KB
avatar09.jpg 12KB
avatar02.jpg 12KB
avatar01.jpg 12KB
avatar2.jpg 7KB
p_code.jpg 6KB
avatar08.jpg 4KB
avatar04.jpg 4KB
avatar.jpg 3KB
zfb_8129.jpg 3KB
wx_10127.jpg 3KB
.eslintrc.js 9KB
index.js 5KB
http.js 5KB
api_list_querygoodsinfo.js 4KB
request.js 3KB
index.js 3KB
index.js 3KB
api_index_floor.js 2KB
api_list_guesslike.js 2KB
vue.config.js 1KB
api_index_linenav.js 1KB
user.js 1KB
element.js 1KB
api_index_nav.js 1KB
main.js 1KB
api_choose_seat_seatlist.js 802B
api_list_sortgoods.js 786B
api_user_login.js 772B
api_desc_comments.js 708B
api_desc_commend.js 615B
api_order_queryorderlist.js 574B
seat.js 573B
api_index_recommend.js 569B
search.js 568B
api_index_sell.js 565B
api_order-ticketbuyerlist.js 524B
index.js 522B
api_pay_confirmpay.js 520B
index.js 489B
api_list_querycity.js 482B
api_index_carousel.js 478B
order.js 455B
babel.config.js 375B
socket-io-test.js 331B
index.js 291B
city.js 284B
skeleton.js 172B
.prettierrc.js 94B
package.json 2KB
settings.json 285B
custom.less 5KB
reset.less 3KB
yarn.lock 334KB
README.md 7KB
共 195 条
- 1
- 2
资源评论
普通的一个普通猿
- 粉丝: 1466
- 资源: 1897
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 技术资料分享STM32模拟EEPROM的使用和优化很好的技术资料.zip
- Servlet 客户端 HTTP 请求详解.pdf
- 技术资料分享Stm32寄存器与库函数概览(摘自固件库使用手册)很好的技术资料.zip
- 一款可在线播放多个免费听书站的Android应用程序.zip
- AssertionFailedError如何解决.md
- java.HttpClient与网络请求(解决方案).md
- 技术资料分享STM32固件库使用手册的中文翻译版很好的技术资料.zip
- 非常好的oracle性能优化技术内幕详解100%好用.7z
- 已停产 适用于 Android 平台的 Rrich 文本编辑器 Android富文本编辑器,暂停维护.zip
- 非常好的MySQL技术内幕详解100%好用.7z
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功