All posts by admin

会员卡销售管理系统交付

  1. 该系统的目的是用于记录会员卡的销售情况,用户角色分为4种,每种又分几个等级:
    1. 会员,分为金卡、铂金卡、黑卡
    2. 教师,分初级、中奖、高级、副校长
    3. 行政,初级、中级、高级
    4. 校长
  2. 每种角色下面的会员等级可以自由配置
  3. 分前端和后端,后端只能由校长和行政登录使用,其他等级的用户不能登录后台;前端只给会员和教师登录使用
  4. 每个等级的区别就是消费额度不同,达到对应的消费额度,自动提升会员的等级
  5. 销售额度包含自己的销售额和自己的团队成员的消费额
  6. 成员的意思就是自己推荐来的人就是自己的团队成员,团队只有一级,比如A推荐了B,B推荐了C,那么A的团队里只有B,B的团队里只有C
  7. 消费由后台进行登记,后台行政人员登记用户的消费情况:电话,姓名、推荐人、卡种、金额、订单号;行政人员登记后,需要由校长进行审核,审核通过则登记有效;校长登记的则不用审核
  8. 后台会配置每种会员卡的达标销售额度和提成情况,提成分两种提成配置,一是固定金额,比如销售一张金卡提成100块,一是配置比例,比如销售一张金卡提成销售额度的1%
  9. 消费登记有效后就需要记录推荐人(组长)的成交金额和提成情况
  10. 提成可以提现,提现由校长进行操作,登记提现的信息,提现成功后减少对应人员的能提成金额和记录提现信息

监狱系统20210311常规升级

劳动改造

  1. 服刑人员管理增加涉黑、涉恶专项查询功能
  2. 劳动定额完成情况增加涉黑、涉恶专项查询功能
  3. 重大更新:增加劳动工时定额与考核功能,可任意选择按产值考核还是按劳动工时考核

双控

  1. 双控监区领导登录看到的应巡检数是0的bug修复

MES

  1. 订单按单件流还是扎流进行生产由线组长在安排工序时确定
  2. 扎流可随时登记数量,并且需要线组长刷脸确认
  3. 记录下同一产品的工序安排,后续同样的产品工序安排时自动安排人员

Mysql incorrect string value

这是由于mysql字段的存储字符集存储不了,比如utf8中存储不了一些表情符号,比如微信上的昵称:abc🍃,解决办法就是存储要修改对应的编码字符集,与数据库的通讯链接也要修改对应的编码字符集

  1. 把对应字段的字符集修改成utf8mb4
  2. 同时把代码中数据库链接驱动中的字符集也修改成utf8mb4,比如用pdo需要设置 :SET NAMES utf8mb4

两者少一个都不行

gitlab 备份、升级与迁移

备份

gitlab-rake gitlab:backup:create

如果是putty远程连接服务器执行该命令,可能由于某些git库太大导致putty迟迟没有反应而导致链接中断,链接中断后该命令也会终止执行,所以可以通过nohup 来把命令脱离命令行执行:

nohup gitlab-rake gitlab:backup:create 2>&1 &

通过在nohup.out 中可以查看输出日志

备份成功后在/var/opt/gitlab/backups中会产生一个类似于1610804990_gitlab_backup.tar的文件,一定要确保backup完成在copy该文件,上面的nohup.out中最后几行是下面情况时,说明备份完成了:

done
Dumping uploads …
done
Creating backup archive: 1610804990_gitlab_backup.tar … done
Uploading backup archive to remote storage … skipped
Deleting tmp directories … rake aborted!
Don’t know how to build task ‘/var/opt/backlog.log’

(See full trace by running task with –trace)
done
Deleting old backups … skipping

恢复

gitlab-rake gitlab:backup:restore BACKUP=/var/opt/gitlab/backups/1610804990

注意backup中的文件名不是完整的1610804990_gitlab_backup.tar,而只是_gitlab_backup.tar的前面部分

迁移

可以用scp把备份文件上传到目标服务器,在目标服务器上执行:scp src_username@src_ip:/var/opt/gitlab/backups/1481529483_gitlab_backup.tar /var/opt/gitlab/backups

升级

gitlab升级不能一次性跨大版本升级,比如不能6.x升级到13.x,只能在一个major版本升到最高级别后在升级到下一个major版本(版本号格式:major.minor),官方给出来的升级顺序是:

https://docs.gitlab.com/ee/update/#upgrade-paths

但我从7.6.x 升级到13.7并没有完全按照这个顺序,基本规则是升级到当前major版本的最后一个版本后,再升级到下一个major的第一个版本,一次类推直到最新版本

每个版本的镜像可以从这里下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/

每次升级前,先stop服务

sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
sudo gitlab-ctl stop nginx
数据库不要stop,在安装时是需要备份数据库的,所以不能停

wget 下载好对应的rpm包后执行 rpm -Uvh 安装包

安装包会备份数据库部分,安装新版本,删除旧版本,升级成功收gitlab-ctl restart即可

车辆管理系统交付

  1. 管理后台、公司、用户三级用户
  2. 事故违章   
    •  车辆违章登记   
  3.  数据看板   
    •  今日花费   
    •  今日违章   
    •  使用中的车辆   
    •  车辆总数   
  4.  消息推送   
    •  广告推送   
    •  违章、年检、保养的消息推送提醒   
  5.  用户管理   
    •  所属公司   
    •  所属部门   
  6.  用车管理   
    •  用车登记   
    •  还车登记   
  7.  电子围栏   
  8.  系统配置   
    •  GPS设备管理   
    •  消息提醒设置   
  9.  组织部门管理   
  10.  费用管理   
  11.  车位管理   
    •  车位登记   
  12.  车辆保险年检   
  13.  车辆管理   
    •  车辆登记   
  14.  车辆轨迹管理   
  15.  驾驶员行为分析   

vue2 升级 vue3指南

注册全局组件

2.0:

Vue.component('UITreeBase', UITreeBase)

3.0:

const app = createApp(App)
// 作为全局组件避免交叉引用
app.component('UITreeBase', UITreeBase)

Vuex

import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
modules: {
design,
user
}
})

3.0:

import { createStore } from 'vuex'
export default createStore({
modules: {
design,
user
}
})

computed中的mapState

import { mapState } from 'vuex'
computed: {
…mapState({
sideBars: (state: any) => state.design.leftSidebars,
leftSidebarMinWidth: (state: any) => state.design.leftSidebarMinWidth,
pageScale: (state: any) => state.design.scale
})
}

3.0

const leftSidebarMinWidth = computed((ctx: any) => ctx.$store.state.design.leftSidebarMinWidth)
const leftSidebarWidth = computed({
get () {
return this.$store.state.design.leftSidebarWidth
},
set (v: number) {
this.$store.commit('updateState', { leftSidebarWidth: v })
}
})

setup中的this

import { ref, reactive, computed, watch, onMounted, getCurrentInstance } from 'vue'
const { ctx } = getCurrentInstance()

store

2.0 调用store是直接通过this.$store.commit/dispatch

3.0

import { useStore } from 'vuex'
const store = useStore()
store.commit('updateState', { rightSidebarIsOpen: v })


如果是要使用$store的话,需要在src目录下面创建一个shims-vux.d.ts文件,内容如下

import { Store } from 'vuex'
import { State } from './store'

declare module '@vue/runtime-core' {
  interface ComponentCustomProperties {
    $store: Store<State>
  }
}



// Vuex@4.0.0-beta.1 is missing the typing for `useStore`. See https://github.com/vuejs/vuex/issues/1736

declare module 'vuex' {
  export function useStore(key?: string): Store<State>
}

注意:.$store用法虽然能编译通过,但似乎并不能想期望的2.0那样工作;useStore()在setup里面调用,如果在方法里面调用,或则在computed的get,set里面调用useStore()返回的是undefined

$refs

2.0 直接用this.$refs.XXX引用

3.0 直接需要const refName = ref(), 然后setup中返回refName即可,refName就是ref=“refName”中的名字

$nextTick

import { nextTick } from 'vue'

Vue.component

2.x 动态注册组件

Vue.component(
name,
(resolve) => {
// console.log(`@/components/ui/${this.ui}_${this.uiVersion}/${this.uiconfig.type}.vue`)
require([`@/components/ui/${this.ui}_${this.uiVersion}/${this.uiconfig.type}.vue`], resolve)
}
)

Vue.config.productionTip

3.x 已删除该选项

Write operation failed: computed value is readonly

这个警告有几种情况:

  1. 对应computed没有定义set, 定义对应的set即可
  2. store中使用了[]语法,比如state[name] = value:

监狱生产管理系统双控升级

  • 15607 点检看板增加管控层级显示
  • 15584 点检时数据库操作会报错误,导致程序崩溃
  • 15583 P2双控看板统计数字不对;风控看板把对风险点巡检次数的统计修改为频率次数的统计
  • 15581 点检台账列表需要显示出风险等级及其数量,点检详情也需要显示出数量
  • 15580 点检台账详情、灭火器点检台账中,如果没有隐患,把责任人显示成点检者的名字
  • 15578 点检产生的记录应该和点检清单一致,对应在周期内已经点检的(不管是谁点检的),在同一个周期内再次点检时,不应该在记录中
  • 15566 分监区用户登录后,点检台账也需要能按人进行查询,默认查询自己的,但也可以查询同分监区下其他人的