diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..86a7f7c --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,16 @@ +module.exports = { + printWidth: 120, + tabWidth: 4, + useTabs: false, + semi: true, + singleQuote: true, + quoteProps: 'as-needed', + jsxSingleQuote: false, + trailingComma: 'es5', + bracketSpacing: true, + bracketSameLine: false, + arrowParens: 'always', + htmlWhitespaceSensitivity: 'ignore', + vueIndentScriptAndStyle: true, + endOfLine: 'auto', +}; diff --git a/README.md b/README.md index 857a408..ac5e00b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ * @Author: ch * @Date: 2022-03-17 11:30:06 * @LastEditors: ch - * @LastEditTime: 2022-05-23 21:18:34 + * @LastEditTime: 2022-05-30 17:19:59 * @Description: file content --> # shopping-app @@ -10,12 +10,63 @@ 严选移动端 +## 技术架构 +- uniapp +- vue2 +- unicli + >打包构建工具 +- vuex + >状态管理 +- uni-simple-router + >路由管理,更加的贴近vue-router的路由管理器 +- uview-ui + >基础UI库 +- js-util-all + >基础工具类 +- webscoket + >IM通信 -## 公共方法utils + +## 规范约束 + +- 使用 VS Code 进行开发,并安装项目推荐的插件 +- 不允许修改 src 目录以外的(项目配置)文件 +- 有需要优化解决的问题记录到 TODO.md 文件中,包括技术方面的踩坑记录和业务方面的 BUG 记录 +- 按照当前项目结构进行功能开发,不允许随意改变项目文件结构 + + +## 项目结构 + +| SRC 目录 | 用途描述 | +| ---------- | ---------------------------- | +| common | 所有JS文件 | +| --api | API 接口定义 | +| --config | 项目内配置文件 | +| --dicts | 项目中的静态字典表 | +| --plugins | 全局插件 | +| --store | 数据状态模块 | +| --utils | 工具类库模块 | +| components | 自定义通用组件 | +| pages | 页面文件 | +| static | 存放应用的本地静态资源的目录 | + + + +## 开发须知 + +### 路由页面 +- 页面代码尽量做业务模块拆分,禁止出现大几百行上千行的页面文件 +- 页面业务模块应就在当前页面目录下创建module 不要放到src/components下 + + +### 工具类utils +- 项目集成js-util-all基础组件,不需要重复造轮子 - 公共方法统一放置utils文件夹内,可以按分类建方法文件 如:验证类verify.js 请求类request.js; - 所有公共方法采用大驼峰命名法 - 所有的方法都从index.js输出,引入时统一引入index,不允许直接引入方法文件 - 所有方法文件如果导出的是多个方法,不允许在定义方法时导出,必须在文件底部一一导出,并附上方法简单的注释 +- 方法头部必须有使用注释 + ``` js // 正确 import {Req, IsPhone} from '@/common/utils'; @@ -25,7 +76,17 @@ import {Req} from '@/common/utils/request'; import {IsPhone} from '@/common/utils/utils'; // 正确 +/** + * 判断是否为手机号 + * @param {String | Number} str 手机号 + * @return {Boolean} + */ const IsPhone = (str) => {....} +/** + * 判断是否为邮箱 + * @param {String} str 邮箱号 + * @return {Boolean} + */ const IsEmail = (str) => {....} export { // 判断手机号 @@ -39,14 +100,24 @@ export const IsPhone = (str) => {....} export const IsEmail = (str) => {....} ``` -## 组件 -- 请务必使用easycom模式引入第三方组件 -- 根目录的components 只放置真正的组件,某个页面的业务模块应该在pages的相应目录下新建components目录放置 -- 所有的自定义组件文件名以大驼峰命名,且在templet中使用也用大驼峰形式使用 +### 组件 +- 请务必使用easycom模式引入第三方组件 +- 所有的自定义组件文件名以大驼峰命名,且在templet中使用也用大驼峰形式使用 +- 组件分两种类型业务类型、UI功能类型,命名区分(Bsxxx:业务组件、Uixxx:UI功能组件) +- 页头写好使用注释props slot methods events -## 请求 -- 所有请求方法命名以(Api+请求类型+具体方) 法命名 +### 状态管理以及存储 + +- 每个功能模块都要对应一个数据状态管理模块 +- 必须通过 mutations 修改 state 中的数据 +- 接口调用及后续数据逻辑处理应在 actions 中进行,保证多处调用时行为统一 +- 使用本存储时必须与 vuex 结合使用,不允许直接在页面中操作本地存储; +- 所有存储 key 必须在 config 中 sotrageKey.js 中定义; + + +### 请求 +- 所有请求方法命名以(Api+请求类型+具体方法) 法命名 - 所有请求使用ToAsyncAwait 包裹 - 不允许使用try catch 和 then 处理返回结果 ``` js @@ -71,6 +142,47 @@ export const IsEmail = (str) => {....} } ``` -## 图片 +### 图片 - 按pages目录结果放置图片 -- 有公共使用的图片请放到static/common文件夹内 \ No newline at end of file +- 有公共使用的图片请放到static/common文件夹内 + + +### 样式相关 +- 样式命名方式采取BEM命名优先法则 +- 参考 src/styles/gobalVariables.module.less,颜色、字号、边距、圆角尽可能复用已有的变量 +- 没有特殊需求不允许写全局样式,stlye 标签必须加 scoped +- 没有特殊需求不允许定义或使用 ID 选择器、属性选择器 + + +## 代码库 +### 分支管理 +- 分支命名:特性/任务-日期-创建人;例如:fix/213-0505-ch +- 所有新开发功能或修复BUG应基于 prod 分支创建,未上线以提测的Bug则在原有开发分支上继续开发即可 +- 提测则将开发分支合并到功能分支,再将功能分支合并到 test 分支,严禁将 test 分支合并进其他任何分支 +- 测试通过后先将 beta 分支合并到功能分支解决冲突,再通过提 push request 通知负责人进行代码审查,审查通过后由负责人合并代码 +- 预发通过后先将 特性分支 分支合并到 beta 分支解决冲突,再将 beta 分支合并到 dev 分支,此操作只能由负责人进行 +- 解决冲突时如涉及其他开发者代码,应跟当事人确认无误后再合并; + + +### 提交代码 + +- 提交前确认项目能正常运行,改动部分功能正常 +- 严格遵循 eslint、prettier 代码规范 +- 严禁使用 git commit --no-verify -m "xxx" 强制提交代码 +- 规范提交信息 + + | 前缀 | 使用场景 | 示例 | + | -------- | ------------------------------ | -------------------------- | + | feat | 新增功能点、模块 | feat: 用户管理 | + | fix | 修复 BUG | fix: 用户管理分页异常 | + | doc | 文档、注释更新 | doc: README | + | style | 样式、不影响逻辑的代码格式更新 | style: 用户管理标题字号 | + | refactor | 重构功能点、模块 | refactor: 路由模块逻辑重构 | + | test | 测试 | test: 测试工具类 | + | revert | 撤回提交 | revert: 有文件漏提交 | + | build | 编译打包 | build: 编译用户管理 | + | merge | 合并分支 | merge: beta into dev | + | perf | 性能、体验、逻辑优化 | pref: 路由模块解析性能 | + | conf | 配置更新 | conf: 项目 base 路径 | + | chore | 其他 | chore: 其他 | + diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..6b77efc --- /dev/null +++ b/TODO.md @@ -0,0 +1,14 @@ + +# uni提供的请求方式使用不方便 + +# HBuild 打包繁琐 + 使用unicli改进自动化部署 +# 从不同页面进入购物车,要展示1级或2级页面样式的购物车 + +# flex布局对齐方式的兼容问题 diff --git a/src/common/config/test.js b/src/common/config/test.js deleted file mode 100644 index e69de29..0000000 diff --git a/src/manifest_old.json b/src/manifest_old.json deleted file mode 100644 index 972bd1e..0000000 --- a/src/manifest_old.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "name": "", - "appid": "", - "description": "", - "versionName": "1.0.0", - "versionCode": "100", - "transformPx": false, - "app-plus": { /* 5+App特有相关 */ - "usingComponents": true, - "splashscreen": { - "alwaysShowBeforeRender": true, - "waiting": true, - "autoclose": true, - "delay": 0 - }, - "modules": { /* 模块配置 */ - - }, - "distribute": { /* 应用发布信息 */ - "android": { /* android打包配置 */ - "permissions": ["", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "" - ] - }, - "ios": { /* ios打包配置 */ - - }, - "sdkConfigs": { /* SDK配置 */ - - } - } - }, - "quickapp": { /* 快应用特有相关 */ - - }, - "mp-weixin": { /* 微信小程序特有相关 */ - "appid": "", - "setting": { - "urlCheck": false - }, - "usingComponents": true - }, - "mp-alipay" : { - "usingComponents" : true - }, - "mp-baidu" : { - "usingComponents" : true - }, - "mp-toutiao" : { - "usingComponents" : true - }, - "mp-qq" : { - "usingComponents" : true - } -}