This commit is contained in:
shijing 2022-06-21 18:22:18 +08:00
parent 8c17ad4d8d
commit a0c61a83da
14 changed files with 1989 additions and 127 deletions

0
npm Normal file
View File

View File

@ -23,6 +23,7 @@
"tinymce": "6.0.3",
"vue": "3.2.36",
"vue-i18n": "9.1.10",
"vue-json-editor": "^1.4.3",
"vue-router": "4.0.15",
"vuedraggable": "4.0.3",
"vuex": "4.0.2",
@ -49,8 +50,7 @@
"APP_CONFIG": true
},
"extends": [
"plugin:vue/vue3-essential",
"eslint:recommended"
"plugin:vue/vue3-essential"
],
"parserOptions": {
"parser": "@babel/eslint-parser"
@ -62,7 +62,8 @@
"vue/no-unused-components": 0,
"vue/multi-word-component-names": 0,
"no-debugger": "off",
"no-console": "off"
"no-console": "off",
"no-trailing-spaces": "off"
}
},
"browserslist": [

View File

@ -29,7 +29,7 @@ export default {
delete: {
name: "删除部门",
req: async function(id){
return await http.delete(`${config.API_URL}/system/employee/${id}/`);
return await http.delete(`${config.API_URL}/system/dept/${id}/`);
}
}
},
@ -233,4 +233,36 @@ export default {
}
}
},
postrole: {
list: {
url: `${config.API_URL}/system/post_role/`,
name: "获取岗位列表",
req: async function(data){
return await http.get(this.url, data);
}
},
create: {
url: `${config.API_URL}/system/post_role/`,
name: "新增岗位",
req: async function(data){
return await http.post(this.url,data);
}
},
/*update: {
name: "更新岗位",
req: async function(id, data){
return await http.put(
`${config.API_URL}/system/post_role/${id}/`,
data
);
}
},*/
delete: {
name: "删除岗位",
req: async function(id){
return await http.delete(`${config.API_URL}/system/post_role/${id}/`);
}
}
},
}

286
src/api/model/wf.js Normal file
View File

@ -0,0 +1,286 @@
import config from "@/config"
import http from "@/utils/request"
export default {
workflow: {
list: {
url: `${config.API_URL}/wf/workflow/`,
name: "工作流列表",
req: async function(data){
return await http.get(this.url, data);
}
},
item: {
name: "工作流详情",
req: async function(id){
return await http.get( `${config.API_URL}/wf/workflow/${id}/`);
}
},
create: {
url: `${config.API_URL}/wf/workflow/`,
name: "新增工作流",
req: async function(data){
return await http.post(this.url, data);
}
},
update: {
name: "更新工作流",
req: async function(id, data){
return await http.put(
`${config.API_URL}/wf/workflow/${id}/`,
data
);
}
},
delete: {
name: "删除工作流",
req: async function(id){
return await http.delete(`${config.API_URL}/wf/workflow/${id}/`);
}
},
init: {
name: "新建工单初始化",
req: async function(id){
return await http.get( `${config.API_URL}/wf/workflow/${id}/init/`);
}
},
customfields: {
name: "工作流下的自定义字段",
req: async function(id){
return await http.get( `${config.API_URL}/wf/workflow/${id}/customfields/`);
}
},
states: {
name: "工作流下的状态节点",
req: async function(id){
return await http.get( `${config.API_URL}/wf/workflow/${id}/states/`);
}
},
transitions: {
name: "工作流下的流转规则",
req: async function(id){
return await http.get( `${config.API_URL}/wf/workflow/${id}/transitions/`);
}
}
},
ticket: {
list: {
url: `${config.API_URL}/wf/ticket/`,
name: "工单列表",
req: async function(data){
return await http.get(this.url, data);
}
},
ticketItem: {
name: "工单详情",
req: async function(id){
return await http.get(`${config.API_URL}/wf/ticket/${id}/`);
}
},
create: {
url: `${config.API_URL}/wf/ticket/`,
name: "新增工单",
req: async function(data){
return await http.post(this.url, data);
}
},
destorys: {
url: `${config.API_URL}/wf/ticket/destorys/`,
name: "批量物理删除",
req: async function(data){
return await http.post(this.url, data);
}
},
ticketAccept: {
name: "接单",
req: async function(id){
return await http.post(`${config.API_URL}/wf/ticket/${id}/accpet/`);
}
},
addNodeEnd: {
name: "加签完成",
req: async function(id,data){
return await http.post(`${config.API_URL}/wf/ticket/${id}/add_node_end/`,data);
}
},
addNode: {
name: "加签",
req: async function(id,data){
return await http.post(`${config.API_URL}/wf/ticket/${id}/add_node/`,data);
}
},
ticketClose: {
name: "关闭工单",
req: async function(id,data){
return await http.post(`${config.API_URL}/wf/ticket/{id}/close/`,data);
}
},
ticketDeliver: {
name: "转交工单",
req: async function(id,data){
return await http.post(`${config.API_URL}/wf/ticket/${id}/deliver/`,data);
}
},
ticketHandle: {
name: "处理工单",
req: async function(id,data){
return await http.post(`${config.API_URL}/wf/ticket/${id}/handle/`,data);
}
},
ticketRetreat: {
name: "撤回工单",
req: async function(id,data){
return await http.post(`${config.API_URL}/wf/ticket/${id}/retreat/`,data);
}
},
ticketFlowlogs: {
name: "工单流转记录",
req: async function(id){
return await http.get( `${config.API_URL}/wf/ticket/${id}/flowlogs/`);
}
},
ticketFlowSteps: {
name: "工单流转step, 用于显示当前状态的step图(线性结构)",
req: async function(id){
return await http.get( `${config.API_URL}/wf/ticket/${id}/flowsteps/`);
}
},
ticketTransitions: {
name: "获取工单可执行的操作",
req: async function(id){
return await http.get( `${config.API_URL}/wf/ticket/${id}/transitions/`);
}
},
dutyAgg: {
url: `${config.API_URL}/wf/ticket/duty_agg/`,
name: "工单待办聚合",
req: async function(data){
return await http.get(this.url, data);
}
},
ticketFlow: {
url: `${config.API_URL}/wf/ticketflow/`,
name: "工单日志",
req: async function(data){
return await http.get(this.url, data);
}
},
ticketFlowItem: {
name: "获取工单可执行的操作",
req: async function(id){
return await http.get( `${config.API_URL}/wf/ticketflow/${id}/`);
}
}
},
customfield:{
list: {
url: `${config.API_URL}/wf/customfield/`,
name: "字段列表",
req: async function(data){
return await http.get(this.url, data);
}
},
item: {
name: "字段详情",
req: async function(id){
return await http.get( `${config.API_URL}/wf/customfield/${id}/`);
}
},
create: {
url: `${config.API_URL}/wf/customfield/`,
name: "新增字段",
req: async function(data){
return await http.post(this.url, data);
}
},
update: {
name: "更新字段",
req: async function(id, data){
return await http.put(
`${config.API_URL}/wf/customfield/${id}/`,
data
);
}
},
delete: {
name: "删除字段",
req: async function(id){
return await http.delete(`${config.API_URL}/wf/customfield/${id}/`);
}
}
},
state:{
list: {
url: `${config.API_URL}/wf/state/`,
name: "状态列表",
req: async function(data){
return await http.get(this.url, data);
}
},
item: {
name: "状态详情",
req: async function(id){
return await http.get( `${config.API_URL}/wf/state/${id}/`);
}
},
create: {
url: `${config.API_URL}/wf/state/`,
name: "新增状态",
req: async function(data){
return await http.post(this.url, data);
}
},
update: {
name: "更新状态",
req: async function(id, data){
return await http.put(
`${config.API_URL}/wf/state/${id}/`,
data
);
}
},
delete: {
name: "删除状态",
req: async function(id){
return await http.delete(`${config.API_URL}/wf/state/${id}/`);
}
}
},
transition:{
list: {
url: `${config.API_URL}/wf/transition/`,
name: "流转列表",
req: async function(data){
return await http.get(this.url, data);
}
},
item: {
name: "流转详情",
req: async function(id){
return await http.get( `${config.API_URL}/wf/transition/${id}/`);
}
},
create: {
url: `${config.API_URL}/wf/transition/`,
name: "新增流转",
req: async function(data){
return await http.post(this.url, data);
}
},
update: {
name: "更新流转",
req: async function(id, data){
return await http.put(
`${config.API_URL}/wf/transition/${id}/`,
data
);
}
},
delete: {
name: "删除流转",
req: async function(id){
return await http.delete(`${config.API_URL}/wf/transition/${id}/`);
}
}
}
}

View File

@ -75,7 +75,7 @@
this.dialog.save = true;
this.$nextTick(() => {
if(type==='add'){
this.$refs.saveDialog.open(type).setData({})
this.$refs.saveDialog.open(type)
}else{
this.$refs.saveDialog.open(type).setData(row)
}

View File

@ -4,21 +4,25 @@
<el-container>
<el-header>
<div class="left-panel">
<div style="margin-right: 20px">岗位列表</div>
<el-button type="primary" icon="el-icon-plus" @click="add"></el-button>
<!-- <el-button type="danger" plain icon="el-icon-delete" :disabled="selection.length==0" @click="batch_del"></el-button> -->
</div>
</el-header>
<el-main class="nopadding">
<scTable ref="table" :apiObj="apiObj" row-key="id" stripe highlightCurrentRow @row-click="rowClick" :hidePagination="true">
<scTable ref="table" :apiObj="apiObj" row-key="id" stripe highlightCurrentRow @row-click="rowClick"
:hidePagination="true">
<el-table-column type="selection" width="50"></el-table-column>
<el-table-column label="" type="index"></el-table-column>
<el-table-column label="名称" prop="name" width="120"></el-table-column>
<el-table-column label="标识" prop="code" width="60"></el-table-column>
<el-table-column label="最短在岗(h)" prop="min_hour" width="100"></el-table-column>
<el-table-column label="最长在岗(h)" prop="max_hour" width="100"></el-table-column>
<el-table-column label="最短在岗(h)" prop="min_hour" width="100"></el-table-column>
<el-table-column label="最长在岗(h)" prop="max_hour" width="100"></el-table-column>
<el-table-column label="操作" fixed="right" align="right">
<template #default="scope">
<el-button type="warning" link size="small" @click="table_edit(scope.row)">编辑</el-button>
</template>
</el-table-column>
<template #default="scope">
<el-button type="warning" link size="small" @click="table_edit(scope.row)">编辑
</el-button>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
@ -26,77 +30,86 @@
<el-container>
<el-header>
<div class="left-panel">
<el-button type="primary" icon="el-icon-plus"></el-button>
<el-button type="danger" plain icon="el-icon-delete"></el-button>
<div style="margin-right: 20px">岗位关系</div>
<el-button type="primary" icon="el-icon-plus" @click="addPostRole"></el-button>
<el-button type="danger" plain icon="el-icon-delete" @click="delPostRole"></el-button>
</div>
</el-header>
<el-main class="nopadding">
<scTable ref="table2" :apiObj="apiObj2" row-key="id" stripe :hidePagination="true">
<el-table-column type="selection" width="50"></el-table-column>
<el-table-column label="提醒岗位" prop="post" width="150">
<el-table-column label="" type="index"></el-table-column>
<el-table-column label="权限范围" prop="filter_recipient" width="150"></el-table-column>
<el-table-column label="关联岗位" prop="filter_area_level" width="150"></el-table-column>
<el-table-column label="关联角色" prop="can_handle" width="80"></el-table-column>
<el-table-column label="操作" fixed="right" align="right">
<template #default="scope">
<el-switch v-model="scope.row.speaker_on" :disabled="true"></el-switch>
<el-button type="warning" link size="small" @click="postRoleDel(scope.row)">删除
</el-button>
</template>
</el-table-column>
<el-table-column label="岗位人员过滤" prop="filter_recipient" width="150"></el-table-column>
<el-table-column label="区域级别过滤" prop="filter_area_level" width="150"></el-table-column>
<el-table-column label="可处理" prop="can_handle" width="80"></el-table-column>
<el-table-column label="短信通知" prop="sms_enable" width="80"></el-table-column>
<el-table-column label="微信通知" prop="wechat_enable" width="80"></el-table-column>
</scTable>
</el-main>
</el-container>
</el-container>
<save-dialog v-if="dialog.save" ref="saveDialog" @success="handleSaveSuccess" @closed="dialog.save=false"></save-dialog>
<save-dialog v-if="dialog.save" ref="saveDialog" @success="handleSaveSuccess"
@closed="dialog.save=false"></save-dialog>
<save-role-dialog v-if="dialog.roleSave" ref="saveDialog" @success="handleSaveSuccess"
@closed="dialog.roleSave=false"></save-role-dialog>
</template>
<script>
import saveDialog from './post_form.vue'
import saveDialog from './post_form.vue'
import saveRoleDialog from './post_role_form.vue'
export default {
name: 'listSon',
components: {
saveDialog,
saveRoleDialog,
},
data() {
return {
apiObj: this.$API.system.post.list,
apiObj2: this.$API.ecm.notify_setting.list,
dialog:{
apiObj2: this.$API.system.postrole.list,
dialog: {
save: false,
roleSave: false,
},
selection: []
selection: [],
}
},
methods: {
rowClick(row){
rowClick(row) {
var params = {
event_cate: row.id
}
};
this.$refs.table2.reload(params)
},
//
add(){
this.dialog.save = true
add() {
this.dialog.save = true;
this.$nextTick(() => {
this.$refs.saveDialog.open()
})
},
//
table_edit(row){
this.dialog.save = true
table_edit(row) {
this.dialog.save = true;
this.$nextTick(() => {
this.$refs.saveDialog.open('edit').setData(row)
})
},
//
async batch_del(){
async batch_del() {
var confirmRes = await this.$confirm(`确定删除选中的 ${this.selection.length} 项吗?`, '提示', {
type: 'warning',
confirmButtonText: '删除',
confirmButtonClass: 'el-button--danger'
}).catch(() => {})
}).catch(() => {
})
if(!confirmRes){
if (!confirmRes) {
return false
}
@ -106,17 +119,42 @@ import saveDialog from './post_form.vue'
},
//
handleSaveSuccess(data, mode){
handleSaveSuccess(data, mode) {
//
if(mode=='add'){
if (mode == 'add') {
this.$refs.table.unshiftRow(data)
}else if(mode=='edit'){
} else if (mode == 'edit') {
this.$refs.table.updateKey(data)
}
//
// this.$refs.table.refresh()
}
},
addPostRole(){
this.dialog.roleSave = true;
this.$nextTick(() => {
this.$refs.saveDialog.open()
})
},
delPostRole(){
},
closed(){
this.dialog.save = false;
this.dialog.roleSave = false;
},
postRoleDel(){
this.$confirm(`确定删除选中的岗位关系吗?如果删除项中含有子集将会被一并删除`, '提示', {
type: 'warning'
}).then(() => {
const loading = this.$loading();
this.$refs.table.refresh();
loading.close();
this.$message.success("操作成功")
}).catch(() => {
})
},
}
}
</script>

View File

@ -6,52 +6,66 @@
destroy-on-close
@closed="$emit('closed')"
>
<el-form
:model="form"
:rules="rules"
:disabled="mode == 'show'"
ref="dialogForm"
label-width="100px"
>
<el-form-item label="名称" prop="name">
<el-input v-model="form.name" clearable></el-input>
</el-form-item>
<el-form-item label="标识" prop="code">
<el-input v-model="form.code" clearable></el-input>
</el-form-item>
<el-form-item label="触发" prop="trigger">
<el-select v-model="form.trigger">
<el-option
v-for="item in trigger_options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="区域过滤" prop="filter_area_level">
<el-select v-model="form.filter_area_level">
<el-option
v-for="item in filter_area_level_options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="音响开启" prop="speaker_on">
<el-switch v-model="form.speaker_on"></el-switch>
</el-form-item>
</el-form>
<el-form
:model="form"
:rules="rules"
ref="form"
label-width="100px"
label-position="left"
>
<el-form-item label="权限范围">
<el-select
v-model="form.data_range"
placeholder="请选择权限范围"
style="width: 100%"
>
<el-option
v-for="item in rangeOptions"
:key="item.id"
:label="item.value"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="关联岗位">
<el-select
v-model="form.post"
placeholder="请选择关联岗位"
style="width: 100%"
>
<el-option
v-for="item in postOptions"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="关联角色">
<el-select
v-model="form.role"
placeholder="请选择关联角色"
style="width: 100%"
>
<el-option
v-for="item in roleOptions"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="visible = false"> </el-button>
<el-button
v-if="mode != 'show'"
v-if="mode !== 'show'"
type="primary"
:loading="isSaveing"
@click="submit()"
> </el-button
>
>
</el-button>
</template>
</el-dialog>
</template>
@ -69,68 +83,57 @@ export default {
},
visible: false,
isSaveing: false,
//
form: {
speaker_on: true
},
//
rules: {
name: [{ required: true, message: "请输入" }],
},
filter_area_level_options: [
{
value: 10,
label: "办公生活区以上",
},
{
value: 20,
label: "生产一般区以上",
},
{
value: 30,
label: "生产重点区以上",
},
],
trigger_options: [
{
value: 10,
label: "监控",
},
{
value: 20,
label: "定位",
},
],
//
groups: [],
groupsProps: {
value: "id",
emitPath: false,
checkStrictly: true,
},
//
form: {
data_range: 10,
post: "",
role: "",
},
//
rules: {
name: [{required: true, message: "请输入姓名"}],
},
postProps: {
value: "id",
multiple: true,
checkStrictly: true,
},
roleOptions:[],
postOptions:[],
rangeOptions: [
{id: 10, value: "全部"},
// {id:20,value: ""},
{id: 30, value: "同级及以下"},
{id: 40, value: "本级及以下"},
{id: 50, value: "本级"},
{id: 60, value: "仅本人"},
],
};
},
mounted() {},
mounted() {
this.getPosts();
this.getRole();
},
methods: {
//
open(mode = "add") {
open(mode = "add"){
this.mode = mode;
this.visible = true;
return this;
},
//
async submit() {
var valid = await this.$refs.dialogForm.validate().catch(() => {});
var valid = await this.$refs.form.validate().catch(() => {});
if (!valid) {
return false;
}
this.isSaveing = true;
try {
var res;
if (this.mode == "add") {
res = await this.$API.ecm.event_cate.create.req(this.form);
} else if (this.mode == "edit") {
res = await this.$API.ecm.event_cate.update.req(this.form.id, this.form);
let res;
if (this.mode === "add") {
res = await this.$API.system.postrole.create.req(this.form);
} else if (this.mode === "edit") {
res = await this.$API.system.postrole.update.req(this.form.id, this.form);
}
this.isSaveing = false;
this.$emit("success", this.form, this.mode);
@ -147,6 +150,24 @@ export default {
setData(data) {
Object.assign(this.form, data);
},
getPosts(){
this.$API.system.post.list.req({page:0}).then(res=>{
if(res.err_msg){
this.$message.error(res.err_msg)
}else{
this.postOptions = res;
}
})
},
getRole(){
this.$API.system.role.list.req({page:0}).then(res=>{
if(res.err_msg){
this.$message.error(res.err_msg)
}else{
this.roleOptions = res;
}
})
},
},
};
</script>

View File

@ -276,6 +276,7 @@
add() {
this.type = "add";
this.limitedVisible = true;
this.addForm = {};
},
//
formEdit(row,index) {

View File

@ -0,0 +1,49 @@
<template>
<el-container>
<el-tabs style="width: 100%" type="border-card" v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="自定义字段" name="customField">
<field v-if="activeName==='customField'"></field>
</el-tab-pane>
<el-tab-pane label="状态" name="state">
<state v-if="activeName==='state'"></state>
</el-tab-pane>
<el-tab-pane label="流转" name="transform">
<transform v-if="activeName==='transform'"></transform>
</el-tab-pane>
</el-tabs>
</el-container>
</template>
<script>
import field from './field'
import state from './state'
import transform from './transform'
export default {
name: 'configuration',
components: {
field,
state,
transform
},
data() {
return {
workflow:null,
activeName:'customField',
}
},
mounted() {
this.workflow = sessionStorage.getItem('jinYuWorkflowId');
},
methods: {
handleClick(tab,event){
debugger;
console.log(tab,event);
},
}
}
</script>

275
src/views/wf/field.vue Normal file
View File

@ -0,0 +1,275 @@
<template>
<el-main class="nopadding">
<el-button type="primary" icon="el-icon-plus" @click="handleAdd"></el-button>
<el-table ref="table" :data="list" row-key="id" stripe>
<el-table-column type="index" width="50"/>
<el-table-column label="字段标识" prop="field_key"></el-table-column>
<el-table-column label="字段名称" prop="field_name"></el-table-column>
<el-table-column label="字段类型" prop="field_type"></el-table-column>
<el-table-column label="顺序ID" prop="sort"></el-table-column>
<el-table-column label="字段描述" prop="description"></el-table-column>
<el-table-column label="创建时间" prop="create_time"></el-table-column>
<el-table-column label="操作" fixed="right" align="right" width="120">
<template #default="scope">
<el-button type="text" size="small" @click="handleEdit(scope.row)">编辑</el-button>
<el-popconfirm title="确定删除吗?">
<template #reference>
<el-button type="text" size="small">删除</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<el-dialog
v-model="dialogVisible"
:title="titleMap[type]">
<el-form
ref="Form"
:model="addForm"
label-width="80px"
label-position="right"
:rules="rule">
<el-form-item label="字段标识" prop="field_key">
<el-input v-model="addForm.field_key" placeholder="字段标识"/>
</el-form-item>
<el-form-item label="字段名称" prop="field_name">
<el-input v-model="addForm.field_name" placeholder="字段名称"/>
</el-form-item>
<el-form-item label="字段描述" prop="description">
<el-input v-model="addForm.description" placeholder="字段描述"/>
</el-form-item>
<el-form-item label="占位符" prop="placeholder">
<el-input v-model="addForm.placeholder" placeholder="占位符"/>
</el-form-item>
<el-form-item label="展示标签" prop="field_type">
<el-select style="width: 100%" v-model="addForm.field_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="字段标签" v-show="addForm.field_type=='select'||addForm.field_type=='selects'">
<el-input v-model="addForm.label" placeholder="选项类型"/>
</el-form-item>
<el-form-item label="选项" v-show="addForm.field_type=='select'||addForm.field_type=='selects'">
<el-button @click.prevent="addDomain" style="border: none;">
<i class="el-icon-circle-plus-outline"></i>
<span style="font-size:14px;">添加</span>
</el-button>
<el-row v-for="(domain, $index) in choiceOption" :key='$index+1' style="margin-bottom: 10px">
<el-col :span="10">
<template>
<el-form-item label="id">
<el-input type="number" v-model="domain.id" auto-complete="off" placeholder="id为整数"></el-input>
</el-form-item>
</template>
</el-col>
<el-col :span="10">
<template>
<el-form-item label="name">
<el-input v-model="domain.name" auto-complete="off"></el-input>
</el-form-item>
</template>
</el-col>
<el-col :span="3" style="text-align: center" v-if="$index!==0">
<i
class="el-icon-remove-outline"
style="color: red;font-size: 16px;"
@click.prevent="removeDomain($index,'1')"
></i>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="顺序ID">
<el-input v-model="addForm.sort" type="number" placeholder="顺序"/>
</el-form-item>
<el-form-item label="默认值">
<el-input v-model="addForm.default_value" placeholder="默认值"/>
</el-form-item>
<el-form-item label="模板">
<el-input v-model="addForm.field_template" placeholder="你有一个待办工单:{title}"/>
</el-form-item>
<el-form-item label="是否隐藏">
<el-radio-group v-model="addForm.is_hidden">
<el-radio :label="false">显示</el-radio>
<el-radio :label="true">隐藏</el-radio>
</el-radio-group>
</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>
</template>
<script>
export default {
name: "field",
data(){
return{
id:sessionStorage.getItem('jinYuWorkflowId'),
list:null,
type: "add",
titleMap: {
add: '新增',
edit: '编辑',
show: '查看'
},
//
addForm: {
field_key: '',
field_name: '',
placeholder: '',
field_type: '',
sort: '',
label: 'name',
default_value: '',
field_template: '',
field_choice: [],
is_hidden:false,
},
//
rules: {
name: [
{required: true, message: '请输入工作流名称'}
]
},
choiceOption:[{id:null,name:""}],
labels:[{
label: '常规',
value: 'name'
},{
label: '名称|id',
value: 'name|id'
},{
label: '人员选择',
value: 'user'
}],
options: [{
value: 'string',
label: '文本'
}, {
value: 'int',
label: '整数'
}, {
value: 'float',
label: '小数'
}, {
value: 'date',
label: '日期'
}, {
value: 'datetime',
label: '日期时间'
}, {
value: 'select',
label: '单选'
}, {
value: 'selects',
label: '多选'
}, {
value: 'textarea',
label: '文本域'
},{
value: 'file',
label: '附件'
}],
editId:null,
dialogVisible:false,
}
},
mounted(){
this.list = [
{
id: "5001",
name: "scEcharts",
subtitle: "重新封装的Echarts暴露源对象",
state: "1",
type: "数据",
progress: 70,
user: "sss",
time: "2010-10-10"
},
{
id: "5002",
name: "scEditor",
subtitle: "Tinymce封装的富文本编辑器",
state: "2",
type: "表单",
progress: 40,
user: "sss",
time: "2010-10-10"
}
];
this.getList();
},
methods:{
//
addDomain() {
this.choiceOption.push({id:null,name:""})
},
//
removeDomain(index) {
this.choiceOption.splice(index, 1)
},
handleAdd(){
this.type = 'add';
this.dialogVisible = true;
},
submitHandle() {
let that = this,choiceArr = [];
debugger;
this.$refs.Form.validate((valid) => {
if (valid) {
if(that.choiceOption[0]&&that.choiceOption[0].name!==''&&that.choiceOption[0].name!==null&&that.choiceOption[0].name!==undefined){
that.choiceOption.forEach((item)=>{
let obj = new Object();
obj.id = parseInt(item.id);
obj.name = item.name;
choiceArr.push(obj);
})
}
that.addForm.field_choice = choiceArr;
that.isSaveing = true;
let res = null;
if (that.type === 'add') {
debugger;
that.addForm.workflow = this.id;
res = that.$API.wf.customfield.create.req(that.addForm);
} else {
res = that.$API.wf.customfield.update.req(that.editId, that.addForm);
}
if(res.err_msg){
this.$message.error(res.err_msg)
}else{
that.isSaveing = false;
that.limitedVisible = false;
that.$refs.table.refresh();
}
}
})
},
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.getCustomfields.get(this.id);
console.log(res);
this.list = res;
},
},
}
</script>
<style scoped>
</style>

372
src/views/wf/state.vue Normal file
View File

@ -0,0 +1,372 @@
<template>
<el-main class="nopadding">
<el-button type="primary" icon="el-icon-plus" @click="handleAdd"></el-button>
<el-table ref="table" :data="list" row-key="id" stripe>
<el-table-column type="index" width="50"/>
<el-table-column label="名称" prop="name"></el-table-column>
<el-table-column label="是否隐藏">
<template #default="scope">
<span v-if="scope.row.is_hidde"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="顺序ID" prop="sort"></el-table-column>
<el-table-column label="类型">
<template #default="scope">
<el-tag effect="plain" v-if="scope.row.type==0">
普通类型
</el-tag>
<el-tag effect="plain" v-if="scope.row.type==1">
初始状态
</el-tag>
<el-tag effect="plain" v-if="scope.row.type==2">
结束状态
</el-tag>
</template>
</el-table-column>
<el-table-column label="参与人类型">
<template #default="scope">{{ options_[scope.row.participant_type] }}</template>
</el-table-column>
<el-table-column label="创建时间" prop="create_time"></el-table-column>
<el-table-column label="操作" fixed="right" align="right" width="120">
<template #default="scope">
<el-button type="text" size="small" @click="handleEdit(scope.row)">编辑</el-button>
<el-popconfirm title="确定删除吗?">
<template #reference>
<el-button type="text" size="small">删除</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<el-dialog
v-model="dialogVisible"
:title="titleMap[type]"
>
<el-form
ref="Form"
:model="addForm"
label-width="100px"
label-position="right"
:rules="rule"
>
<el-form-item label="名称" prop="name">
<el-input v-model="addForm.name" placeholder="名称"/>
</el-form-item>
<el-form-item
label="是否隐藏"
prop="is_hidden"
label-width="120px"
>
<el-switch v-model="addForm.is_hidden"></el-switch>
</el-form-item>
<el-form-item label="状态顺序" prop="sort">
<el-input v-model="addForm.sort" type="number" placeholder="状态顺序"/>
</el-form-item>
<el-form-item label="状态类型" prop="type">
<el-select style="width: 100%" v-model="addForm.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="enable_retreat"
label-width="120px"
>
<el-switch v-model="addForm.enable_retreat"></el-switch>
</el-form-item>
<el-form-item label="参与者类型" prop="participant_type">
<el-select style="width: 100%" v-model="addForm.participant_type" placeholder="请选择" @change="typeChange">
<el-option
v-for="item in typeoptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="参与者" prop="participant" v-if="addForm.participant_type==1">
<el-select style="width: 100%" v-model="participant" placeholder="请选择参与者">
<el-option v-for="item in staffs" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="参与者" prop="participant" v-if="addForm.participant_type==2">
<el-select style="width: 100%" v-model="participants" multiple placeholder="请选择参与者">
<el-option v-for="item in staffs" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="参与者" prop="participant" v-if="addForm.participant_type==7">
<el-select style="width: 100%" v-model="participant" placeholder="请选择字段">
<el-option v-for="item in fieldList" :key="item.id" :label="item.field_name"
:value="item.field_key">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="分配方式" prop="participant" v-if="addForm.participant_type==2">
<el-select style="width: 100%" v-model="addForm.distribute_type" placeholder="请选择分配方式">
<el-option label="主动接单" value="1"></el-option>
<el-option label="直接处理" value="2"></el-option>
<el-option label="随机分配" value="3"></el-option>
<el-option label="全部处理" value="4"></el-option>
</el-select>
</el-form-item>
<el-form-item label="角色" prop="participant" v-if="addForm.participant_type==4">
<el-select style="width: 100%" v-model="participants" multiple placeholder="请选择角色">
<el-option v-for="item in roles" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="过滤策略" prop="participant" v-if="addForm.participant_type==4">
<el-select style="width: 100%" v-model="addForm.filter_policy" placeholder="请选择过滤策略">
<el-option label="无" value="0"></el-option>
<el-option label="和工单同属以及上级部门" value="1"></el-option>
<el-option label="和创建人同属以及上级部门" value="2"></el-option>
<el-option label="和上步处理人同属以及上级部门" value="3"></el-option>
</el-select>
</el-form-item>
<el-form-item label="代码选择" prop="participant" v-if="addForm.participant_type==9">
<el-select style="width: 100%" v-model="participants" placeholder="请选择代码">
<el-option v-for="item in codes" :key="item.func" :label="item.name" :value="item.func">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="抄送给" prop="participant">
<el-select style="width: 100%" v-model="addForm.participant_cc" multiple placeholder="请选择抄送给谁">
<el-option v-for="item in staffs" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="字段状态">
<el-button @click="addWordStateChange">添加修改</el-button>
<el-row v-for="(item,$index) in stateChange" :key="item+$index" style="margin-top: 2px">
<el-col :span="11">
<el-select style="width: 100%" v-model="item.name" placeholder="请选择字段">
<el-option v-for="item in fieldList" :key="item.id" :label="item.field_name"
:value="item.field_key">
</el-option>
</el-select>
</el-col>
<el-col :span="1" style="height: 1px;"></el-col>
<el-col :span="8">
<el-select style="width: 100%" v-model="item.value" placeholder="请选择状态">
<el-option
v-for="item in state_fields"
:label="item.label"
:value="item.value"
:key="item.value"
></el-option>
</el-select>
</el-col>
<el-col :span="2" style="text-align: center" v-if="$index!==0">
<i
class="el-icon-remove-outline"
style="color: red;font-size: 16px;"
@click.prevent="removeStateChange($index)"
></i>
</el-col>
</el-row>
</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>
</template>
<script>
export default {
name: "state",
data() {
return {
id: sessionStorage.getItem('jinYuWorkflowId'),
list: null,
type: "add",
titleMap: {
add: '新增',
edit: '编辑',
show: '查看'
},
participant: '',
participants: [],
roles: [],
staffs: [],
stateChange: [],
fieldList: [],
//
addForm: {
name: '',
is_hidden: false,
sort: '',
type: '',
participant_cc: [],
enable_retreat: false,
participant_type: 0,
filter_policy: 0,
distribute_type: '2',//
state_fields: {}//
},
//
rules: {
name: [
{required: true, message: '请输入工作流名称'}
]
},
options_: {
"0": '无处理',
"1": '个人',
"2": '多人',
"4": '角色',
"6": '脚本',
"7": '工单的字段',
"9": '代码获取',
},
options: [{
value: 0,
label: '普通类型'
}, {
value: 1,
label: '初始状态'
}, {
value: 2,
label: '结束状态'
}],
typeoptions: [{
value: 0,
label: '无处理'
}, {
value: 1,
label: '个人'
}, {
value: 2,
label: '多人'
}
, {
value: 4,
label: '角色'
}
, {
value: 6,
label: '脚本'
}
, {
value: 7,
label: '工单的字段'
}
, {
value: 9,
label: '代码获取'
}],
state_fields:[
{
value: 1,
label: '只读'
},{
value: 2,
label: '必填'
},{
value: 3,
label: '可选'
},{
value: 4,
label: '隐藏'
},
],
editId: null,
dialogVisible: false,
}
},
mounted() {
debugger;
this.id=sessionStorage.getItem('jinYuWorkflowId');
this.getList();
this.getUsers();
this.getRole();
this.getField();
},
methods: {
//
addWordStateChange() {
this.stateChange.push({name: '', value: ''})
},
//
removeStateChange(index) {
this.stateChange.splice(index, 1)
},
//
async getUsers(){
let staffs = await this.$API.system.user.get({page:0});
this.staffs = staffs;
},
//
async getRole(){
let roles = await this.$API.system.role.get({page:0});
this.roles = roles;
},
//
async getField(){
let fieldList = await this.$API.wf.getCustomfields.get(this.id);
this.fieldList = fieldList;
},
handleAdd() {
this.type = 'add';
this.dialogVisible = true;
},
submitHandle() {
let that = this;
debugger;
this.$refs.Form.validate((valid) => {
if (valid) {
let state_fields = {};
if (this.stateChange.length > 0) {
for (let i = 0; i < this.stateChange.length; i++) {
state_fields[this.stateChange[i].name] = this.stateChange[i].value;
}
}
this.addForm.state_fields = state_fields;
this.addForm.participant = this.addForm.participant_type === 1 ? this.participant : this.participants;
that.isSaveing = true;
let res = null;
if (that.type === 'add') {
that.addForm.workflow = this.id;
res = that.$API.wf.stateAdd.post(that.addForm)
} else {
res = that.$API.wf.stateEdit.put(that.editId, that.addForm);
}
if(res.err_msg){
that.isSaveing = false;
}else{
that.isSaveing = false;
that.dialogVisible = false;
that.getList();
}
}
})
},
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.getWorkflowState.get(this.id);
console.log(res);
this.list = res;
},
},
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,326 @@
<!--
<template>
<el-container>
<el-header>
<div class="left-panel">
<el-button type="primary" icon="el-icon-plus" @click="handleAdd"></el-button>
</div>
<div class="right-panel">
<div class="right-panel-search">
<el-input v-model="search.keyword" placeholder="工单名称" clearable></el-input>
<el-button type="primary" icon="el-icon-search" @click="upsearch"></el-button>
</div>
</div>
</el-header>
<el-main class="nopadding">
<el-tabs v-model="pageForm.category" type="card" @tab-click="handleClick">
<el-tab-pane label="待处理" name="duty"></el-tab-pane>
<el-tab-pane label="我处理" name="worked"></el-tab-pane>
<el-tab-pane label="我发起" name="owner"></el-tab-pane>
<el-tab-pane label="抄送我" name="cc"></el-tab-pane>
</el-tabs>
<el-table
v-loading="listLoading"
:data="list"
fit
stripe
style="width: 100%"
>
<el-table-column label="工单标题" min-width="100" prop="title">
</el-table-column>
<el-table-column label="当前状态" min-width="100">
<template #default="scope">
<el-tag>{{states[scope.row.act_state]}}</el-tag>
</template>
</el-table-column>
<el-table-column label="进行状态" min-width="100">
<template #default="scope">
<span v-if="scope.row.state_.type==0">{{scope.row.state_.name}}</span>
<span v-else>{{scope.row.state_.name}}</span>
</template>
</el-table-column>
<el-table-column label="类型" min-width="100">
<template #default="scope">
{{scope.row.workflow_.name}}
</template>
</el-table-column>
<el-table-column label="创建时间" min-width="100" prop="create_time">
</el-table-column>
<el-table-column align="center" label="操作">
<template #default="scope">
<el-link
v-if="scope.row.state_.distribute_type===1&&scope.row.participant_type===2"
type="danger"
@click="handleGetTicket(scope)"
>
接单
</el-link>
<el-link
v-if="(scope.row.act_state===1||scope.row.act_state===3)&&scope.row.participant_type!==2&&scope.row.state_.type===0"
type="primary"
@click="handleDetail(scope)"
>
处理
</el-link>
<el-link
v-if="scope.row.state_.type===1&&userId===1"
type="danger"
@click="handleClose(scope,'2')"
>
关闭
</el-link>
&lt;!&ndash;如果state_.retreat为可退回则显示撤回按钮 state_.type==1处于草稿状态 &ndash;&gt;
<el-link
v-if="scope.row.state_.enable_retreat&&userId===scope.row.create_by&&scope.row.state_.type!==1"
type="danger"
@click="handleClose(scope,'1')"
>
撤回
</el-link>
<el-link
type="primary"
@click="handleShow(scope)"
>
详情
</el-link>
<el-link
type="success"
@click="handleDelete(scope)"
>
删除
</el-link>
<el-link
type="success"
@click="handlePicture(scope)"
>
查看流程图
</el-link>
<el-link
type="success"
@click="handleLogs(scope)"
>
工单日志
</el-link>
</template>
</el-table-column>
</el-table>
<el-pagination
background
@current-change="handleCurrentChange"
:current-page.sync="pageForm.page"
:page-size="100"
layout="prev, pager, next, jumper"
:total="10">
</el-pagination>
</el-main>
</el-container>
<el-dialog title="新增工单" v-model="limitedVisible" :width="600">
<el-form :model="addForm" :rules="rules" ref="addForm" label-width="100px" label-position="left">
<el-form-item label="名称" prop="name">
<el-input v-model="addForm.title" clearable></el-input>
</el-form-item>
<el-form-item label="工作流" prop="workflow">
<el-select v-model="addForm.workflow" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="limitedVisible=false" > </el-button>
<el-button type="primary" :loading="isSaving" @click="submitHandle()"> </el-button>
</template>
</el-dialog>
</template>
<script>
export default {
name: 'ticket',
data() {
return {
pageForm: {
page: 1,
page_size: 20,
workflow: '',
category: 'duty',
},
list:[
{id: 191,
title: "单片冷加工玻璃的重审",
sn: "hb_202201040002",
workflow: 5,
workflow_: {id: 5, name: "不合格品审理单"},
state: 20,
state_: {id: 20, name: "检验员确认", type: 0, distribute_type: 1, enable_retreat: false},
act_state: 1,
create_time: "2022-01-04 13:26:49",
update_time: "2022-01-04 13:26:49",
participant_type: 1,
create_by: 1
},
],//
options:[],//
search: {
keyword: null
},
isSaving: false,
listLoading: false,
limitedVisible : false,
//
addForm: {
title: "",
workflow: "",
},
//
rules: {
title: [
{required: true, message: '请输入工单名称'}
],
workflow: [
{required: true, message: '请选择工单所属工作流'}
],
},
logs: [
{
content: 'sssss 创建了物流记录 1',
timestamp: '2018-04-17'
},
{
content: 'sssss 维护了客户信息',
timestamp: '2018-04-15'
},
{
content: 'sssss 创建订单',
timestamp: '2018-04-15'
}
],
}
},
mounted() {
// this.getList();
// this.getWorkFlow();
},
methods: {
handleClick(tab, event) {
console.log(tab, event);
this.getList();
},
/*//加载树数据
async getGroup() {
var res = await this.$API.system.dept.get({page: 0});
let postList = res;
let posts = [];
postList.forEach(item => {
let obj = new Object();
obj.id = item.id;
obj.name = item.name;
obj.parentId = item.parent;
obj.label=item.name;
posts.push(obj)
});
let obj = posts.reduce((res, v) => (res[v.id] = v , res), {});//Object
let arr = [];
// debugger;
console.log(obj);
for (let item of posts) {
debugger;
if (item.parentId == null) {
arr.push(item);
continue
}
let parent = obj[item.parentId];
parent.children = parent.children ? parent.children : [];
parent.children.push(item);
}
this.menu.list = arr;
},*/
//
getList(){
var res = this.$API.wf.ticketList.get(this.pageForm);
// this.list = res.results;
},
async getWorkFlow(){
var res = await this.$API.wf.workflowList.get({page:0});
this.options = res;
console.log(this.options);
debugger;
},
//
handleAdd(){
this.limitedVisible = true;
},
//
handleClose(){
},
//
handleDetail(){
},
//
handleShow(){
},
//
handlePicture(){
},
//
handleLogs(){
},
//
submitHandle(){
debugger;
let that = this;
debugger;
this.addForm.perms = this.menu.checked;
this.$refs.addForm.validate( (valid) => {
debugger;
if (valid) {
this.isSaveing = true;
var res= this.$API.system.ticketAdd.post(that.addForm);
this.isSaveing = false;
this.limitedVisible = false;
this.$refs.table.refresh();
console.log(res);
debugger;
}
})
},
//
handlePicture(row){
this.limitedVisible = true;
this.addForm.id=row.id;
this.addForm.name=row.name;
this.addForm.code=row.code;
this.addForm.description=row.description;
},
//
handleGetTicket(){},
//
async handleDelete(row){
var id = row.id;
var res = await this.$API.system.roleDel.delete(id);
if(res.err_msg){
this.$message.error(res.err_msg)
}else{
this.$refs.table.refresh();
this.$message.success("删除成功")
}
},
//
upsearch(){
},
currentPage(){},
//
handleSaveSuccess(){
this.$refs.table.refresh()
},
handleCurrentChange(){},
}
}
</script>
<style scoped>
.treeMain {height:280px;overflow: auto;border: 1px solid #dcdfe6;margin-bottom: 10px;}
</style>
-->

218
src/views/wf/transform.vue Normal file
View File

@ -0,0 +1,218 @@
<template>
<el-main class="nopadding">
<el-button type="primary" icon="el-icon-plus" @click="handleAdd"></el-button>
<el-table
:data="list"
style="width: 100%"
>
<el-table-column type="index" width="50"/>
<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-link @click="handleEdit(scope.row)">
编辑
</el-link>
<el-link
type="danger"
@click="handleDelete(scope.row)"
>
删除
</el-link>
</template>
</el-table-column>
</el-table>
<el-dialog
v-model="dialogVisible"
:title="titleMap[type]"
>
<el-form
ref="Form"
:model="addForm"
label-width="130px"
label-position="right"
:rules="rule"
>
<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
v-model="addForm.condition_expression"
:showBtns="false"
:mode="'code'"
lang="zh"
@json-change="onJsonChange"
/>
</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>
<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>
</template>
<script>
import vueJsonEditor from 'vue-json-editor'
export default {
name: "transform",
components: { vueJsonEditor },
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.getWorkflowTransition.get(this.id);
this.list = res;
},
async getStateList() {
let res = await this.$API.wf.getWorkflowState.get(this.id);
console.log(res);
this.stateList = res;
},
submitHandle(){
let that = this;
this.$refs.Form.validate((valid) => {
if (valid) {
let res = null;
if (that.type === 'add') {
debugger;
that.addForm.workflow = this.id;
res = that.$API.wf.transitionAdd.post(that.addForm);
} else {
res = that.$API.wf.transitionEdit.put(that.editId, that.addForm);
}
if(res.err_msg){
this.$message.error(res.err_msg)
}else{
that.isSaveing = false;
that.limitedVisible = false;
that.$refs.table.refresh();
}
that.isSaveing = false;
that.limitedVisible = false;
that.getList();
}
})
},
},
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,243 @@
<template>
<el-container>
<el-header>
<div class="left-panel">
<el-button type="primary" icon="el-icon-plus" @click="handleAdd"></el-button>
<el-button type="danger" plain icon="el-icon-delete" :disabled="selection.length!==1"
@click="batch_del"></el-button>
</div>
<div class="right-panel">
<div class="right-panel-search">
<el-input v-model="search.keyword" placeholder="工作流名称" clearable></el-input>
<el-button type="primary" icon="el-icon-search" @click="upsearch"></el-button>
</div>
</div>
</el-header>
<el-main class="nopadding">
<scTable ref="table" :apiObj="apiObj" row-key="id">
<el-table-column label="#" type="index" width="50"></el-table-column>
<el-table-column label="工作流名称" prop="name" min-width="250"></el-table-column>
<el-table-column label="工单查看权限校验" prop="view_permission_check" min-width="150">
<template #default="scope">
<span v-if="scope.row.view_permission_check"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="工作流描述" prop="description" min-width="150"></el-table-column>
<el-table-column label="创建时间" prop="create_time" min-width="150"></el-table-column>
<el-table-column label="操作" fixed="right" align="center" width="220">
<template #default="scope">
<el-button type="text" size="small" @click="workflowShow(scope.row)">配置</el-button>
<el-divider direction="vertical"></el-divider>
<el-button type="text" size="small" @click="workflowEdit(scope.row)">编辑</el-button>
<el-divider direction="vertical"></el-divider>
<el-popconfirm title="确定删除吗?" @confirm="workflowDel(scope.row)">
<template #reference>
<el-button type="text" size="small">删除</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
<el-dialog :title="titleMap[type]" v-model="limitedVisible">
<el-form :model="addForm" :rules="rules" ref="addForm" label-width="100px" label-position="left">
<el-form-item label="名称" prop="name">
<el-input v-model="addForm.name" clearable></el-input>
</el-form-item>
<el-form-item label="流水前缀">
<el-input v-model="addForm.sn_prefix" clearable></el-input>
</el-form-item>
<el-form-item label="描述">
<el-input
v-model="addForm.description"
type="textarea"
:rows="4"
placeholder="描述"
clearable
></el-input>
</el-form-item>
<el-form-item label="查看权限校验">
<el-switch v-model="addForm.view_permission_check" ></el-switch>
</el-form-item>
<el-form-item label="展现表单字段">
<el-transfer
v-model="addForm.display_form_str"
:data="choiceOption"
:titles="['未展示字段', '展示字段']"
:props="{ key: 'id', label: 'field_name' }"
/>
</el-form-item>
<el-form-item label="标题模板">
<el-input v-model="addForm.title_template" clearable></el-input>
</el-form-item>
<el-form-item label="内容模板">
<el-input v-model="addForm.content_template" clearable></el-input>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="limitedVisible=false"> </el-button>
<el-button v-if="type!=='show'" type="primary" :loading="isSaving" @click="submitHandle()"> </el-button>
</template>
</el-dialog>
</template>
<script>
export default {
name: 'index',
data() {
return {
apiObj: this.$API.wf.workflow.list,
selection: [],
checkList: [],
choiceOption: [],
search: {
keyword: null
},
editId: null,
isSaving: false,
limitedVisible: false,
type: "add",
titleMap: {
add: '新增',
edit: '编辑',
show: '查看'
},
//
addForm: {
name: "",
sn_prefix: "",
description: "",
view_permission_check: true,
display_form_str:[],
title_template: "",
content_template: "",
},
//
rules: {
name: [
{required: true, message: '请输入工作流名称'}
]
},
menu: {
list: [],
checked: ['1513426415243104256'],
props: {
children: 'children',
label: 'name',
}
},
}
},
mounted() {
// this.getGroup();
},
methods: {
//
handleAdd() {
this.type = 'add';
this.limitedVisible = true;
},
submitHandle() {
let that = this;
debugger;
console.log(that.addForm.view_permission_check);
this.$refs.addForm.validate((valid) => {
if (valid) {
that.isSaveing = true;
let res = null;
if (that.type === 'add') {
debugger;
res = that.$API.wf.workflow.create.req(that.addForm);
} else {
res = that.$API.wf.workflow.update.req(that.editId, that.addForm);
}
if(res.err_msg){
this.$message.error(res.err_msg)
}else{
that.isSaveing = false;
that.limitedVisible = false;
that.$refs.table.refresh();
}
}
})
},
//
workflowEdit(row) {
this.type = 'edit';
this.editId = row.id;
this.limitedVisible = true;
this.addForm = Object.assign({}, row);
},
//
workflowShow(row) {
let workflow = sessionStorage.getItem('jinYuWorkflowId');
if(workflow){
sessionStorage.removeItem('jinYuWorkflowId');
sessionStorage.setItem('jinYuWorkflowId',row.id);
}else{
sessionStorage.setItem('jinYuWorkflowId',row.id);
}
this.$router.push({path:'/workflow/configuration'});
},
//
async workflowDel(row) {
var id = row.id;
var res = await this.$API.wf.workflow.delete.req(id);
if (res.err_msg) {
this.$message.error(res.err_msg)
} else {
this.$refs.table.refresh();
this.$message.success("删除成功")
// this.$alert(res.message, "", {type: 'error'})
}
},
//
selectionChange(selection) {
this.selection = selection;
},
//
upsearch() {
},
//ID
filterTree(id) {
var target = null;
function filter(tree) {
tree.forEach(item => {
if (item.id == id) {
target = item
}
if (item.children) {
filter(item.children)
}
})
}
filter(this.$refs.table.tableData)
return target
},
//
handleSaveSuccess(data, type) {
if (type == 'add') {
this.$refs.table.refresh()
} else if (type == 'edit') {
this.$refs.table.refresh()
}
}
}
}
</script>
<style scoped>
.treeMain {
height: 280px;
overflow: auto;
border: 1px solid #dcdfe6;
margin-bottom: 10px;
}
</style>