vue2 项目构建 (上)
来源:互联网 发布:centos 移除文件 编辑:程序博客网 时间:2024/06/06 03:08
项目结构Config
1. dev.env.js
开发环境配置:
'use strict'// 合并配置const merge = require('webpack-merge')const prodEnv = require('./prod.env')module.exports = merge(prodEnv, { CONF_ENV: `"${process.env.CONF_ENV}"`, NODE_ENV: '"development"', // 接口地址 API_HOST: { workreport: '"/api_workreport"', file: '"http://pps.banggood.cn:8083"', wx_gateway: '"http://pps.banggood.cn:8099"' }})
2. prod.env.js
生产环境配置:
var config = { CONF_ENV: `"${process.env.CONF_ENV}"`, NODE_ENV: '"production"', API_HOST: { workreport: '"/"', file: '"http://pps.banggood.cn:8083"', wx_gateway: '"http://pps.banggood.cn:8099"' }}if (process.env.CONF_ENV === 'deploy') { config.API_HOST.workreport = '"https://m-workreport.banggood.cn"' config.API_HOST.file = '"https://finder.banggood.cn"' config.API_HOST.wx_gateway = '"https://wechat.banggood.cn"'}module.exports = config
3. index.js
'use strict'const path = require('path')var cookie = ''module.exports = { build: { env: require('./prod.env'), index: path.resolve(__dirname, '../dist/workreport-front-mobile/index.html'), assetsRoot: path.resolve(__dirname, '../dist/workreport-front-mobile'), assetsSubDirectory: 'static', assetsPublicPath: './', productionSourceMap: true, productionGzip: true, productionGzipExtensions: ['js', 'css'], bundleAnalyzerReport: process.env.npm_config_report }, dev: { env: require('./dev.env'), port: process.env.PORT || 8080, autoOpenBrowser: true, assetsSubDirectory: 'static', assetsPublicPath: '/', proxyTable: { '/api_workreport': { target: 'http://m.workreport.pps.banggood.cn:8082', changeOrigin: true, pathRewrite: (path, req) => path.replace('/api_workreport', ''), headers: { cookie } } }, cssSourceMap: false }}
项目Src
这里想先介绍一下项目所涉及到的一些工具utils:
1. apiFetch.js
这里的apifetch是基于axios封装的一套接口调用插件
import axios from 'axios'export default function apiFetcher (config) { const service = axios.create({ timeout: 20000, withCredentials: true, ...config })
// 暴露出来一些方法,以及需要的参数export function getReportTemplate ({beginDate, endDate, reportDateType, reportType} = {}) { return apiFetch({ url: '/report/template/getReportTemplate', method: 'post', data: { eqBeginDate: beginDate, eqEndDate: endDate, eqReportDateType: reportDateType, eqReportType: reportType } })}/* 然后从不同文件路径import {getReportTemplate} 使用*/getReportTemplate({ reportDateType: this.reportDateType, reportType: this.reportType }).then(res => { this.$vux.loading.hide() }).catch((e) => { console.error(e) this.$vux.loading.hide() })
2. datePicker.js
时间选择与格式化时间功能,思路是先做成年,转化成周,然后周赋值到月,定位当前周
/** * 获取整年的星期四 * @param year 传入如 2017 * @returns {Array} 星期四的数组 */function getOneYearDates (year) { let allDate = [] let theDay = new Date(year, 0, 1) let weekDay = theDay.getDay() let goDay = new Date(theDay.getFullYear(), theDay.getMonth(), theDay.getDate() + CUT_OFF_DAY - weekDay - 7) while (goDay.getFullYear() <= year) { if (goDay.getFullYear() === year) { allDate.push(goDay) } goDay = new Date(goDay.getFullYear(), goDay.getMonth(), goDay.getDate() + 7) } return allDate}
3. fileUpAndDownUtils.js / reportChangeUtils.js
上传与下载文件功能, 返回值false无法操作
// 控制文件的大小--单位 MB const fileSize = file.size / 1024 / 1024 if (fileSize > 100) { Vue.$vux.toast.show({ type: 'cancel', text: '文件大小不能超过 100MB !' }) return false }
// 控制上传文件的格式const fileExt = file.name.split('.').reverse()[0].toLowerCase().trim() const allowFileExt = ['xls', 'xlsx', 'wps', 'ppt', 'pptx', 'doc', 'docx', 'et', 'dps', 'txt', 'pdf', 'html', 'htm', 'hlp', 'dll', 'vsdx', 'xmind', 'md', 'chm', 'zip', 'rar', 'jar', 'psd', 'png', 'pic', 'jpg', 'ico', 'gif', 'bmp', 'eps', 'jpeg' ]
入口文件 main.js
初始化vue实例并使用需要的插件。
注:这里store,IconSvg引用是用的‘@/…’
import Vue from 'vue'import App from './App'import router from './router'import store from '@/store'import IconSvg from '@/components/icon-svg'Vue.use(IconSvg)Vue.config.productionTip = falsestore.dispatch('appInit') .then(() => { /* eslint-disable no-new */ new Vue({ el: '#app', router, store, render: h => h(App) }) }) .catch(() => {})
主组件 app.vue
所有页面,路由,组件都是在App.vue下进行切换的
<template> <div id="app"> <!-- 以解决其带来的 z-index 失效问题。--> <div v-transfer-dom> <loading :show="appLoading"></loading> </div> <!-- 在路由外层包keep-alive用来缓存组件,避免多次加载[search-list],减少性能消耗 --> <keep-alive :include="['search-list']"> <router-view/> </keep-alive> </div></template><script> import { ViewBox, Tabbar, TabbarItem, Loading, TransferDom } from 'vux' // 手机端点击 import FastClick from 'fastclick' export default { name: 'app', directives: { TransferDom }, components: { ViewBox, Tabbar, TabbarItem, Loading, TransferDom }, computed: { appLoading () { return this.$store.getters.appLoading } }, mounted () { FastClick.attach(document.body) } }</script><style lang="less"> @import '~vux/src/styles/reset.less';</style>
阅读全文
0 0
- vue2 项目构建 (上)
- vue2+webpack构建项目
- Vue2+VueRouter2+webpack 构建项目实战(三)配置路由,整俩页面先(上)
- Vue2+VueRouter2+webpack 构建项目实战(一)准备工作
- vue2.0新手发车(一):使用webpack构建项目
- Vue2+VueRouter2+webpack 构建项目实战(一)准备工作
- Vue2+VueRouter2+webpack 构建项目实战(一)准备工作
- Vue2+VueRouter2+webpack 构建项目实战(一)准备工作
- Vue2+VueRouter2+webpack 构建项目实战(一)准备工作
- vue2+webpack+router项目构建(详细步骤)-- 基础搭建
- Vue2+VueRouter2+Webpack+Axios 构建项目(一)基础知识概述
- Vue2+VueRouter2+webpack 构建项目实战
- Vue2+VueRouter2+webpack 构建项目总结
- 用webpack一步步构建Vue2项目 笔记
- Vue2+VueRouter2+webpack 构建项目实战(六)加入tab栏切换,拓展项目
- Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(三)认识项目所有文件
- Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(三)认识项目所有文件
- Vue2+VueRouter2+webpack 构建项目实战(三)配置路由,整俩页面(下)
- spring整合mybatis的几种配置方式
- vue 的学习心得
- 关于Android 手机 开机速度的优化
- mbedTLS中验证服务器证书
- DialogFragment 报错汇总
- vue2 项目构建 (上)
- 指针练习-19
- WPF仪表盘控件
- 宣传部视频编辑组孙诗月 2017.12.04-2017.12.08
- SLA实践部分总结
- Hibernate中对象的三种状态及相互转化
- 哈罗单车异军突起遭马化腾吐槽真相,智能出行跨界布局给想象力插上翅膀
- spring中注解方式实现声明式事务管理
- JSP学习报告