# niuxie
**Repository Path**: hao_ting/niuxie
## Basic Information
- **Project Name**: niuxie
- **Description**: niuxie
- **Primary Language**: JavaScript
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2019-04-23
- **Last Updated**: 2020-12-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 斗牛移动端H5项目
>### 环境
>
>1. Installing ```npm i```
>2. 出现运行异常时: `npm rebuild node-sass` 结束后重新运行
---
>## 项目新结构说明
> - 文件结构
> - `src/views` 视图、页面 级组件,路由
> - `src/comps` 模版组件
> - `src/utils` 工具库,包括接口
> - 命名约定
> - **css类名** 使用 *kebab-case*;
> - **.vue** 的文件名使用 *PascalCase*, 文件中 的 **name** 与文件名同名或按业务链路的名(如 `/views/mall/Home.vue`的 **name** 为 *MallHome*);
> - **router** 中, **component** 定义变量名使用 *PascalCase*, 路由的 **name** 命名使用 *camelCase*;
> - **utils** 中的工具名 使用 *PascalCase*;
>
>
---
---
---
>### 项目结构概述
>
>1. 项目开发基于 **src** 目录下
>2. 子目录包括 **assets**(资源),**common**(公共工具),**components**(组件),**store**(数据仓储)
>3. 子目录概述:
> * **assets**资源目录,存放项目引用的资源,如图片、图标等;
> * **common**公共工具目录,存放全局使用的配置、工具、路由、外部组件等;
> * **components**组件目录,包含页面组件与模版组件,全局性质和通用模版组件放在 **components/templates** 子目录中,其他按业务区分文件夹存放;
---
>### 代码规范
>
>1. 使用Eslint作为代码规范指导, vscode 需要配置才可以.vue文件也使用eslint [如何优雅地使用 VSCode 来编辑 vue 文件](https://www.clarencep.com/2017/03/18/edit-vue-file-via-vscode/)
>2. 命名规则: *文件夹名*、*.js文件名*、*.css文件名* 使用 *camelCase(驼峰命名)*,*组件名/Vue单文件组件* 使用 *PascalCase(帕斯卡命名,驼峰命名后首字母大写)*,*css类名* 全小写以连字符分隔
>3. 使用 '===' 代替 '==' 作比较
>4. 使用 单引号 '' 而不是双引号 "" 作为引号使用
>5. 尽量不要使用英文或拼音缩写, 一定要使用英文的完整单词来命名, 不要怕文件名太长. 并且使用驼峰命名变量名称.
>6. 无用的代码尽量删除,而不是注释掉.既然有了git版本控制,尽量保留无用代码.这是一个大原则.
>7. 注意大小写问题, windows下不区分大小写, 例如 .Vue 扩展名在windows下编译成功, 但在linux下编译报错, 文件名使用驼峰, 扩展名一律使用小写.
>8. 使用 git config core.ignorecase false [让git提交区分大小写](http://yijiebuyi.com/blog/e96eccc4e6f7168e0ce92fa9c79f0d23.html). 然后需要删除该文件, git rm readme.md. git提交. 然后在添加该文件,再提交才可以改变文件名大小写.
---
>### git 代码提交规范
>
>#### 参考 [GitHub Flow](http://scottchacon.com/2011/08/31/github-flow.html)
>#### 参考 [git-flow 的工作流程](https://www.git-tower.com/learn/git/ebook/cn/command-line/advanced-topics/git-flow)
>
>---
>
>1. 项目提交时添加说明约定:**A-** 添加/新增,**U-** 更新/修改/优化,**D-** 删除/移除,**F-** 修复bug/异常/问题,**M-merge [分支名]** 合并分支,如:优化路由延迟加载时,提交说明文言为 `U-延迟加载路由`
>2. 分支 master 为生产分支, 可以部署的正式无BUG的代码. 分支 develop 为开发分支.
>3. 分支 feature-开头的为新功能或项目的分支, 基于 develop 分支创建.
>4. 分支 hn/zsj 为个人分支, 建议个人远程分支使用user-前缀开头. 例如user-hn, user-zsj. 以后个人分支尽量不要上传到远程gitlab上, 除非需要把该分支分享给其他人,或需要发布merge request时.
>5. 每次开发,需要先在自己本地已 develop 或 feature 为基础新建开发本地分支. 然后新写的代码提交到该本地分支. 最后通过发起MR或直接合并到develop或feature分支上.
---
>### 项目开发约定
>
>1. 每个业务页添加路由时必须准确定义路由名,会用于网页标题
>2. 业务页路由扩展数据说明:
>```
> meta:{
> hideMenu: Boolean(是否隐藏底部菜单,可无,true时必须),
> tab: String(路由所对应的底部菜单标识,必须),
> b2cTab: String(路由所对应的b2c部分顶部菜单标识,b2c模块路由必须)
> }
>```
>
>3. 每个 **v-for** 遍历时必须添加绑定属性 **key**,可用index做key的值
>4. div元素内不要直接有文本,文本样式重置不带div标签
>5. **common**下工具添加在 **util.js** 中并由其导出使用
>6. 业务接口的js文件中,应当在顶部声明一个键值对象以列举当前业务所有接口的请求地址
>7. *全局变量window及其属性字段*(如`document`、`loacalStorage`等)使用时,必须添加`window.`约束,若当前作用域有使用相同全局变量 *超过一次* 的,在当前作用域顶部使用 **常量定义** 后使用
---
>### Vue模板与CSS代码规范
>
>1. 模板中尽量不要使用太过复杂的v-if, v-else 逻辑,方便阅读. 复杂的逻辑判断可以放到js代码里面, 最后在模板中使用计算的结果变量判断.
>2. 文字 html 标签尽量放到 html模板中, 把文字都列出来, 而不要把文字作为变量放到js里面. 例如 状态1 状态2 而不要写成 {{typeText}}
>3. 所有与控制样式有关的变量全部增加'css'前缀. 例如:在模板中使用 列表
>
>```
>data()
> {
> return {
> css : {
> isShowGroupList
> }
> }
> }
>```
>
>4. 每个业务页私有样式必须在 **style** 标签上添加 **scoped** 属性约束
>5. 书写css样式时,不需要添加浏览器前缀兼容,框架已通过 autoprefixer 自动补充
>6. 使用的mint-ui的样式重置时,必须统一添加在 *reset-ui.css* 中,除非单独的有特殊样式修改加在当前页面私有样式中
>7. 绝对定位的样式设置层级**z-index**时,①从当前页面最低级**0**开始计算,若无其他层级提升,**z-index**应设置为**9**以内,②若要设置层级高出*底部菜单或顶部导航*时,以*底部菜单或顶部导航*的**99**开始计算,递增1,否则不得超过**99**
>8. 使用vw/vh单位替代rem单位 [vw相比rem,在实际开发中究竟有多大区别?](https://www.zhihu.com/question/37179916)
---
>### 接口请求
>
>1. 通过路径`common/util`工具引入请求函数。
>2. 请求方式包括:
> * HttpGET:`GET(url: any, params: any)`;
> * HttpPOST:`POST(url: any, params: Object|Array|Undefined)`;
>3. **GET**请求参数传入时,若接口地址为`/api/a/b/[参数]`,则参数以 *单个字符串值* 传入;若接口地址参数为**query参数**形式(?param1=val1¶m2=val2...),则参数以 *键值对象* 传入。
>4. **POST**请求参数类型必须仅为`Object(null)|Array|Undefined`。
---
>### 一些全局的Vue组件介绍
>
>1. 后退:通用模版 **v-back**,使用方式 ````,提供后退操作
>2. 分享钩子:``this.initShare({type:Number,info:Object})``,**type**参数(Number,分享类型:0资讯、1商城、2其他,不传默认2),**info**参数(Object,分享数据,``info={title:分享标题,desc:分享描述,img:分享图标/图片}``) ~~通用模版 **v-share**,使用方式 ````, **url**属性(String,必须,分享的路径), **isdark**属性(Boolean,可无,默认false,图标颜色true时为黑色)~~
>3. 头部:通用模版 **v-header**,使用方式 ``自定义内容``,**showback**属性(Boolean,可无,默认为true,是否显示后退按钮),**bg**属性(String,可无,默认为'dark',可供选择的值有 *['dark 深色','light 浅色','tran 透明']* ),通过 **自定义内容** 定制不同头部
>4. 提示:``this.toast(msg,icon)``,**msg**参数(String,必须,提示内容),**icon**参数(String,可无,自定义icon图标类名,若传值则提示位于屏幕中心)
>5. 警示框:``this.alert(msg,callback)``,**msg**参数(String,必须,内容),**callback**参数(Function,可无,关闭的回调函数)
>6. 确认框:``this.confirm(options)``,以对象形式传参,**msg**参数(String,必须,确认提示信息),**okText**参数(String,可无,确认按钮文本,默认为'确定'),**cancelText**参数(String,可无取消按钮文本,默认为'取消'),**ok**参数(Function,可无,确认操作后的回调函数),**cancel**参数(Function,可无,取消操作后的回调函数)
>7. 列表:通用模版 **v-list**,使用方式 ``列表项``,**load-handle**属性(Function,必须,下拉刷新的函数,回调参数传入当前模块DOM),**more-handle**属性(Function,必须,加载更多的函数,回调参数传入当前模块DOM),**more-handling**属性(Boolean,可无,默认为false,是否正在加载更多,使用该属性可防止加载时出现一次滚动多次调用加载更多函数),**isend**属性(Boolean,可无,默认为false,已无更多数据时是否禁用加载更多)
>8. ProductUnit模板 productType:不传值默认推荐商品,1:鬼市产品 ,2:品牌商品
>9. 页面含有底部导航栏的 在页面最外层添加class=“.page-footer” 底部footer固定高度50 可以采用公共样式
>10. 延迟渲染:````,**delay**属性(Number,可选,延迟的时间,单位毫秒,默认/最小值为30),**loaded**(Function,可选,延迟渲染后的回调函数)
>11. 跳转搜索结果页面使用 `this.$store.dispatch('confirOption', {data:set,type:type})` 参数 set可以是{}也可以是指定的值 例如 set.brandid='',参数type可以不传,可以参照
### 在linux Centos 7 上运行 npm run build
1. prerender-spa-plugin 库依赖于 puppeteer 但 puppeteer 在centos7上有问题 [解决方法](https://github.com/GoogleChrome/puppeteer/issues/391)
2. 注意文件名大小写问题. 例如在windows上 .Vue 和 .vue 都可以运行.但在 linux 上无法运行.
---
> ## [∮项目发布流程(windows)](./docs/publish.md)