factory_web/src/views/wf/transform.vue

235 lines
6.1 KiB
Vue

<template>
<el-container>
<el-header>
<div class="left-panel">
<el-button type="primary" icon="el-icon-plus" @click="handleAdd"></el-button>
</div>
</el-header>
<el-main class="nopadding">
<scTable
:data="list" ref="table"
row-key="id" stripe highlightCurrentRow hidePagination
>
<el-table-column label="#" type="index"></el-table-column>
<el-table-column label="ID" prop="id"></el-table-column>
<el-table-column label="名称" prop="name"></el-table-column>
<el-table-column label="定时器(单位秒)" prop="timer"></el-table-column>
<el-table-column label="源状态">
<template #default="scope">
<span v-if="scope.row.source_state_">{{scope.row.source_state_.name}}</span>
</template>
</el-table-column>
<el-table-column label="目的状态">
<template #default="scope">
<span v-if="scope.row.destination_state_">{{scope.row.destination_state_.name}}</span>
</template>
</el-table-column>
<el-table-column label="创建时间">
<template #default="scope">{{ scope.row.create_time }}</template>
</el-table-column>
<el-table-column
align="center"
label="操作"
width="220px"
>
<template #default="scope">
<el-button @click="handleEdit(scope.row)" link size="small">
编辑
</el-button>
<el-button
type="danger"
link
size="small"
@click="handleDelete(scope.row)"
>
删除
</el-button>
</template>
</el-table-column>
</scTable>
<el-dialog
v-model="dialogVisible"
:title="titleMap[type]"
>
<el-form
ref="Form"
:model="addForm"
label-width="130px"
label-position="right"
>
<el-form-item label="名称" prop="name">
<el-input v-model="addForm.name" placeholder="名称"/>
</el-form-item>
<el-form-item label="定时器(单位秒)" prop="timer">
<el-input v-model="addForm.timer" type="number" placeholder="0"/>
</el-form-item>
<el-form-item label="源状态" prop="source_state">
<el-select v-model="addForm.source_state" placeholder="请选择" style="width:100%">
<el-option
v-for="item in stateList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="目的状态" prop="destination_state">
<el-select v-model="addForm.destination_state" placeholder="请选择" style="width:100%">
<el-option
v-for="item in stateList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="条件表达式" prop="condition_expression">
<!--<vue-json-editor
style="width:100%"
v-model="addForm.condition_expression"
:showBtns="false"
:mode="'code'"
lang="zh"
@json-change="onJsonChange"
/>-->
<JsonEditorVue class="editorJson" v-model="addForm.condition_expression"/>
</el-form-item>
<el-form-item label="属性类型" prop="attribute_type">
<el-select style="width: 100%" v-model="addForm.attribute_type" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="是否校验必填" prop="field_require_check">
<el-switch v-model="addForm.field_require_check"></el-switch>
</el-form-item>
<el-form-item label="提交时调用" prop="on_submit_func">
<el-input v-model="addForm.on_submit_func" placeholder="提交时调用"/>
</el-form-item>
</el-form>
<div style="text-align: right">
<el-button type="danger" @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitHandle('Form')">确认</el-button>
</div>
</el-dialog>
</el-main>
</el-container>
</template>
<script>
// import vueJsonEditor from 'vue-json-editor'
import JsonEditorVue from 'json-editor-vue3'
export default {
name: "transform",
components: { JsonEditorVue },
data() {
return {
id: sessionStorage.getItem('jinYuWorkflowId'),
type: "add",
titleMap: {
add: '新增',
edit: '编辑',
},
editId: null,
list: [],
options: [{
value: 1,
label: '同意'
}, {
value: 2,
label: '拒绝'
}, {
value: 3,
label: '其他'
}],
addForm: {
name: '',
timer: '',
source_state: '',
destination_state: '',
condition_expression: {},
field_require_check: false,
},
stateList: [],
dialogVisible: false,
}
},
mounted() {
this.getList();
this.getStateList();
},
methods: {
onJsonChange (value) {
console.log('更改value:', value);
// 实时保存
this.addForm.condition_expression = value;
console.log(this.addForm.condition_expression)
},
// 检查json
checkJson(){
if (this.hasJsonFlag == false){
alert("json验证失败");
return false
} else {
alert("json验证成功");
return true
}
},
handleAdd() {
this.type = 'add';
this.dialogVisible = true;
},
handleEdit(row) {
this.type = 'edit';
this.editId = row.id;
this.dialogVisible = true;
this.addForm = Object.assign({}, row);
},
async getList() {
let res = await this.$API.wf.workflow.transitions.req(this.id);
this.list = res;
},
async getStateList() {
let res = await this.$API.wf.workflow.states.req(this.id);
console.log(res);
this.stateList = res;
},
async submitHandle(){
let that = this;
let res = null;
if (that.type === 'add') {
debugger;
that.addForm.workflow = this.id;
res = await that.$API.wf.transition.create.req(that.addForm);
} else {
res = await that.$API.wf.transition.update.req(that.editId, that.addForm);
}
if(res.err_msg){
that.isSaveing = false;
}else{
that.isSaveing = false;
that.dialogVisible = false;
that.getList();
}
this.$refs.Form.validate((valid) => {
if (valid) {
}
})
},
},
}
</script>
<style scoped>
.editorJson{
width: 100%;
}
</style>