feat: 流程设计器表单字段必填配置

3.x
ssc 3 years ago
parent 066828c91e
commit 0da53c668c
  1. 2
      src/views/plugin/workflow/components/custom-fields/wf-user-select/index.vue
  2. 39
      src/views/plugin/workflow/components/nf-dept-select/index.vue
  3. 20
      src/views/plugin/workflow/mixins/ex-form.js
  4. 30
      src/views/plugin/workflow/utils/index.js

@ -35,7 +35,7 @@ export default {
size: {
type: String,
default: () => {
return 'small'
return 'default'
}
},
readonly: {

@ -1,12 +1,15 @@
<template>
<el-dialog ref="nf-dialog"
<el-dialog
ref="nf-dialog"
class="nf-dialog"
v-model="visible"
title="部门选择"
width="60%"
:before-close="handleClose"
append-to-body>
<avue-crud v-if="isInit"
append-to-body
>
<avue-crud
v-if="isInit && visible"
:option="option"
:table-loading="loading"
:data="data"
@ -17,18 +20,15 @@
@selection-change="selectionList = $event"
@row-click="rowClick"
@on-load="onLoad"
@tree-load="treeLoad">
@tree-load="treeLoad"
>
</avue-crud>
<template #footer>
<span class="dialog-footer">
<el-button @click="handleClose"
size="default">取消</el-button>
<el-button type="primary"
@click="handleConfirm"
size="default">确定</el-button>
<el-button @click="handleClose" size="default">取消</el-button>
<el-button type="primary" @click="handleConfirm" size="default">确定</el-button>
</span>
</template>
</el-dialog>
</template>
<script>
@ -161,14 +161,19 @@ export default {
this.$refs.crud.toggleSelection([row])
},
changeDefaultChecked() {
this.selectionClear()
// this.selectionClear()
if (this.defaultChecked) {
const checks = this.defaultChecked.split(",")
if (checks.length > 0) {
setTimeout(() => {
checks.forEach(c => {
const row = this.findRow(this.data, c)
if (row) this.$refs.crud.toggleRowSelection(row, true)
let row = this.findRow(this.data, c)
if (!row) {
row = this.selectionList.find(d => d.id == c) //
}
if (row && this.$refs.crud) this.$refs.crud.toggleRowSelection(row, true)
})
}, 500)
}
}
},
@ -189,12 +194,18 @@ export default {
this.$axios.get(this.url, { params: param }).then(res => {
this.data = this.getAsVal(res, this.props.data) || []
this.loading = false
this.changeDefaultChecked()
})
},
treeLoad(tree, treeNode, resolve) {
const parentId = tree.id;
this.$axios.get(this.url, { params: { parentId } }).then(res => {
resolve(this.getAsVal(res, this.props.data) || []);
const list = this.getAsVal(res, this.props.data) || []
resolve(list)
const parent = this.findRow(this.data, parentId)
parent.children = list
this.changeDefaultChecked()
})
},
getAsVal(obj, bind = '') {

@ -18,9 +18,12 @@ import defaultValues from './default-values.js'
import Print from '../utils/print.js'
import Watermark from '../utils/watermark.js'
import { versionCompare } from '../utils/index.js'
import { mapGetters } from 'vuex'
import { version } from '@nutflow/nf-design-elp'
export default {
mixins: [defaultValues],
computed: {
@ -89,7 +92,7 @@ export default {
}
})
},
// 根据可读可写,过滤avue column
// 根据可读可写,过滤column
filterAvueColumn(column, taskForm, isExForm = false, props = {
label: 'label',
prop: 'prop'
@ -103,6 +106,9 @@ export default {
const values = []
const vars = []
const versionFlag106 = version && versionCompare(version, '1.0.6')
column.forEach(col => {
let c = taskForm.find(s => s.id == col[props.prop])
if (c && c.readable) {
@ -144,6 +150,18 @@ export default {
})
}
col.display = true
// 处理字段必填
let required = false
if (versionFlag106) { // 1.0.6及版本以下,required默认为true
required = true
} else { // 1.0.7流程设计器表单配置支持required属性
required = c.required
}
if (!required && col.rules) {
const index = col.rules.findIndex(c => c.required)
if (index != -1) col.rules.splice(index, 1)
}
} else {
col.display = false
}

@ -0,0 +1,30 @@
/**
* 判断版本号v2是否小于等于v1
*/
export const versionCompare = (v1, v2) => {
if (!v1 || !v2) return true
let v1Arr = v1.split('.')
let v2Arr = v2.split('.')
const len = Math.max(v1Arr.length, v2Arr.length)
// 调整两个版本号位数相同
while (v1Arr.length < len) {
v1Arr.push('0')
}
while (v2Arr.length < len) {
v2Arr.push('0')
}
// 循环判断每位数的大小
for (let i = 0; i < len; i++) {
const num1 = parseInt(v1Arr[i])
const num2 = parseInt(v2Arr[i])
if (num1 > num2) {
return false
} else if (num1 < num2) {
return true
}
}
return true
}
Loading…
Cancel
Save