29 changed files with 21 additions and 4551 deletions
@ -1,70 +0,0 @@
|
||||
import request from '@/router/axios'; |
||||
|
||||
export const getList = (current, size, params) => { |
||||
return request({ |
||||
url: '/api/iot-core/product/api/page', |
||||
method: 'get', |
||||
params: { |
||||
...params, |
||||
current, |
||||
size, |
||||
} |
||||
}) |
||||
} |
||||
|
||||
export const getDetail = (id) => { |
||||
return request({ |
||||
url: '/api/iot-core/product/api/detail', |
||||
method: 'get', |
||||
params: { |
||||
id |
||||
} |
||||
}) |
||||
} |
||||
|
||||
export const remove = (id) => { |
||||
return request({ |
||||
url: '/api/iot-core/product/api/remove', |
||||
method: 'post', |
||||
params: { |
||||
id, |
||||
} |
||||
}) |
||||
} |
||||
|
||||
export const add = (row) => { |
||||
return request({ |
||||
url: '/api/iot-core/product/api/save', |
||||
method: 'post', |
||||
data: row |
||||
}) |
||||
} |
||||
|
||||
export const update = (row) => { |
||||
return request({ |
||||
url: '/api/iot-core/product/api/update', |
||||
method: 'post', |
||||
data: row |
||||
}) |
||||
} |
||||
|
||||
export const getProductTree = (tenantId) => { |
||||
return request({ |
||||
url: '/api/iot-core/product/api/select', |
||||
method: 'get', |
||||
params: { |
||||
tenantId, |
||||
} |
||||
}) |
||||
} |
||||
|
||||
/** |
||||
* 获取产品对应的服务订阅 |
||||
* @param id |
||||
*/ |
||||
export const getServerSubscribeList = (id) => request({ |
||||
url: '/api/iot-core/product/subscribe', |
||||
params: { |
||||
id, |
||||
}, |
||||
}); |
@ -1,50 +0,0 @@
|
||||
import request from '@/router/axios'; |
||||
|
||||
export const getList = (current, size, params) => { |
||||
return request({ |
||||
url: '/api/iot-system/desk/notice/list', |
||||
method: 'get', |
||||
params: { |
||||
...params, |
||||
current, |
||||
size, |
||||
} |
||||
}) |
||||
} |
||||
|
||||
export const remove = (ids) => { |
||||
return request({ |
||||
url: '/api/iot-system/desk/notice/remove', |
||||
method: 'post', |
||||
params: { |
||||
ids, |
||||
} |
||||
}) |
||||
} |
||||
|
||||
export const add = (row) => { |
||||
return request({ |
||||
url: '/api/iot-system/desk/notice/submit', |
||||
method: 'post', |
||||
data: row |
||||
}) |
||||
} |
||||
|
||||
export const update = (row) => { |
||||
return request({ |
||||
url: '/api/iot-system/desk/notice/submit', |
||||
method: 'post', |
||||
data: row |
||||
}) |
||||
} |
||||
|
||||
export const getNotice = (id) => { |
||||
return request({ |
||||
url: '/api/iot-system/desk/notice/detail', |
||||
method: 'get', |
||||
params: { |
||||
id |
||||
} |
||||
}) |
||||
} |
||||
|
@ -1,12 +0,0 @@
|
||||
import request from '@/router/axios'; |
||||
|
||||
export const getEquipments = (current, size, params) => { |
||||
return request({ |
||||
url: '/api/device/device/list', |
||||
params: { |
||||
current, |
||||
size, |
||||
...params, |
||||
}, |
||||
}) |
||||
}; |
@ -1,99 +0,0 @@
|
||||
import request from '@/router/axios'; |
||||
|
||||
export const modelList = (current, size, params) => { |
||||
return request({ |
||||
url: '/api/hulk-flow/model/list', |
||||
method: 'get', |
||||
params: { |
||||
...params, |
||||
current, |
||||
size, |
||||
} |
||||
}) |
||||
} |
||||
|
||||
export const managerList = (current, size, params) => { |
||||
return request({ |
||||
url: '/api/hulk-flow/manager/list', |
||||
method: 'get', |
||||
params: { |
||||
...params, |
||||
current, |
||||
size, |
||||
} |
||||
}) |
||||
} |
||||
|
||||
export const followList = (current, size, params) => { |
||||
return request({ |
||||
url: '/api/hulk-flow/follow/list', |
||||
method: 'get', |
||||
params: { |
||||
...params, |
||||
current, |
||||
size, |
||||
} |
||||
}) |
||||
} |
||||
|
||||
|
||||
export const removeModel = (ids) => { |
||||
return request({ |
||||
url: '/api/hulk-flow/model/remove', |
||||
method: 'post', |
||||
params: { |
||||
ids, |
||||
} |
||||
}) |
||||
} |
||||
|
||||
export const deployModel = (params) => { |
||||
return request({ |
||||
url: '/api/hulk-flow/model/deploy', |
||||
method: 'post', |
||||
params |
||||
}) |
||||
} |
||||
|
||||
export const changeState = (params) => { |
||||
return request({ |
||||
url: '/api/hulk-flow/manager/change-state', |
||||
method: 'post', |
||||
params |
||||
}) |
||||
} |
||||
|
||||
export const deployUpload = (category, tenantIds, files) => { |
||||
const formData = new FormData(); |
||||
formData.append('category', category); |
||||
formData.append('tenantIds', tenantIds); |
||||
files.forEach(file => { |
||||
formData.append('files', file); |
||||
}); |
||||
return request({ |
||||
headers: { |
||||
"Content-Type": "multipart/form-data" |
||||
}, |
||||
url: '/api/hulk-flow/manager/deploy-upload', |
||||
method: 'post', |
||||
data: formData |
||||
}) |
||||
} |
||||
|
||||
export const deleteDeployment = (deploymentIds) => { |
||||
return request({ |
||||
url: '/api/hulk-flow/manager/delete-deployment', |
||||
method: 'post', |
||||
params: { |
||||
deploymentIds, |
||||
} |
||||
}) |
||||
} |
||||
|
||||
export const deleteProcessInstance = (params) => { |
||||
return request({ |
||||
url: '/api/hulk-flow/follow/delete-process-instance', |
||||
method: 'post', |
||||
params |
||||
}) |
||||
} |
@ -1,64 +0,0 @@
|
||||
import request from '@/router/axios'; |
||||
|
||||
export const getUsualList = (current, size) => { |
||||
return request({ |
||||
url: '/api/hulk-log/usual/list', |
||||
method: 'get', |
||||
params: { |
||||
current, |
||||
size |
||||
} |
||||
}) |
||||
} |
||||
|
||||
export const getApiList = (current, size) => { |
||||
return request({ |
||||
url: '/api/hulk-log/api/list', |
||||
method: 'get', |
||||
params: { |
||||
current, |
||||
size |
||||
} |
||||
}) |
||||
} |
||||
|
||||
export const getErrorList = (current, size) => { |
||||
return request({ |
||||
url: '/api/hulk-log/error/list', |
||||
method: 'get', |
||||
params: { |
||||
current, |
||||
size |
||||
} |
||||
}) |
||||
} |
||||
|
||||
|
||||
export const getUsualLogs = (id) => { |
||||
return request({ |
||||
url: '/api/hulk-log/usual/detail', |
||||
method: 'get', |
||||
params: { |
||||
id, |
||||
} |
||||
}) |
||||
} |
||||
export const getApiLogs = (id) => { |
||||
return request({ |
||||
url: '/api/hulk-log/api/detail', |
||||
method: 'get', |
||||
params: { |
||||
id, |
||||
} |
||||
}) |
||||
} |
||||
export const getErrorLogs = (id) => { |
||||
return request({ |
||||
url: '/api/hulk-log/error/detail', |
||||
method: 'get', |
||||
params: { |
||||
id, |
||||
} |
||||
}) |
||||
} |
||||
|
@ -1,22 +0,0 @@
|
||||
import request from '@/router/axios'; |
||||
|
||||
export const getList = (current, size, params) => { |
||||
return request({ |
||||
url: '/api/hulk-report/report/rest/list', |
||||
method: 'get', |
||||
params: { |
||||
...params, |
||||
current, |
||||
size, |
||||
} |
||||
}) |
||||
} |
||||
export const remove = (ids) => { |
||||
return request({ |
||||
url: '/api/hulk-report/report/rest/remove', |
||||
method: 'post', |
||||
params: { |
||||
ids, |
||||
} |
||||
}) |
||||
} |
@ -1,34 +0,0 @@
|
||||
import request from '@/router/axios'; |
||||
|
||||
// =====================参数===========================
|
||||
|
||||
export const historyFlowList = (processInstanceId) => { |
||||
return request({ |
||||
url: '/api/hulk-flow/process/history-flow-list', |
||||
method: 'get', |
||||
params: { |
||||
processInstanceId |
||||
} |
||||
}) |
||||
} |
||||
|
||||
|
||||
// =====================请假流程===========================
|
||||
|
||||
export const leaveProcess = (data) => { |
||||
return request({ |
||||
url: '/api/iot-system/desk/process/leave/start-process', |
||||
method: 'post', |
||||
data |
||||
}) |
||||
} |
||||
|
||||
export const leaveDetail = (businessId) => { |
||||
return request({ |
||||
url: '/api/iot-system/desk/process/leave/detail', |
||||
method: 'get', |
||||
params: { |
||||
businessId |
||||
} |
||||
}) |
||||
} |
@ -1,81 +0,0 @@
|
||||
import request from '@/router/axios'; |
||||
|
||||
export const startList = (current, size, params) => { |
||||
return request({ |
||||
url: '/api/hulk-flow/work/start-list', |
||||
method: 'get', |
||||
params: { |
||||
...params, |
||||
current, |
||||
size, |
||||
} |
||||
}) |
||||
} |
||||
|
||||
export const claimList = (current, size, params) => { |
||||
return request({ |
||||
url: '/api/hulk-flow/work/claim-list', |
||||
method: 'get', |
||||
params: { |
||||
...params, |
||||
current, |
||||
size, |
||||
} |
||||
}) |
||||
} |
||||
|
||||
export const todoList = (current, size, params) => { |
||||
return request({ |
||||
url: '/api/hulk-flow/work/todo-list', |
||||
method: 'get', |
||||
params: { |
||||
...params, |
||||
current, |
||||
size, |
||||
} |
||||
}) |
||||
} |
||||
|
||||
export const sendList = (current, size, params) => { |
||||
return request({ |
||||
url: '/api/hulk-flow/work/send-list', |
||||
method: 'get', |
||||
params: { |
||||
...params, |
||||
current, |
||||
size, |
||||
} |
||||
}) |
||||
} |
||||
|
||||
|
||||
export const doneList = (current, size, params) => { |
||||
return request({ |
||||
url: '/api/hulk-flow/work/done-list', |
||||
method: 'get', |
||||
params: { |
||||
...params, |
||||
current, |
||||
size, |
||||
} |
||||
}) |
||||
} |
||||
|
||||
export const claimTask = (taskId) => { |
||||
return request({ |
||||
url: '/api/hulk-flow/work/claim-task', |
||||
method: 'post', |
||||
params: { |
||||
taskId |
||||
} |
||||
}) |
||||
} |
||||
|
||||
|
||||
export const completeTask = (data) => { |
||||
return request({ |
||||
url: '/api/hulk-flow/work/complete-task', |
||||
method: 'post', |
||||
data |
||||
}) |
||||
} |
@ -1,294 +0,0 @@
|
||||
<template> |
||||
<basic-container> |
||||
<avue-crud :option="option" |
||||
:table-loading="loading" |
||||
:data="data" |
||||
:page.sync="page" |
||||
ref="crud" |
||||
@row-del="rowDel" |
||||
v-model="form" |
||||
:permission="permissionList" |
||||
@row-update="rowUpdate" |
||||
@row-save="rowSave" |
||||
:before-open="beforeOpen" |
||||
@search-change="searchChange" |
||||
@search-reset="searchReset" |
||||
@selection-change="selectionChange" |
||||
@current-change="currentChange" |
||||
@size-change="sizeChange" |
||||
@refresh-change="refreshChange" |
||||
@on-load="onLoad"> |
||||
<template slot="menuLeft"> |
||||
<el-button type="danger" |
||||
size="small" |
||||
icon="el-icon-delete" |
||||
plain |
||||
v-if="permission.notice_delete" |
||||
@click="handleDelete">删 除 |
||||
</el-button> |
||||
</template> |
||||
<template slot-scope="{row}" |
||||
slot="category"> |
||||
<el-tag>{{row.categoryName}}</el-tag> |
||||
</template> |
||||
</avue-crud> |
||||
</basic-container> |
||||
</template> |
||||
|
||||
<script> |
||||
import {getList, remove, update, add, getNotice} from "@/api/desk/notice"; |
||||
import {mapGetters} from "vuex"; |
||||
|
||||
export default { |
||||
data() { |
||||
return { |
||||
form: {}, |
||||
query: {}, |
||||
loading: true, |
||||
page: { |
||||
pageSize: 10, |
||||
currentPage: 1, |
||||
total: 0 |
||||
}, |
||||
selectionList: [], |
||||
option: { |
||||
height: 'auto', |
||||
calcHeight: 30, |
||||
dialogWidth: 950, |
||||
tip: false, |
||||
searchShow: true, |
||||
searchMenuSpan: 6, |
||||
border: true, |
||||
index: true, |
||||
viewBtn: true, |
||||
selection: true, |
||||
excelBtn: true, |
||||
dialogClickModal: false, |
||||
column: [ |
||||
{ |
||||
label: "通知标题", |
||||
prop: "title", |
||||
span: 24, |
||||
row: true, |
||||
search: true, |
||||
rules: [{ |
||||
required: true, |
||||
message: "请输入通知标题", |
||||
trigger: "blur" |
||||
}] |
||||
}, |
||||
{ |
||||
label: "通知类型", |
||||
type: "select", |
||||
dicUrl: "/api/iot-system/dict/dictionary?code=notice", |
||||
props: { |
||||
label: "dictValue", |
||||
value: "dictKey" |
||||
}, |
||||
dataType: "number", |
||||
slot: true, |
||||
prop: "category", |
||||
search: true, |
||||
rules: [{ |
||||
required: true, |
||||
message: "请输入通知类型", |
||||
trigger: "blur" |
||||
}] |
||||
}, |
||||
{ |
||||
label: "通知时间", |
||||
prop: "releaseTimeRange", |
||||
type: "datetime", |
||||
format: "yyyy-MM-dd hh:mm:ss", |
||||
valueFormat: "yyyy-MM-dd hh:mm:ss", |
||||
searchRange:true, |
||||
hide: true, |
||||
addDisplay: false, |
||||
editDisplay: false, |
||||
viewDisplay: false, |
||||
search: true, |
||||
rules: [{ |
||||
required: true, |
||||
message: "请输入通知时间", |
||||
trigger: "blur" |
||||
}] |
||||
}, |
||||
{ |
||||
label: "通知日期", |
||||
prop: "releaseTime", |
||||
type: "date", |
||||
format: "yyyy-MM-dd hh:mm:ss", |
||||
valueFormat: "yyyy-MM-dd hh:mm:ss", |
||||
rules: [{ |
||||
required: true, |
||||
message: "请输入通知日期", |
||||
trigger: "click" |
||||
}] |
||||
}, |
||||
{ |
||||
label: "通知内容", |
||||
prop: "content", |
||||
component: 'AvueUeditor', |
||||
options: { |
||||
action: '/api/iot-system/oss/endpoint/put-file', |
||||
props: { |
||||
res: "data", |
||||
url: "link", |
||||
} |
||||
}, |
||||
hide: true, |
||||
minRows: 6, |
||||
span: 24, |
||||
} |
||||
] |
||||
}, |
||||
data: [] |
||||
}; |
||||
}, |
||||
computed: { |
||||
...mapGetters(["permission"]), |
||||
permissionList() { |
||||
return { |
||||
addBtn: this.vaildData(this.permission.notice_add, false), |
||||
viewBtn: this.vaildData(this.permission.notice_view, false), |
||||
delBtn: this.vaildData(this.permission.notice_delete, false), |
||||
editBtn: this.vaildData(this.permission.notice_edit, false) |
||||
}; |
||||
}, |
||||
ids() { |
||||
let ids = []; |
||||
this.selectionList.forEach(ele => { |
||||
ids.push(ele.id); |
||||
}); |
||||
return ids.join(","); |
||||
} |
||||
}, |
||||
methods: { |
||||
rowSave(row, done, loading) { |
||||
add(row).then(() => { |
||||
this.onLoad(this.page); |
||||
this.$message({ |
||||
type: "success", |
||||
message: "操作成功!" |
||||
}); |
||||
done(); |
||||
}, error => { |
||||
window.console.log(error); |
||||
loading(); |
||||
}); |
||||
}, |
||||
rowUpdate(row, index, done, loading) { |
||||
update(row).then(() => { |
||||
this.onLoad(this.page); |
||||
this.$message({ |
||||
type: "success", |
||||
message: "操作成功!" |
||||
}); |
||||
done(); |
||||
}, error => { |
||||
window.console.log(error); |
||||
loading(); |
||||
}); |
||||
}, |
||||
rowDel(row) { |
||||
this.$confirm("确定将选择数据删除?", { |
||||
confirmButtonText: "确定", |
||||
cancelButtonText: "取消", |
||||
type: "warning" |
||||
}) |
||||
.then(() => { |
||||
return remove(row.id); |
||||
}) |
||||
.then(() => { |
||||
this.onLoad(this.page); |
||||
this.$message({ |
||||
type: "success", |
||||
message: "操作成功!" |
||||
}); |
||||
}); |
||||
}, |
||||
searchReset() { |
||||
this.query = {}; |
||||
this.onLoad(this.page); |
||||
}, |
||||
searchChange(params, done) { |
||||
this.query = params; |
||||
this.page.currentPage = 1; |
||||
this.onLoad(this.page, params); |
||||
done(); |
||||
}, |
||||
selectionChange(list) { |
||||
this.selectionList = list; |
||||
}, |
||||
selectionClear() { |
||||
this.selectionList = []; |
||||
this.$refs.crud.toggleSelection(); |
||||
}, |
||||
handleDelete() { |
||||
if (this.selectionList.length === 0) { |
||||
this.$message.warning("请选择至少一条数据"); |
||||
return; |
||||
} |
||||
this.$confirm("确定将选择数据删除?", { |
||||
confirmButtonText: "确定", |
||||
cancelButtonText: "取消", |
||||
type: "warning" |
||||
}) |
||||
.then(() => { |
||||
return remove(this.ids); |
||||
}) |
||||
.then(() => { |
||||
this.onLoad(this.page); |
||||
this.$message({ |
||||
type: "success", |
||||
message: "操作成功!" |
||||
}); |
||||
this.$refs.crud.toggleSelection(); |
||||
}); |
||||
}, |
||||
beforeOpen(done, type) { |
||||
if (["edit", "view"].includes(type)) { |
||||
getNotice(this.form.id).then(res => { |
||||
this.form = res.data.data; |
||||
}); |
||||
} |
||||
done(); |
||||
}, |
||||
currentChange(currentPage) { |
||||
this.page.currentPage = currentPage; |
||||
}, |
||||
sizeChange(pageSize) { |
||||
this.page.pageSize = pageSize; |
||||
}, |
||||
refreshChange() { |
||||
this.onLoad(this.page, this.query); |
||||
}, |
||||
onLoad(page, params = {}) { |
||||
const {releaseTimeRange} = this.query; |
||||
let values = { |
||||
...params, |
||||
}; |
||||
if (releaseTimeRange) { |
||||
values = { |
||||
...params, |
||||
releaseTime_datege: releaseTimeRange[0], |
||||
releaseTime_datelt: releaseTimeRange[1], |
||||
...this.query |
||||
}; |
||||
values.releaseTimeRange = null; |
||||
} |
||||
this.loading = true; |
||||
getList(page.currentPage, page.pageSize, values).then(res => { |
||||
const data = res.data.data; |
||||
this.page.total = data.total; |
||||
this.data = data.records; |
||||
this.loading = false; |
||||
this.selectionClear(); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
<style> |
||||
</style> |
@ -1,182 +0,0 @@
|
||||
<template> |
||||
<div> |
||||
<avue-crud |
||||
:data='data' |
||||
:option='option' |
||||
:page.sync='page' |
||||
@on-load='onLoad' |
||||
@refresh-change='handleRefreshChange' |
||||
@search-change='handleSearchChange' |
||||
/> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
import { getEquipments } from '../../api/equipment'; |
||||
import { equipmentEnum } from '../../util/enum'; |
||||
const { powerTypeEnum, onlineModeEnum, onlineEnum, netTypeEnum } = equipmentEnum; |
||||
|
||||
export default { |
||||
name: 'Equipment', |
||||
data() { |
||||
return { |
||||
data: [], |
||||
option: { |
||||
addBtn: false, |
||||
delBtn: false, |
||||
editBtn: false, |
||||
viewBtn: true, |
||||
card: true, |
||||
labelWidth: 200, |
||||
border: true, |
||||
index: true, |
||||
column: [ |
||||
{ |
||||
label: '设备名称', |
||||
prop: 'deviceName', |
||||
search: true, |
||||
}, |
||||
{ |
||||
label: '设备描述', |
||||
prop: 'description', |
||||
}, |
||||
{ |
||||
label: '设备唯一编码', |
||||
prop: 'deviceSn', |
||||
}, |
||||
{ |
||||
label: '设备类型', |
||||
prop: 'deviceType', |
||||
}, |
||||
{ |
||||
label: '物联网卡 ICCID', |
||||
prop: 'iccid', |
||||
}, |
||||
{ |
||||
label: '是否支持图像 AI 识别', |
||||
prop: 'imageai', |
||||
}, |
||||
{ |
||||
label: '是否支持图像 AI 识别', |
||||
prop: 'imageai', |
||||
}, |
||||
{ |
||||
label: '摄像机是有云台控制功能', |
||||
prop: 'ipcptz', |
||||
hide: true, |
||||
}, |
||||
{ |
||||
label: '纬度', |
||||
prop: 'lat', |
||||
hide: true, |
||||
}, |
||||
{ |
||||
label: '经度', |
||||
prop: 'lng', |
||||
hide: true, |
||||
}, |
||||
{ |
||||
label: '安装位置描述', |
||||
prop: 'location', |
||||
hide: true, |
||||
}, |
||||
{ |
||||
label: '型号', |
||||
prop: 'model', |
||||
hide: true, |
||||
}, |
||||
{ |
||||
label: '物联代理接入平台的通信方式', |
||||
prop: 'netType', |
||||
hide: true, |
||||
dicData: netTypeEnum, |
||||
type: 'select' |
||||
}, |
||||
{ |
||||
label: '在线/离线', |
||||
prop: 'online', |
||||
hide: true, |
||||
dicData: onlineEnum, |
||||
type: 'select', |
||||
}, |
||||
{ |
||||
label: '在线模式', |
||||
prop: 'onlineMode', |
||||
hide: true, |
||||
dicData: onlineModeEnum, |
||||
type: 'select', |
||||
}, |
||||
{ |
||||
label: '局放数据单位', |
||||
prop: 'pdUnit', |
||||
hide: true, |
||||
}, |
||||
{ |
||||
label: '相位', |
||||
prop: 'phase', |
||||
hide: true, |
||||
}, |
||||
{ |
||||
label: '供电方式', |
||||
prop: 'powerType', |
||||
dicData: powerTypeEnum, |
||||
type: 'select', |
||||
hide: true, |
||||
}, |
||||
{ |
||||
label: '物联代理sn', |
||||
prop: 'proxyDeviceSn', |
||||
hide: true, |
||||
}, |
||||
{ |
||||
label: '电网资产实物 ID', |
||||
prop: 'rfid', |
||||
hide: true, |
||||
}, |
||||
{ |
||||
label: '信号强度', |
||||
prop: 'rssi', |
||||
hide: true, |
||||
}, |
||||
{ |
||||
label: '供电电压(单位 V)', |
||||
prop: 'vcc', |
||||
hide: true, |
||||
}, |
||||
], |
||||
}, |
||||
page: { |
||||
pageSize: 10, |
||||
total: 0, |
||||
}, |
||||
queryParams: {}, |
||||
}; |
||||
}, |
||||
methods: { |
||||
onLoad(page, params) { |
||||
getEquipments(page.currentPage, page.pageSize, params).then((res) => { |
||||
const { data } = res.data; |
||||
this.data = data.records; |
||||
this.page.total = data.total; |
||||
}); |
||||
}, |
||||
|
||||
handleRefreshChange() { |
||||
this.onLoad(this.page, this.queryParams); |
||||
}, |
||||
|
||||
async handleSearchChange(params, done) { |
||||
this.page.currentPage = 1; |
||||
this.queryParams = params; |
||||
await this.onLoad(this.page, params); |
||||
done(); |
||||
}, |
||||
}, |
||||
}; |
||||
</script> |
||||
|
||||
<style scoped lang='scss'> |
||||
.el-select { |
||||
width: 300px !important; |
||||
} |
||||
</style> |
@ -1,154 +0,0 @@
|
||||
<template> |
||||
<basic-container> |
||||
<avue-form ref="form" :option="option" v-model="form" :upload-before="uploadBefore" :upload-after="uploadAfter"/> |
||||
</basic-container> |
||||
</template> |
||||
|
||||
<script> |
||||
import {deployUpload} from "@/api/flow/flow"; |
||||
import {flowCategory} from "@/util/flow"; |
||||
|
||||
export default { |
||||
data() { |
||||
return { |
||||
form: { |
||||
flowCategory: '', |
||||
tenantId: '', |
||||
flowFile: [], |
||||
file: {}, |
||||
}, |
||||
option: { |
||||
labelWidth: 120, |
||||
menuBtn: false, |
||||
column: [ |
||||
{ |
||||
label: '流程类型', |
||||
prop: 'flowCategory', |
||||
type: 'select', |
||||
dicUrl: `/api/iot-system/dict/dictionary?code=flow`, |
||||
props: { |
||||
label: "dictValue", |
||||
value: "dictKey" |
||||
}, |
||||
row: true, |
||||
span: 12, |
||||
dataType: "number", |
||||
rules: [ |
||||
{ |
||||
required: true, |
||||
message: '请选择流程类型', |
||||
trigger: 'blur' |
||||
} |
||||
] |
||||
}, |
||||
{ |
||||
label: "流程模式", |
||||
prop: "flowMode", |
||||
type: "radio", |
||||
dicData: [ |
||||
{ |
||||
label: "通用流程", |
||||
value: 1 |
||||
}, |
||||
{ |
||||
label: "定制流程", |
||||
value: 2 |
||||
} |
||||
], |
||||
value: 1, |
||||
row: true, |
||||
span: 12, |
||||
rules: [ |
||||
{ |
||||
required: true, |
||||
message: '请选择流程模式', |
||||
trigger: 'blur' |
||||
} |
||||
], |
||||
}, |
||||
{ |
||||
label: "所属租户", |
||||
prop: "tenantId", |
||||
type: "tree", |
||||
multiple: true, |
||||
dicUrl: "/api/iot-system/tenant/select", |
||||
props: { |
||||
label: "tenantName", |
||||
value: "tenantId" |
||||
}, |
||||
display: false, |
||||
row: true, |
||||
span: 12, |
||||
rules: [ |
||||
{ |
||||
required: true, |
||||
message: '请选择所属租户', |
||||
trigger: 'blur' |
||||
} |
||||
], |
||||
}, |
||||
{ |
||||
label: '附件上传', |
||||
prop: 'flowFile', |
||||
type: 'upload', |
||||
loadText: '附件上传中,请稍等', |
||||
span: 24, |
||||
propsHttp: { |
||||
res: 'data' |
||||
}, |
||||
tip: '请上传 bpmn20.xml 标准格式文件', |
||||
action: '/api/hulk-flow/manager/check-upload' |
||||
}, |
||||
] |
||||
} |
||||
} |
||||
}, |
||||
watch: { |
||||
'form.flowMode'() { |
||||
this.$refs.form.option.column.filter(item => { |
||||
if (item.prop === "tenantId") { |
||||
item.display = this.form.flowMode === 2; |
||||
} |
||||
}); |
||||
} |
||||
}, |
||||
methods: { |
||||
uploadBefore(file, done) { |
||||
this.$message.success('部署开始'); |
||||
this.file = file; |
||||
done() |
||||
}, |
||||
uploadAfter(res, done, loading) { |
||||
if (!this.form.flowCategory) { |
||||
this.$message.warning('清先选择流程类型'); |
||||
loading() |
||||
return false; |
||||
} |
||||
if (this.form.flowMode === 2 && !this.form.tenantId) { |
||||
this.$message.warning('清先选择对应租户'); |
||||
loading(); |
||||
return false; |
||||
} |
||||
if (res.success) { |
||||
deployUpload( |
||||
flowCategory(this.form.flowCategory), |
||||
(this.form.tenantId) ? this.form.tenantId.join(",") : "", |
||||
[this.file] |
||||
).then(res => { |
||||
const data = res.data; |
||||
if (data.success) { |
||||
done() |
||||
} else { |
||||
this.$message.error(data.msg); |
||||
loading() |
||||
} |
||||
}) |
||||
} else { |
||||
this.$message.warning('请上传 bpmn20.xml 标准格式文件'); |
||||
loading() |
||||
return false; |
||||
} |
||||
}, |
||||
} |
||||
} |
||||
</script> |
@ -1,203 +0,0 @@
|
||||
<template> |
||||
<basic-container> |
||||
<avue-crud :option="option" |
||||
:table-loading="loading" |
||||
:data="data" |
||||
ref="crud" |
||||
v-model="form" |
||||
:page.sync="page" |
||||
:permission="permissionList" |
||||
@row-del="rowDel" |
||||
@search-change="searchChange" |
||||
@search-reset="searchReset" |
||||
@selection-change="selectionChange" |
||||
@current-change="currentChange" |
||||
@size-change="sizeChange" |
||||
@refresh-change="refreshChange" |
||||
@on-load="onLoad"> |
||||
<template slot-scope="{row}" |
||||
slot="suspensionState"> |
||||
<el-tag>{{row.suspensionState===1?'激活':'挂起'}}</el-tag> |
||||
</template> |
||||
</avue-crud> |
||||
<el-dialog title="流程删除" |
||||
append-to-body |
||||
:visible.sync="followBox" |
||||
width="20%"> |
||||
<el-form :model="form" |
||||
ref="form" |
||||
label-width="80px"> |
||||
<el-form-item label="删除理由"> |
||||
<el-input v-model="deleteReason" |
||||
placeholder="请输入删除理由" /> |
||||
</el-form-item> |
||||
</el-form> |
||||
<span slot="footer" |
||||
class="dialog-footer"> |
||||
<el-button @click="followBox = false">关 闭</el-button> |
||||
<el-button type="primary" |
||||
@click="handleDelete">确 定</el-button> |
||||
</span> |
||||
</el-dialog> |
||||
</basic-container> |
||||
</template> |
||||
|
||||
<script> |
||||
import {mapGetters} from "vuex"; |
||||
import {followList, deleteProcessInstance} from "@/api/flow/flow"; |
||||
|
||||
export default { |
||||
data() { |
||||
return { |
||||
form: {}, |
||||
selectionId: '', |
||||
processInstanceId: '', |
||||
selectionList: [], |
||||
query: {}, |
||||
loading: true, |
||||
page: { |
||||
pageSize: 10, |
||||
currentPage: 1, |
||||
total: 0 |
||||
}, |
||||
followBox: false, |
||||
deleteReason: '', |
||||
option: { |
||||
height: 'auto', |
||||
calcHeight: 30, |
||||
tip: false, |
||||
searchShow: true, |
||||
searchMenuSpan: 6, |
||||
border: true, |
||||
index: true, |
||||
selection: true, |
||||
editBtn: false, |
||||
addBtn: false, |
||||
viewBtn: false, |
||||
dialogWidth: 900, |
||||
menuWidth: 100, |
||||
dialogClickModal: false, |
||||
column: [ |
||||
{ |
||||
label: "执行id", |
||||
prop: "executionId", |
||||
search: true, |
||||
width: 320, |
||||
}, |
||||
{ |
||||
label: "流程key", |
||||
prop: "processDefinitionKey", |
||||
search: true, |
||||
}, |
||||
{ |
||||
label: "实例id", |
||||
prop: "processInstanceId", |
||||
search: true, |
||||
width: 320, |
||||
}, |
||||
{ |
||||
label: "状态", |
||||
prop: "suspensionState", |
||||
slot: true, |
||||
width: 80, |
||||
}, |
||||
{ |
||||
label: "发起人", |
||||
prop: "startUser", |
||||
width: 100, |
||||
}, |
||||
{ |
||||
label: '开始时间', |
||||
prop: 'startTime', |
||||
width: 165, |
||||
}, |
||||
] |
||||
}, |
||||
data: [] |
||||
}; |
||||
}, |
||||
computed: { |
||||
...mapGetters(["permission"]), |
||||
permissionList() { |
||||
return { |
||||
delBtn: this.vaildData(this.permission.flow_follow_delete, false), |
||||
}; |
||||
}, |
||||
ids() { |
||||
let ids = []; |
||||
this.selectionList.forEach(ele => { |
||||
ids.push(ele.id); |
||||
}); |
||||
return ids.join(","); |
||||
} |
||||
}, |
||||
methods: { |
||||
rowDel(row) { |
||||
this.followBox = true; |
||||
this.selectionId = row.id; |
||||
this.processInstanceId = row.processInstanceId; |
||||
}, |
||||
handleDelete() { |
||||
this.$confirm("确定将选择数据删除?", { |
||||
confirmButtonText: "确定", |
||||
cancelButtonText: "取消", |
||||
type: "warning" |
||||
}) |
||||
.then(() => { |
||||
return deleteProcessInstance({deleteReason: this.deleteReason, processInstanceId: this.processInstanceId}); |
||||
}) |
||||
.then(() => { |
||||
this.onLoad(this.page); |
||||
this.followBox = false; |
||||
this.$message({ |
||||
type: "success", |
||||
message: "操作成功!" |
||||
}); |
||||
}); |
||||
}, |
||||
searchReset() { |
||||
this.query = {}; |
||||
this.onLoad(this.page); |
||||
}, |
||||
searchChange(params, done) { |
||||
this.query = params; |
||||
this.page.currentPage = 1; |
||||
this.onLoad(this.page, params); |
||||
done(); |
||||
}, |
||||
selectionChange(list) { |
||||
this.selectionList = list; |
||||
}, |
||||
selectionClear() { |
||||
this.selectionList = []; |
||||
this.$refs.crud.toggleSelection(); |
||||
}, |
||||
currentChange(currentPage) { |
||||
this.page.currentPage = currentPage; |
||||
}, |
||||
sizeChange(pageSize) { |
||||
this.page.pageSize = pageSize; |
||||
}, |
||||
refreshChange() { |
||||
this.onLoad(this.page, this.query); |
||||
}, |
||||
onLoad(page, params = {}) { |
||||
this.loading = true; |
||||
followList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => { |
||||
const data = res.data.data; |
||||
this.page.total = data.total; |
||||
this.data = data.records; |
||||
this.loading = false; |
||||
this.selectionClear(); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
<style> |
||||
.none-border { |
||||
border: 0; |
||||
background-color: transparent !important; |
||||
} |
||||
</style> |
@ -1,368 +0,0 @@
|
||||
<template> |
||||
<basic-container> |
||||
<avue-crud :option="option" |
||||
:table-loading="loading" |
||||
:data="data" |
||||
ref="crud" |
||||
v-model="form" |
||||
:page.sync="page" |
||||
:permission="permissionList" |
||||
@search-change="searchChange" |
||||
@search-reset="searchReset" |
||||
@selection-change="selectionChange" |
||||
@current-change="currentChange" |
||||
@size-change="sizeChange" |
||||
@refresh-change="refreshChange" |
||||
@on-load="onLoad"> |
||||
<template slot="menuLeft"> |
||||
<el-radio-group v-model="mode" size="small"> |
||||
<el-radio-button label="1">通用流程</el-radio-button> |
||||
<el-radio-button label="2">定制流程</el-radio-button> |
||||
</el-radio-group> |
||||
</template> |
||||
<template slot-scope="scope" slot="menu"> |
||||
<el-button type="text" |
||||
size="small" |
||||
v-if="permission.flow_manager_state" |
||||
plain |
||||
class="none-border" |
||||
@click.stop="handleState(scope.row,scope.index)">变更状态 |
||||
</el-button> |
||||
<el-button type="text" |
||||
size="small" |
||||
v-if="permission.flow_manager_image" |
||||
plain |
||||
class="none-border" |
||||
@click.stop="handleImage(scope.row,scope.index)">流程图 |
||||
</el-button> |
||||
<el-button type="text" |
||||
size="small" |
||||
v-if="permission.flow_manager_remove" |
||||
plain |
||||
class="none-border" |
||||
@click.stop="handleSlotDelete(scope.row,scope.index)">删除 |
||||
</el-button> |
||||
</template> |
||||
<template slot-scope="{row}" |
||||
slot="tenantId"> |
||||
<el-tag>{{row.tenantId===''?'通用':row.tenantId}}</el-tag> |
||||
</template> |
||||
<template slot-scope="{row}" |
||||
slot="version"> |
||||
<el-tag>v{{row.version}}</el-tag> |
||||
</template> |
||||
<template slot-scope="{row}" |
||||
slot="suspensionState"> |
||||
<el-tag>{{row.suspensionState===1?'激活':'挂起'}}</el-tag> |
||||
</template> |
||||
<template slot-scope="{row}" |
||||
slot="category"> |
||||
<el-tag>{{row.categoryName}}</el-tag> |
||||
</template> |
||||
</avue-crud> |
||||
<el-dialog title="流程图" |
||||
append-to-body |
||||
:visible.sync="flowBox" |
||||
:fullscreen="true"> |
||||
<iframe |
||||
:src=flowUrl |
||||
width="100%" |
||||
height="700" |
||||
title="流程图" |
||||
frameBorder="no" |
||||
border="0" |
||||
marginWidth="0" |
||||
marginHeight="0" |
||||
scrolling="no" |
||||
allowTransparency="yes"> |
||||
</iframe> |
||||
<span slot="footer" |
||||
class="dialog-footer"> |
||||
<el-button @click="flowBox = false">关 闭</el-button> |
||||
</span> |
||||
</el-dialog> |
||||
<el-dialog title="流程变更" |
||||
append-to-body |
||||
:visible.sync="stateBox" |
||||
width="20%"> |
||||
<el-form :model="form" |
||||
ref="form" |
||||
label-width="80px"> |
||||
<el-form-item label="流程状态"> |
||||
<el-select v-model="flowState" placeholder="请选择" value=""> |
||||
<el-option |
||||
v-for="item in stateOptions" |
||||
:key="item.value" |
||||
:label="item.label" |
||||
:value="item.value"> |
||||
</el-option> |
||||
</el-select> |
||||
</el-form-item> |
||||
</el-form> |
||||
<span slot="footer" |
||||
class="dialog-footer"> |
||||
<el-button @click="stateBox = false">关 闭</el-button> |
||||
<el-button type="primary" |
||||
@click="handleDoState">确 定</el-button> |
||||
</span> |
||||
</el-dialog> |
||||
</basic-container> |
||||
</template> |
||||
|
||||
<script> |
||||
import {mapGetters} from "vuex"; |
||||
import {managerList, changeState, deleteDeployment} from "@/api/flow/flow"; |
||||
import {flowCategory} from "@/util/flow"; |
||||
|
||||
export default { |
||||
data() { |
||||
return { |
||||
form: {}, |
||||
mode: '1', |
||||
selectionId: '', |
||||
selectionList: [], |
||||
query: {}, |
||||
loading: true, |
||||
page: { |
||||
pageSize: 10, |
||||
currentPage: 1, |
||||
total: 0 |
||||
}, |
||||
flowBox: false, |
||||
flowUrl: '', |
||||
stateBox: false, |
||||
flowState: '', |
||||
stateOptions: [{ |
||||
value: 'active', |
||||
label: '激活' |
||||
}, { |
||||
value: 'suspend', |
||||
label: '挂起' |
||||
}], |
||||
option: { |
||||
height: 'auto', |
||||
calcHeight: 30, |
||||
tip: false, |
||||
searchShow: true, |
||||
searchMenuSpan: 6, |
||||
border: true, |
||||
index: true, |
||||
selection: true, |
||||
editBtn: false, |
||||
addBtn: false, |
||||
viewBtn: false, |
||||
delBtn: false, |
||||
dialogWidth: 900, |
||||
menuWidth: 150, |
||||
dialogClickModal: false, |
||||
column: [ |
||||
{ |
||||
label: '租户编号', |
||||
prop: 'tenantId', |
||||
slot: true, |
||||
width: 120, |
||||
}, |
||||
{ |
||||
label: '流程主键', |
||||
prop: 'id', |
||||
}, |
||||
{ |
||||
label: '流程标识', |
||||
prop: 'key', |
||||
search: true, |
||||
width: 150, |
||||
}, |
||||
{ |
||||
label: '流程名称', |
||||
prop: 'name', |
||||
width: 150, |
||||
}, |
||||
{ |
||||
label: "流程分类", |
||||
type: "select", |
||||
row: true, |
||||
dicUrl: "/api/iot-system/dict/dictionary?code=flow", |
||||
props: { |
||||
label: "dictValue", |
||||
value: "dictKey" |
||||
}, |
||||
dataType: "number", |
||||
slot: true, |
||||
prop: "category", |
||||
search: true, |
||||
width: 100, |
||||
}, |
||||
{ |
||||
label: '流程版本', |
||||
prop: 'version', |
||||
slot: true, |
||||
width: 80, |
||||
}, |
||||
{ |
||||
label: '状态', |
||||
prop: 'suspensionState', |
||||
slot: true, |
||||
width: 80, |
||||
}, |
||||
{ |
||||
label: '部署时间', |
||||
prop: 'deploymentTime', |
||||
width: 165, |
||||
}, |
||||
] |
||||
}, |
||||
data: [] |
||||
}; |
||||
}, |
||||
watch: { |
||||
'mode'() { |
||||
this.onLoad(this.page); |
||||
} |
||||
}, |
||||
computed: { |
||||
...mapGetters(["permission"]), |
||||
permissionList() { |
||||
return { |
||||
delBtn: this.vaildData(this.permission.flow_manager_remove, false), |
||||
}; |
||||
}, |
||||
ids() { |
||||
let ids = []; |
||||
this.selectionList.forEach(ele => { |
||||
ids.push(ele.id); |
||||
}); |
||||
return ids.join(","); |
||||
}, |
||||
deploymentIds() { |
||||
let ids = []; |
||||
this.selectionList.forEach(ele => { |
||||
ids.push(ele.deploymentId); |
||||
}); |
||||
return ids.join(","); |
||||
} |
||||
}, |
||||
methods: { |
||||
searchReset() { |
||||
this.query = {}; |
||||
this.onLoad(this.page); |
||||
}, |
||||
searchChange(params, done) { |
||||
this.query = params; |
||||
this.page.currentPage = 1; |
||||
this.onLoad(this.page, params); |
||||
done(); |
||||
}, |
||||
selectionChange(list) { |
||||
this.selectionList = list; |
||||
}, |
||||
selectionClear() { |
||||
this.selectionList = []; |
||||
this.$refs.crud.toggleSelection(); |
||||
}, |
||||
handleDelete() { |
||||
if (this.selectionList.length === 0) { |
||||
this.$message.warning("请选择至少一条数据"); |
||||
return; |
||||
} |
||||
this.$confirm("确定将选择数据删除?", { |
||||
confirmButtonText: "确定", |
||||
cancelButtonText: "取消", |
||||
type: "warning" |
||||
}) |
||||
.then(() => { |
||||
return deleteDeployment(this.deploymentIds); |
||||
}) |
||||
.then(() => { |
||||
this.$message({ |
||||
type: "success", |
||||
message: "操作成功!" |
||||
}); |
||||
this.$refs.crud.toggleSelection(); |
||||
this.onLoad(this.page); |
||||
}); |
||||
}, |
||||
handleSlotDelete(row) { |
||||
this.$confirm("确定将选择数据删除?", { |
||||
confirmButtonText: "确定", |
||||
cancelButtonText: "取消", |
||||
type: "warning" |
||||
}) |
||||
.then(() => { |
||||
return deleteDeployment(row.deploymentId); |
||||
}) |
||||
.then(() => { |
||||
this.$message({ |
||||
type: "success", |
||||
message: "操作成功!" |
||||
}); |
||||
this.$refs.crud.toggleSelection(); |
||||
this.onLoad(this.page); |
||||
}); |
||||
}, |
||||
handleState(row) { |
||||
this.stateBox = true; |
||||
this.selectionId = row.id; |
||||
}, |
||||
handleDoState() { |
||||
if (!this.flowState) { |
||||
this.$message({ |
||||
type: "warn", |
||||
message: "请先选择流程状态!" |
||||
}); |
||||
return; |
||||
} |
||||
changeState({processId: this.selectionId, state: this.flowState}).then(res => { |
||||
const data = res.data; |
||||
if (data.success) { |
||||
this.$message({ |
||||
type: "success", |
||||
message: data.msg |
||||
}); |
||||
this.stateBox = false; |
||||
this.onLoad(this.page); |
||||
} else { |
||||
this.$message({ |
||||
type: "warn", |
||||
message: data.msg |
||||
}); |
||||
} |
||||
}) |
||||
}, |
||||
handleImage(row) { |
||||
this.flowUrl = `/api/hulk-flow/process/resource-view?processDefinitionId=${row.id}`; |
||||
this.flowBox = true; |
||||
}, |
||||
currentChange(currentPage) { |
||||
this.page.currentPage = currentPage; |
||||
}, |
||||
sizeChange(pageSize) { |
||||
this.page.pageSize = pageSize; |
||||
}, |
||||
refreshChange() { |
||||
this.onLoad(this.page, this.query); |
||||
}, |
||||
onLoad(page, params = {}) { |
||||
const values = { |
||||
...params, |
||||
category: (params.category) ? flowCategory(params.category) : null, |
||||
mode: this.mode |
||||
}; |
||||
this.loading = true; |
||||
managerList(page.currentPage, page.pageSize, Object.assign(values, this.query)).then(res => { |
||||
const data = res.data.data; |
||||
this.page.total = data.total; |
||||
this.data = data.records; |
||||
this.loading = false; |
||||
this.selectionClear(); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
<style> |
||||
.none-border { |
||||
border: 0; |
||||
background-color: transparent !important; |
||||
} |
||||
</style> |
@ -1,402 +0,0 @@
|
||||
<template> |
||||
<basic-container> |
||||
<avue-crud :option="option" |
||||
:table-loading="loading" |
||||
:data="data" |
||||
ref="crud" |
||||
v-model="form" |
||||
:page.sync="page" |
||||
@search-change="searchChange" |
||||
@search-reset="searchReset" |
||||
@selection-change="selectionChange" |
||||
@current-change="currentChange" |
||||
@size-change="sizeChange" |
||||
@refresh-change="refreshChange" |
||||
@on-load="onLoad"> |
||||
<template slot="menuLeft"> |
||||
<el-button type="primary" |
||||
size="small" |
||||
icon="el-icon-circle-plus" |
||||
v-if="permission.flow_model_create" |
||||
plain |
||||
@click="handleCreate">创 建 |
||||
</el-button> |
||||
<el-button type="danger" |
||||
size="small" |
||||
icon="el-icon-delete" |
||||
v-if="permission.flow_model_delete" |
||||
plain |
||||
@click="handleDelete">删 除 |
||||
</el-button> |
||||
</template> |
||||
<template slot-scope="scope" slot="menu"> |
||||
<el-button type="text" |
||||
size="small" |
||||
v-if="permission.flow_model_update" |
||||
plain |
||||
class="none-border" |
||||
@click.stop="handleUpdate(scope.row,scope.index)">配置 |
||||
</el-button> |
||||
<el-button type="text" |
||||
size="small" |
||||
v-if="permission.flow_model_deploy" |
||||
plain |
||||
class="none-border" |
||||
@click.stop="handleDeploy(scope.row,scope.index)">部署 |
||||
</el-button> |
||||
<el-button type="text" |
||||
size="small" |
||||
v-if="permission.flow_model_download" |
||||
plain |
||||
class="none-border" |
||||
@click.stop="handleDownload(scope.row,scope.index)">下载 |
||||
</el-button> |
||||
<el-button type="text" |
||||
size="small" |
||||
v-if="permission.flow_model_delete" |
||||
plain |
||||
class="none-border" |
||||
@click.stop="handleSlotDelete(scope.row,scope.index)">删除 |
||||
</el-button> |
||||
</template> |
||||
<template slot-scope="{row}" |
||||
slot="version"> |
||||
<el-tag>v{{row.version}}</el-tag> |
||||
</template> |
||||
</avue-crud> |
||||
<el-dialog title="流程配置" |
||||
append-to-body |
||||
:visible.sync="flowBox" |
||||
:fullscreen="true"> |
||||
<iframe |
||||
:src=flowUrl |
||||
width="100%" |
||||
height="700" |
||||
title="流程设计器" |
||||
frameBorder="no" |
||||
border="0" |
||||
marginWidth="0" |
||||
marginHeight="0" |
||||
scrolling="no" |
||||
allowTransparency="yes"> |
||||
</iframe> |
||||
<span slot="footer" |
||||
class="dialog-footer"> |
||||
<el-button @click="flowBox = false">取 消</el-button> |
||||
<el-button type="primary" @click="handleRefresh">确 定</el-button> |
||||
</span> |
||||
</el-dialog> |
||||
<el-dialog title="流程部署" |
||||
append-to-body |
||||
:visible.sync="deployBox" |
||||
width="20%"> |
||||
<avue-form ref="form" :option="optionDeploy" v-model="form" @submit="handleSubmit"/> |
||||
<span slot="footer" |
||||
class="dialog-footer"> |
||||
<el-button @click="deployBox = false">取 消</el-button> |
||||
<el-button type="primary" @click="handleDoDeploy" :loading="deployLoading">确 定</el-button> |
||||
</span> |
||||
</el-dialog> |
||||
</basic-container> |
||||
</template> |
||||
|
||||
<script> |
||||
import {mapGetters} from "vuex"; |
||||
import website from '@/config/website'; |
||||
import {modelList, removeModel, deployModel} from "@/api/flow/flow"; |
||||
import {flowCategory} from "@/util/flow"; |
||||
|
||||
export default { |
||||
data() { |
||||
return { |
||||
form: {}, |
||||
optionDeploy: { |
||||
menuBtn: false, |
||||
column: [ |
||||
{ |
||||
label: "流程类型", |
||||
type: "select", |
||||
dicUrl: "/api/iot-system/dict/dictionary?code=flow", |
||||
props: { |
||||
label: "dictValue", |
||||
value: "dictKey" |
||||
}, |
||||
dataType: "number", |
||||
slot: true, |
||||
prop: "categoryValue", |
||||
search: true, |
||||
span: 24, |
||||
rules: [{ |
||||
required: true, |
||||
message: "请选择流程类型", |
||||
trigger: "blur" |
||||
}] |
||||
}, |
||||
{ |
||||
label: "流程模式", |
||||
prop: "flowMode", |
||||
type: "radio", |
||||
dicData: [ |
||||
{ |
||||
label: "通用流程", |
||||
value: 1 |
||||
}, |
||||
{ |
||||
label: "定制流程", |
||||
value: 2 |
||||
} |
||||
], |
||||
value: 1, |
||||
span: 24, |
||||
rules: [ |
||||
{ |
||||
required: true, |
||||
message: '请选择流程模式', |
||||
trigger: 'blur' |
||||
} |
||||
], |
||||
}, |
||||
{ |
||||
label: "所属租户", |
||||
prop: "tenantId", |
||||
type: "tree", |
||||
multiple: true, |
||||
dicUrl: "/api/iot-system/tenant/select", |
||||
props: { |
||||
label: "tenantName", |
||||
value: "tenantId" |
||||
}, |
||||
display: false, |
||||
span: 24, |
||||
rules: [ |
||||
{ |
||||
required: true, |
||||
message: '请选择所属租户', |
||||
trigger: 'blur' |
||||
} |
||||
], |
||||
}, |
||||
], |
||||
}, |
||||
selectionId: '', |
||||
selectionList: [], |
||||
query: {}, |
||||
loading: true, |
||||
deployLoading: false, |
||||
page: { |
||||
pageSize: 10, |
||||
currentPage: 1, |
||||
total: 0 |
||||
}, |
||||
deployBox: false, |
||||
flowBox: false, |
||||
flowUrl: '', |
||||
option: { |
||||
height: 'auto', |
||||
calcHeight: 30, |
||||
tip: false, |
||||
searchShow: true, |
||||
searchMenuSpan: 6, |
||||
border: true, |
||||
index: true, |
||||
selection: true, |
||||
editBtn: false, |
||||
addBtn: false, |
||||
viewBtn: false, |
||||
delBtn: false, |
||||
dialogWidth: 900, |
||||
menuWidth: 150, |
||||
dialogClickModal: false, |
||||
column: [ |
||||
{ |
||||
label: '模型主键', |
||||
prop: 'id', |
||||
}, |
||||
{ |
||||
label: '模型标识', |
||||
prop: 'modelKey', |
||||
search: true, |
||||
width: 150, |
||||
}, |
||||
{ |
||||
label: '模型名称', |
||||
prop: 'name', |
||||
search: true, |
||||
width: 150, |
||||
}, |
||||
{ |
||||
label: '流程版本', |
||||
prop: 'version', |
||||
slot: true, |
||||
width: 80, |
||||
}, |
||||
{ |
||||
label: '创建时间', |
||||
prop: 'created', |
||||
width: 165, |
||||
}, |
||||
{ |
||||
label: '更新时间', |
||||
prop: 'lastUpdated', |
||||
width: 165, |
||||
}, |
||||
] |
||||
}, |
||||
data: [] |
||||
}; |
||||
}, |
||||
watch: { |
||||
'form.flowMode'() { |
||||
this.$refs.form.option.column.filter(item => { |
||||
if (item.prop === "tenantId") { |
||||
item.display = this.form.flowMode === 2; |
||||
} |
||||
}); |
||||
} |
||||
}, |
||||
computed: { |
||||
...mapGetters(["permission"]), |
||||
ids() { |
||||
let ids = []; |
||||
this.selectionList.forEach(ele => { |
||||
ids.push(ele.id); |
||||
}); |
||||
return ids.join(","); |
||||
} |
||||
}, |
||||
methods: { |
||||
handleSubmit(form, done) { |
||||
this.deployLoading = true; |
||||
deployModel({ |
||||
modelId: this.selectionId, |
||||
category: flowCategory(form.categoryValue), |
||||
tenantIds: form.tenantId.join(",") |
||||
}).then(res => { |
||||
const data = res.data; |
||||
if (data.success) { |
||||
this.$message({ |
||||
type: "success", |
||||
message: data.msg |
||||
}); |
||||
done(); |
||||
this.$refs.form.resetForm(); |
||||
this.deployBox = false; |
||||
this.deployLoading = false; |
||||
} else { |
||||
done(); |
||||
this.deployLoading = false; |
||||
this.$message({ |
||||
type: "warn", |
||||
message: data.msg |
||||
}); |
||||
} |
||||
}) |
||||
}, |
||||
searchReset() { |
||||
this.query = {}; |
||||
this.onLoad(this.page); |
||||
}, |
||||
searchChange(params, done) { |
||||
this.query = params; |
||||
this.page.currentPage = 1; |
||||
this.onLoad(this.page, params); |
||||
done(); |
||||
}, |
||||
selectionChange(list) { |
||||
this.selectionList = list; |
||||
}, |
||||
selectionClear() { |
||||
this.selectionList = []; |
||||
this.$refs.crud.toggleSelection(); |
||||
}, |
||||
handleDelete() { |
||||
if (this.selectionList.length === 0) { |
||||
this.$message.warning("请选择至少一条数据"); |
||||
return; |
||||
} |
||||
this.$confirm("确定将选择数据删除?", { |
||||
confirmButtonText: "确定", |
||||
cancelButtonText: "取消", |
||||
type: "warning" |
||||
}) |
||||
.then(() => { |
||||
return removeModel(this.ids); |
||||
}) |
||||
.then(() => { |
||||
this.$message({ |
||||
type: "success", |
||||
message: "操作成功!" |
||||
}); |
||||
this.$refs.crud.toggleSelection(); |
||||
this.onLoad(this.page); |
||||
}); |
||||
}, |
||||
handleCreate() { |
||||
this.flowUrl = `${website.flowDesignUrl}/index.html`; |
||||
this.flowBox = true; |
||||
}, |
||||
handleUpdate(row) { |
||||
this.flowUrl = `${website.flowDesignUrl}/index.html#/editor/${row.id}`; |
||||
this.flowBox = true; |
||||
}, |
||||
handleDeploy(row) { |
||||
this.deployBox = true; |
||||
this.selectionId = row.id; |
||||
}, |
||||
handleDoDeploy() { |
||||
this.$refs.form.submit(); |
||||
}, |
||||
handleDownload(row) { |
||||
window.open(`${website.flowDesignUrl}/app/rest/models/${row.id}/bpmn20`); |
||||
}, |
||||
handleSlotDelete(row) { |
||||
this.$confirm("确定将选择数据删除?", { |
||||
confirmButtonText: "确定", |
||||
cancelButtonText: "取消", |
||||
type: "warning" |
||||
}) |
||||
.then(() => { |
||||
return removeModel(row.id); |
||||
}) |
||||
.then(() => { |
||||
this.$message({ |
||||
type: "success", |
||||
message: "操作成功!" |
||||
}); |
||||
this.$refs.crud.toggleSelection(); |
||||
this.onLoad(this.page); |
||||
}); |
||||
}, |
||||
handleRefresh() { |
||||
this.flowBox = false; |
||||
this.onLoad(this.page); |
||||
}, |
||||
currentChange(currentPage) { |
||||
this.page.currentPage = currentPage; |
||||
}, |
||||
sizeChange(pageSize) { |
||||
this.page.pageSize = pageSize; |
||||
}, |
||||
refreshChange() { |
||||
this.onLoad(this.page, this.query); |
||||
}, |
||||
onLoad(page, params = {}) { |
||||
this.loading = true; |
||||
modelList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => { |
||||
const data = res.data.data; |
||||
this.page.total = data.total; |
||||
this.data = data.records; |
||||
this.loading = false; |
||||
this.selectionClear(); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
<style> |
||||
.none-border { |
||||
border: 0; |
||||
background-color: transparent !important; |
||||
} |
||||
</style> |
@ -1,161 +0,0 @@
|
||||
<template> |
||||
<basic-container> |
||||
<avue-crud :option="option" |
||||
:table-loading="loading" |
||||
:data="data" |
||||
ref="crud" |
||||
v-model="form" |
||||
:permission="permissionList" |
||||
:before-open="beforeOpen" |
||||
:page.sync="page" |
||||
@search-change="searchChange" |
||||
@search-reset="searchReset" |
||||
@current-change="currentChange" |
||||
@size-change="sizeChange" |
||||
@refresh-change="refreshChange" |
||||
@on-load="onLoad"> |
||||
</avue-crud> |
||||
</basic-container> |
||||
</template> |
||||
|
||||
<script> |
||||
import {getApiList, getApiLogs} from "@/api/logs"; |
||||
import {mapGetters} from "vuex"; |
||||
|
||||
export default { |
||||
data() { |
||||
return { |
||||
form: {}, |
||||
selectionList: [], |
||||
query: {}, |
||||
loading: true, |
||||
page: { |
||||
pageSize: 10, |
||||
currentPage: 1, |
||||
total: 0 |
||||
}, |
||||
option: { |
||||
height: 'auto', |
||||
calcHeight: 30, |
||||
tip: false, |
||||
searchShow: true, |
||||
searchMenuSpan: 6, |
||||
border: true, |
||||
index: true, |
||||
viewBtn: true, |
||||
editBtn: false, |
||||
addBtn: false, |
||||
delBtn: false, |
||||
menuWidth: 120, |
||||
dialogType: 'drawer', |
||||
column: [ |
||||
{ |
||||
label: "服务id", |
||||
prop: "serviceId", |
||||
width:'120', |
||||
search: true |
||||
}, |
||||
{ |
||||
label: "服务host", |
||||
prop: "serverHost", |
||||
search: true |
||||
}, |
||||
{ |
||||
label: "服务ip", |
||||
prop: "serverIp", |
||||
width:'160' |
||||
}, |
||||
{ |
||||
label: "软件环境", |
||||
prop: "env", |
||||
width:'80', |
||||
}, |
||||
{ |
||||
label: "日志名", |
||||
prop: "title" |
||||
}, |
||||
{ |
||||
label: "请求方法", |
||||
prop: "method", |
||||
width:'80' |
||||
}, |
||||
{ |
||||
label: "请求接口", |
||||
prop: "requestUri" |
||||
}, |
||||
{ |
||||
label: "日志时间", |
||||
prop: "createTime", |
||||
width:'180' |
||||
}, |
||||
{ |
||||
label: "用户代理", |
||||
prop: "userAgent", |
||||
span: 24, |
||||
hide: true |
||||
}, |
||||
{ |
||||
label: "请求数据", |
||||
prop: "params", |
||||
type: "textarea", |
||||
span: 24, |
||||
minRows: 2, |
||||
hide: true |
||||
} |
||||
] |
||||
}, |
||||
data: [] |
||||
}; |
||||
}, |
||||
|
||||
computed: { |
||||
...mapGetters(["permission"]), |
||||
permissionList() { |
||||
return { |
||||
viewBtn: this.vaildData(this.permission.log_api_view, false) |
||||
}; |
||||
} |
||||
}, |
||||
methods: { |
||||
searchReset() { |
||||
this.query = {}; |
||||
this.onLoad(this.page); |
||||
}, |
||||
searchChange(params, done) { |
||||
this.query = params; |
||||
this.page.currentPage = 1; |
||||
this.onLoad(this.page, params); |
||||
done(); |
||||
}, |
||||
beforeOpen(done, type) { |
||||
if (["edit", "view"].includes(type)) { |
||||
getApiLogs(this.form.id).then(res => { |
||||
this.form = res.data.data; |
||||
}); |
||||
} |
||||
done(); |
||||
}, |
||||
currentChange(currentPage){ |
||||
this.page.currentPage = currentPage; |
||||
}, |
||||
sizeChange(pageSize){ |
||||
this.page.pageSize = pageSize; |
||||
}, |
||||
refreshChange() { |
||||
this.onLoad(this.page, this.query); |
||||
}, |
||||
onLoad(page, params = {}) { |
||||
this.loading = true; |
||||
getApiList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => { |
||||
const data = res.data.data; |
||||
this.page.total = data.total; |
||||
this.data = data.records; |
||||
this.loading = false; |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
<style> |
||||
</style> |
@ -1,165 +0,0 @@
|
||||
<template> |
||||
<basic-container> |
||||
<avue-crud :option="option" |
||||
:table-loading="loading" |
||||
:data="data" |
||||
ref="crud" |
||||
:before-open="beforeOpen" |
||||
v-model="form" |
||||
:permission="permissionList" |
||||
:page.sync="page" |
||||
@search-change="searchChange" |
||||
@search-reset="searchReset" |
||||
@current-change="currentChange" |
||||
@size-change="sizeChange" |
||||
@refresh-change="refreshChange" |
||||
@on-load="onLoad"> |
||||
</avue-crud> |
||||
</basic-container> |
||||
</template> |
||||
|
||||
<script> |
||||
import {getErrorList, getErrorLogs} from "@/api/logs"; |
||||
import {mapGetters} from "vuex"; |
||||
|
||||
export default { |
||||
data() { |
||||
return { |
||||
form: {}, |
||||
selectionList: [], |
||||
query: {}, |
||||
loading: true, |
||||
page: { |
||||
pageSize: 10, |
||||
currentPage: 1, |
||||
total: 0 |
||||
}, |
||||
option: { |
||||
height: 'auto', |
||||
calcHeight: 30, |
||||
tip: false, |
||||
searchShow: true, |
||||
searchMenuSpan: 6, |
||||
border: true, |
||||
index: true, |
||||
viewBtn: true, |
||||
editBtn: false, |
||||
addBtn: false, |
||||
delBtn: false, |
||||
menuWidth: 120, |
||||
dialogType: 'drawer', |
||||
column: [ |
||||
{ |
||||
label: "服务id", |
||||
prop: "serviceId", |
||||
search: true, |
||||
width:'120' |
||||
}, |
||||
{ |
||||
label: "服务host", |
||||
prop: "serverHost", |
||||
search: true, |
||||
width:'150' |
||||
}, |
||||
{ |
||||
label: "服务ip", |
||||
prop: "serverIp", |
||||
width:'160' |
||||
}, |
||||
{ |
||||
label: "软件环境", |
||||
prop: "env", |
||||
width:'80' |
||||
}, |
||||
{ |
||||
label: "请求方法", |
||||
prop: "method", |
||||
width:'80' |
||||
}, |
||||
{ |
||||
label: "请求接口", |
||||
prop: "requestUri" |
||||
}, |
||||
{ |
||||
label: "日志时间", |
||||
prop: "createTime", |
||||
width:'180' |
||||
}, |
||||
{ |
||||
label: "用户代理", |
||||
prop: "userAgent", |
||||
span: 24, |
||||
hide: true |
||||
}, |
||||
{ |
||||
label: "请求数据", |
||||
prop: "params", |
||||
type: "textarea", |
||||
span: 24, |
||||
minRows: 2, |
||||
hide: true |
||||
}, |
||||
{ |
||||
label: "日志数据", |
||||
prop: "stackTrace", |
||||
type: "textarea", |
||||
span: 24, |
||||
minRows: 16, |
||||
hide: true |
||||
} |
||||
] |
||||
}, |
||||
data: [] |
||||
}; |
||||
}, |
||||
computed: { |
||||
...mapGetters(["permission"]), |
||||
permissionList() { |
||||
return { |
||||
viewBtn: this.vaildData(this.permission.log_error_view, false) |
||||
}; |
||||
} |
||||
}, |
||||
methods: { |
||||
searchReset() { |
||||
this.query = {}; |
||||
this.onLoad(this.page); |
||||
}, |
||||
searchChange(params, done) { |
||||
this.query = params; |
||||
this.page.currentPage = 1; |
||||
this.onLoad(this.page, params); |
||||
done(); |
||||
}, |
||||
beforeOpen(done, type) { |
||||
if (["edit", "view"].includes(type)) { |
||||
getErrorLogs(this.form.id).then(res => { |
||||
this.form = res.data.data; |
||||
}); |
||||
} |
||||
done(); |
||||
}, |
||||
currentChange(currentPage){ |
||||
this.page.currentPage = currentPage; |
||||
}, |
||||
sizeChange(pageSize){ |
||||
this.page.pageSize = pageSize; |
||||
}, |
||||
refreshChange() { |
||||
this.onLoad(this.page, this.query); |
||||
}, |
||||
onLoad(page, params = {}) { |
||||
this.loading = true; |
||||
getErrorList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => { |
||||
const data = res.data.data; |
||||
this.page.total = data.total; |
||||
this.data = data.records; |
||||
this.loading = false; |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
<style> |
||||
</style> |
@ -1,165 +0,0 @@
|
||||
<template> |
||||
<basic-container> |
||||
<avue-crud :option="option" |
||||
:table-loading="loading" |
||||
:data="data" |
||||
ref="crud" |
||||
v-model="form" |
||||
:permission="permissionList" |
||||
:page.sync="page" |
||||
:before-open="beforeOpen" |
||||
@search-change="searchChange" |
||||
@search-reset="searchReset" |
||||
@current-change="currentChange" |
||||
@size-change="sizeChange" |
||||
@refresh-change="refreshChange" |
||||
@on-load="onLoad"> |
||||
</avue-crud> |
||||
</basic-container> |
||||
</template> |
||||
|
||||
<script> |
||||
import {getUsualList, getUsualLogs} from "@/api/logs"; |
||||
import {mapGetters} from "vuex"; |
||||
|
||||
export default { |
||||
data() { |
||||
return { |
||||
form: {}, |
||||
selectionList: [], |
||||
query: {}, |
||||
loading: true, |
||||
page: { |
||||
pageSize: 10, |
||||
currentPage: 1, |
||||
total: 0 |
||||
}, |
||||
option: { |
||||
height: 'auto', |
||||
calcHeight: 30, |
||||
tip: false, |
||||
searchShow: true, |
||||
searchMenuSpan: 6, |
||||
border: true, |
||||
index: true, |
||||
viewBtn: true, |
||||
editBtn: false, |
||||
addBtn: false, |
||||
delBtn: false, |
||||
menuWidth: 120, |
||||
dialogType: 'drawer', |
||||
column: [ |
||||
{ |
||||
label: "服务id", |
||||
prop: "serviceId", |
||||
search: true |
||||
}, |
||||
{ |
||||
label: "服务host", |
||||
prop: "serverHost", |
||||
search: true |
||||
}, |
||||
{ |
||||
label: "服务ip", |
||||
prop: "serverIp" |
||||
}, |
||||
{ |
||||
label: "软件环境", |
||||
prop: "env", |
||||
width:'80' |
||||
}, |
||||
{ |
||||
label: "日志级别", |
||||
prop: "logLevel" |
||||
}, |
||||
{ |
||||
label: "日志id", |
||||
prop: "logId" |
||||
}, |
||||
{ |
||||
label: "请求接口", |
||||
prop: "requestUri" |
||||
}, |
||||
{ |
||||
label: "日志时间", |
||||
prop: "createTime", |
||||
width:'180' |
||||
}, |
||||
{ |
||||
label: "用户代理", |
||||
prop: "userAgent", |
||||
span: 24, |
||||
hide: true |
||||
}, |
||||
{ |
||||
label: "日志数据", |
||||
prop: "logData", |
||||
type: "textarea", |
||||
span: 24, |
||||
minRows: 2, |
||||
hide: true |
||||
}, |
||||
{ |
||||
label: "请求数据", |
||||
prop: "params", |
||||
type: "textarea", |
||||
span: 24, |
||||
minRows: 2, |
||||
hide: true |
||||
} |
||||
] |
||||
}, |
||||
data: [] |
||||
}; |
||||
}, |
||||
computed: { |
||||
...mapGetters(["permission"]), |
||||
permissionList() { |
||||
return { |
||||
viewBtn: this.vaildData(this.permission.log_usual_view, false) |
||||
}; |
||||
} |
||||
}, |
||||
methods: { |
||||
searchReset() { |
||||
this.query = {}; |
||||
this.onLoad(this.page); |
||||
}, |
||||
searchChange(params, done) { |
||||
this.query = params; |
||||
this.page.currentPage = 1; |
||||
this.onLoad(this.page, params); |
||||
done(); |
||||
}, |
||||
beforeOpen(done, type) { |
||||
if (["edit", "view"].includes(type)) { |
||||
getUsualLogs(this.form.id).then(res => { |
||||
this.form = res.data.data; |
||||
}); |
||||
} |
||||
done(); |
||||
}, |
||||
currentChange(currentPage){ |
||||
this.page.currentPage = currentPage; |
||||
}, |
||||
sizeChange(pageSize){ |
||||
this.page.pageSize = pageSize; |
||||
}, |
||||
refreshChange() { |
||||
this.onLoad(this.page, this.query); |
||||
}, |
||||
onLoad(page, params = {}) { |
||||
this.loading = true; |
||||
getUsualList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => { |
||||
const data = res.data.data; |
||||
this.page.total = data.total; |
||||
this.data = data.records; |
||||
this.loading = false; |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
<style> |
||||
</style> |
@ -1,288 +0,0 @@
|
||||
<template> |
||||
<basic-container> |
||||
<avue-crud |
||||
:option="option" |
||||
:table-loading="loading" |
||||
:data="data" |
||||
:page.sync="page" |
||||
:permission="permissionList" |
||||
:before-open="beforeOpen" |
||||
v-model="form" |
||||
ref="crud" |
||||
@row-update="rowUpdate" |
||||
@row-save="rowSave" |
||||
@row-del="rowDel" |
||||
@search-change="searchChange" |
||||
@search-reset="searchReset" |
||||
@current-change="currentChange" |
||||
@size-change="sizeChange" |
||||
@refresh-change="refreshChange" |
||||
@on-load="onLoad" |
||||
> |
||||
<template slot="standardPrice" slot-scope="scope"> |
||||
{{ printFn(scope.row.standardPrice / 10000) }} |
||||
</template> |
||||
</avue-crud> |
||||
</basic-container> |
||||
</template> |
||||
|
||||
<script> |
||||
import { |
||||
add, |
||||
getDetail, |
||||
getList, |
||||
remove, |
||||
update, |
||||
} from "@/api/core/product/productApi"; |
||||
import { mapGetters } from "vuex"; |
||||
import func from "@/util/func"; |
||||
import * as math from "mathjs"; |
||||
export default { |
||||
provide() { |
||||
return { |
||||
getProductCrudRef: () => this.$refs.crud, |
||||
}; |
||||
}, |
||||
data() { |
||||
return { |
||||
form: {}, |
||||
query: {}, |
||||
loading: true, |
||||
page: { |
||||
pageSize: 10, |
||||
currentPage: 1, |
||||
total: 0, |
||||
}, |
||||
option: { |
||||
tip: false, |
||||
searchShow: true, |
||||
searchMenuSpan: 6, |
||||
border: true, |
||||
index: true, |
||||
addBtn: false, |
||||
delBtn: false, |
||||
editBtn: true, |
||||
viewBtn: true, |
||||
columnBtn: false, |
||||
selection: false, |
||||
dialogClickModal: false, |
||||
dialogWidth: "45%", |
||||
column: [ |
||||
{ |
||||
label: "API名称", |
||||
prop: "apiName", |
||||
search: true, |
||||
searchPlaceholder: "请输入API名称", |
||||
addDisplay: false, |
||||
rules: [ |
||||
{ |
||||
required: true, |
||||
message: "请输入api名称", |
||||
trigger: "blur", |
||||
}, |
||||
], |
||||
}, |
||||
|
||||
{ |
||||
label: "接口类型", |
||||
type: "select", |
||||
dicUrl: "/api/iot-system/dict/dictionary?code=api_type", |
||||
props: { |
||||
label: "dictValue", |
||||
value: "dictKey", |
||||
}, |
||||
dataType: "number", |
||||
prop: "apiType", |
||||
search: true, |
||||
slot: true, |
||||
rules: [ |
||||
{ |
||||
required: true, |
||||
message: "请选择所属品类", |
||||
trigger: "blur", |
||||
}, |
||||
], |
||||
editDisplay: false, |
||||
}, |
||||
{ |
||||
label: "运营商类型", |
||||
type: "select", |
||||
dicUrl: "/api/iot-system/dict/dictionary?code=net_type", |
||||
props: { |
||||
label: "dictValue", |
||||
value: "dictKey", |
||||
}, |
||||
dataType: "string", |
||||
prop: "netType", |
||||
|
||||
search: true, |
||||
searchLabelWidth: 90, |
||||
slot: true, |
||||
rules: [ |
||||
{ |
||||
required: true, |
||||
message: "请选择节点类型", |
||||
trigger: "blur", |
||||
}, |
||||
], |
||||
editDisplay: false, |
||||
}, |
||||
{ |
||||
label: "基准单价(元)", |
||||
prop: "standardPrice", |
||||
|
||||
labelWidth: 100, |
||||
slot: true, |
||||
rules: [ |
||||
{ required: false, message: "请输入基准单价", trigger: "blur" }, |
||||
], |
||||
}, |
||||
{ |
||||
label: "接口排序", |
||||
prop: "sort", |
||||
|
||||
rules: [ |
||||
{ required: false, message: "请输入序号", trigger: "blur" }, |
||||
], |
||||
}, |
||||
], |
||||
}, |
||||
data: [], |
||||
}; |
||||
}, |
||||
watch: { |
||||
"form.productCategory"() { |
||||
const category = func.toInt(this.form.productCategory, 1); |
||||
this.$refs.crud.option.column.filter((item) => { |
||||
if (item.prop === "vendorConfigId") { |
||||
item.addDisplay = category === 3; |
||||
item.viewDisplay = category === 3; |
||||
} |
||||
if (item.prop === "networkProtocol") { |
||||
item.addDisplay = category === 1; |
||||
} |
||||
if (item.prop === "securityType") { |
||||
item.addDisplay = category === 1; |
||||
} |
||||
}); |
||||
}, |
||||
}, |
||||
computed: { |
||||
...mapGetters(["permission"]), |
||||
permissionList() { |
||||
return { |
||||
viewBtn: this.vaildData(this.permission.productApi_view, false), |
||||
editBtn: this.vaildData(this.permission.productApi_edit, false), |
||||
}; |
||||
}, |
||||
}, |
||||
methods: { |
||||
rowSave(row, done, loading) { |
||||
add(row).then( |
||||
() => { |
||||
this.onLoad(this.page); |
||||
this.$message({ |
||||
type: "success", |
||||
message: "操作成功!", |
||||
}); |
||||
done(); |
||||
}, |
||||
(error) => { |
||||
loading(); |
||||
window.console.log(error); |
||||
} |
||||
); |
||||
}, |
||||
rowUpdate(row, index, done, loading) { |
||||
let { id, apiName, sort } = row; |
||||
let standardPrice = this.printFn(row.standardPrice * 10000); |
||||
const params = { id, apiName, sort, standardPrice }; |
||||
|
||||
update(params).then( |
||||
() => { |
||||
this.onLoad(this.page); |
||||
this.$message({ |
||||
type: "success", |
||||
message: "操作成功!", |
||||
}); |
||||
done(); |
||||
}, |
||||
(error) => { |
||||
loading(); |
||||
console.log(error); |
||||
} |
||||
); |
||||
}, |
||||
rowDel(row) { |
||||
this.$confirm("确定将选择数据删除?", { |
||||
confirmButtonText: "确定", |
||||
cancelButtonText: "取消", |
||||
type: "warning", |
||||
}) |
||||
.then(() => { |
||||
return remove(row.id); |
||||
}) |
||||
.then(() => { |
||||
this.onLoad(this.page); |
||||
this.$message({ |
||||
type: "success", |
||||
message: "操作成功!", |
||||
}); |
||||
}); |
||||
}, |
||||
beforeOpen(done, type) { |
||||
if (["edit", "view"].includes(type)) { |
||||
getDetail(this.form.id).then((res) => { |
||||
this.form = res.data.data; |
||||
this.form.standardPrice = this.printFn( |
||||
res.data.data.standardPrice / 10000 |
||||
); |
||||
}); |
||||
} |
||||
done(); |
||||
}, |
||||
searchReset() { |
||||
this.query = {}; |
||||
this.onLoad(this.page); |
||||
}, |
||||
searchChange(params, done) { |
||||
this.query = params; |
||||
this.page.currentPage = 1; |
||||
this.onLoad(this.page, params); |
||||
done(); |
||||
}, |
||||
currentChange(currentPage) { |
||||
this.page.currentPage = currentPage; |
||||
}, |
||||
sizeChange(pageSize) { |
||||
this.page.pageSize = pageSize; |
||||
}, |
||||
refreshChange() { |
||||
this.onLoad(this.page, this.query); |
||||
}, |
||||
onLoad(page, params = {}) { |
||||
this.loading = true; |
||||
getList( |
||||
page.currentPage, |
||||
page.pageSize, |
||||
Object.assign(params, this.query) |
||||
).then((res) => { |
||||
const data = res.data.data; |
||||
this.page.total = data.total; |
||||
this.data = data.records; |
||||
this.loading = false; |
||||
}); |
||||
}, |
||||
printFn(value) { |
||||
const precision = 14; |
||||
return Number(math.format(value, precision)); |
||||
}, |
||||
}, |
||||
}; |
||||
</script> |
||||
|
||||
<style lang="scss" scoped> |
||||
::v-deep .el-card__body { |
||||
position: relative; |
||||
} |
||||
</style> |
@ -1,203 +0,0 @@
|
||||
<template> |
||||
<basic-container> |
||||
<avue-crud :option="option" |
||||
:table-loading="loading" |
||||
:data="data" |
||||
ref="crud" |
||||
v-model="form" |
||||
:page.sync="page" |
||||
:permission="permissionList" |
||||
@row-del="rowDel" |
||||
@search-change="searchChange" |
||||
@search-reset="searchReset" |
||||
@selection-change="selectionChange" |
||||
@current-change="currentChange" |
||||
@size-change="sizeChange" |
||||
@refresh-change="refreshChange" |
||||
@on-load="onLoad"> |
||||
<template slot="menuLeft"> |
||||
<el-button type="danger" |
||||
size="small" |
||||
icon="el-icon-delete" |
||||
plain |
||||
@click="handleDelete">删 除 |
||||
</el-button> |
||||
</template> |
||||
<template slot-scope="scope" slot="menu"> |
||||
<el-button |
||||
type="text" |
||||
icon="el-icon-edit-outline" |
||||
size="small" |
||||
@click.stop="handleDesign(scope.row.name)" |
||||
v-if="userInfo.role_name.includes('admin')" |
||||
>设计 |
||||
</el-button> |
||||
<el-button |
||||
type="text" |
||||
icon="el-icon-view" |
||||
size="small" |
||||
@click.stop="handlePreview(scope.row.name)" |
||||
v-if="userInfo.role_name.includes('admin')" |
||||
>预览 |
||||
</el-button> |
||||
</template> |
||||
<template slot-scope="{row}" slot="name"> |
||||
<el-tag style="cursor:pointer" @click="handlePreview(row.name)">{{ row.name }}</el-tag> |
||||
</template> |
||||
</avue-crud> |
||||
</basic-container> |
||||
</template> |
||||
|
||||
<script> |
||||
import {getList, remove} from "@/api/report/report"; |
||||
import {mapGetters} from "vuex"; |
||||
|
||||
export default { |
||||
data() { |
||||
return { |
||||
form: {}, |
||||
selectionList: [], |
||||
query: {}, |
||||
loading: true, |
||||
page: { |
||||
pageSize: 10, |
||||
currentPage: 1, |
||||
total: 0 |
||||
}, |
||||
option: { |
||||
height: 'auto', |
||||
calcHeight: 30, |
||||
tip: false, |
||||
searchShow: true, |
||||
searchMenuSpan: 6, |
||||
border: true, |
||||
index: true, |
||||
selection: true, |
||||
viewBtn: true, |
||||
dialogClickModal: false, |
||||
column: [ |
||||
{ |
||||
label: "文件名", |
||||
prop: "name", |
||||
search: true, |
||||
slot: true, |
||||
}, |
||||
{ |
||||
label: "创建时间", |
||||
prop: "createTime", |
||||
}, |
||||
{ |
||||
label: "更新时间", |
||||
prop: "updateTime", |
||||
} |
||||
] |
||||
}, |
||||
data: [] |
||||
}; |
||||
}, |
||||
computed: { |
||||
...mapGetters(["userInfo", "permission"]), |
||||
permissionList() { |
||||
return { |
||||
addBtn: false, |
||||
viewBtn: false, |
||||
delBtn: true, |
||||
editBtn: false |
||||
}; |
||||
}, |
||||
ids() { |
||||
let ids = []; |
||||
this.selectionList.forEach(ele => { |
||||
ids.push(ele.id); |
||||
}); |
||||
return ids.join(","); |
||||
} |
||||
}, |
||||
methods: { |
||||
handlePreview(name) { |
||||
this.$router.push({path: `/myiframe/urlPath?name=preview-${name}&src=${this.website.reportUrl}/preview?_u=blade-${name}`}); |
||||
}, |
||||
handleDesign(name) { |
||||
this.$router.push({path: `/myiframe/urlPath?name=designer-${name}&src=${this.website.reportUrl}/designer?_u=blade-${name}`}); |
||||
}, |
||||
rowDel(row) { |
||||
this.$confirm("确定将选择数据删除?", { |
||||
confirmButtonText: "确定", |
||||
cancelButtonText: "取消", |
||||
type: "warning" |
||||
}) |
||||
.then(() => { |
||||
return remove(row.id); |
||||
}) |
||||
.then(() => { |
||||
this.onLoad(this.page); |
||||
this.$message({ |
||||
type: "success", |
||||
message: "操作成功!" |
||||
}); |
||||
}); |
||||
}, |
||||
searchReset() { |
||||
this.query = {}; |
||||
this.onLoad(this.page); |
||||
}, |
||||
searchChange(params, done) { |
||||
this.query = params; |
||||
this.page.currentPage = 1; |
||||
this.onLoad(this.page, params); |
||||
done(); |
||||
}, |
||||
selectionChange(list) { |
||||
this.selectionList = list; |
||||
}, |
||||
selectionClear() { |
||||
this.selectionList = []; |
||||
this.$refs.crud.toggleSelection(); |
||||
}, |
||||
handleDelete() { |
||||
if (this.selectionList.length === 0) { |
||||
this.$message.warning("请选择至少一条数据"); |
||||
return; |
||||
} |
||||
this.$confirm("确定将选择数据删除?", { |
||||
confirmButtonText: "确定", |
||||
cancelButtonText: "取消", |
||||
type: "warning" |
||||
}) |
||||
.then(() => { |
||||
return remove(this.ids); |
||||
}) |
||||
.then(() => { |
||||
this.onLoad(this.page); |
||||
this.$message({ |
||||
type: "success", |
||||
message: "操作成功!" |
||||
}); |
||||
this.$refs.crud.toggleSelection(); |
||||
}); |
||||
}, |
||||
currentChange(currentPage) { |
||||
this.page.currentPage = currentPage; |
||||
}, |
||||
sizeChange(pageSize) { |
||||
this.page.pageSize = pageSize; |
||||
}, |
||||
refreshChange() { |
||||
this.onLoad(this.page, this.query); |
||||
}, |
||||
onLoad(page, params = {}) { |
||||
this.loading = true; |
||||
getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => { |
||||
const data = res.data.data; |
||||
this.page.total = data.total; |
||||
this.data = data.records; |
||||
this.loading = false; |
||||
this.selectionClear(); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
<style> |
||||
</style> |
@ -1,231 +0,0 @@
|
||||
<template> |
||||
<basic-container> |
||||
<avue-crud :option="option" |
||||
:table-loading="loading" |
||||
:data="data" |
||||
ref="crud" |
||||
v-model="form" |
||||
@search-change="searchChange" |
||||
@search-reset="searchReset" |
||||
@selection-change="selectionChange" |
||||
@current-change="currentChange" |
||||
@size-change="sizeChange" |
||||
@refresh-change="refreshChange" |
||||
@on-load="onLoad"> |
||||
<template slot-scope="scope" slot="menu"> |
||||
<el-button type="text" |
||||
size="small" |
||||
v-if="permission.work_claim_sign" |
||||
plain |
||||
class="none-border" |
||||
@click.stop="handleClaim(scope.row)">签收 |
||||
</el-button> |
||||
<el-button type="text" |
||||
size="small" |
||||
v-if="permission.work_claim_detail" |
||||
plain |
||||
class="none-border" |
||||
@click.stop="handleDetail(scope.row)">详情 |
||||
</el-button> |
||||
<el-button type="text" |
||||
size="small" |
||||
v-if="permission.work_claim_follow" |
||||
plain |
||||
class="none-border" |
||||
@click.stop="handleImage(scope.row,scope.index)">跟踪 |
||||
</el-button> |
||||
</template> |
||||
<template slot-scope="{row}" |
||||
slot="processDefinitionVersion"> |
||||
<el-tag>v{{row.processDefinitionVersion}}</el-tag> |
||||
</template> |
||||
</avue-crud> |
||||
<el-dialog title="流程图" |
||||
append-to-body |
||||
:visible.sync="flowBox" |
||||
:fullscreen="true"> |
||||
<iframe |
||||
:src=flowUrl |
||||
width="100%" |
||||
height="700" |
||||
title="流程图" |
||||
frameBorder="no" |
||||
border="0" |
||||
marginWidth="0" |
||||
marginHeight="0" |
||||
scrolling="no" |
||||
allowTransparency="yes"> |
||||
</iframe> |
||||
<span slot="footer" |
||||
class="dialog-footer"> |
||||
<el-button @click="flowBox = false">关 闭</el-button> |
||||
</span> |
||||
</el-dialog> |
||||
</basic-container> |
||||
</template> |
||||
|
||||
<script> |
||||
import {mapGetters} from "vuex"; |
||||
import {claimList, claimTask} from "@/api/work/work"; |
||||
import {flowCategory, flowRoute} from "@/util/flow"; |
||||
|
||||
export default { |
||||
data() { |
||||
return { |
||||
form: {}, |
||||
selectionId: '', |
||||
selectionList: [], |
||||
query: {}, |
||||
loading: true, |
||||
page: { |
||||
pageSize: 10, |
||||
currentPage: 1, |
||||
total: 0 |
||||
}, |
||||
flowBox: false, |
||||
flowUrl: '', |
||||
workBox: false, |
||||
option: { |
||||
height: 'auto', |
||||
calcHeight: 30, |
||||
tip: false, |
||||
simplePage: true, |
||||
searchShow: true, |
||||
searchMenuSpan: 6, |
||||
border: true, |
||||
index: true, |
||||
selection: true, |
||||
editBtn: false, |
||||
addBtn: false, |
||||
viewBtn: false, |
||||
delBtn: false, |
||||
dialogWidth: 900, |
||||
menuWidth: 150, |
||||
dialogClickModal: false, |
||||
column: [ |
||||
{ |
||||
label: "流程分类", |
||||
type: "select", |
||||
row: true, |
||||
dicUrl: "/api/iot-system/dict/dictionary?code=flow", |
||||
props: { |
||||
label: "dictValue", |
||||
value: "dictKey" |
||||
}, |
||||
dataType: "number", |
||||
slot: true, |
||||
prop: "category", |
||||
search: true, |
||||
hide: true, |
||||
width: 100, |
||||
}, |
||||
{ |
||||
label: '流程名称', |
||||
prop: 'processDefinitionName', |
||||
search: true, |
||||
}, |
||||
{ |
||||
label: '当前步骤', |
||||
prop: 'taskName', |
||||
}, |
||||
{ |
||||
label: '流程版本', |
||||
prop: 'processDefinitionVersion', |
||||
slot: true, |
||||
width: 80, |
||||
}, |
||||
{ |
||||
label: '申请时间', |
||||
prop: 'createTime', |
||||
width: 165, |
||||
}, |
||||
] |
||||
}, |
||||
data: [] |
||||
}; |
||||
}, |
||||
computed: { |
||||
...mapGetters(["permission", "flowRoutes"]), |
||||
ids() { |
||||
let ids = []; |
||||
this.selectionList.forEach(ele => { |
||||
ids.push(ele.id); |
||||
}); |
||||
return ids.join(","); |
||||
}, |
||||
}, |
||||
methods: { |
||||
searchReset() { |
||||
this.query = {}; |
||||
this.onLoad(this.page); |
||||
}, |
||||
searchChange(params, done) { |
||||
this.query = params; |
||||
this.page.currentPage = 1; |
||||
this.onLoad(this.page, params); |
||||
done(); |
||||
}, |
||||
selectionChange(list) { |
||||
this.selectionList = list; |
||||
}, |
||||
selectionClear() { |
||||
this.selectionList = []; |
||||
this.$refs.crud.toggleSelection(); |
||||
}, |
||||
handleClaim(row) { |
||||
this.$confirm("确定签收此任务?", { |
||||
confirmButtonText: "确定", |
||||
cancelButtonText: "取消", |
||||
type: "warning" |
||||
}) |
||||
.then(() => { |
||||
return claimTask(row.taskId); |
||||
}) |
||||
.then(() => { |
||||
this.onLoad(this.page); |
||||
this.$message({ |
||||
type: "success", |
||||
message: "操作成功!" |
||||
}); |
||||
}); |
||||
}, |
||||
handleDetail(row) { |
||||
this.$router.push({path: `/work/process/${flowRoute(this.flowRoutes, row.category)}/detail/${row.processInstanceId}/${row.businessId}`}); |
||||
}, |
||||
handleImage(row) { |
||||
this.flowUrl = `/api/hulk-flow/process/diagram-view?processInstanceId=${row.processInstanceId}`; |
||||
this.flowBox = true; |
||||
}, |
||||
currentChange(currentPage){ |
||||
this.page.currentPage = currentPage; |
||||
}, |
||||
sizeChange(pageSize){ |
||||
this.page.pageSize = pageSize; |
||||
}, |
||||
refreshChange() { |
||||
this.onLoad(this.page, this.query); |
||||
}, |
||||
onLoad(page, params = {}) { |
||||
const query = { |
||||
...this.query, |
||||
category: (params.category) ? flowCategory(params.category) : null |
||||
}; |
||||
this.loading = true; |
||||
claimList(page.currentPage, page.pageSize, Object.assign(params, query)).then(res => { |
||||
const data = res.data.data; |
||||
this.page.total = data.total; |
||||
this.data = data.records; |
||||
this.loading = false; |
||||
this.selectionClear(); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
<style> |
||||
.none-border { |
||||
border: 0; |
||||
background-color: transparent !important; |
||||
} |
||||
</style> |
@ -1,207 +0,0 @@
|
||||
<template> |
||||
<basic-container> |
||||
<avue-crud :option="option" |
||||
:table-loading="loading" |
||||
:data="data" |
||||
ref="crud" |
||||
v-model="form" |
||||
:page.sync="page" |
||||
@search-change="searchChange" |
||||
@search-reset="searchReset" |
||||
@selection-change="selectionChange" |
||||
@current-change="currentChange" |
||||
@size-change="sizeChange" |
||||
@refresh-change="refreshChange" |
||||
@on-load="onLoad"> |
||||
<template slot-scope="scope" slot="menu"> |
||||
<el-button type="text" |
||||
size="small" |
||||
v-if="permission.work_done_detail" |
||||
plain |
||||
class="none-border" |
||||
@click.stop="handleDetail(scope.row)">详情 |
||||
</el-button> |
||||
<el-button type="text" |
||||
size="small" |
||||
v-if="permission.work_done_follow" |
||||
plain |
||||
class="none-border" |
||||
@click.stop="handleImage(scope.row,scope.index)">跟踪 |
||||
</el-button> |
||||
</template> |
||||
<template slot-scope="{row}" |
||||
slot="processDefinitionVersion"> |
||||
<el-tag>v{{row.processDefinitionVersion}}</el-tag> |
||||
</template> |
||||
</avue-crud> |
||||
<el-dialog title="流程图" |
||||
append-to-body |
||||
:visible.sync="flowBox" |
||||
:fullscreen="true"> |
||||
<iframe |
||||
:src=flowUrl |
||||
width="100%" |
||||
height="700" |
||||
title="流程图" |
||||
frameBorder="no" |
||||
border="0" |
||||
marginWidth="0" |
||||
marginHeight="0" |
||||
scrolling="no" |
||||
allowTransparency="yes"> |
||||
</iframe> |
||||
<span slot="footer" |
||||
class="dialog-footer"> |
||||
<el-button @click="flowBox = false">关 闭</el-button> |
||||
</span> |
||||
</el-dialog> |
||||
</basic-container> |
||||
</template> |
||||
|
||||
<script> |
||||
import {mapGetters} from "vuex"; |
||||
import {doneList} from "@/api/work/work"; |
||||
import {flowCategory, flowRoute} from "@/util/flow"; |
||||
|
||||
export default { |
||||
data() { |
||||
return { |
||||
form: {}, |
||||
selectionId: '', |
||||
selectionList: [], |
||||
query: {}, |
||||
loading: true, |
||||
page: { |
||||
pageSize: 10, |
||||
currentPage: 1, |
||||
total: 0 |
||||
}, |
||||
flowBox: false, |
||||
flowUrl: '', |
||||
workBox: false, |
||||
option: { |
||||
height: 'auto', |
||||
calcHeight: 30, |
||||
tip: false, |
||||
searchShow: true, |
||||
searchMenuSpan: 6, |
||||
border: true, |
||||
index: true, |
||||
selection: true, |
||||
editBtn: false, |
||||
addBtn: false, |
||||
viewBtn: false, |
||||
delBtn: false, |
||||
dialogWidth: 900, |
||||
menuWidth: 150, |
||||
dialogClickModal: false, |
||||
column: [ |
||||
{ |
||||
label: "流程分类", |
||||
type: "select", |
||||
row: true, |
||||
dicUrl: "/api/iot-system/dict/dictionary?code=flow", |
||||
props: { |
||||
label: "dictValue", |
||||
value: "dictKey" |
||||
}, |
||||
dataType: "number", |
||||
slot: true, |
||||
prop: "category", |
||||
search: true, |
||||
hide: true, |
||||
width: 100, |
||||
}, |
||||
{ |
||||
label: '流程名称', |
||||
prop: 'processDefinitionName', |
||||
search: true, |
||||
}, |
||||
{ |
||||
label: '当前步骤', |
||||
prop: 'taskName', |
||||
}, |
||||
{ |
||||
label: '流程版本', |
||||
prop: 'processDefinitionVersion', |
||||
slot: true, |
||||
width: 80, |
||||
}, |
||||
{ |
||||
label: '申请时间', |
||||
prop: 'createTime', |
||||
width: 165, |
||||
}, |
||||
] |
||||
}, |
||||
data: [] |
||||
}; |
||||
}, |
||||
computed: { |
||||
...mapGetters(["permission", "flowRoutes"]), |
||||
ids() { |
||||
let ids = []; |
||||
this.selectionList.forEach(ele => { |
||||
ids.push(ele.id); |
||||
}); |
||||
return ids.join(","); |
||||
}, |
||||
}, |
||||
methods: { |
||||
searchReset() { |
||||
this.query = {}; |
||||
this.onLoad(this.page); |
||||
}, |
||||
searchChange(params, done) { |
||||
this.query = params; |
||||
this.page.currentPage = 1; |
||||
this.onLoad(this.page, params); |
||||
done(); |
||||
}, |
||||
selectionChange(list) { |
||||
this.selectionList = list; |
||||
}, |
||||
selectionClear() { |
||||
this.selectionList = []; |
||||
this.$refs.crud.toggleSelection(); |
||||
}, |
||||
handleDetail(row) { |
||||
this.$router.push({path: `/work/process/${flowRoute(this.flowRoutes, row.category)}/detail/${row.processInstanceId}/${row.businessId}`}); |
||||
}, |
||||
handleImage(row) { |
||||
this.flowUrl = `/api/hulk-flow/process/diagram-view?processInstanceId=${row.processInstanceId}`; |
||||
this.flowBox = true; |
||||
}, |
||||
currentChange(currentPage){ |
||||
this.page.currentPage = currentPage; |
||||
}, |
||||
sizeChange(pageSize){ |
||||
this.page.pageSize = pageSize; |
||||
}, |
||||
refreshChange() { |
||||
this.onLoad(this.page, this.query); |
||||
}, |
||||
onLoad(page, params = {}) { |
||||
const query = { |
||||
...this.query, |
||||
category: (params.category) ? flowCategory(params.category) : null |
||||
}; |
||||
this.loading = true; |
||||
doneList(page.currentPage, page.pageSize, Object.assign(params, query)).then(res => { |
||||
const data = res.data.data; |
||||
this.page.total = data.total; |
||||
this.data = data.records; |
||||
this.loading = false; |
||||
this.selectionClear(); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
<style> |
||||
.none-border { |
||||
border: 0; |
||||
background-color: transparent !important; |
||||
} |
||||
</style> |
@ -1,108 +0,0 @@
|
||||
<template> |
||||
<basic-container> |
||||
<el-form ref="form" :model="form" label-width="80px"> |
||||
<el-row type="flex" class="row-bg" justify="end"> |
||||
<el-form-item> |
||||
<el-button @click="handleCancel">关闭</el-button> |
||||
</el-form-item> |
||||
</el-row> |
||||
<el-card shadow="hover"> |
||||
<div slot="header"> |
||||
<span>审批信息</span> |
||||
</div> |
||||
<el-form-item label="申请人"> |
||||
<el-input :disabled="true" v-model="form.flow.assigneeName" /> |
||||
</el-form-item> |
||||
<el-row> |
||||
<el-col :span="12"> |
||||
<el-form-item label="开始时间"> |
||||
<el-input :disabled="true" v-model="form.startTime" /> |
||||
</el-form-item> |
||||
</el-col> |
||||
<el-col :span="12"> |
||||
<el-form-item label="结束时间"> |
||||
<el-input :disabled="true" v-model="form.endTime" /> |
||||
</el-form-item> |
||||
</el-col> |
||||
</el-row> |
||||
<el-form-item label="请假理由"> |
||||
<el-input :disabled="true" type="textarea" v-model="form.reason" /> |
||||
</el-form-item> |
||||
</el-card> |
||||
<el-card shadow="hover"> |
||||
<div slot="header"> |
||||
<span>流程信息</span> |
||||
</div> |
||||
<el-row type="flex" class="row-bg"> |
||||
<el-timeline> |
||||
<el-timeline-item :key="flow.id" :timestamp="flow.createTime" v-for="flow in flowList" placement="top"> |
||||
<el-card shadow="hover"> |
||||
<p>{{flow.assigneeName}} 在 [{{flow.createTime}}] 开始处理 [{{flow.historyActivityName}}] 环节</p> |
||||
<p v-if="flow.historyActivityDurationTime!==''">任务历时 [{{flow.historyActivityDurationTime}}]</p> |
||||
<p v-if="flow.comment!==''">批复意见: [{{flow.comment}}]</p> |
||||
<p v-if="flow.endTime!==''">结束时间: [{{flow.endTime}}]</p> |
||||
</el-card> |
||||
</el-timeline-item> |
||||
</el-timeline> |
||||
</el-row> |
||||
</el-card> |
||||
<el-card shadow="hover"> |
||||
<div slot="header"> |
||||
<span>流程跟踪</span> |
||||
</div> |
||||
<el-row type="flex" class="row-bg"> |
||||
<img :src="src" alt="design"> |
||||
</el-row> |
||||
</el-card> |
||||
</el-form> |
||||
</basic-container> |
||||
</template> |
||||
|
||||
<script> |
||||
import {historyFlowList, leaveDetail} from "@/api/work/process"; |
||||
|
||||
export default { |
||||
data() { |
||||
return { |
||||
businessId: '', |
||||
processInstanceId: '', |
||||
src: '', |
||||
flowList: [], |
||||
form: { |
||||
flow:{ |
||||
assigneeName:'', |
||||
}, |
||||
startTime: '', |
||||
endTime: '', |
||||
reason: '', |
||||
} |
||||
} |
||||
}, |
||||
created() { |
||||
this.init(); |
||||
}, |
||||
methods: { |
||||
init() { |
||||
this.processInstanceId = this.$route.params.processInstanceId; |
||||
this.businessId = this.$route.params.businessId; |
||||
this.src = `/api/hulk-flow/process/diagram-view?processInstanceId=${this.$route.params.processInstanceId}&t=${new Date().getTime()}`; |
||||
historyFlowList(this.processInstanceId).then(res => { |
||||
const data = res.data; |
||||
if (data.success) { |
||||
this.flowList = data.data; |
||||
} |
||||
}) |
||||
leaveDetail(this.businessId).then(res => { |
||||
const data = res.data; |
||||
if (data.success) { |
||||
this.form = data.data; |
||||
} |
||||
}) |
||||
}, |
||||
handleCancel() { |
||||
this.$router.$avueRouter.closeTag(); |
||||
this.$router.push({path: `/work/start`}); |
||||
} |
||||
} |
||||
} |
||||
</script> |
@ -1,103 +0,0 @@
|
||||
<template> |
||||
<basic-container> |
||||
<avue-form :option="option" v-model="form" @submit="handleSubmit"/> |
||||
</basic-container> |
||||
</template> |
||||
|
||||
<script> |
||||
import {leaveProcess} from "@/api/work/process"; |
||||
|
||||
export default { |
||||
data() { |
||||
return { |
||||
form: {}, |
||||
option: { |
||||
group: [ |
||||
{ |
||||
icon: 'el-icon-info', |
||||
label: '请假基础信息', |
||||
prop: 'group1', |
||||
column: [ |
||||
{ |
||||
label: '审批人员', |
||||
prop: 'taskUser', |
||||
type: 'select', |
||||
dicUrl: `/api/iot-system/user/user-list`, |
||||
props: { |
||||
label: "account", |
||||
value: "id" |
||||
}, |
||||
span: 24, |
||||
rules: [ |
||||
{ |
||||
required: true, |
||||
message: '请选择审批人员', |
||||
trigger: 'blur' |
||||
} |
||||
] |
||||
}, |
||||
{ |
||||
label: '开始时间', |
||||
prop: 'startTime', |
||||
type: 'datetime', |
||||
valueFormat: 'yyyy-MM-dd HH:mm:ss', |
||||
rules: [ |
||||
{ |
||||
required: true, |
||||
message: '请选择开始时间', |
||||
trigger: 'blur' |
||||
} |
||||
] |
||||
}, |
||||
{ |
||||
label: '结束时间', |
||||
prop: 'endTime', |
||||
type: 'datetime', |
||||
valueFormat: 'yyyy-MM-dd HH:mm:ss', |
||||
rules: [ |
||||
{ |
||||
required: true, |
||||
message: '请选择结束时间', |
||||
trigger: 'blur' |
||||
} |
||||
] |
||||
}, |
||||
{ |
||||
label: '请假理由', |
||||
prop: 'reason', |
||||
type: 'textarea', |
||||
span: 24, |
||||
rules: [ |
||||
{ |
||||
required: true, |
||||
message: '请输入请假理由', |
||||
trigger: 'blur' |
||||
} |
||||
] |
||||
}, |
||||
] |
||||
}, |
||||
], |
||||
} |
||||
} |
||||
}, |
||||
methods: { |
||||
handleSubmit() { |
||||
const params = { |
||||
processDefinitionId: this.$route.params.processDefinitionId, |
||||
...this.form, |
||||
}; |
||||
leaveProcess(params).then(resp => { |
||||
const data = resp.data; |
||||
if (data.success) { |
||||
this.$message.success(data.msg); |
||||
this.$router.$avueRouter.closeTag(); |
||||
this.$router.push({path: `/work/start`}); |
||||
} else { |
||||
this.$message.error(data.msg || '提交失败'); |
||||
} |
||||
}); |
||||
} |
||||
} |
||||
} |
||||
</script> |
@ -1,170 +0,0 @@
|
||||
<template> |
||||
<basic-container> |
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
||||
<el-row type="flex" class="row-bg" justify="end"> |
||||
<el-form-item> |
||||
<el-button type="primary" @click="handleAgree">同意</el-button> |
||||
<el-button type="danger" @click="handleDisagree">驳回</el-button> |
||||
<el-button @click="handleCancel">关闭</el-button> |
||||
</el-form-item> |
||||
</el-row> |
||||
<el-card shadow="hover"> |
||||
<div slot="header"> |
||||
<span>审批信息</span> |
||||
</div> |
||||
<el-form-item label="申请人"> |
||||
<el-input :disabled="true" v-model="form.flow.assigneeName"/> |
||||
</el-form-item> |
||||
<el-row> |
||||
<el-col :span="12"> |
||||
<el-form-item label="开始时间"> |
||||
<el-input :disabled="true" v-model="form.startTime"/> |
||||
</el-form-item> |
||||
</el-col> |
||||
<el-col :span="12"> |
||||
<el-form-item label="结束时间"> |
||||
<el-input :disabled="true" v-model="form.endTime"/> |
||||
</el-form-item> |
||||
</el-col> |
||||
</el-row> |
||||
<el-form-item label="请假理由"> |
||||
<el-input :disabled="true" type="textarea" v-model="form.reason"/> |
||||
</el-form-item> |
||||
<el-form-item label="批复意见"> |
||||
<el-input type="textarea" v-model="form.comment"/> |
||||
</el-form-item> |
||||
</el-card> |
||||
<el-card shadow="hover"> |
||||
<div slot="header"> |
||||
<span>流程信息</span> |
||||
</div> |
||||
<el-row type="flex" class="row-bg"> |
||||
<el-timeline> |
||||
<el-timeline-item :key="flow.id" :timestamp="flow.createTime" v-for="flow in flowList" placement="top"> |
||||
<el-card shadow="hover"> |
||||
<p>{{flow.assigneeName}} 在 [{{flow.createTime}}] 开始处理 [{{flow.historyActivityName}}] 环节</p> |
||||
<p v-if="flow.historyActivityDurationTime!==''">任务历时 [{{flow.historyActivityDurationTime}}]</p> |
||||
<p v-if="flow.comment!==''">批复意见: [{{flow.comment}}]</p> |
||||
<p v-if="flow.endTime!==''">结束时间: [{{flow.endTime}}]</p> |
||||
</el-card> |
||||
</el-timeline-item> |
||||
</el-timeline> |
||||
</el-row> |
||||
</el-card> |
||||
<el-card shadow="hover"> |
||||
<div slot="header"> |
||||
<span>流程跟踪</span> |
||||
</div> |
||||
<el-row type="flex" class="row-bg"> |
||||
<img :src="src" alt="design"> |
||||
</el-row> |
||||
</el-card> |
||||
</el-form> |
||||
</basic-container> |
||||
</template> |
||||
|
||||
<script> |
||||
import {historyFlowList, leaveDetail} from "@/api/work/process"; |
||||
import {completeTask} from "@/api/work/work"; |
||||
|
||||
export default { |
||||
data() { |
||||
return { |
||||
taskId: '', |
||||
businessId: '', |
||||
processInstanceId: '', |
||||
src: '', |
||||
flowList: [], |
||||
form: { |
||||
flow: { |
||||
assigneeName: '', |
||||
}, |
||||
startTime: '', |
||||
endTime: '', |
||||
reason: '', |
||||
comment: '', |
||||
}, |
||||
} |
||||
}, |
||||
created() { |
||||
this.init(); |
||||
}, |
||||
beforeRouteUpdate(to, from, next) { |
||||
// 在当前路由改变,但是该组件被复用时调用 |
||||
// 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候 |
||||
// 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用 |
||||
// 可以访问组件实例 `this` |
||||
if (to.fullPath !== from.fullPath) { |
||||
next(); |
||||
this.init(); |
||||
} |
||||
}, |
||||
methods: { |
||||
init() { |
||||
this.taskId = this.$route.params.taskId; |
||||
this.processInstanceId = this.$route.params.processInstanceId; |
||||
this.businessId = this.$route.params.businessId; |
||||
this.src = `/api/hulk-flow/process/diagram-view?processInstanceId=${this.$route.params.processInstanceId}&t=${new Date().getTime()}`; |
||||
historyFlowList(this.processInstanceId).then(res => { |
||||
const data = res.data; |
||||
if (data.success) { |
||||
this.flowList = data.data; |
||||
} |
||||
}) |
||||
leaveDetail(this.businessId).then(res => { |
||||
const data = res.data; |
||||
if (data.success) { |
||||
this.form = data.data; |
||||
} |
||||
}) |
||||
}, |
||||
handleAgree() { |
||||
if (!this.form.comment) { |
||||
this.$message.warning('请先填写批复意见'); |
||||
return; |
||||
} |
||||
const params = { |
||||
taskId: this.taskId, |
||||
processInstanceId: this.processInstanceId, |
||||
flag: 'ok', |
||||
comment: this.form.comment, |
||||
}; |
||||
completeTask(params).then(res => { |
||||
const data = res.data; |
||||
if (data.success) { |
||||
this.$message.success(data.msg); |
||||
this.$router.$avueRouter.closeTag(); |
||||
this.$router.push({path: `/work/start`}); |
||||
} else { |
||||
this.$message.error(data.msg || '提交失败'); |
||||
} |
||||
}) |
||||
}, |
||||
handleDisagree() { |
||||
if (!this.form.comment) { |
||||
this.$message.warning('请先填写批复意见'); |
||||
return; |
||||
} |
||||
const params = { |
||||
taskId: this.taskId, |
||||
processInstanceId: this.processInstanceId, |
||||
comment: this.form.comment, |
||||
}; |
||||
completeTask(params).then(res => { |
||||
const data = res.data; |
||||
if (data.success) { |
||||
this.$message.success(data.msg); |
||||
this.$router.$avueRouter.closeTag(); |
||||
this.$router.push({path: `/work/start`}); |
||||
} else { |
||||
this.$message.error(data.msg || '提交失败'); |
||||
} |
||||
}) |
||||
}, |
||||
handleCancel() { |
||||
this.$router.$avueRouter.closeTag(); |
||||
this.$router.push({path: `/work/start`}); |
||||
} |
||||
} |
||||
} |
||||
</script> |
@ -1,217 +0,0 @@
|
||||
<template> |
||||
<basic-container> |
||||
<avue-crud :option="option" |
||||
:table-loading="loading" |
||||
:data="data" |
||||
ref="crud" |
||||
v-model="form" |
||||
:page.sync="page" |
||||
@search-change="searchChange" |
||||
@search-reset="searchReset" |
||||
@selection-change="selectionChange" |
||||
@current-change="currentChange" |
||||
@size-change="sizeChange" |
||||
@refresh-change="refreshChange" |
||||
@on-load="onLoad"> |
||||
<template slot-scope="scope" slot="menu"> |
||||
<el-button type="text" |
||||
size="small" |
||||
v-if="permission.work_send_detail" |
||||
plain |
||||
class="none-border" |
||||
@click.stop="handleDetail(scope.row)">详情 |
||||
</el-button> |
||||
<el-button type="text" |
||||
size="small" |
||||
v-if="permission.work_send_follow" |
||||
plain |
||||
class="none-border" |
||||
@click.stop="handleImage(scope.row,scope.index)">跟踪 |
||||
</el-button> |
||||
</template> |
||||
<template slot-scope="{row}" |
||||
slot="processDefinitionVersion"> |
||||
<el-tag>v{{row.processDefinitionVersion}}</el-tag> |
||||
</template> |
||||
<template slot-scope="{row}" |
||||
slot="processIsFinished"> |
||||
<el-tag>{{row.processIsFinished==='finished' ? '已完成' : '未完成'}}</el-tag> |
||||
</template> |
||||
</avue-crud> |
||||
<el-dialog title="流程图" |
||||
append-to-body |
||||
:visible.sync="flowBox" |
||||
:fullscreen="true"> |
||||
<iframe |
||||
:src=flowUrl |
||||
width="100%" |
||||
height="700" |
||||
title="流程图" |
||||
frameBorder="no" |
||||
border="0" |
||||
marginWidth="0" |
||||
marginHeight="0" |
||||
scrolling="no" |
||||
allowTransparency="yes"> |
||||
</iframe> |
||||
<span slot="footer" |
||||
class="dialog-footer"> |
||||
<el-button @click="flowBox = false">关 闭</el-button> |
||||
</span> |
||||
</el-dialog> |
||||
</basic-container> |
||||
</template> |
||||
|
||||
<script> |
||||
import {mapGetters} from "vuex"; |
||||
import {sendList} from "@/api/work/work"; |
||||
import {flowCategory,flowRoute} from "@/util/flow"; |
||||
|
||||
export default { |
||||
data() { |
||||
return { |
||||
form: {}, |
||||
selectionId: '', |
||||
selectionList: [], |
||||
query: {}, |
||||
loading: true, |
||||
page: { |
||||
pageSize: 10, |
||||
currentPage: 1, |
||||
total: 0 |
||||
}, |
||||
flowBox: false, |
||||
flowUrl: '', |
||||
workBox: false, |
||||
option: { |
||||
height: 'auto', |
||||
calcHeight: 30, |
||||
tip: false, |
||||
searchShow: true, |
||||
searchMenuSpan: 6, |
||||
border: true, |
||||
index: true, |
||||
selection: true, |
||||
editBtn: false, |
||||
addBtn: false, |
||||
viewBtn: false, |
||||
delBtn: false, |
||||
dialogWidth: 900, |
||||
menuWidth: 150, |
||||
dialogClickModal: false, |
||||
column: [ |
||||
{ |
||||
label: "流程分类", |
||||
type: "select", |
||||
row: true, |
||||
dicUrl: "/api/iot-system/dict/dictionary?code=flow", |
||||
props: { |
||||
label: "dictValue", |
||||
value: "dictKey" |
||||
}, |
||||
dataType: "number", |
||||
slot: true, |
||||
prop: "category", |
||||
search: true, |
||||
hide: true, |
||||
width: 100, |
||||
}, |
||||
{ |
||||
label: '流程名称', |
||||
prop: 'processDefinitionName', |
||||
search: true, |
||||
}, |
||||
{ |
||||
label: '当前步骤', |
||||
prop: 'taskName', |
||||
}, |
||||
{ |
||||
label: '流程版本', |
||||
prop: 'processDefinitionVersion', |
||||
slot: true, |
||||
width: 80, |
||||
}, |
||||
{ |
||||
label: '流程进度', |
||||
prop: 'processIsFinished', |
||||
slot: true, |
||||
width: 80, |
||||
}, |
||||
{ |
||||
label: '申请时间', |
||||
prop: 'createTime', |
||||
width: 165, |
||||
}, |
||||
] |
||||
}, |
||||
data: [] |
||||
}; |
||||
}, |
||||
computed: { |
||||
...mapGetters(["permission", "flowRoutes"]), |
||||
ids() { |
||||
let ids = []; |
||||
this.selectionList.forEach(ele => { |
||||
ids.push(ele.id); |
||||
}); |
||||
return ids.join(","); |
||||
}, |
||||
}, |
||||
methods: { |
||||
searchReset() { |
||||
this.query = {}; |
||||
this.onLoad(this.page); |
||||
}, |
||||
searchChange(params, done) { |
||||
this.query = params; |
||||
this.page.currentPage = 1; |
||||
this.onLoad(this.page, params); |
||||
done(); |
||||
}, |
||||
selectionChange(list) { |
||||
this.selectionList = list; |
||||
}, |
||||
selectionClear() { |
||||
this.selectionList = []; |
||||
this.$refs.crud.toggleSelection(); |
||||
}, |
||||
handleDetail(row) { |
||||
this.$router.push({ path: `/work/process/${flowRoute(this.flowRoutes, row.category)}/detail/${row.processInstanceId}/${row.businessId}` }); |
||||
}, |
||||
handleImage(row) { |
||||
this.flowUrl = `/api/hulk-flow/process/diagram-view?processInstanceId=${row.processInstanceId}`; |
||||
this.flowBox = true; |
||||
}, |
||||
currentChange(currentPage){ |
||||
this.page.currentPage = currentPage; |
||||
}, |
||||
sizeChange(pageSize){ |
||||
this.page.pageSize = pageSize; |
||||
}, |
||||
refreshChange() { |
||||
this.onLoad(this.page, this.query); |
||||
}, |
||||
onLoad(page, params = {}) { |
||||
const query = { |
||||
...this.query, |
||||
category: (params.category) ? flowCategory(params.category) : null |
||||
}; |
||||
this.loading = true; |
||||
sendList(page.currentPage, page.pageSize, Object.assign(params, query)).then(res => { |
||||
const data = res.data.data; |
||||
this.page.total = data.total; |
||||
this.data = data.records; |
||||
this.loading = false; |
||||
this.selectionClear(); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
<style> |
||||
.none-border { |
||||
border: 0; |
||||
background-color: transparent !important; |
||||
} |
||||
</style> |
@ -1,243 +0,0 @@
|
||||
<template> |
||||
<basic-container> |
||||
<avue-crud :option="option" |
||||
:table-loading="loading" |
||||
:data="data" |
||||
:page.sync="page" |
||||
v-model="form" |
||||
ref="crud" |
||||
@search-change="searchChange" |
||||
@search-reset="searchReset" |
||||
@selection-change="selectionChange" |
||||
@current-change="currentChange" |
||||
@size-change="sizeChange" |
||||
@refresh-change="refreshChange" |
||||
@on-load="onLoad"> |
||||
<template slot="menuLeft"> |
||||
<el-radio-group v-model="mode" size="small"> |
||||
<el-radio-button label="1">通用流程</el-radio-button> |
||||
<el-radio-button label="2">定制流程</el-radio-button> |
||||
</el-radio-group> |
||||
</template> |
||||
<template slot-scope="scope" slot="menu"> |
||||
<el-button type="text" |
||||
size="small" |
||||
v-if="permission.work_start_flow" |
||||
plain |
||||
class="none-border" |
||||
@click.stop="handleStart(scope.row)">发起 |
||||
</el-button> |
||||
<el-button type="text" |
||||
size="small" |
||||
v-if="permission.work_start_image" |
||||
plain |
||||
class="none-border" |
||||
@click.stop="handleImage(scope.row,scope.index)">流程图 |
||||
</el-button> |
||||
</template> |
||||
<template slot-scope="{row}" |
||||
slot="tenantId"> |
||||
<el-tag>{{row.tenantId===''?'通用':row.tenantId}}</el-tag> |
||||
</template> |
||||
<template slot-scope="{row}" |
||||
slot="version"> |
||||
<el-tag>v{{row.version}}</el-tag> |
||||
</template> |
||||
<template slot-scope="{row}" |
||||
slot="suspensionState"> |
||||
<el-tag>{{row.suspensionState===1?'激活':'挂起'}}</el-tag> |
||||
</template> |
||||
<template slot-scope="{row}" |
||||
slot="category"> |
||||
<el-tag>{{row.categoryName}}</el-tag> |
||||
</template> |
||||
</avue-crud> |
||||
<el-dialog title="流程图" |
||||
append-to-body |
||||
:visible.sync="flowBox" |
||||
:fullscreen="true"> |
||||
<iframe |
||||
:src=flowUrl |
||||
width="100%" |
||||
height="700" |
||||
title="流程图" |
||||
frameBorder="no" |
||||
border="0" |
||||
marginWidth="0" |
||||
marginHeight="0" |
||||
scrolling="no" |
||||
allowTransparency="yes"> |
||||
</iframe> |
||||
<span slot="footer" |
||||
class="dialog-footer"> |
||||
<el-button @click="flowBox = false">关 闭</el-button> |
||||
</span> |
||||
</el-dialog> |
||||
</basic-container> |
||||
</template> |
||||
|
||||
<script> |
||||
import {mapGetters} from "vuex"; |
||||
import {startList} from "@/api/work/work"; |
||||
import {flowCategory, flowRoute} from "@/util/flow"; |
||||
|
||||
export default { |
||||
data() { |
||||
return { |
||||
form: {}, |
||||
mode: '1', |
||||
selectionId: '', |
||||
selectionList: [], |
||||
query: {}, |
||||
loading: true, |
||||
page: { |
||||
pageSize: 10, |
||||
currentPage: 1, |
||||
total: 0 |
||||
}, |
||||
flowBox: false, |
||||
flowUrl: '', |
||||
workBox: false, |
||||
option: { |
||||
height: 'auto', |
||||
calcHeight: 30, |
||||
tip: false, |
||||
searchShow: true, |
||||
searchMenuSpan: 6, |
||||
border: true, |
||||
index: true, |
||||
selection: true, |
||||
editBtn: false, |
||||
addBtn: false, |
||||
viewBtn: false, |
||||
delBtn: false, |
||||
menuWidth: 150, |
||||
dialogWidth: 900, |
||||
dialogClickModal: false, |
||||
column: [ |
||||
{ |
||||
label: '租户编号', |
||||
prop: 'tenantId', |
||||
slot: true, |
||||
width: 120, |
||||
}, |
||||
{ |
||||
label: "流程分类", |
||||
type: "select", |
||||
row: true, |
||||
dicUrl: "/api/iot-system/dict/dictionary?code=flow", |
||||
props: { |
||||
label: "dictValue", |
||||
value: "dictKey" |
||||
}, |
||||
dataType: "number", |
||||
slot: true, |
||||
prop: "category", |
||||
search: true, |
||||
width: 100, |
||||
}, |
||||
{ |
||||
label: '流程标识', |
||||
prop: 'key', |
||||
}, |
||||
{ |
||||
label: '流程名称', |
||||
prop: 'name', |
||||
search: true, |
||||
}, |
||||
{ |
||||
label: '流程版本', |
||||
prop: 'version', |
||||
slot: true, |
||||
width: 80, |
||||
}, |
||||
{ |
||||
label: '状态', |
||||
prop: 'suspensionState', |
||||
slot: true, |
||||
width: 80, |
||||
}, |
||||
{ |
||||
label: '部署时间', |
||||
prop: 'deploymentTime', |
||||
width: 165, |
||||
}, |
||||
] |
||||
}, |
||||
data: [] |
||||
}; |
||||
}, |
||||
watch: { |
||||
'mode'() { |
||||
this.onLoad(this.page); |
||||
} |
||||
}, |
||||
computed: { |
||||
...mapGetters(["permission", "flowRoutes"]), |
||||
ids() { |
||||
let ids = []; |
||||
this.selectionList.forEach(ele => { |
||||
ids.push(ele.id); |
||||
}); |
||||
return ids.join(","); |
||||
}, |
||||
}, |
||||
methods: { |
||||
searchReset() { |
||||
this.query = {}; |
||||
this.onLoad(this.page); |
||||
}, |
||||
searchChange(params, done) { |
||||
this.query = params; |
||||
this.page.currentPage = 1; |
||||
this.onLoad(this.page, params); |
||||
done(); |
||||
}, |
||||
selectionChange(list) { |
||||
this.selectionList = list; |
||||
}, |
||||
selectionClear() { |
||||
this.selectionList = []; |
||||
this.$refs.crud.toggleSelection(); |
||||
}, |
||||
handleStart(row) { |
||||
this.$router.push({path: `/work/process/${flowRoute(this.flowRoutes, row.category)}/form/${row.id}`}); |
||||
}, |
||||
handleImage(row) { |
||||
this.flowUrl = `/api/hulk-flow/process/resource-view?processDefinitionId=${row.id}`; |
||||
this.flowBox = true; |
||||
}, |
||||
currentChange(currentPage) { |
||||
this.page.currentPage = currentPage; |
||||
}, |
||||
sizeChange(pageSize) { |
||||
this.page.pageSize = pageSize; |
||||
}, |
||||
refreshChange() { |
||||
this.onLoad(this.page, this.query); |
||||
}, |
||||
onLoad(page, params = {}) { |
||||
const query = { |
||||
...this.query, |
||||
category: (params.category) ? flowCategory(params.category) : null, |
||||
mode: this.mode |
||||
}; |
||||
this.loading = true; |
||||
startList(page.currentPage, page.pageSize, Object.assign(params, query)).then(res => { |
||||
const data = res.data.data; |
||||
this.page.total = data.total; |
||||
this.data = data.records; |
||||
this.loading = false; |
||||
this.selectionClear(); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
<style> |
||||
.none-border { |
||||
border: 0; |
||||
background-color: transparent !important; |
||||
} |
||||
</style> |
@ -1,217 +0,0 @@
|
||||
<template> |
||||
<basic-container> |
||||
<avue-crud :option="option" |
||||
:table-loading="loading" |
||||
:data="data" |
||||
ref="crud" |
||||
v-model="form" |
||||
@search-change="searchChange" |
||||
@search-reset="searchReset" |
||||
@selection-change="selectionChange" |
||||
@current-change="currentChange" |
||||
@size-change="sizeChange" |
||||
@refresh-change="refreshChange" |
||||
@on-load="onLoad"> |
||||
<template slot-scope="scope" slot="menu"> |
||||
<el-button type="text" |
||||
size="small" |
||||
v-if="permission.work_todo_handle" |
||||
plain |
||||
class="none-border" |
||||
@click.stop="handleWork(scope.row)">处理 |
||||
</el-button> |
||||
<el-button type="text" |
||||
size="small" |
||||
v-if="permission.work_todo_detail" |
||||
plain |
||||
class="none-border" |
||||
@click.stop="handleDetail(scope.row)">详情 |
||||
</el-button> |
||||
<el-button type="text" |
||||
size="small" |
||||
v-if="permission.work_todo_follow" |
||||
plain |
||||
class="none-border" |
||||
@click.stop="handleImage(scope.row,scope.index)">跟踪 |
||||
</el-button> |
||||
</template> |
||||
<template slot-scope="{row}" |
||||
slot="processDefinitionVersion"> |
||||
<el-tag>v{{row.processDefinitionVersion}}</el-tag> |
||||
</template> |
||||
</avue-crud> |
||||
<el-dialog title="流程图" |
||||
append-to-body |
||||
:visible.sync="flowBox" |
||||
:fullscreen="true"> |
||||
<iframe |
||||
:src=flowUrl |
||||
width="100%" |
||||
height="700" |
||||
title="流程图" |
||||
frameBorder="no" |
||||
border="0" |
||||
marginWidth="0" |
||||
marginHeight="0" |
||||
scrolling="no" |
||||
allowTransparency="yes"> |
||||
</iframe> |
||||
<span slot="footer" |
||||
class="dialog-footer"> |
||||
<el-button @click="flowBox = false">关 闭</el-button> |
||||
</span> |
||||
</el-dialog> |
||||
</basic-container> |
||||
</template> |
||||
|
||||
<script> |
||||
import {mapGetters} from "vuex"; |
||||
import {todoList} from "@/api/work/work"; |
||||
import {flowCategory,flowRoute} from "@/util/flow"; |
||||
|
||||
export default { |
||||
data() { |
||||
return { |
||||
form: {}, |
||||
selectionId: '', |
||||
selectionList: [], |
||||
query: {}, |
||||
loading: true, |
||||
page: { |
||||
pageSize: 10, |
||||
currentPage: 1, |
||||
total: 0 |
||||
}, |
||||
flowBox: false, |
||||
flowUrl: '', |
||||
workBox: false, |
||||
option: { |
||||
height: 'auto', |
||||
calcHeight: 30, |
||||
tip: false, |
||||
simplePage: true, |
||||
searchShow: true, |
||||
searchMenuSpan: 6, |
||||
border: true, |
||||
index: true, |
||||
selection: true, |
||||
editBtn: false, |
||||
addBtn: false, |
||||
viewBtn: false, |
||||
delBtn: false, |
||||
dialogWidth: 900, |
||||
menuWidth: 150, |
||||
dialogClickModal: false, |
||||
column: [ |
||||
{ |
||||
label: "流程分类", |
||||
type: "select", |
||||
row: true, |
||||
dicUrl: "/api/iot-system/dict/dictionary?code=flow", |
||||
props: { |
||||
label: "dictValue", |
||||
value: "dictKey" |
||||
}, |
||||
dataType: "number", |
||||
slot: true, |
||||
prop: "category", |
||||
search: true, |
||||
hide: true, |
||||
width: 100, |
||||
}, |
||||
{ |
||||
label: '流程名称', |
||||
prop: 'processDefinitionName', |
||||
search: true, |
||||
}, |
||||
{ |
||||
label: '当前步骤', |
||||
prop: 'taskName', |
||||
}, |
||||
{ |
||||
label: '流程版本', |
||||
prop: 'processDefinitionVersion', |
||||
slot: true, |
||||
width: 80, |
||||
}, |
||||
{ |
||||
label: '申请时间', |
||||
prop: 'createTime', |
||||
width: 165, |
||||
}, |
||||
] |
||||
}, |
||||
data: [] |
||||
}; |
||||
}, |
||||
computed: { |
||||
...mapGetters(["permission", "flowRoutes"]), |
||||
ids() { |
||||
let ids = []; |
||||
this.selectionList.forEach(ele => { |
||||
ids.push(ele.id); |
||||
}); |
||||
return ids.join(","); |
||||
}, |
||||
}, |
||||
methods: { |
||||
searchReset() { |
||||
this.query = {}; |
||||
this.onLoad(this.page); |
||||
}, |
||||
searchChange(params, done) { |
||||
this.query = params; |
||||
this.page.currentPage = 1; |
||||
this.onLoad(this.page, params); |
||||
done(); |
||||
}, |
||||
selectionChange(list) { |
||||
this.selectionList = list; |
||||
}, |
||||
selectionClear() { |
||||
this.selectionList = []; |
||||
this.$refs.crud.toggleSelection(); |
||||
}, |
||||
handleWork(row) { |
||||
this.$router.push({ path: `/work/process/${flowRoute(this.flowRoutes, row.category)}/handle/${row.taskId}/${row.processInstanceId}/${row.businessId}` }); |
||||
}, |
||||
handleDetail(row) { |
||||
this.$router.push({ path: `/work/process/${flowRoute(this.flowRoutes, row.category)}/detail/${row.processInstanceId}/${row.businessId}` }); |
||||
}, |
||||
handleImage(row) { |
||||
this.flowUrl = `/api/hulk-flow/process/diagram-view?processInstanceId=${row.processInstanceId}`; |
||||
this.flowBox = true; |
||||
}, |
||||
currentChange(currentPage){ |
||||
this.page.currentPage = currentPage; |
||||
}, |
||||
sizeChange(pageSize){ |
||||
this.page.pageSize = pageSize; |
||||
}, |
||||
refreshChange() { |
||||
this.onLoad(this.page, this.query); |
||||
}, |
||||
onLoad(page, params = {}) { |
||||
const query = { |
||||
...this.query, |
||||
category: (params.category) ? flowCategory(params.category) : null |
||||
}; |
||||
this.loading = true; |
||||
todoList(page.currentPage, page.pageSize, Object.assign(params, query)).then(res => { |
||||
const data = res.data.data; |
||||
this.page.total = data.total; |
||||
this.data = data.records; |
||||
this.loading = false; |
||||
this.selectionClear(); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
<style> |
||||
.none-border { |
||||
border: 0; |
||||
background-color: transparent !important; |
||||
} |
||||
</style> |
Loading…
Reference in new issue