You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

167 lines
3.3 KiB

2 years ago
<script>
2 years ago
import { deepCopy } from "@/utils"
2 years ago
import formBuilder from '@/utils/formBuilder'
2 years ago
import { PopupManager } from "element-ui/lib/utils/popup";
2 years ago
export default {
props: {
2 years ago
isFirstNode: {
type: Boolean,
default: true
},
2 years ago
readable: {
type: Array,
default: () => [],
required: true
},
writeable: {
type: Array,
default: () => [],
required: true
},
2 years ago
originalForm: {
type: Object,
default: () => ({}),
required: true
},
subForm: {
type: Map,
default: () => new Map()
},
2 years ago
device: {
type: String,
default: 'desktop',
required: true
2 years ago
},
2 years ago
fields: {
2 years ago
type: Array,
default: () => [],
required: true
2 years ago
},
fileList: {
type: Object,
default: () => ({}),
required: true
2 years ago
},
2 years ago
scriptContent: String,
rules: {
type: Object,
default: () => ({})
}
2 years ago
},
data() {
return {
2 years ago
zIndex: PopupManager.nextZIndex(),
isShowModal: false,
modalRender: () => {},
action: process.env.VUE_APP_BASE_API,
2 years ago
form: {},
2 years ago
file: {},
2 years ago
}
},
methods: {
2 years ago
async validate() {
return await (this.$refs['elForm'].validate())
}
2 years ago
},
computed: {
2 years ago
},
watch: {
info(newVal) {
let keys = newVal.map(i => i.name)
keys.forEach(key => {
this.form[key] = ''
})
},
originalForm(newVal) {
this.form = deepCopy(newVal)
2 years ago
},
fileList: {
handler:function(newVal) {
this.file = deepCopy(newVal)
},
immediate: true,
deep: true
2 years ago
},
scriptContent(newVal) {
if(newVal) {
try {
new Function(newVal).bind(this)()
} catch (err) {
console.error(err)
}
}
2 years ago
},
isShowModal(newVal) {
if(newVal) {
this.zIndex = PopupManager.nextZIndex()
}
2 years ago
}
2 years ago
},
render(h) {
2 years ago
const authFields = this.fields.map(field => ({
...field,
_readable: this.readable.indexOf(field.id) !== -1,
_writeable: this.writeable.indexOf(field.id) !== -1,
2 years ago
}))
2 years ago
authFields.unshift({
name: 'flow_title',
label: '工作名称',
type: 'text',
gs_x: 0,
gs_y: 0,
gs_width: 12,
gs_height: 1,
_readable: !this.isFirstNode,
_writeable: this.isFirstNode
})
return h('div',[
h('el-form', {
ref: 'elForm',
class: 'form',
props: {
model: this.form,
'label-position': 'right',
'label-width': '100px',
rules: this.rules,
'inline-message': true
}
},authFields.map(field => formBuilder.bind(this)(this.device, field, h))),
// 用于编写脚本中弹窗
h('vxe-modal',{
props: {
zIndex: this.zIndex,
value: this.isShowModal,
height: 640,
width: 860,
'esc-closable': true
},
on: {
input: e => {
this.isShowModal = e
}
}
}, [
this.modalRender.bind(this)(h)
])
])
},
2 years ago
created() {}
2 years ago
}
</script>
<style scoped lang="scss">
.form {
display: grid;
grid-template-columns: repeat(12, 1fr);
}
::v-deep .el-form-item {
2 years ago
border: 1px solid #dee2e6;
padding: 8px 12px;
margin: -1px 0 0 -1px;
2 years ago
}
2 years ago
::v-deep .el-form-item__content {
2 years ago
}
</style>