# sagacloud-admin > A Vue.js project ## Build Setup ```bash npm install npm install vuex axios element-ui echarts font-awesome npm install less less-loader node-sass sass-loader --save-dev # serve with hot reload at localhost:8080 npm run dev # build for production with minification npm run build # build for production and view the bundle analyzer report npm run build --report ``` ## 项目结构说明 #### 目录结构 ``` │ .editorconfig # 格式化配置,修改缩进为2 │ index.html # 修改页面title │ package.json # 包 │ README.md # 说明文档 │ ├─build # 不变 │ ├─config │ dev.env.js # 开发环境变量 │ index.js # 设置代理 │ prod.env.js # 生产环境变量 │ ├─src │ ├─api # 业务逻辑api, http的请求都放在这里 │ │ |─framework.js # 框架预留接口,实现登录,权限校验等功能 │ │ └─httputils.js # http 工具类 │ ├─assets # 静态资源, 替换logo图片 │ ├─components # 业务相关组件 │ ├─data # 业务相关静态数据 │ │ menus.js # 菜单数据 │ ├─demo # Demo主目录 │ │ │ demo-menus.js # Demo按钮 │ │ │ demo-routes.js # Demo路由 │ │ └─views # Demo页面 │ ├─framework # 框架主目录 │ │ ├─components # 业务无关组件 │ │ │ │ │ ├─demo # Demo主目录 │ │ │ │ demo-menus.js # Demo按钮 │ │ │ │ demo-routes.js # Demo路由 │ │ │ └─views # Demo页面 │ │ │ │ │ ├─layout # 框架主目录 │ │ │ layout-store.js # 框架状态定义 │ │ │ Login.vue # 登录页 │ │ │ Main.vue # 框架主页 │ │ │ PageHeader.vue # 顶部栏 │ │ │ PageSidebar.vue # 左侧菜单栏 │ │ │ │ │ ├─plugins # 插件,业务无关 │ │ │ components.js │ │ ├─style # 样式 │ │ │ │ │ ├─template # 页面模板 │ │ │ TablePageTemplate.vue │ │ │ │ │ └─utils # 工具类,业务无关 │ │ │ ├─router # 主路由 │ │ index.js │ │ system.js │ │ │ ├─store # vuex │ │ index.js │ │ │ └─views # 业务页面主路径 | └─static .gitkeep ``` #### /api/framework.js 必须实现以下方法 ``` export default { // 路由拦截 routerBeforeEach: async function(to, from, next){}, // 获取左侧菜单数据 getMenus: function(permissions){}, // 跳转到登录页面 toLoginPage: function(){}, // 登录接口 login: function(username, password){} // 加载当前登录用户信息 loadUserInfo: function(){}, // 退出登录 toLogout: function(){} } ``` #### 工具类说明 /src/utils/basicutils.js ``` formatDateByPattern(date, pattern) // 日期格式化 indexInArray(arr, key, val) // 找出数组arr中第一个属性key的值等于val的元素的下标 itemInArray(arr, key, val) // 找出数组arr中第一个属性key的值等于val的元素 deleteInArray(arr, key, val) // 从数组中将属性key的值等于val的所有元素删除 ``` /src/api/httputils.js // 一般在服务端接口 API 中使用,不建议在别的地方使用,有授权标记 ``` getCookie(name) // 获取cookie值 getJson(url, params) // 发送GET请求 postJson(url, data) // 发送POST请求 ``` /src/utils/storage.js ``` set(key, value, fn) // 在浏览器缓存中设置数据, 如果value是对象会转化成json get(key, fn) // 在浏览器缓存中取出数据, 取出数据后会尝试js对象返回 remove(key) // 在浏览器缓存中删除数据 ``` #### 设置面包屑方法 ``` 在路由router中配置meta.breadcrumbs,在进入路由页面时会自动解析为面包屑 this.$store.dispatch('setBreadcrumb', [{ label: 'Demo' }, { label: 'Form' ]) this.$store.dispatch('setBreadcrumb', [{ label: 'Demo', path: '' }, { label: 'Form' , path: ''}]) ``` #### 上传管理器调用方法(上传较大文件时使用) ``` 在组件中引入Bus中央时间总线 Bus.$emit('openUploader', query, file) //添加文件到上传管理器中, query为参数, file为H5原生的文件对象 Bus.$on('fileAdded', () => {}) //文件选择后的回调 Bus.$on('fileSuccess', () => {}) //文件上传成功后的回调 ```