更多ruoyi-nbcio功能请看演示系统
gitee源代码地址
前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio
演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/
更多nbcio-boot功能请看演示系统
gitee源代码地址
后端代码: https://gitee.com/nbacheng/nbcio-boot
前端代码:https://gitee.com/nbacheng/nbcio-vue.git
在线演示(包括H5) : http://218.75.87.38:9888
1、原先脚本任务的vue2代码如下:
<template> <div style="margin-top: 16px"> <el-form-item label="脚本格式"> <el-input v-model="scriptTaskForm.scriptFormat" clearable @input="updateElementTask()" @change="updateElementTask()" /> </el-form-item> <el-form-item label="脚本类型"> <el-select v-model="scriptTaskForm.scriptType"> <el-option label="内联脚本" value="inline" /> <el-option label="外部资源" value="external" /> </el-select> </el-form-item> <el-form-item label="脚本" v-show="scriptTaskForm.scriptType === 'inline'"> <el-input v-model="scriptTaskForm.script" type="textarea" resize="vertical" :autosize="{ minRows: 2, maxRows: 4 }" clearable @input="updateElementTask()" @change="updateElementTask()" /> </el-form-item> <el-form-item label="资源地址" v-show="scriptTaskForm.scriptType === 'external'"> <el-input v-model="scriptTaskForm.resource" clearable @input="updateElementTask()" @change="updateElementTask()" /> </el-form-item> <el-form-item label="结果变量"> <el-input v-model="scriptTaskForm.resultVariable" clearable @input="updateElementTask()" @change="updateElementTask()" /> </el-form-item> </div> </template> <script> export default { name: "ScriptTask", props: { id: String, type: String }, data() { return { defaultTaskForm: { scriptFormat: "", script: "", resource: "", resultVariable: "" }, scriptTaskForm: {} }; }, watch: { id: { immediate: true, handler() { this.bpmnElement = window.bpmnInstances.bpmnElement; this.$nextTick(() => this.resetTaskForm()); } } }, methods: { resetTaskForm() { for (let key in this.defaultTaskForm) { let value = this.bpmnElement?.businessObject[key] || this.defaultTaskForm[key]; this.scriptTaskForm[key] = value } this.scriptTaskForm["scriptType"] = this.scriptTaskForm.script ? "inline" : "external" }, updateElementTask() { let taskAttr = Object.create(null); taskAttr.scriptFormat = this.scriptTaskForm.scriptFormat || null; taskAttr.resultVariable = this.scriptTaskForm.resultVariable || null; if (this.scriptTaskForm.scriptType === "inline") { taskAttr.script = this.scriptTaskForm.script || null; taskAttr.resource = null; } else { taskAttr.resource = this.scriptTaskForm.resource || null; taskAttr.script = null; } window.bpmnInstances.modeling.updateProperties(this.bpmnElement, taskAttr); } }, beforeUnmount() { this.bpmnElement = null; } }; </script>
2、修改成vue3的代码如下:
<template> <div style="margin-top: 16px"> <el-form-item label="脚本格式"> <el-input v-model="scriptTaskForm.scriptFormat" clearable @input="updateElementTask()" @change="updateElementTask()" /> </el-form-item> <el-form-item label="脚本类型"> <el-select v-model="scriptTaskForm.scriptType"> <el-option label="内联脚本" value="inline" /> <el-option label="外部资源" value="external" /> </el-select> </el-form-item> <el-form-item label="脚本" v-show="scriptTaskForm.scriptType === 'inline'"> <el-input v-model="scriptTaskForm.script" type="textarea" resize="vertical" :autosize="{ minRows: 2, maxRows: 4 }" clearable @input="updateElementTask()" @change="updateElementTask()" /> </el-form-item> <el-form-item label="资源地址" v-show="scriptTaskForm.scriptType === 'external'"> <el-input v-model="scriptTaskForm.resource" clearable @input="updateElementTask()" @change="updateElementTask()" /> </el-form-item> <el-form-item label="结果变量"> <el-input v-model="scriptTaskForm.resultVariable" clearable @input="updateElementTask()" @change="updateElementTask()" /> </el-form-item> </div> </template> <script lang="ts" setup> defineOptions({ name: 'ScriptTask' }) const props = defineProps({ id: String, type: String }) const defaultTaskForm = ref({ scriptFormat: '', script: '', resource: '', resultVariable: '' }) const scriptTaskForm = ref<any>({}) const bpmnElement = ref() const bpmnInstances = () => (window as any)?.bpmnInstances watch( () => props.id, () => { bpmnElement.value = bpmnInstances().bpmnElement nextTick(() => { resetTaskForm() }) }, { immediate: true } ) const resetTaskForm = () => { for (let key in defaultTaskForm.value) { let value = bpmnElement.value?.businessObject[key] || defaultTaskForm.value[key] scriptTaskForm.value[key] = value } scriptTaskForm.value.scriptType = scriptTaskForm.value.script ? 'inline' : 'external' } const updateElementTask = () => { let taskAttr = Object.create(null) taskAttr.scriptFormat = scriptTaskForm.value.scriptFormat || null taskAttr.resultVariable = scriptTaskForm.value.resultVariable || null if (scriptTaskForm.value.scriptType === 'inline') { taskAttr.script = scriptTaskForm.value.script || null taskAttr.resource = null } else { taskAttr.resource = scriptTaskForm.value.resource || null taskAttr.script = null } bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), taskAttr) } onBeforeUnmount(() => { bpmnElement.value = null }) </script>
3、效果图如下: