【1.1 业务介绍】
【1.2 现状分析】
【3.1 方案调研】
3.1.1 部署方式
3.1.2 代码仓库整合
3.1.3 项目框架
3.1.4 系统权限
【3.2 架构设计】
【3.3 具体方案】
3.3.1 目录结构设计
├── root
│ ├── mocks
│ ├── public
│ ├── src
│ │ ├── api
│ │ │ ├── apiA // 存储 A 业务请求接口
│ │ │ ├── apiB // 存储 B 业务请求接口
│ │ │ ├── apiC // 存储 C 业务请求接口
│ │ │ ├── baseHttp.js // 封装基础请求
│ │ │ ├── ARequest.js // A业务的公共处理,请求header和响应code码等处理
│ │ │ ├── BRequest.js // B业务的公共处理,请求header和响应code码等处理
│ │ │ ├── CRequest.js // C业务的公共处理,请求header和响应code码等处理
│ │ │ ├── DRequest.js // D业务的公共处理,请求header和响应code码等处理
│ │ ├── assets
│ │ │ ├── icons // icon内容
│ │ ├── common
│ │ │ ├── config
│ │ │ ├── styles // 一些公共的样式
│ │ ├── components // 公共组件
│ │ ├── directive // 自定义指令
│ │ ├── layout //公共布局
│ │ ├── router
│ │ │ ├── a.js // 对应a应用
│ │ │ ├── b.js // 对应b应用
│ │ │ ├── c.js // 对应c应用
│ │ │ ├── index.js
│ │ ├── store
│ │ │ ├── modules
│ │ │ ├── getters.js
│ │ │ ├── index.js
│ │ ├── utils
│ │ ├── views
│ │ │ ├── a // a 业务文件
│ │ │ ├── b // b 业务文件
│ │ │ ├── c // c 业务文件
│ │ ├── main.js
│ │ └── App.vue
│ ├── env
│ ├── package.json
3.3.2 应用类型判断
let APPLICATION_TYPE = 'a'
let host = window.location.host;
// 维护域名列表,包含测试和线上环境
const A_HOST = ['a.com','a_pre.com']
const B_HOST = []
const C_HOST = []
const D_HOST = []
if(A_HOST.includes(host)){
APPLICATION_TYPE = 'a'
}else if(B_HOST.includes(host)){
APPLICATION_TYPE = 'b'
}else if(C_HOST.includes(host)){
APPLICATION_TYPE = 'c'
}else if(D_HOST.includes(host)){
APPLICATION_TYPE = 'd'
}
// 挂载全局
window._APPLICATION_TYPE = APPLICATION_TYPE
3.3.3 路由设计
根据全局的 APPLICATION_TYPE 字段识别
let router=[
{
path: '/home',
component: Layout,
meta: { title: '首页', icon: 'el-icon-s-grid', alwaysShow: true },
redirect: '/home',
children: [
{
path: '/home',
component: () => import('@/views/home/index'),
name: 'home',
meta: { title: '首页', icon: ''}
}
]
}
]
let RouterApi={'a':'/api1','b':'/api2','c':'api3'}
api.get(RouterApi[APPLICATION_TYPE])
component='各个应用文件名'+接口返回路径
import dRouter from './d.json'
if(APPLICATION_TYPE==='d'){
router=dRouter
}
3.3.4 环境变量设计
# .env.pruduction
# a 业务
VUE_APP_A_BASEURL = ''
# b 业务
VUE_APP_B_BASEURL = ''
# c 业务
VUE_APP_C_BASEURL = ''
# d业务
VUE_APP_D_BASEURL = ''
3.3.5 请求设计
// 公共请求封装 baseHttp.js
export const createHttp = (baseUrl, successFun = () => {}, errorFun = () => {}, requestInterceptor = () => {}) => {
const http = axios.create({
baseURL: baseUrl,
timeout: 5 * 60 * 1000,
withCredentials: true
})
// http request 拦截器
http.interceptors.request.use(
async config => {
await requestInterceptor(config)
return config
},
err => {
return Promise.reject(err)
}
)
// http response 拦截器
http.interceptors.response.use(successFun, errorFun)
return http
}
//A业务基础请求
function requestInterceptor(){
// A系统公共请求参数处理...
}
function successFn(){
// A系统公共响应结果处理 统一新增
}
function errorFn(){
// A共异常处理 包括code码等情况
}
export default createHttp(baseUrl,successFn,errorFn,requestinterceptor)
// A业务请求调用
ARequest.get(url,{params:data})
//B业务请求调用
BRequest.post(url,{params:data})
3.3.6 权限和登录
3.3.7 公共函数设计
3.3.8 脚手架配置设计
3.3.9 Vuex store设计
3.3.10 页面引用设计
原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/89304.html