吕天方 11 months ago
commit 7d6a0573ce

@ -5,8 +5,8 @@ VUE_APP_TITLE = 金鸡湖现代服务业品牌管理系统
ENV = 'development'
# 金鸡湖现代服务业品牌管理系统/开发环境
VUE_APP_BASE_API = 'http://192.168.0.110:9040'
# VUE_APP_BASE_API = 'http://39.101.188.84:9040'
# VUE_APP_BASE_API = 'http://192.168.0.108:9040'
VUE_APP_BASE_API = 'http://39.101.188.84:9040'
# VUE_APP_BASE_API = 'https://idp.sipac.gov.cn/api'
# 路由懒加载

@ -6,7 +6,7 @@ ENV = 'production'
# 金鸡湖现代服务业品牌管理系统/生产环境
# VUE_APP_BASE_API = '/prod-api'
VUE_APP_BASE_API = 'http://39.101.188.84:9040'
# VUE_APP_BASE_API = 'http://39.101.188.84:9040'
# VUE_APP_BASE_API = 'http://192.114.0.197/api'
# VUE_APP_BASE_API = 'https://idp.sipac.gov.cn/api'
VUE_APP_BASE_API = 'https://idp.sipac.gov.cn/api'

@ -1,6 +1,6 @@
{
"name": "ruoyi",
"version": "1.0.202407230921",
"version": "1.0.202407290914",
"description": "金鸡湖现代服务业品牌管理系统",
"author": "若依",
"license": "MIT",
@ -37,6 +37,8 @@
},
"dependencies": {
"@riophae/vue-treeselect": "0.4.0",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^1.0.2",
"autofit.js": "^3.1.0",
"axios": "0.24.0",
"clipboard": "2.0.8",
@ -45,12 +47,13 @@
"element-ui": "2.15.14",
"file-saver": "2.0.5",
"fuse.js": "6.4.3",
"highlight.js": "9.18.5",
"highlight.js": "10.5.0",
"html2canvas": "^1.4.1",
"js-beautify": "1.13.0",
"js-cookie": "3.0.1",
"jsencrypt": "3.0.0-rc.1",
"jspdf": "^2.5.1",
"lodash": "^4.17.21",
"nprogress": "0.2.0",
"quill": "1.3.7",
"screenfull": "5.0.2",
@ -62,7 +65,9 @@
"vue-router": "3.4.9",
"vuedraggable": "2.24.3",
"vuex": "3.6.0",
"xlsx": "^0.18.5"
"xlsx": "^0.18.5",
"xml-js": "1.6.11",
"bpmn-js-token-simulation": "0.10.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "4.4.6",
@ -70,6 +75,8 @@
"@vue/cli-service": "4.4.6",
"babel-eslint": "10.1.0",
"babel-plugin-dynamic-import-node": "2.3.3",
"bpmn-js": "7.5.0",
"bpmn-js-properties-panel": "0.37.2",
"chalk": "4.1.0",
"compression-webpack-plugin": "5.0.2",
"connect": "3.6.6",

@ -1,15 +1,17 @@
<template>
<!-- <ScaleBox> -->
<div id="app">
<router-view />
</div>
<!-- </ScaleBox> -->
</template>
<script>
import autofit from "autofit.js";
// import ScaleBox from "@/components/scaleBox";
export default {
name: "App",
// components:{ ScaleBox },
mounted() {
autofit.init({
dh: 919,

@ -0,0 +1,46 @@
import request from "@/utils/request"
// 数据云图项目追踪情况
export function servicesDevelop(params) {
return request({
url: "/jjh/dataScreen/servicesDevelop",
method: "get",
params
})
}
// 数据云图行业纵深情况
export function getIndustryDepth(params) {
return request({
url: "/jjh/dataScreen/getIndustryDepth",
method: "get",
params
})
}
// 数据云图行业纵深情况
export function getAllIndustry(params) {
return request({
url: "/jjh/dataScreen/getAllIndustry",
method: "get",
params
})
}
// 数据云图荣誉情况
export function honor(params) {
return request({
url: "/jjh/dataScreen/honor",
method: "get",
params
})
}
// 数据云图项目追踪情况
export function projectTracking(params) {
return request({
url: "/jjh/dataScreen/projectTracking",
method: "get",
params
})
}

@ -21,8 +21,8 @@ export function enterpriseBasicInfoNew(data) {
// 修改企业基础信息
export function enterpriseBasicInfoChange(data) {
return request({
url: "/system/enterpriseBasicInfo",
method: "put",
url: "/system/enterpriseBasicInfo/edit",
method: "post",
data
})
}
@ -39,7 +39,7 @@ export function enterpriseBasicInfoId(id) {
export function enterpriseBasicInfoDel(params) {
return request({
url: "/system/enterpriseBasicInfo" + id,
method: "delete",
method: "post",
params
})
}

@ -18,11 +18,11 @@ export function jEnterpriseContactNew(data) {
})
}
// 删除企业联系人
// 修改企业联系人
export function jEnterpriseContactChange(data) {
return request({
url: "/jjh/jEnterpriseContact",
method: "put",
url: "/jjh/jEnterpriseContact/edit",
method: "post",
data
})
}
@ -36,10 +36,9 @@ export function jEnterpriseContactId(id) {
}
// 删除企业联系人
export function jEnterpriseContactDel(params) {
export function jEnterpriseContactDel(id) {
return request({
url: "/jjh/jEnterpriseContact",
method: "delete",
params
url: "/jjh/jEnterpriseContact/" + id,
method: "post",
})
}

@ -0,0 +1,80 @@
import request from "@/utils/request"
// 分页查询智能提醒
export function getjSmartReminders(params) {
return request({
url: "/jjh/jSmartReminders",
method: "get",
params
})
}
// 新增智能提醒
export function jSmartRemindersNew(data) {
return request({
url: "/jjh/jSmartReminders",
method: "post",
data
})
}
// 修改不定期智能提醒
export function updateNdqChange(data) {
return request({
url: "/jjh/jSmartReminders/updateNdq",
method: "post",
data
})
}
// 修改定期智能提醒
export function updateDqChange(data) {
return request({
url: "/jjh/jSmartReminders/updateDq",
method: "post",
data
})
}
// 根据主键查询智能提醒
export function jSmartRemindersId(id) {
return request({
url: "/jjh/jSmartReminders/" + id,
method: "get",
})
}
// 删除智能提醒
export function jSmartRemindersDel(id) {
return request({
url: "/jjh/jSmartReminders/" + id,
method: "post",
})
}
// 政务端首页智能提醒查询所有数据
export function chiefAll(params){
return request({
url:"/jjh/jSmartReminders/chiefAll",
method:"get",
params
})
}
// 企业端搜也我智能提醒查询所有数据
export function enterpriseAll(params){
return request({
url:"/jjh/jSmartReminders/enterpriseAll",
method:"get",
params
})
}
// 修改状态为已读
export function changeIsRead(params){
return request({
url:"/jjh/jSmartReminders/changeIsRead",
method:"get",
params
})
}

@ -21,8 +21,8 @@ export function jPolicyFileNew(data) {
// 修改政策文件
export function jPolicyFileChange(data) {
return request({
url: "/jjh/jPolicyFile",
method: "put",
url: "/jjh/jPolicyFile/edit",
method: "post",
data
})
}
@ -36,10 +36,9 @@ export function jPolicyFileId(id) {
}
// 删除政策文件
export function jPolicyFileDel(params) {
export function jPolicyFileDel(id) {
return request({
url: "/jjh/jPolicyFile",
method: "delete",
params
url: "/jjh/jPolicyFile/" + id,
method: "post",
})
}

@ -16,11 +16,10 @@ export function jProjectId(id) {
})
}
// 删除单个项目
export function jProjectDel(params) {
export function jProjectDel(id) {
return request({
url: "/jjh/jProject",
method: "delete",
params
url: "/jjh/jProject/" + id,
method: "post",
})
}
@ -71,17 +70,16 @@ export function postJMemorandum(data) {
// 修改备忘录
export function putJMemorandum(data) {
return request({
url: "/jjh/jMemorandum",
method: "put",
url: "/jjh/jMemorandum/edit",
method: "post",
data
})
}
// 删除备忘录
export function delJMemorandum(params) {
export function delJMemorandum(id) {
return request({
url: "/jjh/jMemorandum",
method: "delete",
params
url: "/jjh/jMemorandum" + id,
method: "post",
})
}

@ -36,7 +36,7 @@ export function getCacheValue(cacheName, cacheKey) {
export function clearCacheName(cacheName) {
return request({
url: '/monitor/cache/clearCacheName/' + cacheName,
method: 'delete'
method: 'post'
})
}
@ -44,7 +44,7 @@ export function clearCacheName(cacheName) {
export function clearCacheKey(cacheKey) {
return request({
url: '/monitor/cache/clearCacheKey/' + cacheKey,
method: 'delete'
method: 'post'
})
}
@ -52,6 +52,6 @@ export function clearCacheKey(cacheKey) {
export function clearCacheAll() {
return request({
url: '/monitor/cache/clearCacheAll',
method: 'delete'
method: 'post'
})
}

@ -29,8 +29,8 @@ export function addJob(data) {
// 修改定时任务调度
export function updateJob(data) {
return request({
url: '/monitor/job',
method: 'put',
url: '/monitor/job/edit',
method: 'post',
data: data
})
}
@ -39,7 +39,7 @@ export function updateJob(data) {
export function delJob(jobId) {
return request({
url: '/monitor/job/' + jobId,
method: 'delete'
method: 'post'
})
}
@ -51,7 +51,7 @@ export function changeJobStatus(jobId, status) {
}
return request({
url: '/monitor/job/changeStatus',
method: 'put',
method: 'post',
data: data
})
}
@ -65,7 +65,7 @@ export function runJob(jobId, jobGroup) {
}
return request({
url: '/monitor/job/run',
method: 'put',
method: 'post',
data: data
})
}

@ -13,7 +13,7 @@ export function listJobLog(query) {
export function delJobLog(jobLogId) {
return request({
url: '/monitor/jobLog/' + jobLogId,
method: 'delete'
method: 'post'
})
}
@ -21,6 +21,6 @@ export function delJobLog(jobLogId) {
export function cleanJobLog() {
return request({
url: '/monitor/jobLog/clean',
method: 'delete'
method: 'post'
})
}

@ -13,7 +13,7 @@ export function list(query) {
export function delLogininfor(infoId) {
return request({
url: '/monitor/logininfor/' + infoId,
method: 'delete'
method: 'post'
})
}
@ -29,6 +29,6 @@ export function unlockLogininfor(userName) {
export function cleanLogininfor() {
return request({
url: '/monitor/logininfor/clean',
method: 'delete'
method: 'post'
})
}

@ -13,6 +13,6 @@ export function list(query) {
export function forceLogout(tokenId) {
return request({
url: '/monitor/online/' + tokenId,
method: 'delete'
method: 'post'
})
}

@ -13,7 +13,7 @@ export function list(query) {
export function delOperlog(operId) {
return request({
url: '/monitor/operlog/' + operId,
method: 'delete'
method: 'post'
})
}
@ -21,6 +21,6 @@ export function delOperlog(operId) {
export function cleanOperlog() {
return request({
url: '/monitor/operlog/clean',
method: 'delete'
method: 'post'
})
}

@ -1,5 +1,23 @@
import request from '@/utils/request'
// 新增模板管理列表
export function templateInfo(data) {
return request({
url: '/system/templateInfo',
method: 'post',
data
})
}
// 修改模板管理列表
export function templateInfoChange(data) {
return request({
url: '/system/templateInfo/edit',
method: 'post',
data
})
}
// 查询在线申报管理列表
export function listInfo(query) {
return request({

@ -103,8 +103,8 @@ export function addProjectSettlementAward(data) {
// 编辑-项目落户奖补-1
export function putProjectSettlementAward(data) {
return request({
url: '/system/projectSettlementAward',
method: 'put',
url: '/system/projectSettlementAward/edit',
method: 'post',
data: data
})
}
@ -121,8 +121,8 @@ export function addBigStrongAward(data) {
// 编辑-做大做强奖补-2
export function putBigStrongAward(data) {
return request({
url: '/system/bigStrongAward',
method: 'put',
url: '/system/bigStrongAward/edit',
method: 'post',
data: data
})
}
@ -139,8 +139,8 @@ export function addCarrierConstructionAward(data) {
// 编辑-载体建设奖补-3
export function putCarrierConstructionAward(data) {
return request({
url: '/system/carrierConstructionAward',
method: 'put',
url: '/system/carrierConstructionAward/edit',
method: 'post',
data: data
})
}
@ -157,8 +157,8 @@ export function addPlatformConstructionAward(data) {
// 编辑-平台建设奖补-4
export function putPlatformConstructionAward(data) {
return request({
url: '/system/platformConstructionAward',
method: 'put',
url: '/system/platformConstructionAward/edit',
method: 'post',
data: data
})
}
@ -175,8 +175,8 @@ export function addBrandingAward(data) {
// 编辑-品牌打造奖补-5
export function putBrandingAward(data) {
return request({
url: '/system/brandingAward',
method: 'put',
url: '/system/brandingAward/edit',
method: 'post',
data: data
})
}
@ -193,8 +193,8 @@ export function addSceneOpeningAward(data) {
// 编辑-场景开放奖补-6
export function putSceneOpeningAward(data) {
return request({
url: '/system/sceneOpeningAward',
method: 'put',
url: '/system/sceneOpeningAward/edit',
method: 'post',
data: data
})
}
@ -211,8 +211,8 @@ export function addCreditManagement(data) {
// 编辑-信用管理奖补-7
export function putCreditManagement(data) {
return request({
url: '/system/creditManagement',
method: 'put',
url: '/system/creditManagement/edit',
method: 'post',
data: data
})
}
@ -229,8 +229,8 @@ export function addIndustrialInternetAward(data) {
// 编辑-5G+工业互联网奖补-8
export function putIndustrialInternetAward(data) {
return request({
url: '/system/industrialInternetAward',
method: 'put',
url: '/system/industrialInternetAward/edit',
method: 'post',
data: data
})
}
@ -247,8 +247,8 @@ export function addManufacturingServicesAward(data) {
// 编辑-制造服务业有效投入奖补-9
export function putManufacturingServicesAward(data) {
return request({
url: '/system/manufacturingServicesAward',
method: 'put',
url: '/system/manufacturingServicesAward/edit',
method: 'post',
data: data
})
}
@ -265,8 +265,8 @@ export function addLogisticsDevelopmentAward(data) {
// 编辑-物流发展奖补-10
export function putLogisticsDevelopmentAward(data) {
return request({
url: '/system/logisticsDevelopmentAward',
method: 'put',
url: '/system/logisticsDevelopmentAward/edit',
method: 'post',
data: data
})
}
@ -283,8 +283,8 @@ export function addIntegrationIndustries(data) {
// 编辑-两业融合奖补-11
export function putIntegrationIndustries(data) {
return request({
url: '/system/integrationIndustries',
method: 'put',
url: '/system/integrationIndustries/edit',
method: 'post',
data: data
})
}
@ -301,8 +301,8 @@ export function addOutQuitProducts(data) {
// 编辑-2024年度淘汰落后和退出低端低效产能装备清单模板-12
export function putOutQuitProducts(data) {
return request({
url: '/system/outQuitProducts',
method: 'put',
url: '/system/outQuitProducts/edit',
method: 'post',
data: data
})
}
@ -313,7 +313,7 @@ export function putOutQuitProducts(data) {
export function templateOneUpdata(data){
return request({
url: '/system/projectSettlementAward/update',
method: 'put',
method: 'post',
data: data
})
}
@ -322,7 +322,7 @@ export function templateOneUpdata(data){
export function templateTwoUpdata(data){
return request({
url: '/system/bigStrongAward/update',
method: 'put',
method: 'post',
data: data
})
}
@ -331,7 +331,7 @@ export function templateTwoUpdata(data){
export function templateThreeUpdata(data){
return request({
url: '/system/carrierConstructionAward/update',
method: 'put',
method: 'post',
data: data
})
}
@ -340,7 +340,7 @@ export function templateThreeUpdata(data){
export function templateFourUpdata(data){
return request({
url: '/system/platformConstructionAward/update',
method: 'put',
method: 'post',
data: data
})
}
@ -349,7 +349,7 @@ export function templateFourUpdata(data){
export function templateFiveUpdata(data){
return request({
url: '/system/brandingAward/update',
method: 'put',
method: 'post',
data: data
})
}
@ -358,7 +358,7 @@ export function templateFiveUpdata(data){
export function templateSixUpdata(data){
return request({
url: '/system/sceneOpeningAward/update',
method: 'put',
method: 'post',
data: data
})
}
@ -367,7 +367,7 @@ export function templateSixUpdata(data){
export function templateSevenUpdata(data){
return request({
url: '/system/creditManagement/update',
method: 'put',
method: 'post',
data: data
})
}
@ -376,7 +376,7 @@ export function templateSevenUpdata(data){
export function templateEightUpdata(data){
return request({
url: '/system/industrialInternetAward/update',
method: 'put',
method: 'post',
data: data
})
}
@ -385,7 +385,7 @@ export function templateEightUpdata(data){
export function templateNineUpdata(data){
return request({
url: '/system/manufacturingServicesAward/update',
method: 'put',
method: 'post',
data: data
})
}
@ -394,7 +394,7 @@ export function templateNineUpdata(data){
export function templateTenUpdata(data){
return request({
url: '/system/logisticsDevelopmentAward/update',
method: 'put',
method: 'post',
data: data
})
}
@ -403,7 +403,7 @@ export function templateTenUpdata(data){
export function templateElevenUpdata(data){
return request({
url: '/system/integrationIndustries/update',
method: 'put',
method: 'post',
data: data
})
}
@ -412,7 +412,7 @@ export function templateElevenUpdata(data){
export function templateProductsUpdata(data){
return request({
url: '/system/outQuitProducts/update',
method: 'put',
method: 'post',
data: data
})
}

@ -49,8 +49,8 @@ export function addTemplateRecord(data) {
// 编辑企业名录
export function putTemplateRecord(data) {
return request({
url: '/system/templateRecord',
method: 'put',
url: '/system/templateRecord/edit',
method: 'post',
data: data
})
}

@ -40,7 +40,7 @@ export function addTemplateRecord(data) {
export function approvalEdit(data) {
return request({
url: '/system/declarationRecords/approvalEdit',
method: 'put',
method: 'post',
data: data
})
}

@ -63,7 +63,7 @@ export function uploadFile(data) {
export function putMunicipalBureauReview(data) {
return request({
url: '/system/declarationRecords/municipalReviewNew',
method: 'put',
method: 'post',
data: data
})
}

@ -29,8 +29,8 @@ export function addBigStrongAward(data) {
// 修改做大做强奖详情
export function updateBigStrongAward(data) {
return request({
url: '/system/bigStrongAward',
method: 'put',
url: '/system/bigStrongAward/edit',
method: 'post',
data: data
})
}
@ -39,6 +39,6 @@ export function updateBigStrongAward(data) {
export function delBigStrongAward(id) {
return request({
url: '/system/bigStrongAward/' + id,
method: 'delete'
method: 'post'
})
}

@ -29,8 +29,8 @@ export function addBrandingAward(data) {
// 修改品牌打造奖补
export function updateBrandingAward(data) {
return request({
url: '/system/brandingAward',
method: 'put',
url: '/system/brandingAward/edit',
method: 'post',
data: data
})
}
@ -39,6 +39,6 @@ export function updateBrandingAward(data) {
export function delBrandingAward(id) {
return request({
url: '/system/brandingAward/' + id,
method: 'delete'
method: 'post'
})
}

@ -29,8 +29,8 @@ export function addCarrierConstructionAward(data) {
// 修改载体建设奖补
export function updateCarrierConstructionAward(data) {
return request({
url: '/system/carrierConstructionAward',
method: 'put',
url: '/system/carrierConstructionAward/edit',
method: 'post',
data: data
})
}
@ -39,6 +39,6 @@ export function updateCarrierConstructionAward(data) {
export function delCarrierConstructionAward(id) {
return request({
url: '/system/carrierConstructionAward/' + id,
method: 'delete'
method: 'post'
})
}

@ -37,8 +37,8 @@ export function addConfig(data) {
// 修改参数配置
export function updateConfig(data) {
return request({
url: '/system/config',
method: 'put',
url: '/system/config/edit',
method: 'post',
data: data
})
}
@ -47,7 +47,7 @@ export function updateConfig(data) {
export function delConfig(configId) {
return request({
url: '/system/config/' + configId,
method: 'delete'
method: ' post'
})
}
@ -55,6 +55,6 @@ export function delConfig(configId) {
export function refreshCache() {
return request({
url: '/system/config/refreshCache',
method: 'delete'
method: ' post'
})
}

@ -37,8 +37,8 @@ export function addDept(data) {
// 修改部门
export function updateDept(data) {
return request({
url: '/system/dept',
method: 'put',
url: '/system/dept/edit',
method: 'post',
data: data
})
}
@ -47,6 +47,6 @@ export function updateDept(data) {
export function delDept(deptId) {
return request({
url: '/system/dept/' + deptId,
method: 'delete'
method: 'post'
})
}

@ -1,5 +1,14 @@
import request from '@/utils/request'
// 查询字典不带分页的数据列表
export function getAllList(query) {
return request({
url: '/system/dict/data/getAllList',
method: 'get',
params: query
})
}
// 查询字典数据列表
export function listData(query) {
return request({
@ -37,8 +46,8 @@ export function addData(data) {
// 修改字典数据
export function updateData(data) {
return request({
url: '/system/dict/data',
method: 'put',
url: '/system/dict/data/edit',
method: 'post',
data: data
})
}
@ -47,6 +56,6 @@ export function updateData(data) {
export function delData(dictCode) {
return request({
url: '/system/dict/data/' + dictCode,
method: 'delete'
method: 'post'
})
}

@ -29,8 +29,8 @@ export function addType(data) {
// 修改字典类型
export function updateType(data) {
return request({
url: '/system/dict/type',
method: 'put',
url: '/system/dict/type/edit',
method: 'post',
data: data
})
}
@ -39,7 +39,7 @@ export function updateType(data) {
export function delType(dictId) {
return request({
url: '/system/dict/type/' + dictId,
method: 'delete'
method: 'post'
})
}
@ -47,7 +47,7 @@ export function delType(dictId) {
export function refreshCache() {
return request({
url: '/system/dict/type/refreshCache',
method: 'delete'
method: 'post'
})
}

@ -29,8 +29,8 @@ export function addEnterpriseBasicInfo(data) {
// 修改企业基础信息
export function updateEnterpriseBasicInfo(data) {
return request({
url: '/system/enterpriseBasicInfo',
method: 'put',
url: '/system/enterpriseBasicInfo/edit',
method: 'post',
data: data
})
}
@ -39,6 +39,6 @@ export function updateEnterpriseBasicInfo(data) {
export function delEnterpriseBasicInfo(id) {
return request({
url: '/system/enterpriseBasicInfo/' + id,
method: 'delete'
method: 'post'
})
}

@ -29,8 +29,8 @@ export function addFundingInfo(data) {
// 修改资金信息
export function updateFundingInfo(data) {
return request({
url: '/system/fundingInfo',
method: 'put',
url: '/system/fundingInfo/edit',
method: 'post',
data: data
})
}
@ -39,6 +39,6 @@ export function updateFundingInfo(data) {
export function delFundingInfo(id) {
return request({
url: '/system/fundingInfo/' + id,
method: 'delete'
method: 'post'
})
}

@ -29,8 +29,8 @@ export function addIndustrialInternetAward(data) {
// 修改5G+工业互联网奖补
export function updateIndustrialInternetAward(data) {
return request({
url: '/system/industrialInternetAward',
method: 'put',
url: '/system/industrialInternetAward/edit',
method: 'post',
data: data
})
}
@ -39,6 +39,6 @@ export function updateIndustrialInternetAward(data) {
export function delIndustrialInternetAward(id) {
return request({
url: '/system/industrialInternetAward/' + id,
method: 'delete'
method: 'post'
})
}

@ -3,7 +3,7 @@ import request from '@/utils/request'
// 查询登录日志列表
export function list(query) {
return request({
url: '/system/logininfor/list',
url: '/monitor/logininfor/list',
method: 'get',
params: query
})
@ -12,22 +12,22 @@ export function list(query) {
// 删除登录日志
export function delLogininfor(infoId) {
return request({
url: '/system/logininfor/' + infoId,
method: 'delete'
url: '/monitor/logininfor/' + infoId,
method: 'post'
})
}
// 解锁用户登录状态
export function unlockLogininfor(userName) {
return request({
url: '/system/logininfor/unlock/' + userName,
url: '/monitor/logininfor/unlock/' + userName,
method: 'get'
})
}
// 清空登录日志
export function cleanLogininfor() {
return request({
url: '/system/logininfor/clean',
method: 'delete'
url: '/monitor/logininfor/clean',
method: 'post'
})
}

@ -29,8 +29,8 @@ export function addLogisticsDevelopmentAward(data) {
// 修改物流发展奖补
export function updateLogisticsDevelopmentAward(data) {
return request({
url: '/system/logisticsDevelopmentAward',
method: 'put',
url: '/system/logisticsDevelopmentAward/edit',
method: 'post',
data: data
})
}
@ -39,6 +39,6 @@ export function updateLogisticsDevelopmentAward(data) {
export function delLogisticsDevelopmentAward(id) {
return request({
url: '/system/logisticsDevelopmentAward/' + id,
method: 'delete'
method: 'post'
})
}

@ -29,8 +29,8 @@ export function addManufacturingServicesAward(data) {
// 修改制造服务业有效投入奖补
export function updateManufacturingServicesAward(data) {
return request({
url: '/system/manufacturingServicesAward',
method: 'put',
url: '/system/manufacturingServicesAward/edit',
method: 'post',
data: data
})
}
@ -39,6 +39,6 @@ export function updateManufacturingServicesAward(data) {
export function delManufacturingServicesAward(id) {
return request({
url: '/system/manufacturingServicesAward/' + id,
method: 'delete'
method: 'post'
})
}

@ -1,3 +1,11 @@
/*
* @Descripttion:
* @version:
* @Author: JC9527
* @Date: 2024-03-19 11:31:40
* @LastEditors: JC9527
* @LastEditTime: 2024-07-18 14:01:11
*/
import request from '@/utils/request'
// 查询菜单列表
@ -45,8 +53,8 @@ export function addMenu(data) {
// 修改菜单
export function updateMenu(data) {
return request({
url: '/system/menu',
method: 'put',
url: '/system/menu/edit',
method: 'post',
data: data
})
}
@ -55,6 +63,6 @@ export function updateMenu(data) {
export function delMenu(menuId) {
return request({
url: '/system/menu/' + menuId,
method: 'delete'
method: 'post'
})
}

@ -29,8 +29,8 @@ export function addNotice(data) {
// 修改公告
export function updateNotice(data) {
return request({
url: '/system/notice',
method: 'put',
url: '/system/notice/edit',
method: 'post',
data: data
})
}
@ -39,6 +39,6 @@ export function updateNotice(data) {
export function delNotice(noticeId) {
return request({
url: '/system/notice/' + noticeId,
method: 'delete'
method: 'post'
})
}

@ -3,7 +3,7 @@ import request from '@/utils/request'
// 查询操作日志列表
export function list(query) {
return request({
url: '/system/operlog/list',
url: '/monitor/operlog/list',
method: 'get',
params: query
})
@ -12,15 +12,15 @@ export function list(query) {
// 删除操作日志
export function delOperlog(operId) {
return request({
url: '/system/operlog/' + operId,
method: 'delete'
url: '/monitor/operlog/' + operId,
method: 'post'
})
}
// 清空操作日志
export function cleanOperlog() {
return request({
url: '/system/operlog/clean',
method: 'delete'
url: '/monitor/operlog/clean',
method: 'post'
})
}

@ -29,8 +29,8 @@ export function addPlatformConstructionAward(data) {
// 修改平台建设奖补
export function updatePlatformConstructionAward(data) {
return request({
url: '/system/platformConstructionAward',
method: 'put',
url: '/system/platformConstructionAward/edit',
method: 'post',
data: data
})
}
@ -39,6 +39,6 @@ export function updatePlatformConstructionAward(data) {
export function delPlatformConstructionAward(id) {
return request({
url: '/system/platformConstructionAward/' + id,
method: 'delete'
method: 'post'
})
}

@ -29,8 +29,8 @@ export function addPost(data) {
// 修改岗位
export function updatePost(data) {
return request({
url: '/system/post',
method: 'put',
url: '/system/post/edit',
method: 'post',
data: data
})
}
@ -39,6 +39,6 @@ export function updatePost(data) {
export function delPost(postId) {
return request({
url: '/system/post/' + postId,
method: 'delete'
method: 'post'
})
}

@ -29,8 +29,8 @@ export function addProjectSettlementAward(data) {
// 修改项目落户奖补
export function updateProjectSettlementAward(data) {
return request({
url: '/system/projectSettlementAward',
method: 'put',
url: '/system/projectSettlementAward/edit',
method: 'post',
data: data
})
}
@ -39,6 +39,6 @@ export function updateProjectSettlementAward(data) {
export function delProjectSettlementAward(id) {
return request({
url: '/system/projectSettlementAward/' + id,
method: 'delete'
method: 'post'
})
}

@ -29,8 +29,8 @@ export function addRole(data) {
// 修改角色
export function updateRole(data) {
return request({
url: '/system/role',
method: 'put',
url: '/system/role/edit',
method: 'post',
data: data
})
}
@ -39,7 +39,7 @@ export function updateRole(data) {
export function dataScope(data) {
return request({
url: '/system/role/dataScope',
method: 'put',
method: 'post',
data: data
})
}
@ -52,7 +52,7 @@ export function changeRoleStatus(roleId, status) {
}
return request({
url: '/system/role/changeStatus',
method: 'put',
method: 'post',
data: data
})
}
@ -61,7 +61,7 @@ export function changeRoleStatus(roleId, status) {
export function delRole(roleId) {
return request({
url: '/system/role/' + roleId,
method: 'delete'
method: 'post'
})
}
@ -87,7 +87,7 @@ export function unallocatedUserList(query) {
export function authUserCancel(data) {
return request({
url: '/system/role/authUser/cancel',
method: 'put',
method: 'post',
data: data
})
}
@ -96,7 +96,7 @@ export function authUserCancel(data) {
export function authUserCancelAll(data) {
return request({
url: '/system/role/authUser/cancelAll',
method: 'put',
method: 'post',
params: data
})
}
@ -105,7 +105,7 @@ export function authUserCancelAll(data) {
export function authUserSelectAll(data) {
return request({
url: '/system/role/authUser/selectAll',
method: 'put',
method: 'post',
params: data
})
}

@ -29,8 +29,8 @@ export function addSceneOpeningAward(data) {
// 修改场景开放奖补
export function updateSceneOpeningAward(data) {
return request({
url: '/system/sceneOpeningAward',
method: 'put',
url: '/system/sceneOpeningAward/edit',
method: 'post',
data: data
})
}
@ -39,6 +39,6 @@ export function updateSceneOpeningAward(data) {
export function delSceneOpeningAward(id) {
return request({
url: '/system/sceneOpeningAward/' + id,
method: 'delete'
method: 'post'
})
}

@ -29,8 +29,8 @@ export function addTemplateInfo(data) {
// 修改申报模板信息
export function updateTemplateInfo(data) {
return request({
url: '/system/templateInfo',
method: 'put',
url: '/system/templateInfo/edit',
method: 'psot',
data: data
})
}
@ -39,6 +39,6 @@ export function updateTemplateInfo(data) {
export function delTemplateInfo(id) {
return request({
url: '/system/templateInfo/' + id,
method: 'delete'
method: 'post'
})
}

@ -30,8 +30,8 @@ export function addUser(data) {
// 修改用户
export function updateUser(data) {
return request({
url: '/system/user',
method: 'put',
url: '/system/user/edit',
method: 'post',
data: data
})
}
@ -40,7 +40,7 @@ export function updateUser(data) {
export function delUser(userId) {
return request({
url: '/system/user/' + userId,
method: 'delete'
method: 'post'
})
}
@ -52,7 +52,7 @@ export function resetUserPwd(userId, password) {
}
return request({
url: '/system/user/resetPwd',
method: 'put',
method: 'post',
data: data
})
}
@ -65,7 +65,7 @@ export function changeUserStatus(userId, status) {
}
return request({
url: '/system/user/changeStatus',
method: 'put',
method: 'post',
data: data
})
}
@ -82,7 +82,7 @@ export function getUserProfile() {
export function updateUserProfile(data) {
return request({
url: '/system/user/profile',
method: 'put',
method: 'psot',
data: data
})
}
@ -95,7 +95,7 @@ export function updateUserPwd(oldPassword, newPassword) {
}
return request({
url: '/system/user/profile/updatePwd',
method: 'put',
method: 'post',
params: data
})
}
@ -121,7 +121,7 @@ export function getAuthRole(userId) {
export function updateAuthRole(data) {
return request({
url: '/system/user/authRole',
method: 'put',
method: 'psot',
params: data
})
}

@ -28,8 +28,8 @@ export function getGenTable(tableId) {
// 修改代码生成信息
export function updateGenTable(data) {
return request({
url: '/tool/gen',
method: 'put',
url: '/tool/gen/edit',
method: 'post',
data: data
})
}
@ -64,7 +64,7 @@ export function previewTable(tableId) {
export function delTable(tableId) {
return request({
url: '/tool/gen/' + tableId,
method: 'delete'
method: ' post'
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 642 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 553 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 827 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 KiB

After

Width:  |  Height:  |  Size: 839 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

@ -1,4 +1,40 @@
@font-face {
font-family: "PingFang-SC";
font-family: "PingFang-SC-Heavy";
src: url("./font/PingFang_Heavy.ttf");
}
/* @font-face {
font-family: "PingFang-SC";
src: url("./font/PingFang_Regular.ttf");
} */
/* @font-face {
font-family: "PingFang-SC";
src: url("./font/PingFang_Light.ttf");
} */
/* @font-face {
font-family: "PingFang-SC";
src: url("./font/PingFang_ExtraLight.ttf");
} */
@font-face {
font-family: "PingFang-SC-Medium";
src: url("./font/PingFang_Medium.ttf");
}
@font-face {
font-family: "PingFang-SC";
src: url("./font/PingFang_Bold.ttf");
}
@font-face {
font-family: "AlibabaPuHuiTiB";
src: url("./font/Alibaba-PuHuiTi-Bold.ttf");
}
@font-face {
font-family: "AlibabaPuHuiTiR";
src: url("./font/Alibaba-PuHuiTi-Regular.ttf");
}
@font-face {
font-family: "AlibabaPuHuiTiM";
src: url("./font/Alibaba-PuHuiTi-Medium.ttf");
}
@font-face {
font-family: "DINCondensed";
src: url("./font/DIN_CONDENSED_BOLD.TTF");
}

@ -201,24 +201,202 @@ div::-webkit-scrollbar {
section::-webkit-scrollbar {
display: none;
}
html::-webkit-scrollbar {
display: none;
}
body::-webkit-scrollbar {
display: none;
}
#app::-webkit-scrollbar {
display: none;
}
.scale-box::-webkit-scrollbar {
display: none;
}
//
.honor-dialog,.collectDialog-dialog,.headquarterEnterprise-dialog,.serviceIndustry-dialog {
section {
div::-webkit-scrollbar {
display: block;
}
.el-table::-webkit-scrollbar {
display: block;
width: 6px;
height: 6px;
}
.detail_content {
.el-table::-webkit-scrollbar-track {
background-color: #f1f1f1;
}
.el-table::-webkit-scrollbar-thumb {
background-color: #c0c0c0;
border-radius: 3px;
}
}
}
.process-dialog {
height: 90vh;
}
.process-dialog {
height: 90vh;
.el-dialog__body {
height: calc(100% - 30px);
}
}
#detail_content_two {
width: 100%;
#reportId {
display: flex;
justify-content: space-between;
// height: calc(100vh - 160px);
height: calc(100% - 40px);
width: 100%;
.left_content {
// height: calc(100vh - 160px);
height: 100%;
width: 69.5%;
overflow: auto;
background-color: #fff;
padding: 20px;
}
.right_content {
// height: calc(100vh - 160px);
height: 100%;
width: 30%;
background-color: #fff;
.left_title {
height: 77px;
padding-top: 20px;
background-color: #fff;
margin-bottom: 4px;
}
.tab_content {
// height: calc(100vh - 240px);
height: calc(100% - 77px);
// overflow: auto;
background-color: #fff;
padding: 0 20px;
::v-deep .el-tabs__content {
padding: 0;
height: calc(100% - 50px);
.el-tab-pane {
height: 100%;
}
}
.empty {
// height: calc(100vh - 300px);
// height: calc(100% - 100px);
height: 100%;
padding: 10px 15px 0 15px;
overflow: auto;
.top {
font-size: 12px;
color: #737373;
margin-bottom: 10px;
}
.bottom {
text-align: center;
color: #737373;
}
.step_contain {
position: relative;
line-height: 35px;
border-left: 2px solid green;
padding-bottom: 40px;
z-index: 2;
.drop_style {
position: absolute;
width: 24px;
height: 24px;
top: -4px;
left: -12px;
background-color: #fff;
border-radius: 12px;
box-shadow: 0 0 10px #ccc;
z-index: 2;
}
.out_drop_style {
position: absolute;
width: 6px;
height: 6px;
top: 6px;
left: -3px;
background-color: #4eb997;
border-radius: 3px;
z-index: 2;
}
.out_drop_style_one {
background-color: #000;
}
.contain_main {
background-color: #f8fafb;
color: #192a92;
margin-left: 25px;
border-radius: 2px;
width: 100%;
.attach {
// display: flex;
width: 100%;
// padding-right: 100px;
position: relative;
.attach_left {
position: absolute;
width: 140px;
}
.attach_right {
// flex: 1;
// flex-direction: column;
// justify-content: space-between;
padding: 0 80px 0 50px;
.attach_item {
width: 85%;
display: flex;
// justify-content: space-between;
align-items: center;
padding: 0 5px;
color: inherit;
border: 1px solid #e4e7ed;
border-radius: 2px;
margin: 10px 20px 10px 0;
a {
display: flex;
// justify-content: space-between;
align-items: center;
}
.li_img {
width: 25px;
height: 30px;
margin-right: 10px;
padding: 2px;
}
.icon_name {
text-overflow: ellipsis;
overflow: hidden;
word-wrap: break-word;
white-space: nowrap;
}
}
}
}
}
.right-img {
position: absolute;
z-index: 2;
top: 0;
bottom: 40px;
right: 20px;
display: flex;
align-items: center;
.approval_img {
width: 85px;
height: 80px;
}
}
}
.step_contain_one {
border: none;
}
}
}
}
}
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,20 @@
/**
稿19201080
*/
// @function px2vw($px) {
// @return $px/1920*100vw;
// }
// @function px2vh($px) {
// @return $px/1920*100vh;
// }
@function vw($px) {
@return $px/1920*100vw;
}
@function vh($px) {
@return $px/1080*100vh;
}

@ -0,0 +1,128 @@
<template>
<div class="process-design" :style="'display: flex; height:' + height">
<bpmn-process-designer
v-model="xmlString"
v-bind="controlForm"
keyboard
ref="processDesigner"
:events="[
'element.click',
'connection.added',
'connection.removed',
'connection.changed'
]"
@element-click="elementClick"
@init-finished="initModeler"
@event="handlerEvent"
@save="onSaveProcess"
/>
<bmpn-process-penal :bpmn-modeler="modeler" :prefix="controlForm.prefix" class="process-panel" />
</div>
</template>
<script>
import Vue from 'vue';
import '@/plugins/package/theme/index.scss';
import { BpmnProcessDesigner, BmpnProcessPenal } from '@/plugins/package/index';
//
import CustomContentPadProvider from '@/plugins/package/designer/plugins/content-pad';
//
import CustomPaletteProvider from '@/plugins/package/designer/plugins/palette';
import { vuePlugin } from '@/plugins/package/highlight';
import 'highlight.js/styles/atom-one-dark-reasonable.css';
Vue.use(vuePlugin);
export default {
name: 'ProcessDesigner',
props: {
bpmnXml: {
type: String,
required: true
},
designerForm: {
type: Object,
required: true
}
},
components: {
BpmnProcessDesigner,
BmpnProcessPenal
},
data () {
return {
// height: document.documentElement.clientHeight - 94.5 + "px;",
height: document.documentElement.clientHeight - 200 + "px;",
xmlString: this.bpmnXml,
modeler: null,
controlForm: {
processId: this.designerForm.processKey || '',
processName: this.designerForm.processName || '',
simulation: false,
labelEditing: false,
labelVisible: false,
prefix: 'flowable',
headerButtonSize: 'small',
additionalModel: [CustomContentPadProvider, CustomPaletteProvider]
}
}
},
methods: {
elementClick (element) {
this.element = element;
},
initModeler (modeler) {
setTimeout(() => {
this.modeler = modeler;
}, 10);
},
handlerEvent (eventName, element) {
},
onSaveProcess (saveData) {
this.$emit('save', saveData);
}
}
}
</script>
<style lang="scss">
body {
overflow: auto !important;
margin: 0;
box-sizing: border-box;
}
body,
body * {
/* 滚动条 */
&::-webkit-scrollbar-track-piece {
background-color: #fff; /*滚动条的背景颜色*/
-webkit-border-radius: 0; /*滚动条的圆角宽度*/
}
&::-webkit-scrollbar {
width: 10px; /*滚动条的宽度*/
height: 8px; /*滚动条的高度*/
}
&::-webkit-scrollbar-thumb:vertical {
/*垂直滚动条的样式*/
height: 50px;
background-color: rgba(153, 153, 153, 0.5);
-webkit-border-radius: 4px;
outline: 2px solid #fff;
outline-offset: -2px;
border: 2px solid #fff;
}
&::-webkit-scrollbar-thumb {
/*滚动条的hover样式*/
background-color: rgba(159, 159, 159, 0.3);
-webkit-border-radius: 4px;
}
&::-webkit-scrollbar-thumb:hover {
/*滚动条的hover样式*/
background-color: rgba(159, 159, 159, 0.5);
-webkit-border-radius: 4px;
}
}
</style>

@ -0,0 +1,259 @@
<template>
<div class="process-viewer">
<div class="process-canvas" style="height: 100%;" ref="processCanvas" v-show="!isLoading" />
<!-- 自定义箭头样式用于成功状态下流程连线箭头 -->
<defs ref="customSuccessDefs">
<marker id="sequenceflow-end-white-success" viewBox="0 0 20 20" refX="11" refY="10" markerWidth="10" markerHeight="10" orient="auto">
<path class="success-arrow" d="M 1 5 L 11 10 L 1 15 Z" style="stroke-width: 1px; stroke-linecap: round; stroke-dasharray: 10000, 1;"></path>
</marker>
<marker id="conditional-flow-marker-white-success" viewBox="0 0 20 20" refX="-1" refY="10" markerWidth="10" markerHeight="10" orient="auto">
<path class="success-conditional" d="M 0 10 L 8 6 L 16 10 L 8 14 Z" style="stroke-width: 1px; stroke-linecap: round; stroke-dasharray: 10000, 1;"></path>
</marker>
</defs>
<!-- 自定义箭头样式用于失败状态下流程连线箭头 -->
<defs ref="customFailDefs">
<marker id="sequenceflow-end-white-fail" viewBox="0 0 20 20" refX="11" refY="10" markerWidth="10" markerHeight="10" orient="auto">
<path class="fail-arrow" d="M 1 5 L 11 10 L 1 15 Z" style="stroke-width: 1px; stroke-linecap: round; stroke-dasharray: 10000, 1;"></path>
</marker>
<marker id="conditional-flow-marker-white-fail" viewBox="0 0 20 20" refX="-1" refY="10" markerWidth="10" markerHeight="10" orient="auto">
<path class="fail-conditional" d="M 0 10 L 8 6 L 16 10 L 8 14 Z" style="stroke-width: 1px; stroke-linecap: round; stroke-dasharray: 10000, 1;"></path>
</marker>
</defs>
<!-- 已完成节点悬浮弹窗 -->
<el-dialog class="comment-dialog" :title="dlgTitle || '审批记录'" :visible.sync="dialogVisible">
<el-row>
<el-table :data="taskCommentList" size="mini" border header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px" />
<el-table-column label="候选办理" prop="candidate" width="150px" align="center"/>
<el-table-column label="实际办理" prop="assigneeName" width="100px" align="center"/>
<el-table-column label="处理时间" prop="createTime" width="140px" align="center"/>
<el-table-column label="办结时间" prop="finishTime" width="140px" align="center" />
<el-table-column label="耗时" prop="duration" width="100px" align="center"/>
<el-table-column label="审批意见" align="center">
<template slot-scope="scope">
{{scope.row.commentList&&scope.row.commentList[0]?scope.row.commentList[0].fullMessage:''}}
</template>
</el-table-column>
</el-table>
</el-row>
</el-dialog>
<div style="position: absolute; top: 0px; left: 0px; width: 100%;">
<el-row type="flex" justify="end">
<el-button-group key="scale-control" size="medium">
<el-button size="medium" type="default" :plain="true" :disabled="defaultZoom <= 0.3" icon="el-icon-zoom-out" @click="processZoomOut()" />
<el-button size="medium" type="default" style="width: 90px;">{{ Math.floor(this.defaultZoom * 10 * 10) + "%" }}</el-button>
<el-button size="medium" type="default" :plain="true" :disabled="defaultZoom >= 3.9" icon="el-icon-zoom-in" @click="processZoomIn()" />
<el-button size="medium" type="default" icon="el-icon-c-scale-to-original" @click="processReZoom()" />
<slot />
</el-button-group>
</el-row>
</div>
</div>
</template>
<script>
import '@/plugins/package/theme/index.scss';
import BpmnViewer from 'bpmn-js/lib/Viewer';
import MoveCanvasModule from 'diagram-js/lib/navigation/movecanvas';
export default {
props: {
xml: {
type: String
},
finishedInfo: {
type: Object
},
//
allCommentList: {
type: Array
}
},
data () {
return {
dialogVisible: false,
dlgTitle: undefined,
defaultZoom: 1,
//
isLoading: false,
bpmnViewer: undefined,
//
processNodeInfo: undefined,
// id
selectTaskId: undefined,
//
taskCommentList: [],
// Timer
hoverTimer: null
}
},
watch: {
xml: {
handler(newXml) {
this.importXML(newXml);
},
immediate: true
},
finishedInfo: {
handler(newInfo) {
this.setProcessStatus(newInfo);
},
immediate: true
}
},
created() {
this.$nextTick(() => {
this.importXML(this.xml)
this.setProcessStatus(this.finishedInfo);
})
},
methods: {
processReZoom() {
this.defaultZoom = 1;
this.bpmnViewer.get('canvas').zoom('fit-viewport', 'auto');
},
processZoomIn(zoomStep = 0.1) {
let newZoom = Math.floor(this.defaultZoom * 100 + zoomStep * 100) / 100;
if (newZoom > 4) {
throw new Error('[Process Designer Warn ]: The zoom ratio cannot be greater than 4');
}
this.defaultZoom = newZoom;
this.bpmnViewer.get('canvas').zoom(this.defaultZoom);
},
processZoomOut(zoomStep = 0.1) {
let newZoom = Math.floor(this.defaultZoom * 100 - zoomStep * 100) / 100;
if (newZoom < 0.2) {
throw new Error('[Process Designer Warn ]: The zoom ratio cannot be less than 0.2');
}
this.defaultZoom = newZoom;
this.bpmnViewer.get('canvas').zoom(this.defaultZoom);
},
getOperationTagType(type) {
return 'success';
// switch (type) {
// case this.SysFlowTaskOperationType.AGREE:
// case this.SysFlowTaskOperationType.MULTI_AGREE:
// return 'success';
// case this.SysFlowTaskOperationType.REFUSE:
// case this.SysFlowTaskOperationType.PARALLEL_REFUSE:
// case this.SysFlowTaskOperationType.MULTI_REFUSE:
// return 'warning';
// case this.SysFlowTaskOperationType.STOP:
// return 'danger'
// default:
// return 'primary';
// }
},
//
clearViewer() {
if (this.$refs.processCanvas) {
this.$refs.processCanvas.innerHTML = '';
}
if (this.bpmnViewer) {
this.bpmnViewer.destroy();
}
this.bpmnViewer = null;
},
//
addCustomDefs() {
const canvas = this.bpmnViewer.get('canvas');
const svg = canvas._svg;
const customSuccessDefs = this.$refs.customSuccessDefs;
const customFailDefs = this.$refs.customFailDefs;
svg.appendChild(customSuccessDefs);
svg.appendChild(customFailDefs);
},
//
onSelectElement(element) {
this.selectTaskId = undefined;
this.dlgTitle = undefined;
if (this.processNodeInfo == null || this.processNodeInfo.finishedTaskSet == null) return;
if (element == null || this.processNodeInfo.finishedTaskSet.indexOf(element.id) === -1) {
return;
}
this.selectTaskId = element.id;
this.dlgTitle = element.businessObject ? element.businessObject.name : undefined;
//
this.taskCommentList = (this.allCommentList || []).filter(item => {
return item.activityId === this.selectTaskId;
});
this.dialogVisible = true;
},
//
async importXML(xml) {
this.clearViewer();
if (xml != null && xml !== '') {
try {
this.bpmnViewer = new BpmnViewer({
additionalModules: [
//
MoveCanvasModule
],
container: this.$refs.processCanvas,
});
//
this.bpmnViewer.on('element.click', ({ element }) => {
this.onSelectElement(element);
});
this.isLoading = true;
await this.bpmnViewer.importXML(xml);
this.addCustomDefs();
} catch (e) {
this.clearViewer();
} finally {
this.isLoading = false;
this.setProcessStatus(this.processNodeInfo);
}
}
},
//
setProcessStatus (processNodeInfo) {
this.processNodeInfo = processNodeInfo;
if (this.isLoading || this.processNodeInfo == null || this.bpmnViewer == null) return;
let { finishedTaskSet, rejectedTaskSet, unfinishedTaskSet, finishedSequenceFlowSet } = this.processNodeInfo;
const canvas = this.bpmnViewer.get('canvas');
const elementRegistry = this.bpmnViewer.get('elementRegistry');
if (Array.isArray(finishedSequenceFlowSet)) {
finishedSequenceFlowSet.forEach(item => {
if (item != null) {
canvas.addMarker(item, 'success');
let element = elementRegistry.get(item);
const conditionExpression = element.businessObject.conditionExpression;
if (conditionExpression) {
canvas.addMarker(item, 'condition-expression');
}
}
});
}
if (Array.isArray(finishedTaskSet)) {
finishedTaskSet.forEach(item => canvas.addMarker(item, 'success'));
}
if (Array.isArray(unfinishedTaskSet)) {
unfinishedTaskSet.forEach(item => canvas.addMarker(item, 'primary'));
}
if (Array.isArray(rejectedTaskSet)) {
rejectedTaskSet.forEach(item => {
if (item != null) {
let element = elementRegistry.get(item);
if (element.type.includes('Task')) {
canvas.addMarker(item, 'danger');
} else {
canvas.addMarker(item, 'warning');
}
}
})
}
}
},
destroyed() {
this.clearViewer();
}
}
</script>
<style scoped>
</style>

@ -0,0 +1,63 @@
<template>
<div v-bind:style="styleObject" class="scale-box">
<slot></slot>
</div>
</template>
<script>
import debounce from "lodash.debounce";
const that = this;
export default {
name:"ScaleBox",
components: {},
data() {
return {
width: 1920,
height: 911,
scaleX: null,
scaleY: null,
};
},
computed: {
styleObject() {
let obj = {
transform: `scale(${this.scaleX},${this.scaleY}) translate(-50%, -50%)`,
WebkitTransform: `scale(${this.scaleX},${this.scaleY}) translate(-50%, -50%)`,
width: this.width + "px",
height: this.height + "px",
margin: '-1px -1px 0 0',
};
return obj;
},
},
mounted() {
this.getScale();
window.addEventListener("resize", this.setScale);
},
methods: {
getScale() {
// XY
this.scaleX = window.innerWidth / this.width;
this.scaleY = window.innerHeight / this.height;
},
setScale: debounce(function () {
//
this.getScale();
}, 200),
},
beforeDestroy() {
window.addEventListener("resize", this.setScale);
},
};
</script>
<style scoped lang="scss">
.scale-box {
transform-origin: 0 0;
position: absolute;
left: 50%;
top: 50%;
transition: 0.3s;
}
</style>

@ -1,5 +1,5 @@
<template>
<section class="app-main" :class="breadcrumb ? '' : 'app-main-breadcrumb'">
<section :class="breadcrumb ? 'app-main-breadcrumb' : breadcrumbTwo ? 'app-main-breadcrumbTwo' : 'app-main'">
<transition name="fade-transform" mode="out-in">
<keep-alive :include="cachedViews">
<router-view v-if="!$route.meta.link" :key="key" />
@ -19,10 +19,13 @@ export default {
$route: {
handler(route) {
// console.log(route,"route");
if(route.path == "/workbench") {
this.breadcrumb = false;
} else {
if((route.path == "/workbench" && this.userType == "01") || route.path == "/dataCloudMap") {
this.breadcrumb = true;
} else if(route.path == "/workbench" && this.userType == "02") {
this.breadcrumbTwo = true;
} else {
this.breadcrumb = false;
this.breadcrumbTwo = false;
}
},
immediate:true
@ -31,6 +34,9 @@ export default {
data() {
return {
breadcrumb: false,
breadcrumbTwo: false,
// 01 02
userType: this.$store.state.user.userType,
};
},
computed: {
@ -54,10 +60,27 @@ export default {
padding: 10px;
background: #f6f7f9;
overflow: hidden;
// margin-top: 60px;
}
.app-main-breadcrumb {
height: calc(100% - 1px);
padding: 0 0 10px 0;
// height: calc(100% - 1px);
height: calc(100% - 65px);
// padding: 0 0 10px 0;
width: 100%;
position: relative;
background: #f6f7f9;
padding: 0;
// margin-top: 60px;
}
.app-main-breadcrumbTwo {
padding: 0 0 20px;
width: 100%;
// height: 100%;
position: relative;
background: #f6f7f9;
overflow-y: scroll;
// margin-top: 60px;
}
.fixed-header + .app-main {

@ -7,7 +7,7 @@
>
<div
class="menu-item"
v-if="!item.children || item.name == 'Project'"
v-if="!item.children"
@click="handlerRouter(item.fullPath)"
>
{{ item.meta.title }}
@ -33,6 +33,8 @@ export default {
data() {
return {
topMenus: [],
// 01 02
userType: this.$store.state.user.userType,
};
},
@ -53,6 +55,9 @@ export default {
}
}
});
if(this.userType == "01") {
this.topMenus[0].meta.title = "首页"
}
this.addParentId(this.topMenus, null);
this.$store.commit("SET_FIRST_ROUTER", this.topMenus[0].fullPath);
},
@ -75,6 +80,9 @@ export default {
//
isCurrentRoute(key) {
if((this.$route.path == '/user/projectInfo' || this.$route.path == '/user/enterpriselibraryInfo') && this.userType == '01' && key.indexOf("/enterpriseService") > -1) {
return true;
}
return this.$route.path.indexOf(key) > -1;
},

@ -60,7 +60,7 @@ export default {
$route: {
handler(route) {
// console.log(route,"route");
if(route.path == "/workbench") {
if(route.path == "/workbench" || route.path == "/dataCloudMap") {
this.breadcrumbShow = false;
} else {
this.breadcrumbShow = true;

@ -81,7 +81,22 @@ if (!localVersion || version !== localVersion) {
localStorage.clear() // 清除缓存
localStorage.setItem('projectVersion', version)
}
// var docEl = document.documentElement;
// function setRemUnit () {
// var rem = docEl.clientWidth / 19.2; // 可根据不同电脑分辨率进行手动修改如1920*1080 为19.2
// docEl.style.fontSize = rem + 'px'
// console.log(docEl);
// console.log(rem + 'px');
// }
// setRemUnit()
// window.addEventListener('resize', setRemUnit)
// window.addEventListener('pageshow', function (e) {
// if (e.persisted) {
// setRemUnit()
// }
// })
/**
* If you don't want to use mock-server
* you want to use MockJs for mock api

@ -8,9 +8,10 @@ import { isRelogin } from "@/utils/request";
NProgress.configure({ showSpinner: false });
const whiteList = ["/login", "/register"];
const whiteList = ["/login", "/entLogin", "/register"];
router.beforeEach((to, from, next) => {
console.log(window.location.href);
NProgress.start();
if (window.location.href.includes("clienttoken=")) {
var reg = new RegExp(/[?&]clienttoken=([^&#]+)/);
@ -22,7 +23,7 @@ router.beforeEach((to, from, next) => {
store.dispatch("SingleSignOnGetInfo",{clientToken:clienttoken}).then(res => {
isRelogin.show = false;
let url = window.location.href;
var modifiedUrl = url.replace(/(\?appid&clienttoken=)[^&#]+/, '');
var modifiedUrl = url.replace(/(\&clienttoken=)[^&#]+/, '');
// console.log(modifiedUrl,'modifiedUrl');
window.location.href = modifiedUrl;
// store.dispatch("GenerateRoutes").then((accessRoutes) => {
@ -47,14 +48,29 @@ router.beforeEach((to, from, next) => {
store.dispatch("LogOut").then(() => {
Message.error(err);
next({ path: "/" });
});
});
}
}).catch((err) => {
// if(err.msg == "") {
// } else {
// }
store.dispatch("LogOut").then(() => {
Message.error(err);
location.href = process.env.VUE_APP_BASE_API + "/system/singlelogin/login"
// Message.error(err);
// let url = window.location.href;
// var modifiedUrl = url.replace(/(\?appid&clienttoken=)[^&#]+/, '');
// // console.log(modifiedUrl,'modifiedUrl');
// window.location.href = modifiedUrl;
window.location.href = "https://qytt.sipac.gov.cn/ecobrainportal/index.html";
next({ path: "/" });
});
// store.dispatch("LogOut").then(() => {
// Message.error(err);
// location.href = process.env.VUE_APP_BASE_API + "/system/singlelogin/login"
// });
});
} else {
next();
@ -111,18 +127,16 @@ router.beforeEach((to, from, next) => {
// });
});
}
}
// else if(window.location.href.includes("clienttoken=")){
// }
else if (getToken()) {
} else if (getToken()) {
to.meta.title && store.dispatch("settings/setTitle", to.meta.title);
/* has token*/
if (to.path === "/login") {
if (to.path === "/entLogin") {
next({ path: "/" });
NProgress.done();
} else if (whiteList.indexOf(to.path) !== -1) {
next();
next({ path: "/" });
NProgress.done();
// next();
} else {
if (store.getters.roles.length === 0) {
isRelogin.show = true;
@ -153,7 +167,7 @@ router.beforeEach((to, from, next) => {
// 在免登录白名单,直接进入
next();
} else {
next(`/login?redirect=${encodeURIComponent(to.fullPath)}`); // 否则全部重定向到登录页
next(`/entLogin?redirect=${encodeURIComponent(to.fullPath)}`); // 否则全部重定向到登录页
NProgress.done();
}
// store.dispatch("LogOut").then(() => {

@ -0,0 +1,465 @@
<template>
<div class="my-process-designer">
<div class="my-process-designer__header">
<slot name="control-header"></slot>
<template v-if="!$slots['control-header']">
<el-button-group key="file-control">
<el-button :size="headerButtonSize" :type="headerButtonType" icon="el-icon-edit-outline" @click="onSave"></el-button>
<el-button :size="headerButtonSize" :type="headerButtonType" icon="el-icon-folder-opened" @click="$refs.refFile.click()"></el-button>
<el-tooltip effect="light">
<div slot="content">
<el-button :size="headerButtonSize" type="text" @click="downloadProcessAsXml()">XML</el-button>
<br />
<el-button :size="headerButtonSize" type="text" @click="downloadProcessAsSvg()">SVG</el-button>
<br />
<el-button :size="headerButtonSize" type="text" @click="downloadProcessAsBpmn()">BPMN</el-button>
</div>
<el-button :size="headerButtonSize" :type="headerButtonType" icon="el-icon-download">下载文件</el-button>
</el-tooltip>
<el-tooltip effect="light">
<div slot="content">
<el-button :size="headerButtonSize" type="text" @click="previewProcessXML">XML</el-button>
<br />
<el-button :size="headerButtonSize" type="text" @click="previewProcessJson">JSON</el-button>
</div>
<el-button :size="headerButtonSize" :type="headerButtonType" icon="el-icon-view">预览</el-button>
</el-tooltip>
<el-tooltip v-if="simulation" effect="light" :content="this.simulationStatus ? '退出模拟' : '开启模拟'">
<el-button :size="headerButtonSize" :type="headerButtonType" icon="el-icon-cpu" @click="processSimulation">
模拟
</el-button>
</el-tooltip>
</el-button-group>
<el-button-group key="align-control">
<el-tooltip effect="light" content="向左对齐">
<el-button :size="headerButtonSize" class="align align-left" icon="el-icon-s-data" @click="elementsAlign('left')" />
</el-tooltip>
<el-tooltip effect="light" content="向右对齐">
<el-button :size="headerButtonSize" class="align align-right" icon="el-icon-s-data" @click="elementsAlign('right')" />
</el-tooltip>
<el-tooltip effect="light" content="向上对齐">
<el-button :size="headerButtonSize" class="align align-top" icon="el-icon-s-data" @click="elementsAlign('top')" />
</el-tooltip>
<el-tooltip effect="light" content="向下对齐">
<el-button :size="headerButtonSize" class="align align-bottom" icon="el-icon-s-data" @click="elementsAlign('bottom')" />
</el-tooltip>
<el-tooltip effect="light" content="水平居中">
<el-button :size="headerButtonSize" class="align align-center" icon="el-icon-s-data" @click="elementsAlign('center')" />
</el-tooltip>
<el-tooltip effect="light" content="垂直居中">
<el-button :size="headerButtonSize" class="align align-middle" icon="el-icon-s-data" @click="elementsAlign('middle')" />
</el-tooltip>
</el-button-group>
<el-button-group key="scale-control">
<el-tooltip effect="light" content="缩小视图">
<el-button :size="headerButtonSize" :disabled="defaultZoom <= 0.3" icon="el-icon-zoom-out" @click="processZoomOut()" />
</el-tooltip>
<el-button :size="headerButtonSize">{{ Math.floor(this.defaultZoom * 10 * 10) + "%" }}</el-button>
<el-tooltip effect="light" content="放大视图">
<el-button :size="headerButtonSize" :disabled="defaultZoom >= 3.9" icon="el-icon-zoom-in" @click="processZoomIn()" />
</el-tooltip>
<el-tooltip effect="light" content="重置视图并居中">
<el-button :size="headerButtonSize" icon="el-icon-c-scale-to-original" @click="processReZoom()" />
</el-tooltip>
</el-button-group>
<el-button-group key="stack-control">
<el-tooltip effect="light" content="撤销">
<el-button :size="headerButtonSize" :disabled="!revocable" icon="el-icon-refresh-left" @click="processUndo()" />
</el-tooltip>
<el-tooltip effect="light" content="恢复">
<el-button :size="headerButtonSize" :disabled="!recoverable" icon="el-icon-refresh-right" @click="processRedo()" />
</el-tooltip>
<el-tooltip effect="light" content="重新绘制">
<el-button :size="headerButtonSize" icon="el-icon-refresh" @click="processRestart" />
</el-tooltip>
</el-button-group>
</template>
<!-- 用于打开本地文件-->
<input type="file" id="files" ref="refFile" style="display: none" accept=".xml, .bpmn" @change="importLocalFile" />
</div>
<div class="my-process-designer__container">
<div class="my-process-designer__canvas" ref="bpmn-canvas"></div>
</div>
<el-dialog title="预览" width="60%" :visible.sync="previewModelVisible" append-to-body destroy-on-close>
<highlightjs :language="previewType" :code="previewResult" style="height: 60vh" />
</el-dialog>
</div>
</template>
<script>
//
// const BpmnModeler = window.BpmnJS;
import BpmnModeler from "bpmn-js/lib/Modeler";
import DefaultEmptyXML from "./plugins/defaultEmpty";
//
import customTranslate from "./plugins/translate/customTranslate";
import translationsCN from "./plugins/translate/zh";
//
import tokenSimulation from "bpmn-js-token-simulation";
//
// import bpmnPropertiesProvider from "bpmn-js-properties-panel/lib/provider/bpmn";
// Moddle
import camundaModdleDescriptor from "./plugins/descriptor/camundaDescriptor.json";
import activitiModdleDescriptor from "./plugins/descriptor/activitiDescriptor.json";
import flowableModdleDescriptor from "./plugins/descriptor/flowableDescriptor.json";
// Extension
import camundaModdleExtension from "./plugins/extension-moddle/camunda";
import activitiModdleExtension from "./plugins/extension-moddle/activiti";
import flowableModdleExtension from "./plugins/extension-moddle/flowable";
// json
import convert from "xml-js";
export default {
name: "BpmnProcessDesigner",
componentName: "BpmnProcessDesigner",
props: {
value: String, // xml
processId: String,
processName: String,
translations: Object, //
additionalModel: [Object, Array], // model
moddleExtension: Object, // moddle
onlyCustomizeAddi: {
type: Boolean,
default: false
},
onlyCustomizeModdle: {
type: Boolean,
default: false
},
simulation: {
type: Boolean,
default: true
},
keyboard: {
type: Boolean,
default: true
},
prefix: {
type: String,
default: "flowable"
},
events: {
type: Array,
default: () => ["element.click"]
},
headerButtonSize: {
type: String,
default: "small",
validator: value => ["default", "medium", "small", "mini"].indexOf(value) !== -1
},
headerButtonType: {
type: String,
default: "primary",
validator: value => ["default", "primary", "success", "warning", "danger", "info"].indexOf(value) !== -1
}
},
data() {
return {
defaultZoom: 1,
previewModelVisible: false,
simulationStatus: false,
previewResult: "",
previewType: "xml",
recoverable: false,
revocable: false
};
},
computed: {
additionalModules() {
const Modules = [];
//
if (this.onlyCustomizeAddi) {
if (Object.prototype.toString.call(this.additionalModel) === "[object Array]") {
return this.additionalModel || [];
}
return [this.additionalModel];
}
//
if (Object.prototype.toString.call(this.additionalModel) === "[object Array]") {
Modules.push(...this.additionalModel);
} else {
this.additionalModel && Modules.push(this.additionalModel);
}
//
const TranslateModule = {
translate: ["value", customTranslate(this.translations || translationsCN)]
};
Modules.push(TranslateModule);
//
if (this.simulation) {
Modules.push(tokenSimulation);
}
//
// if (this.prefix === "bpmn") {
// Modules.push(bpmnModdleExtension);
// }
if (this.prefix === "camunda") {
Modules.push(camundaModdleExtension);
}
if (this.prefix === "flowable") {
Modules.push(flowableModdleExtension);
}
if (this.prefix === "activiti") {
Modules.push(activitiModdleExtension);
}
return Modules;
},
moddleExtensions() {
const Extensions = {};
// 使
if (this.onlyCustomizeModdle) {
return this.moddleExtension || null;
}
//
if (this.moddleExtension) {
for (let key in this.moddleExtension) {
Extensions[key] = this.moddleExtension[key];
}
}
// ""
if (this.prefix === "activiti") {
Extensions.activiti = activitiModdleDescriptor;
}
if (this.prefix === "flowable") {
Extensions.flowable = flowableModdleDescriptor;
}
if (this.prefix === "camunda") {
Extensions.camunda = camundaModdleDescriptor;
}
return Extensions;
}
},
mounted() {
this.initBpmnModeler();
this.createNewDiagram(this.value);
this.$once("hook:beforeDestroy", () => {
if (this.bpmnModeler) this.bpmnModeler.destroy();
this.$emit("destroy", this.bpmnModeler);
this.bpmnModeler = null;
});
},
methods: {
onSave () {
return new Promise((resolve, reject) => {
if (this.bpmnModeler == null) {
reject();
}
this.bpmnModeler.saveXML({ format: true }).then(({ xml }) => {
this.$emit('save', xml);
resolve(xml);
});
})
},
initBpmnModeler() {
if (this.bpmnModeler) return;
this.bpmnModeler = new BpmnModeler({
container: this.$refs["bpmn-canvas"],
keyboard: this.keyboard ? { bindTo: document } : null,
additionalModules: this.additionalModules,
moddleExtensions: this.moddleExtensions
});
this.$emit("init-finished", this.bpmnModeler);
this.initModelListeners();
},
initModelListeners() {
const EventBus = this.bpmnModeler.get("eventBus");
const that = this;
// , . - ,
this.events.forEach(event => {
EventBus.on(event, function(eventObj) {
let eventName = event.replace(/\./g, "-");
let element = eventObj ? eventObj.element : null;
that.$emit(eventName, element, eventObj);
that.$emit('event', eventName, element, eventObj);
});
});
// xml
EventBus.on("commandStack.changed", async event => {
try {
this.recoverable = this.bpmnModeler.get("commandStack").canRedo();
this.revocable = this.bpmnModeler.get("commandStack").canUndo();
let { xml } = await this.bpmnModeler.saveXML({ format: true });
this.$emit("commandStack-changed", event);
this.$emit("input", xml);
this.$emit("change", xml);
} catch (e) {
console.error(`[Process Designer Warn]: ${e.message || e}`);
}
});
//
this.bpmnModeler.on("canvas.viewbox.changed", ({ viewbox }) => {
this.$emit("canvas-viewbox-changed", { viewbox });
const { scale } = viewbox;
this.defaultZoom = Math.floor(scale * 100) / 100;
});
},
/* 创建新的流程图 */
async createNewDiagram(xml) {
//
let newId = this.processId || `Process_${new Date().getTime()}`;
let newName = this.processName || `业务流程_${new Date().getTime()}`;
let xmlString = xml || DefaultEmptyXML(newId, newName, this.prefix);
try {
let { warnings } = await this.bpmnModeler.importXML(xmlString);
if (warnings && warnings.length) {
warnings.forEach(warn => console.warn(warn));
}
} catch (e) {
console.error(`[Process Designer Warn]: ${e.message || e}`);
}
},
//
async downloadProcess(type, name) {
try {
const _this = this;
//
if (type === "xml" || type === "bpmn") {
const { err, xml } = await this.bpmnModeler.saveXML();
//
if (err) {
console.error(`[Process Designer Warn ]: ${err.message || err}`);
}
let { href, filename } = _this.setEncoded(type.toUpperCase(), name, xml);
downloadFunc(href, filename);
} else {
const { err, svg } = await this.bpmnModeler.saveSVG();
//
if (err) {
return console.error(err);
}
let { href, filename } = _this.setEncoded("SVG", name, svg);
downloadFunc(href, filename);
}
} catch (e) {
console.error(`[Process Designer Warn ]: ${e.message || e}`);
}
//
function downloadFunc(href, filename) {
if (href && filename) {
let a = document.createElement("a");
a.download = filename; //
a.href = href; // URL
a.click(); //
URL.revokeObjectURL(a.href); // URL
}
}
},
//
setEncoded(type, filename = "diagram", data) {
const encodedData = encodeURIComponent(data);
return {
filename: `${filename}.${type}`,
href: `data:application/${type === "svg" ? "text/xml" : "bpmn20-xml"};charset=UTF-8,${encodedData}`,
data: data
};
},
//
importLocalFile() {
const that = this;
const file = this.$refs.refFile.files[0];
const reader = new FileReader();
reader.readAsText(file);
reader.onload = function() {
let xmlStr = this.result;
that.createNewDiagram(xmlStr);
};
},
/* ------------------------------------------------ refs methods ------------------------------------------------------ */
downloadProcessAsXml() {
this.downloadProcess("xml");
},
downloadProcessAsBpmn() {
this.downloadProcess("bpmn");
},
downloadProcessAsSvg() {
this.downloadProcess("svg");
},
processSimulation() {
this.simulationStatus = !this.simulationStatus;
this.simulation && this.bpmnModeler.get("toggleMode").toggleMode();
},
processRedo() {
this.bpmnModeler.get("commandStack").redo();
},
processUndo() {
this.bpmnModeler.get("commandStack").undo();
},
processZoomIn(zoomStep = 0.1) {
let newZoom = Math.floor(this.defaultZoom * 100 + zoomStep * 100) / 100;
if (newZoom > 4) {
throw new Error("[Process Designer Warn ]: The zoom ratio cannot be greater than 4");
}
this.defaultZoom = newZoom;
this.bpmnModeler.get("canvas").zoom(this.defaultZoom);
},
processZoomOut(zoomStep = 0.1) {
let newZoom = Math.floor(this.defaultZoom * 100 - zoomStep * 100) / 100;
if (newZoom < 0.2) {
throw new Error("[Process Designer Warn ]: The zoom ratio cannot be less than 0.2");
}
this.defaultZoom = newZoom;
this.bpmnModeler.get("canvas").zoom(this.defaultZoom);
},
processZoomTo(newZoom = 1) {
if (newZoom < 0.2) {
throw new Error("[Process Designer Warn ]: The zoom ratio cannot be less than 0.2");
}
if (newZoom > 4) {
throw new Error("[Process Designer Warn ]: The zoom ratio cannot be greater than 4");
}
this.defaultZoom = newZoom;
this.bpmnModeler.get("canvas").zoom(newZoom);
},
processReZoom() {
this.defaultZoom = 1;
this.bpmnModeler.get("canvas").zoom("fit-viewport", "auto");
},
processRestart() {
this.recoverable = false;
this.revocable = false;
this.createNewDiagram(null).then(() => this.bpmnModeler.get("canvas").zoom(1, "auto"));
},
elementsAlign(align) {
const Align = this.bpmnModeler.get("alignElements");
const Selection = this.bpmnModeler.get("selection");
const SelectedElements = Selection.get();
if (!SelectedElements || SelectedElements.length <= 1) {
this.$message.warning("请按住 Ctrl 键选择多个元素对齐");
return;
}
this.$confirm("自动对齐可能造成图形变形,是否继续?", "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => Align.trigger(SelectedElements, align));
},
/*----------------------------- 方法结束 ---------------------------------*/
previewProcessXML() {
this.bpmnModeler.saveXML({ format: true }).then(({ xml }) => {
this.previewResult = xml;
this.previewType = "xml";
this.previewModelVisible = true;
});
},
previewProcessJson() {
this.bpmnModeler.saveXML({ format: true }).then(({ xml }) => {
this.previewResult = convert.xml2json(xml, { spaces: 2 });
this.previewType = "json";
this.previewModelVisible = true;
});
}
}
};
</script>

@ -0,0 +1,7 @@
import BpmnProcessDesigner from "./ProcessDesigner.vue";
BpmnProcessDesigner.install = function(Vue) {
Vue.component(BpmnProcessDesigner.name, BpmnProcessDesigner);
};
export default BpmnProcessDesigner;

@ -0,0 +1,390 @@
import { assign, forEach, isArray } from "min-dash";
import { is } from "bpmn-js/lib/util/ModelUtil";
import { isExpanded, isEventSubProcess } from "bpmn-js/lib/util/DiUtil";
import { isAny } from "bpmn-js/lib/features/modeling/util/ModelingUtil";
import { getChildLanes } from "bpmn-js/lib/features/modeling/util/LaneUtil";
import { hasPrimaryModifier } from "diagram-js/lib/util/Mouse";
/**
* A provider for BPMN 2.0 elements context pad
*/
export default function ContextPadProvider(
config,
injector,
eventBus,
contextPad,
modeling,
elementFactory,
connect,
create,
popupMenu,
canvas,
rules,
translate,
elementRegistry
) {
config = config || {};
contextPad.registerProvider(this);
this._contextPad = contextPad;
this._modeling = modeling;
this._elementFactory = elementFactory;
this._connect = connect;
this._create = create;
this._popupMenu = popupMenu;
this._canvas = canvas;
this._rules = rules;
this._translate = translate;
if (config.autoPlace !== false) {
this._autoPlace = injector.get("autoPlace", false);
}
eventBus.on("create.end", 250, function(event) {
var context = event.context,
shape = context.shape;
if (!hasPrimaryModifier(event) || !contextPad.isOpen(shape)) {
return;
}
var entries = contextPad.getEntries(shape);
if (entries.replace) {
entries.replace.action.click(event, shape);
}
});
}
ContextPadProvider.$inject = [
"config.contextPad",
"injector",
"eventBus",
"contextPad",
"modeling",
"elementFactory",
"connect",
"create",
"popupMenu",
"canvas",
"rules",
"translate",
"elementRegistry"
];
ContextPadProvider.prototype.getContextPadEntries = function(element) {
var contextPad = this._contextPad,
modeling = this._modeling,
elementFactory = this._elementFactory,
connect = this._connect,
create = this._create,
popupMenu = this._popupMenu,
canvas = this._canvas,
rules = this._rules,
autoPlace = this._autoPlace,
translate = this._translate;
var actions = {};
if (element.type === "label") {
return actions;
}
var businessObject = element.businessObject;
function startConnect(event, element) {
connect.start(event, element);
}
function removeElement() {
modeling.removeElements([element]);
}
function getReplaceMenuPosition(element) {
var Y_OFFSET = 5;
var diagramContainer = canvas.getContainer(),
pad = contextPad.getPad(element).html;
var diagramRect = diagramContainer.getBoundingClientRect(),
padRect = pad.getBoundingClientRect();
var top = padRect.top - diagramRect.top;
var left = padRect.left - diagramRect.left;
var pos = {
x: left,
y: top + padRect.height + Y_OFFSET
};
return pos;
}
/**
* Create an append action
*
* @param {string} type
* @param {string} className
* @param {string} [title]
* @param {Object} [options]
*
* @return {Object} descriptor
*/
function appendAction(type, className, title, options) {
if (typeof title !== "string") {
options = title;
title = translate("Append {type}", { type: type.replace(/^bpmn:/, "") });
}
function appendStart(event, element) {
var shape = elementFactory.createShape(assign({ type: type }, options));
create.start(event, shape, {
source: element
});
}
var append = autoPlace
? function(event, element) {
var shape = elementFactory.createShape(assign({ type: type }, options));
autoPlace.append(element, shape);
}
: appendStart;
return {
group: "model",
className: className,
title: title,
action: {
dragstart: appendStart,
click: append
}
};
}
function splitLaneHandler(count) {
return function(event, element) {
// actual split
modeling.splitLane(element, count);
// refresh context pad after split to
// get rid of split icons
contextPad.open(element, true);
};
}
if (isAny(businessObject, ["bpmn:Lane", "bpmn:Participant"]) && isExpanded(businessObject)) {
var childLanes = getChildLanes(element);
assign(actions, {
"lane-insert-above": {
group: "lane-insert-above",
className: "bpmn-icon-lane-insert-above",
title: translate("Add Lane above"),
action: {
click: function(event, element) {
modeling.addLane(element, "top");
}
}
}
});
if (childLanes.length < 2) {
if (element.height >= 120) {
assign(actions, {
"lane-divide-two": {
group: "lane-divide",
className: "bpmn-icon-lane-divide-two",
title: translate("Divide into two Lanes"),
action: {
click: splitLaneHandler(2)
}
}
});
}
if (element.height >= 180) {
assign(actions, {
"lane-divide-three": {
group: "lane-divide",
className: "bpmn-icon-lane-divide-three",
title: translate("Divide into three Lanes"),
action: {
click: splitLaneHandler(3)
}
}
});
}
}
assign(actions, {
"lane-insert-below": {
group: "lane-insert-below",
className: "bpmn-icon-lane-insert-below",
title: translate("Add Lane below"),
action: {
click: function(event, element) {
modeling.addLane(element, "bottom");
}
}
}
});
}
if (is(businessObject, "bpmn:FlowNode")) {
if (is(businessObject, "bpmn:EventBasedGateway")) {
assign(actions, {
"append.receive-task": appendAction("bpmn:ReceiveTask", "bpmn-icon-receive-task", translate("Append ReceiveTask")),
"append.message-intermediate-event": appendAction(
"bpmn:IntermediateCatchEvent",
"bpmn-icon-intermediate-event-catch-message",
translate("Append MessageIntermediateCatchEvent"),
{ eventDefinitionType: "bpmn:MessageEventDefinition" }
),
"append.timer-intermediate-event": appendAction(
"bpmn:IntermediateCatchEvent",
"bpmn-icon-intermediate-event-catch-timer",
translate("Append TimerIntermediateCatchEvent"),
{ eventDefinitionType: "bpmn:TimerEventDefinition" }
),
"append.condition-intermediate-event": appendAction(
"bpmn:IntermediateCatchEvent",
"bpmn-icon-intermediate-event-catch-condition",
translate("Append ConditionIntermediateCatchEvent"),
{ eventDefinitionType: "bpmn:ConditionalEventDefinition" }
),
"append.signal-intermediate-event": appendAction(
"bpmn:IntermediateCatchEvent",
"bpmn-icon-intermediate-event-catch-signal",
translate("Append SignalIntermediateCatchEvent"),
{ eventDefinitionType: "bpmn:SignalEventDefinition" }
)
});
} else if (isEventType(businessObject, "bpmn:BoundaryEvent", "bpmn:CompensateEventDefinition")) {
assign(actions, {
"append.compensation-activity": appendAction("bpmn:Task", "bpmn-icon-task", translate("Append compensation activity"), {
isForCompensation: true
})
});
} else if (
!is(businessObject, "bpmn:EndEvent") &&
!businessObject.isForCompensation &&
!isEventType(businessObject, "bpmn:IntermediateThrowEvent", "bpmn:LinkEventDefinition") &&
!isEventSubProcess(businessObject)
) {
assign(actions, {
"append.end-event": appendAction("bpmn:EndEvent", "bpmn-icon-end-event-none", translate("Append EndEvent")),
"append.gateway": appendAction("bpmn:ExclusiveGateway", "bpmn-icon-gateway-none", translate("Append Gateway")),
"append.append-task": appendAction("bpmn:UserTask", "bpmn-icon-user-task", translate("Append Task")),
"append.intermediate-event": appendAction(
"bpmn:IntermediateThrowEvent",
"bpmn-icon-intermediate-event-none",
translate("Append Intermediate/Boundary Event")
)
});
}
}
if (!popupMenu.isEmpty(element, "bpmn-replace")) {
// Replace menu entry
assign(actions, {
replace: {
group: "edit",
className: "bpmn-icon-screw-wrench",
title: translate("Change type"),
action: {
click: function(event, element) {
var position = assign(getReplaceMenuPosition(element), {
cursor: { x: event.x, y: event.y }
});
popupMenu.open(element, "bpmn-replace", position);
}
}
}
});
}
if (isAny(businessObject, ["bpmn:FlowNode", "bpmn:InteractionNode", "bpmn:DataObjectReference", "bpmn:DataStoreReference"])) {
assign(actions, {
"append.text-annotation": appendAction("bpmn:TextAnnotation", "bpmn-icon-text-annotation"),
connect: {
group: "connect",
className: "bpmn-icon-connection-multi",
title: translate("Connect using " + (businessObject.isForCompensation ? "" : "Sequence/MessageFlow or ") + "Association"),
action: {
click: startConnect,
dragstart: startConnect
}
}
});
}
if (isAny(businessObject, ["bpmn:DataObjectReference", "bpmn:DataStoreReference"])) {
assign(actions, {
connect: {
group: "connect",
className: "bpmn-icon-connection-multi",
title: translate("Connect using DataInputAssociation"),
action: {
click: startConnect,
dragstart: startConnect
}
}
});
}
if (is(businessObject, "bpmn:Group")) {
assign(actions, {
"append.text-annotation": appendAction("bpmn:TextAnnotation", "bpmn-icon-text-annotation")
});
}
// delete element entry, only show if allowed by rules
var deleteAllowed = rules.allowed("elements.delete", { elements: [element] });
if (isArray(deleteAllowed)) {
// was the element returned as a deletion candidate?
deleteAllowed = deleteAllowed[0] === element;
}
if (deleteAllowed) {
assign(actions, {
delete: {
group: "edit",
className: "bpmn-icon-trash",
title: translate("Remove"),
action: {
click: removeElement
}
}
});
}
return actions;
};
// helpers /////////
function isEventType(eventBo, type, definition) {
var isType = eventBo.$instanceOf(type);
var isDefinition = false;
var definitions = eventBo.eventDefinitions || [];
forEach(definitions, function(def) {
if (def.$type === definition) {
isDefinition = true;
}
});
return isType && isDefinition;
}

@ -0,0 +1,6 @@
import CustomContextPadProvider from "./contentPadProvider";
export default {
__init__: ["contextPadProvider"],
contextPadProvider: ["type", CustomContextPadProvider]
};

@ -0,0 +1,27 @@
export default (key, name, type) => {
if (!type) type = "camunda";
const TYPE_TARGET = {
activiti: "http://activiti.org/bpmn",
camunda: "http://bpmn.io/schema/bpmn",
flowable: "http://flowable.org/bpmn"
};
return `
<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:definitions
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
id="diagram_${key}"
targetNamespace="${TYPE_TARGET[type]}">
<bpmn2:process id="${key}" name="${name}" isExecutable="true">
</bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="${key}">
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn2:definitions>
`;
};

@ -0,0 +1,74 @@
"use strict";
var some = require("min-dash").some;
var ALLOWED_TYPES = {
FailedJobRetryTimeCycle: ["bpmn:StartEvent", "bpmn:BoundaryEvent", "bpmn:IntermediateCatchEvent", "bpmn:Activity"],
Connector: ["bpmn:EndEvent", "bpmn:IntermediateThrowEvent"],
Field: ["bpmn:EndEvent", "bpmn:IntermediateThrowEvent"]
};
function is(element, type) {
return element && typeof element.$instanceOf === "function" && element.$instanceOf(type);
}
function exists(element) {
return element && element.length;
}
function includesType(collection, type) {
return (
exists(collection) &&
some(collection, function(element) {
return is(element, type);
})
);
}
function anyType(element, types) {
return some(types, function(type) {
return is(element, type);
});
}
function isAllowed(propName, propDescriptor, newElement) {
var name = propDescriptor.name,
types = ALLOWED_TYPES[name.replace(/activiti:/, "")];
return name === propName && anyType(newElement, types);
}
function ActivitiModdleExtension(eventBus) {
eventBus.on(
"property.clone",
function(context) {
var newElement = context.newElement,
propDescriptor = context.propertyDescriptor;
this.canCloneProperty(newElement, propDescriptor);
},
this
);
}
ActivitiModdleExtension.$inject = ["eventBus"];
ActivitiModdleExtension.prototype.canCloneProperty = function(newElement, propDescriptor) {
if (isAllowed("activiti:FailedJobRetryTimeCycle", propDescriptor, newElement)) {
return (
includesType(newElement.eventDefinitions, "bpmn:TimerEventDefinition") ||
includesType(newElement.eventDefinitions, "bpmn:SignalEventDefinition") ||
is(newElement.loopCharacteristics, "bpmn:MultiInstanceLoopCharacteristics")
);
}
if (isAllowed("activiti:Connector", propDescriptor, newElement)) {
return includesType(newElement.eventDefinitions, "bpmn:MessageEventDefinition");
}
if (isAllowed("activiti:Field", propDescriptor, newElement)) {
return includesType(newElement.eventDefinitions, "bpmn:MessageEventDefinition");
}
};
module.exports = ActivitiModdleExtension;

@ -0,0 +1,9 @@
/*
* @author igdianov
* address https://github.com/igdianov/activiti-bpmn-moddle
* */
module.exports = {
__init__: ["ActivitiModdleExtension"],
ActivitiModdleExtension: ["type", require("./activitiExtension")]
};

@ -0,0 +1,148 @@
"use strict";
var isFunction = require("min-dash").isFunction,
isObject = require("min-dash").isObject,
some = require("min-dash").some;
var WILDCARD = "*";
function CamundaModdleExtension(eventBus) {
var self = this;
eventBus.on("moddleCopy.canCopyProperty", function(context) {
var property = context.property,
parent = context.parent;
return self.canCopyProperty(property, parent);
});
}
CamundaModdleExtension.$inject = ["eventBus"];
/**
* Check wether to disallow copying property.
*/
CamundaModdleExtension.prototype.canCopyProperty = function(property, parent) {
// (1) check wether property is allowed in parent
if (isObject(property) && !isAllowedInParent(property, parent)) {
return false;
}
// (2) check more complex scenarios
if (is(property, "camunda:InputOutput") && !this.canHostInputOutput(parent)) {
return false;
}
if (isAny(property, ["camunda:Connector", "camunda:Field"]) && !this.canHostConnector(parent)) {
return false;
}
if (is(property, "camunda:In") && !this.canHostIn(parent)) {
return false;
}
};
CamundaModdleExtension.prototype.canHostInputOutput = function(parent) {
// allowed in camunda:Connector
var connector = getParent(parent, "camunda:Connector");
if (connector) {
return true;
}
// special rules inside bpmn:FlowNode
var flowNode = getParent(parent, "bpmn:FlowNode");
if (!flowNode) {
return false;
}
if (isAny(flowNode, ["bpmn:StartEvent", "bpmn:Gateway", "bpmn:BoundaryEvent"])) {
return false;
}
if (is(flowNode, "bpmn:SubProcess") && flowNode.get("triggeredByEvent")) {
return false;
}
return true;
};
CamundaModdleExtension.prototype.canHostConnector = function(parent) {
var serviceTaskLike = getParent(parent, "camunda:ServiceTaskLike");
if (is(serviceTaskLike, "bpmn:MessageEventDefinition")) {
// only allow on throw and end events
return getParent(parent, "bpmn:IntermediateThrowEvent") || getParent(parent, "bpmn:EndEvent");
}
return true;
};
CamundaModdleExtension.prototype.canHostIn = function(parent) {
var callActivity = getParent(parent, "bpmn:CallActivity");
if (callActivity) {
return true;
}
var signalEventDefinition = getParent(parent, "bpmn:SignalEventDefinition");
if (signalEventDefinition) {
// only allow on throw and end events
return getParent(parent, "bpmn:IntermediateThrowEvent") || getParent(parent, "bpmn:EndEvent");
}
return true;
};
module.exports = CamundaModdleExtension;
// helpers //////////
function is(element, type) {
return element && isFunction(element.$instanceOf) && element.$instanceOf(type);
}
function isAny(element, types) {
return some(types, function(t) {
return is(element, t);
});
}
function getParent(element, type) {
if (!type) {
return element.$parent;
}
if (is(element, type)) {
return element;
}
if (!element.$parent) {
return;
}
return getParent(element.$parent, type);
}
function isAllowedInParent(property, parent) {
// (1) find property descriptor
var descriptor = property.$type && property.$model.getTypeDescriptor(property.$type);
var allowedIn = descriptor && descriptor.meta && descriptor.meta.allowedIn;
if (!allowedIn || isWildcard(allowedIn)) {
return true;
}
// (2) check wether property has parent of allowed type
return some(allowedIn, function(type) {
return getParent(parent, type);
});
}
function isWildcard(allowedIn) {
return allowedIn.indexOf(WILDCARD) !== -1;
}

@ -0,0 +1,6 @@
"use strict";
module.exports = {
__init__: ["camundaModdleExtension"],
camundaModdleExtension: ["type", require("./extension")]
};

@ -0,0 +1,74 @@
"use strict";
var some = require("min-dash").some;
var ALLOWED_TYPES = {
FailedJobRetryTimeCycle: ["bpmn:StartEvent", "bpmn:BoundaryEvent", "bpmn:IntermediateCatchEvent", "bpmn:Activity"],
Connector: ["bpmn:EndEvent", "bpmn:IntermediateThrowEvent"],
Field: ["bpmn:EndEvent", "bpmn:IntermediateThrowEvent"]
};
function is(element, type) {
return element && typeof element.$instanceOf === "function" && element.$instanceOf(type);
}
function exists(element) {
return element && element.length;
}
function includesType(collection, type) {
return (
exists(collection) &&
some(collection, function(element) {
return is(element, type);
})
);
}
function anyType(element, types) {
return some(types, function(type) {
return is(element, type);
});
}
function isAllowed(propName, propDescriptor, newElement) {
var name = propDescriptor.name,
types = ALLOWED_TYPES[name.replace(/flowable:/, "")];
return name === propName && anyType(newElement, types);
}
function FlowableModdleExtension(eventBus) {
eventBus.on(
"property.clone",
function(context) {
var newElement = context.newElement,
propDescriptor = context.propertyDescriptor;
this.canCloneProperty(newElement, propDescriptor);
},
this
);
}
FlowableModdleExtension.$inject = ["eventBus"];
FlowableModdleExtension.prototype.canCloneProperty = function(newElement, propDescriptor) {
if (isAllowed("flowable:FailedJobRetryTimeCycle", propDescriptor, newElement)) {
return (
includesType(newElement.eventDefinitions, "bpmn:TimerEventDefinition") ||
includesType(newElement.eventDefinitions, "bpmn:SignalEventDefinition") ||
is(newElement.loopCharacteristics, "bpmn:MultiInstanceLoopCharacteristics")
);
}
if (isAllowed("flowable:Connector", propDescriptor, newElement)) {
return includesType(newElement.eventDefinitions, "bpmn:MessageEventDefinition");
}
if (isAllowed("flowable:Field", propDescriptor, newElement)) {
return includesType(newElement.eventDefinitions, "bpmn:MessageEventDefinition");
}
};
module.exports = FlowableModdleExtension;

@ -0,0 +1,9 @@
/*
* @author igdianov
* address https://github.com/igdianov/activiti-bpmn-moddle
* */
module.exports = {
__init__: ["FlowableModdleExtension"],
FlowableModdleExtension: ["type", require("./flowableExtension")]
};

@ -0,0 +1,15 @@
import PaletteModule from "diagram-js/lib/features/palette";
import CreateModule from "diagram-js/lib/features/create";
import SpaceToolModule from "diagram-js/lib/features/space-tool";
import LassoToolModule from "diagram-js/lib/features/lasso-tool";
import HandToolModule from "diagram-js/lib/features/hand-tool";
import GlobalConnectModule from "diagram-js/lib/features/global-connect";
import translate from "diagram-js/lib/i18n/translate";
import PaletteProvider from "./paletteProvider";
export default {
__depends__: [PaletteModule, CreateModule, SpaceToolModule, LassoToolModule, HandToolModule, GlobalConnectModule, translate],
__init__: ["paletteProvider"],
paletteProvider: ["type", PaletteProvider]
};

@ -0,0 +1,160 @@
import { assign } from "min-dash";
/**
* A palette provider for BPMN 2.0 elements.
*/
export default function PaletteProvider(palette, create, elementFactory, spaceTool, lassoTool, handTool, globalConnect, translate) {
this._palette = palette;
this._create = create;
this._elementFactory = elementFactory;
this._spaceTool = spaceTool;
this._lassoTool = lassoTool;
this._handTool = handTool;
this._globalConnect = globalConnect;
this._translate = translate;
palette.registerProvider(this);
}
PaletteProvider.$inject = ["palette", "create", "elementFactory", "spaceTool", "lassoTool", "handTool", "globalConnect", "translate"];
PaletteProvider.prototype.getPaletteEntries = function() {
var actions = {},
create = this._create,
elementFactory = this._elementFactory,
spaceTool = this._spaceTool,
lassoTool = this._lassoTool,
handTool = this._handTool,
globalConnect = this._globalConnect,
translate = this._translate;
function createAction(type, group, className, title, options) {
function createListener(event) {
var shape = elementFactory.createShape(assign({ type: type }, options));
if (options) {
shape.businessObject.di.isExpanded = options.isExpanded;
}
create.start(event, shape);
}
var shortType = type.replace(/^bpmn:/, "");
return {
group: group,
className: className,
title: title || translate("Create {type}", { type: shortType }),
action: {
dragstart: createListener,
click: createListener
}
};
}
function createSubprocess(event) {
var subProcess = elementFactory.createShape({
type: "bpmn:SubProcess",
x: 0,
y: 0,
isExpanded: true
});
var startEvent = elementFactory.createShape({
type: "bpmn:StartEvent",
x: 40,
y: 82,
parent: subProcess
});
create.start(event, [subProcess, startEvent], {
hints: {
autoSelect: [startEvent]
}
});
}
function createParticipant(event) {
create.start(event, elementFactory.createParticipantShape());
}
assign(actions, {
"hand-tool": {
group: "tools",
className: "bpmn-icon-hand-tool",
title: translate("Activate the hand tool"),
action: {
click: function(event) {
handTool.activateHand(event);
}
}
},
"lasso-tool": {
group: "tools",
className: "bpmn-icon-lasso-tool",
title: translate("Activate the lasso tool"),
action: {
click: function(event) {
lassoTool.activateSelection(event);
}
}
},
"space-tool": {
group: "tools",
className: "bpmn-icon-space-tool",
title: translate("Activate the create/remove space tool"),
action: {
click: function(event) {
spaceTool.activateSelection(event);
}
}
},
"global-connect-tool": {
group: "tools",
className: "bpmn-icon-connection-multi",
title: translate("Activate the global connect tool"),
action: {
click: function(event) {
globalConnect.toggle(event);
}
}
},
"tool-separator": {
group: "tools",
separator: true
},
"create.start-event": createAction("bpmn:StartEvent", "event", "bpmn-icon-start-event-none", translate("Create StartEvent")),
"create.intermediate-event": createAction(
"bpmn:IntermediateThrowEvent",
"event",
"bpmn-icon-intermediate-event-none",
translate("Create Intermediate/Boundary Event")
),
"create.end-event": createAction("bpmn:EndEvent", "event", "bpmn-icon-end-event-none", translate("Create EndEvent")),
"create.exclusive-gateway": createAction("bpmn:ExclusiveGateway", "gateway", "bpmn-icon-gateway-none", translate("Create Gateway")),
"create.user-task": createAction("bpmn:UserTask", "activity", "bpmn-icon-user-task", translate("Create User Task")),
"create.data-object": createAction("bpmn:DataObjectReference", "data-object", "bpmn-icon-data-object", translate("Create DataObjectReference")),
"create.data-store": createAction("bpmn:DataStoreReference", "data-store", "bpmn-icon-data-store", translate("Create DataStoreReference")),
"create.subprocess-expanded": {
group: "activity",
className: "bpmn-icon-subprocess-expanded",
title: translate("Create expanded SubProcess"),
action: {
dragstart: createSubprocess,
click: createSubprocess
}
},
"create.participant-expanded": {
group: "collaboration",
className: "bpmn-icon-participant",
title: translate("Create Pool/Participant"),
action: {
dragstart: createParticipant,
click: createParticipant
}
},
"create.group": createAction("bpmn:Group", "artifact", "bpmn-icon-group", translate("Create Group"))
});
return actions;
};

@ -0,0 +1,41 @@
// import translations from "./zh";
//
// export default function customTranslate(template, replacements) {
// replacements = replacements || {};
//
// // Translate
// template = translations[template] || template;
//
// // Replace
// return template.replace(/{([^}]+)}/g, function(_, key) {
// let str = replacements[key];
// if (
// translations[replacements[key]] !== null &&
// translations[replacements[key]] !== "undefined"
// ) {
// // eslint-disable-next-line no-mixed-spaces-and-tabs
// str = translations[replacements[key]];
// // eslint-disable-next-line no-mixed-spaces-and-tabs
// }
// return str || "{" + key + "}";
// });
// }
export default function customTranslate(translations) {
return function(template, replacements) {
replacements = replacements || {};
// Translate
template = translations[template] || template;
// Replace
return template.replace(/{([^}]+)}/g, function(_, key) {
let str = replacements[key];
if (translations[replacements[key]] !== null && translations[replacements[key]] !== undefined) {
// eslint-disable-next-line no-mixed-spaces-and-tabs
str = translations[replacements[key]];
// eslint-disable-next-line no-mixed-spaces-and-tabs
}
return str || "{" + key + "}";
});
};
}

@ -0,0 +1,238 @@
/**
* This is a sample file that should be replaced with the actual translation.
*
* Checkout https://github.com/bpmn-io/bpmn-js-i18n for a list of available
* translations and labels to translate.
*/
export default {
// 添加部分
"Append EndEvent": "追加结束事件",
"Append Gateway": "追加网关",
"Append Task": "追加任务",
"Append Intermediate/Boundary Event": "追加中间抛出事件/边界事件",
"Activate the global connect tool": "激活全局连接工具",
"Append {type}": "添加 {type}",
"Add Lane above": "在上面添加道",
"Divide into two Lanes": "分割成两个道",
"Divide into three Lanes": "分割成三个道",
"Add Lane below": "在下面添加道",
"Append compensation activity": "追加补偿活动",
"Change type": "修改类型",
"Connect using Association": "使用关联连接",
"Connect using Sequence/MessageFlow or Association": "使用顺序/消息流或者关联连接",
"Connect using DataInputAssociation": "使用数据输入关联连接",
Remove: "移除",
"Activate the hand tool": "激活抓手工具",
"Activate the lasso tool": "激活套索工具",
"Activate the create/remove space tool": "激活创建/删除空间工具",
"Create expanded SubProcess": "创建扩展子过程",
"Create IntermediateThrowEvent/BoundaryEvent": "创建中间抛出事件/边界事件",
"Create Pool/Participant": "创建池/参与者",
"Parallel Multi Instance": "并行多重事件",
"Sequential Multi Instance": "时序多重事件",
DataObjectReference: "数据对象参考",
DataStoreReference: "数据存储参考",
Loop: "循环",
"Ad-hoc": "即席",
"Create {type}": "创建 {type}",
Task: "任务",
"Send Task": "发送任务",
"Receive Task": "接收任务",
"User Task": "用户任务",
"Manual Task": "手工任务",
"Business Rule Task": "业务规则任务",
"Service Task": "服务任务",
"Script Task": "脚本任务",
"Call Activity": "调用活动",
"Sub Process (collapsed)": "子流程(折叠的)",
"Sub Process (expanded)": "子流程(展开的)",
"Start Event": "开始事件",
StartEvent: "开始事件",
"Intermediate Throw Event": "中间事件",
"End Event": "结束事件",
EndEvent: "结束事件",
"Create StartEvent": "创建开始事件",
"Create EndEvent": "创建结束事件",
"Create Task": "创建任务",
"Create User Task": "创建用户任务",
"Create Gateway": "创建网关",
"Create DataObjectReference": "创建数据对象",
"Create DataStoreReference": "创建数据存储",
"Create Group": "创建分组",
"Create Intermediate/Boundary Event": "创建中间/边界事件",
"Message Start Event": "消息开始事件",
"Timer Start Event": "定时开始事件",
"Conditional Start Event": "条件开始事件",
"Signal Start Event": "信号开始事件",
"Error Start Event": "错误开始事件",
"Escalation Start Event": "升级开始事件",
"Compensation Start Event": "补偿开始事件",
"Message Start Event (non-interrupting)": "消息开始事件(非中断)",
"Timer Start Event (non-interrupting)": "定时开始事件(非中断)",
"Conditional Start Event (non-interrupting)": "条件开始事件(非中断)",
"Signal Start Event (non-interrupting)": "信号开始事件(非中断)",
"Escalation Start Event (non-interrupting)": "升级开始事件(非中断)",
"Message Intermediate Catch Event": "消息中间捕获事件",
"Message Intermediate Throw Event": "消息中间抛出事件",
"Timer Intermediate Catch Event": "定时中间捕获事件",
"Escalation Intermediate Throw Event": "升级中间抛出事件",
"Conditional Intermediate Catch Event": "条件中间捕获事件",
"Link Intermediate Catch Event": "链接中间捕获事件",
"Link Intermediate Throw Event": "链接中间抛出事件",
"Compensation Intermediate Throw Event": "补偿中间抛出事件",
"Signal Intermediate Catch Event": "信号中间捕获事件",
"Signal Intermediate Throw Event": "信号中间抛出事件",
"Message End Event": "消息结束事件",
"Escalation End Event": "定时结束事件",
"Error End Event": "错误结束事件",
"Cancel End Event": "取消结束事件",
"Compensation End Event": "补偿结束事件",
"Signal End Event": "信号结束事件",
"Terminate End Event": "终止结束事件",
"Message Boundary Event": "消息边界事件",
"Message Boundary Event (non-interrupting)": "消息边界事件(非中断)",
"Timer Boundary Event": "定时边界事件",
"Timer Boundary Event (non-interrupting)": "定时边界事件(非中断)",
"Escalation Boundary Event": "升级边界事件",
"Escalation Boundary Event (non-interrupting)": "升级边界事件(非中断)",
"Conditional Boundary Event": "条件边界事件",
"Conditional Boundary Event (non-interrupting)": "条件边界事件(非中断)",
"Error Boundary Event": "错误边界事件",
"Cancel Boundary Event": "取消边界事件",
"Signal Boundary Event": "信号边界事件",
"Signal Boundary Event (non-interrupting)": "信号边界事件(非中断)",
"Compensation Boundary Event": "补偿边界事件",
"Exclusive Gateway": "互斥网关",
"Parallel Gateway": "并行网关",
"Inclusive Gateway": "相容网关",
"Complex Gateway": "复杂网关",
"Event based Gateway": "事件网关",
Transaction: "转运",
"Sub Process": "子流程",
"Event Sub Process": "事件子流程",
"Collapsed Pool": "折叠池",
"Expanded Pool": "展开池",
// Errors
"no parent for {element} in {parent}": "在{parent}里,{element}没有父类",
"no shape type specified": "没有指定的形状类型",
"flow elements must be children of pools/participants": "流元素必须是池/参与者的子类",
"out of bounds release": "out of bounds release",
"more than {count} child lanes": "子道大于{count} ",
"element required": "元素不能为空",
"diagram not part of bpmn:Definitions": "流程图不符合bpmn规范",
"no diagram to display": "没有可展示的流程图",
"no process or collaboration to display": "没有可展示的流程/协作",
"element {element} referenced by {referenced}#{property} not yet drawn": "由{referenced}#{property}引用的{element}元素仍未绘制",
"already rendered {element}": "{element} 已被渲染",
"failed to import {element}": "导入{element}失败",
//属性面板的参数
Id: "编号",
Name: "名称",
General: "常规",
Details: "详情",
"Message Name": "消息名称",
Message: "消息",
Initiator: "创建者",
"Asynchronous Continuations": "持续异步",
"Asynchronous Before": "异步前",
"Asynchronous After": "异步后",
"Job Configuration": "工作配置",
Exclusive: "排除",
"Job Priority": "工作优先级",
"Retry Time Cycle": "重试时间周期",
Documentation: "文档",
"Element Documentation": "元素文档",
"History Configuration": "历史配置",
"History Time To Live": "历史的生存时间",
Forms: "表单",
"Form Key": "表单key",
"Form Fields": "表单字段",
"Business Key": "业务key",
"Form Field": "表单字段",
ID: "编号",
Type: "类型",
Label: "名称",
"Default Value": "默认值",
"Default Flow": "默认流转路径",
"Conditional Flow": "条件流转路径",
"Sequence Flow": "普通流转路径",
Validation: "校验",
"Add Constraint": "添加约束",
Config: "配置",
Properties: "属性",
"Add Property": "添加属性",
Value: "值",
Listeners: "监听器",
"Execution Listener": "执行监听",
"Event Type": "事件类型",
"Listener Type": "监听器类型",
"Java Class": "Java类",
Expression: "表达式",
"Must provide a value": "必须提供一个值",
"Delegate Expression": "代理表达式",
Script: "脚本",
"Script Format": "脚本格式",
"Script Type": "脚本类型",
"Inline Script": "内联脚本",
"External Script": "外部脚本",
Resource: "资源",
"Field Injection": "字段注入",
Extensions: "扩展",
"Input/Output": "输入/输出",
"Input Parameters": "输入参数",
"Output Parameters": "输出参数",
Parameters: "参数",
"Output Parameter": "输出参数",
"Timer Definition Type": "定时器定义类型",
"Timer Definition": "定时器定义",
Date: "日期",
Duration: "持续",
Cycle: "循环",
Signal: "信号",
"Signal Name": "信号名称",
Escalation: "升级",
Error: "错误",
"Link Name": "链接名称",
Condition: "条件名称",
"Variable Name": "变量名称",
"Variable Event": "变量事件",
"Specify more than one variable change event as a comma separated list.": "多个变量事件以逗号隔开",
"Wait for Completion": "等待完成",
"Activity Ref": "活动参考",
"Version Tag": "版本标签",
Executable: "可执行文件",
"External Task Configuration": "扩展任务配置",
"Task Priority": "任务优先级",
External: "外部",
Connector: "连接器",
"Must configure Connector": "必须配置连接器",
"Connector Id": "连接器编号",
Implementation: "实现方式",
"Field Injections": "字段注入",
Fields: "字段",
"Result Variable": "结果变量",
Topic: "主题",
"Configure Connector": "配置连接器",
"Input Parameter": "输入参数",
Assignee: "代理人",
"Candidate Users": "候选用户",
"Candidate Groups": "候选组",
"Due Date": "到期时间",
"Follow Up Date": "跟踪日期",
Priority: "优先级",
"The follow up date as an EL expression (e.g. ${someDate} or an ISO date (e.g. 2015-06-26T09:54:00)":
"跟踪日期必须符合EL表达式 ${someDate} ,或者一个ISO标准日期2015-06-26T09:54:00",
"The due date as an EL expression (e.g. ${someDate} or an ISO date (e.g. 2015-06-26T09:54:00)":
"跟踪日期必须符合EL表达式 ${someDate} ,或者一个ISO标准日期2015-06-26T09:54:00",
Variables: "变量",
"Candidate Starter Configuration": "候选人起动器配置",
"Candidate Starter Groups": "候选人起动器组",
"This maps to the process definition key.": "这映射到流程定义键。",
"Candidate Starter Users": "候选人起动器的用户",
"Specify more than one user as a comma separated list.": "指定多个用户作为逗号分隔的列表。",
"Tasklist Configuration": "Tasklist配置",
Startable: "启动",
"Specify more than one group as a comma separated list.": "指定多个组作为逗号分隔的列表。"
};

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save