* fix -- 修改获取流程节点信息接口(供前端渲染流程跟踪图着色使用) * fix -- 修复流程跟踪着色问题 * fix -- 采用ProcessViewer组件显示流程跟踪信息 * fix -- 整合表单设计代码 * fix -- 简易实现用户任务选择用户下拉框内容 * fix -- 修改项目介绍及sql文件 * del -- 移除未使用的文件 * fix -- 修复组件无法显示和修改的问题 * add -- 整合 Rtony/RuoYi-flowable 工作流 * add -- 添加process-designer流程设计插件 * !3 同步ruoyi-vue-plus更新 * !2 登录认证用户信息添加nickName字段(流程任务需要使用到)
83 lines
2.3 KiB
JavaScript
83 lines
2.3 KiB
JavaScript
import Vue from 'vue'
|
|
import { mergeRecursive } from "@/utils/ruoyi";
|
|
import DictMeta from './DictMeta'
|
|
import DictData from './DictData'
|
|
|
|
const DEFAULT_DICT_OPTIONS = {
|
|
types: [],
|
|
}
|
|
|
|
/**
|
|
* @classdesc 字典
|
|
* @property {Object} label 标签对象,内部属性名为字典类型名称
|
|
* @property {Object} dict 字段数组,内部属性名为字典类型名称
|
|
* @property {Array.<DictMeta>} _dictMetas 字典元数据数组
|
|
*/
|
|
export default class Dict {
|
|
constructor() {
|
|
this.owner = null
|
|
this.label = {}
|
|
this.type = {}
|
|
}
|
|
|
|
init(options) {
|
|
if (options instanceof Array) {
|
|
options = { types: options }
|
|
}
|
|
const opts = mergeRecursive(DEFAULT_DICT_OPTIONS, options)
|
|
if (opts.types === undefined) {
|
|
throw new Error('need dict types')
|
|
}
|
|
const ps = []
|
|
this._dictMetas = opts.types.map(t => DictMeta.parse(t))
|
|
this._dictMetas.forEach(dictMeta => {
|
|
const type = dictMeta.type
|
|
Vue.set(this.label, type, {})
|
|
Vue.set(this.type, type, [])
|
|
if (dictMeta.lazy) {
|
|
return
|
|
}
|
|
ps.push(loadDict(this, dictMeta))
|
|
})
|
|
return Promise.all(ps)
|
|
}
|
|
|
|
/**
|
|
* 重新加载字典
|
|
* @param {String} type 字典类型
|
|
*/
|
|
reloadDict(type) {
|
|
const dictMeta = this._dictMetas.find(e => e.type === type)
|
|
if (dictMeta === undefined) {
|
|
return Promise.reject(`the dict meta of ${type} was not found`)
|
|
}
|
|
return loadDict(this, dictMeta)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 加载字典
|
|
* @param {Dict} dict 字典
|
|
* @param {DictMeta} dictMeta 字典元数据
|
|
* @returns {Promise}
|
|
*/
|
|
function loadDict(dict, dictMeta) {
|
|
return dictMeta.request(dictMeta)
|
|
.then(response => {
|
|
const type = dictMeta.type
|
|
let dicts = dictMeta.responseConverter(response, dictMeta)
|
|
if (!(dicts instanceof Array)) {
|
|
console.error('the return of responseConverter must be Array.<DictData>')
|
|
dicts = []
|
|
} else if (dicts.filter(d => d instanceof DictData).length !== dicts.length) {
|
|
console.error('the type of elements in dicts must be DictData')
|
|
dicts = []
|
|
}
|
|
dict.type[type].splice(0, Number.MAX_SAFE_INTEGER, ...dicts)
|
|
dicts.forEach(d => {
|
|
Vue.set(dict.label[type], d.value, d.label)
|
|
})
|
|
return dicts
|
|
})
|
|
}
|