Dolphin 说明

系统规范

系统错误

编码规则

错误编码共5位:【大类(1)】【小类(1)】【明细(3)】

如:用户不存在:61001 => 【内部错误】【身份验证】【用户不存在】

成功提示信息: 10000
  • 登录成功:10001
数据库: 20000
第三方异常:30000
代码报错: 50000
内部错误:60000
  • 用户不存在:61001
  • 密码有误:61002
  • 二次验证失败:61003
  • 权限不足:61004
  • Token过期:61005
  • 员工已离职:61006
  • 无效的Token:61007
  • 无访问Token:61008

样式规范

css语言
  • 在vue中,统一使用scss
  • css命名使用BEM规范
  • html标签禁止使用style属性
  • scss中,尽量使用_constant.scss定义的颜色
  • 一个系统中,颜色不易多过,以使用$primaryColor为主

Vue 代码规范

属性要么全放一行,要么一个属性一行

属性申明顺序(按需)

  • class
  • slot
  • v-for 或 v-if(不可用于同一元素)
  • v-auth
  • v-model
  • 属性
  • 事件
  • ref名称

技术栈

前端

  • Vue(v2.6.12):https://cn.vuejs.org/v2/guide/index.html
  • Vue-router(v3.1.6):https://cn.vuejs.org/v2/guide/routing.html
  • Vuex(v3.1.3):https://cn.vuejs.org/v2/guide/state-management.html
  • Axios(v0.19.2):http://axios-js.com
  • Ant Design For Vue(v1.7.2):https://www.antdv.com/components/button-cn/
  • Vant(v2.8.3):https://vant-contrib.gitee.io/vant/#/zh-CN/

后端

  • NodeJs(v12.16.1):http://nodejs.cn/learn
  • Express(v4.16.1):https://www.expressjs.com.cn
  • Mongoose(v5.9.12):https://mongoosejs.com/docs/guide.html
  • Node-schedule(v1.3.2):https://www.npmjs.com/package/node-schedule
  • Socket.io(v2.3.0):https://www.npmjs.com/package/socket.io

数据库

  • mongoDB:https://www.mongodb.com/what-is-mongodb

server框架说明

基础说明

结构说明
  • 语言:NodeJs v14.x、数据库:mongo v4.x
  • 项目基于 Express v4.x 脚手架。
  • 安全验证:request header中添加token(目前为帐号id,下一版升级为带时间的加密id)
  • 路由扩展规则:在项目启动时对指定目录下自动读取,按文件/文件夹名进行创建路的规则
代码结构
    |-- server
    |-- app.js # 工程总入口
    |-- package.json # 工程依赖文件
    |-- bin # 启动目录
    |-- |-- server.js # 启动入口文件
    |-- |-- server.json # pm2 配置文件
    |-- |-- svc.conf
    |-- config # 配置信息
    |-- |-- DolphinConfig.js # Dolphin-server-framework 个性化配置文件
    |-- |-- config.js # 工程配置文件
    |-- |-- initData # 初始化数据
    |-- module # 模型配置
    |-- public # 静态目录
    |-- |-- exportExcel # 默认导出文件
    |-- |-- uploadFiles # 默认上传文件
    |-- routes # 路由层
    |-- service # 服务层
    |-- |-- ServiceMap.js # 服务层总入口
    |-- socket # web-socket
    |-- |-- RoomSocket.js 示例模块Socket 文件
    |-- |-- init.js # Socket 初始化文件
    |-- |-- common
    |-- |-- |-- BaseSocket.js # Socket父类,未完善,暂放在各工程中,以后移到dolphin-server-framework中
    |-- util # 工具类,供后台使用
    |-- |-- LDAP.js # 对接LDAP
    |-- |-- ThirdUtil.js # 统一第三方工具类,未完善,暂放在各工程中,以后移到dolphin-server-framework中
    |-- |-- job # 定时任务
    |-- |-- |-- JobMethod.js
    |-- |-- |-- JobUtil.js
    |-- |-- |-- syncWorkWeChat.js
    |-- |-- notice # 通知
    |-- |-- |-- AliSMS.js
    |-- |-- |-- NodeMailer.js
    |-- |-- |-- SmsYX.js
    |-- |-- |-- VoiceYX.js
    |-- |-- |-- alicloud-sms.js
基础配置
数据库配置
config.db = {
host : 'localhost',
port : '27017',
database : "wind_v4",
username : 'wind',
password : 'wind123',
};
服务端口
config.port = 19090;
项目统一路径
config.path = {};
config.path.publicPath = path.join(__dirname, '..', 'public'); //静态文件存放地址
config.path.uploadPath = path.join(config.path.publicPath, 'uploadFiles'); //上传文件存放地址
config.path.exportExcelPath = path.join(config.path.publicPath, 'exportExcel'); //导出文件存放地址
config.path.publicExportPath = '/exportExcel'; //导出文件地址对外相对地址

路由规则

基本规则
  • 对指定目录(/server/routes)下自动读取,按文件/文件夹名进行创建路的规则,如/server/routers/system/auth/user.js的前缀路由为/system/auth/user
  • 当访问路径能匹配到多个路由时,按路由加载顺序依次进入,当前一个路由函数调用next()时进入下一个路由
  • 自动读取按同级目录文件/文件夹名称顺序加载,数字从小到大 -> 字母a到z
  • 为方便控制路由先后加载顺序,对文件/文件夹名进行特殊处理,数字加_开头的部分仅用于文件/文件夹排序,不参与路由地址,即:/routes/0_login.js的前缀路由为/login
  • 特殊处理:/routes/1_index.js的前缀路由为/,以对大多数请求进行统一处理
模块路由
  • 模块路由都统一继承公共路由(BaseRouter | BaseListRouter | BaseTreeRouter)
  • 提供定义路由接口的方法
  • 每个模块的路由都默认提供CRUD等基础接口,在基于上述路由文件地址生成的前缀路由上,再加上定义的最末级路由,如:
  • 用户的查询,
  • 用户模块的路由文件地址是【/server/routers/system/auth/user】
  • 生成的路由前缀地址是【/system/auth/user】
  • 查询的末级路由【/find】
  • 最终用户查询的路由地址就是【/system/auth/user/find】
BaseRouter
路由工厂,根据规则自动生成express.router
routerMap
根据请求方式注册routerMap,将所需接口加入对应数组中
路由定义规则
  • 路由处理函数定义在类方法,路由方法名即为请求地址。
  • 路由方法名转换地址规则
  • 自动添加第一个”/“,分隔符”/“用”_”代替,比如report_byUser => /report/byUser
  • 路径参数,变量符”:”用”$”代替,比如save_$id => /save/:id
  • 路由方法返回值决定路由返回方式。公共方法只提供基本的返回JSON方式
  • 返回值为Promise时,公共方法会根据Promise的结果返回前台
  • 当resolve时,返回resUtil.success(result)
  • 当reject时,打印日志并返回resUtil.error(err)
  • 返回值为非Promise时,公共方法不做任何处理。如果需要特殊的返回时,比如文件下载、页面跳转等可以方法中直接使用res对象处理,return false就可以了。
  • 当需要修改基础路由时,直接重写类方法即可
  • 路由方法默认接收3个参数,req, res, next
统一返回格式
const response = {
success : true,
data : {},
rows : [],
total : 0,
message : "操作成功。",
errorCode : 0
};