251 lines
11 KiB
HTML
251 lines
11 KiB
HTML
<!--#
|
|
layout("/layouts/platform.html"){
|
|
#-->
|
|
|
|
<style>
|
|
.design-dialog .el-dialog__body {
|
|
padding: 0;
|
|
}
|
|
</style>
|
|
|
|
<div id="app" v-cloak>
|
|
<guava>
|
|
<el-card shadow="never">
|
|
<search @search="doSearch">
|
|
<search-item label="流程名称">
|
|
<el-input v-model="pageForm.displayName" placeholder="请输入流程名称" clearable></el-input>
|
|
</search-item>
|
|
<search-item label="流程编码">
|
|
<el-input v-model="pageForm.name" placeholder="请输入流程编码" clearable></el-input>
|
|
</search-item>
|
|
<search-item label="流程分类">
|
|
<el-select v-model="pageForm.category" placeholder="请选择流程分类" style="width: 100%"
|
|
@change="doSearch" clearable>
|
|
<el-option v-for="item in categoryOptions" :label="item.name" :value="item.id" :key="item.id"></el-option>
|
|
</el-select>
|
|
</search-item>
|
|
<search-item label="是否部署">
|
|
<el-select v-model="pageForm.deployed" placeholder="请选择是否部署" style="width: 100%"
|
|
@change="doSearch" clearable>
|
|
<el-option label="全部" :value="null"></el-option>
|
|
<el-option label="已部署" :value="true"></el-option>
|
|
<el-option label="未部署" :value="false"></el-option>
|
|
</el-select>
|
|
</search-item>
|
|
</search>
|
|
</el-card>
|
|
|
|
<el-card shadow="never">
|
|
<table-tool>
|
|
<el-button type="primary" @click="onAdd" size="small" icon="el-icon-plus">新增</el-button>
|
|
</table-tool>
|
|
<el-table :data="tableData" @sort-change="pageOrder" style="width: 100%">
|
|
<el-table-column type="index" width="50px" label="序号" :index="indexMethod"></el-table-column>
|
|
<el-table-column prop="displayName" label="流程定义名称"></el-table-column>
|
|
<el-table-column prop="name" label="流程定义编码"></el-table-column>
|
|
<el-table-column prop="category" label="流程分类">
|
|
<template slot-scope="{row}">
|
|
{{categoryOptions.find(v=>v.id === row.category)?.name}}
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column prop="isDeployed" label="是否部署">
|
|
<template slot-scope="{row}">
|
|
<el-tag size="mini" v-if="row.isDeployed===1" type="success">是</el-tag>
|
|
<el-tag size="mini" v-else-if="row.isDeployed===0" type="info">否</el-tag>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="操作" fixed="right" width="450px">
|
|
<template slot-scope="{row}">
|
|
<el-button size="mini" type="primary" @click="onDesign(row)">设计</el-button>
|
|
</el-button>
|
|
<el-button size="mini" type="primary" @click="onEdit(row)">编辑</el-button>
|
|
<!-- v-if="row.isDeployed===0"-->
|
|
<el-button type="primary" size="mini" @click="onDeploy(row)">部署
|
|
</el-button>
|
|
<el-button type="danger" size="mini" @click="onDelete(row)">删除
|
|
</el-button>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
<!--#include("/layouts/pagination.html"){}#-->
|
|
</el-card>
|
|
</guava>
|
|
|
|
<el-dialog :title="formData.id ? '编辑' : '新增'" :visible.sync="dialogVisible" width="70%">
|
|
<el-form :model="formData" ref="formRef" label-width="120px">
|
|
<el-form-item label="流程定义名称" prop="displayName"
|
|
:rules="{ required: true, message: '请输入流程定义名称', trigger: 'blur' }">
|
|
<el-input v-model="formData.displayName" placeholder="请输入流程定义名称"></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="流程定义编码" prop="name"
|
|
:rules="{ required: true, message: '请输入流程定义编码', trigger: 'blur' }">
|
|
<el-input v-model="formData.name" placeholder="请输入流程定义编码"></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="流程分类" prop="category"
|
|
:rules="{ required: false, message: '请选择流程分类', trigger: 'change' }"
|
|
style="width: 100%">
|
|
<el-select v-model="formData.category" placeholder="请选择流程分类" clearable style="width: 100%">
|
|
<el-option v-for="item in categoryOptions" :key="item.id" :label="item.name"
|
|
:value="item.id"></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item label="电脑端发起地址" prop="instanceUrl">
|
|
<el-input v-model="formData.instanceUrl" placeholder="请输入电脑端发起地址"></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="手机端发起地址" prop="h5InstanceUrl">
|
|
<el-input v-model="formData.h5InstanceUrl" placeholder="请输入手机端发起地址"></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="电脑端查看地址" prop="instanceViewUrl">
|
|
<el-input v-model="formData.instanceViewUrl" placeholder="请输入电脑端发起地址"></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="手机端查看地址" prop="h5InstanceViewUrl">
|
|
<el-input v-model="formData.h5InstanceViewUrl" placeholder="请输入手机端发起地址"></el-input>
|
|
</el-form-item>
|
|
<el-form-item prop="picIcon" label="图片图标">
|
|
<file-upload
|
|
:value.sync="formData.picIcon"
|
|
:upload_number="1"
|
|
upload_mode="image"
|
|
upload_result_category="interval"
|
|
upload_result_type="url"
|
|
></file-upload>
|
|
</el-form-item>
|
|
<el-form-item label="图标" prop="icon">
|
|
<el-input v-model="formData.icon" placeholder="请输入图标"></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="说明" prop="description">
|
|
<text-editor v-model="formData.description"></text-editor>
|
|
</el-form-item>
|
|
</el-form>
|
|
<template #footer>
|
|
<el-button @click="dialogVisible = false">取消</el-button>
|
|
<el-button type="primary" @click="onSubmit">确定</el-button>
|
|
</template>
|
|
</el-dialog>
|
|
|
|
<el-dialog title="流程设计" :visible.sync="designVisible" fullscreen class="design-dialog">
|
|
<div style="height: calc(100vh - 55px); width: 100%">
|
|
<iframe v-if="designVisible" :src="designUrl" frameborder="0" height="100%"
|
|
style="height: 100%; width: inherit"></iframe>
|
|
</div>
|
|
</el-dialog>
|
|
|
|
</div>
|
|
|
|
<script nonce="${cspNonce!}">
|
|
new Vue({
|
|
el: "#app",
|
|
mixins: [initTableMixins],
|
|
data() {
|
|
return {
|
|
dialogVisible: false,
|
|
categoryOptions: [],
|
|
designVisible: false,
|
|
designUrl: null,
|
|
formData: {},
|
|
}
|
|
},
|
|
methods: {
|
|
onAdd() {
|
|
this.formData = {}
|
|
this.dialogVisible = true
|
|
},
|
|
onEdit(row) {
|
|
this.dialogVisible = true
|
|
this.formData = { ...row }
|
|
},
|
|
onSubmit() {
|
|
$.post("/flow/design/" + (this.formData.id ? "update" : "insert"), { design: JSON.stringify(this.formData) }).then(res => {
|
|
if (res.code === 0) {
|
|
this.$message.success(res.msg)
|
|
this.pageData()
|
|
this.dialogVisible = false
|
|
}
|
|
})
|
|
},
|
|
onDesign(row) {
|
|
this.designVisible = true
|
|
this.iframeLoaded()
|
|
this.designUrl = "/flow/design/designer?id=" + row.id
|
|
},
|
|
|
|
iframeLoaded() {
|
|
// iframe监听组件内设计器保存事件
|
|
window.onmessage = (event) => {
|
|
console.log(event)
|
|
if (event.data === "success") {
|
|
this.$message.success("保存成功")
|
|
this.designVisible = false
|
|
this.pageData()
|
|
} else if (event.data === "error") {
|
|
this.$message.error("保存失败")
|
|
}
|
|
}
|
|
},
|
|
|
|
onDeploy(row) {
|
|
this.$confirm("部署会生成新的流程定义版本,确定部署吗?", "提示", {
|
|
confirmButtonText: "确定",
|
|
cancelButtonText: "取消",
|
|
type: "warning"
|
|
}).then(() => {
|
|
this.$axios.post("/flow/design/deploy", { id: row.id }).then((res) => {
|
|
if (res.code === 0) {
|
|
this.$message.success(res.msg)
|
|
this.pageData()
|
|
}
|
|
})
|
|
})
|
|
},
|
|
|
|
onRedeploy(row) {
|
|
this.$confirm("重新部署会覆盖最新版流程定义,确定重新部署吗?", "提示", {
|
|
confirmButtonText: "确定",
|
|
cancelButtonText: "取消",
|
|
type: "warning"
|
|
}).then(() => {
|
|
this.$axios.post("/flow/design/redeploy", { id: row.id }).then((res) => {
|
|
if (res.code === 0) {
|
|
this.$message.success(res.msg)
|
|
}
|
|
})
|
|
})
|
|
},
|
|
|
|
onDelete(row) {
|
|
this.$confirm("您确定要删除吗", "提示", {
|
|
confirmButtonText: "确定",
|
|
cancelButtonText: "取消",
|
|
type: "warning"
|
|
}).then(() => {
|
|
this.$axios.post("/flow/design/delete", { id: row.id }).then((res) => {
|
|
if (res.code === 0) {
|
|
this.$message.success(res.msg)
|
|
this.pageData()
|
|
}
|
|
})
|
|
})
|
|
},
|
|
|
|
onView(row) {
|
|
},
|
|
|
|
listCategory() {
|
|
this.$axios.post("/flow/category/list").then((res) => {
|
|
if (res.code === 0) {
|
|
this.categoryOptions = res.data
|
|
}
|
|
})
|
|
},
|
|
},
|
|
created() {
|
|
this.pageData()
|
|
this.listCategory()
|
|
}
|
|
})
|
|
</script>
|
|
|
|
<!--#
|
|
}
|
|
#-->
|