Commit 9b4fd18a authored by 曾沂轮's avatar 曾沂轮

Merge branch 'feature-addChartsApp' into 'master'

Feature add charts app

See merge request !5
parents 8e15e91e fcdd958a
<template>
<div
v-if="reportDatas && !loading"
style="height:100%">
<smart-report
ref="reporting"
:baseUrl="baseUrl"
:data="reportDatas">
</smart-report>
</div>
</template>
<script>
import Api from '@charts/api';
import { baseUrl } from '@config/http.config';
import { getQueryString } from './utils';
export default {
name: 'App',
data() {
return {
pageId: '',
baseUrl: baseUrl + '/charts',
reportDatas: null,
loading: false
};
},
created() {
this.pageId = getQueryString('pageId');
},
mounted() {
this.initDatas();
},
methods: {
initDatas() {
if (!this.pageId) return;
this.loading = true;
Api.getChartViewById(this.pageId).then(res => {
this.loading = false;
const { status, data } = res;
if (status === 0) {
if (data.pageData !== null) {
data.pageData = JSON.parse(data.pageData);
}
this.reportDatas = data;
return false;
} else {
this.$message.warning(res.message || '系统异常!');
}
}).catch(err => {
this.loading = false;
this.$message.error(err.message || '系统故障!');
});
}
}
};
</script>
<style>
html, body {
min-height: 100%;
}
</style>
import config from '@config/config';
const Api = {
...config,
/**
* 获取图表信息
* @param {String} rid
*/
getChartViewById(rid) {
return config.doGetPromise('/charts/chartsView/getChartViewById', {rid: rid});
}
};
export default Api;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="shortcut icon" type="image/ico" href="<%= BASE_URL %>favicon.ico">
<title>图表渲染 - Smart Web</title>
<!-- <link rel="stylesheet" href="<%= BASE_URL %>iconfont/iconfont.css"> -->
<style type="text/css">
.maskbox {
border: 2px solid #ff0000;
background: #f8ecda;
opacity: 0.1;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 100;
}
</style>
</head>
<body>
<div id="chartsapp"></div>
<!-- built files will be auto injected -->
</body>
</html>
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue';
import App from './App';
import ElemetUI from 'element-ui';
import 'element-ui/packages/theme-chalk/lib/index.css';
import SmartCharts from 'smart-charts';
import 'smart-charts/lib/smart-report/smartReport.css';
// import scss
Vue.config.productionTip = false;
Vue.use(ElemetUI, {
size: 'medium',
zIndex: 4000
});
Vue.use(SmartCharts);
/* eslint-disable no-new */
new Vue({
el: '#chartsapp',
components: {
App
},
template: '<App/>'
});
blockquote,body,button,dd,dl,dt,fieldset,form,h1,h2,h3,h4,h5,h6,hr,html,iframe,input,legend,li,ol,p,pre,td,textarea,th,ul{
margin:0;
padding:0;
}
html, body {
width: 100%;
}
body {
min-width: 1200px;
font-size: 1rem;
font-family: -apple-system,BlinkMacSystemFont,Helvetica Neue,PingFang SC,Microsoft YaHei,Source Han Sans SC,Noto Sans CJK SC,WenQuanYi Micro Hei,sans-serif;
color: #606266;
overflow: auto;
}
iframe {
width: 100%;
height: 100%;
border: 0;
outline: none;
}
a {
color: #0a6fe2;
text-decoration: none;
}
ul, ol, li {
list-style: none;
}
* {
scrollbar-base-color: #cecece;
scrollbar-3dlight-color: #eee;
scrollbar-highlight-color: #eee;
scrollbar-track-color: #f1f1f1;
// scrollbar-arrow-color: #000;
scrollbar-shadow-color: #eee;
// scrollbar-dark-shadow-color: #eee;
box-sizing: border-box;
}
*::-webkit-scrollbar {
width: 6px;
height: 6px;
}
*::-webkit-scrollbar-button {
display: none;
}
*::-webkit-scrollbar-track-piece {
background-color: #f2f2f2;
}
*::-webkit-scrollbar-thumb {
background-color: #C1C1C1;
border-radius: 6px;
}
textarea {
font-family: 'Microsoft YaHei', Arial, Helvetica, sans-serif !important;
}
\ No newline at end of file
/**
* 获取URL参数
* @param {string} name 参数名
*/
export function getQueryString(name) {
const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)');
const r = window.location.search.substr(1).match(reg);
if (r !== null) return unescape(r[2]);
return null;
}
import Vue from 'vue'; import Vue from 'vue';
import axios from 'axios'; import axios from 'axios';
import qs from 'qs'; import qs from 'qs';
import './loginInterceptor'; import store from '@/store';
import * as HTTP from '@config/http.config'; import * as _config from '@config/http.config';
import { Message } from 'element-ui';
// 携带cookie信息 // 携带cookie信息
axios.defaults.withCredentials = true; axios.defaults.withCredentials = true;
// 设置全局的请求次数,请求的间隙 // 设置全局的请求次数,请求的间隙
axios.defaults.retry = 0; axios.defaults.retry = 1;
axios.defaults.retryDelay = 1000; axios.defaults.retryDelay = 1000;
// 设置defaults.baseURL
axios.defaults.baseURL = _config.baseUrl;
// 请求超时拦截,重新请求 // 请求超时拦截,重新请求
axios.interceptors.response.use(undefined, function axiosRetryInterceptor(err) { axios.interceptors.response.use(function(response) {
const status = response.status;
// const data = response.data;
if (status !== 200) {
Message({
type: 'error',
message: '请求服务好像出错了,' + status
});
return Promise.reject(response);
}/* else if (data.status === 2) {
Message({
type: 'error',
message: '请求服务后台处理出现了错误'
});
} else if (data.status === 1) {
Message({
type: 'warning',
message: '请求服务处理出现了异常,' + data.message
});
} */
return Promise.resolve(response);
}, function axiosRetryInterceptor(err) {
const config = err.config; const config = err.config;
// If config does not exist or the retry option is not set, reject // If config does not exist or the retry option is not set, reject
if (!config || !config.retry) return Promise.reject(err); if (!config || !config.retry) return Promise.reject(err);
...@@ -21,6 +47,11 @@ axios.interceptors.response.use(undefined, function axiosRetryInterceptor(err) { ...@@ -21,6 +47,11 @@ axios.interceptors.response.use(undefined, function axiosRetryInterceptor(err) {
// Check if we've maxed out the total number of retries // Check if we've maxed out the total number of retries
if (config.__retryCount >= config.retry) { if (config.__retryCount >= config.retry) {
const status = err.response.status;
Message({
type: 'error',
message: `请求服务好像出错了,状态码:${status}`
});
// Reject with the error // Reject with the error
return Promise.reject(err); return Promise.reject(err);
} }
...@@ -41,18 +72,10 @@ axios.interceptors.response.use(undefined, function axiosRetryInterceptor(err) { ...@@ -41,18 +72,10 @@ axios.interceptors.response.use(undefined, function axiosRetryInterceptor(err) {
}); });
}); });
// 为Vue注册$http
Vue.prototype.$http = axios;
const CancelToken = axios.CancelToken; const CancelToken = axios.CancelToken;
let cancel; let cancel;
const baseUrl = HTTP.baseUrl;
window.baseUrl = baseUrl;
const config = { const config = {
baseUrl,
/** /**
* get获取数据,通用方法 * get获取数据,通用方法
* @param {String} url * @param {String} url
...@@ -61,30 +84,25 @@ const config = { ...@@ -61,30 +84,25 @@ const config = {
*/ */
doGetPromise(url, params, options = {}) { doGetPromise(url, params, options = {}) {
const { timeout = 30000, ...arg } = options; const { timeout = 30000, ...arg } = options;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
axios axios.get(url, {
.get(url, { timeout: timeout,
timeout: timeout, ...arg,
...arg, params: {
params: { systemId: store.state.platformInfo.systemId, // 全面接口添加systemId字段
...params, ...params,
t: new Date().getTime() // 解决IE上get请求缓存问题 t: new Date().getTime() // 解决IE上get请求缓存问题
}, },
cancelToken: new CancelToken(function executor(c) { cancelToken: new CancelToken(function executor(c) {
cancel = c; cancel = c;
})
}) })
.then(response => { }).then(response => {
resolve(response.data); resolve(response.data);
}) }).catch(response => {
.catch(response => { reject(response);
console.error('ajax error:', response); });
reject(response);
});
}); });
}, },
/** /**
* FormData数据上传,文件上传必用 * FormData数据上传,文件上传必用
* @param {String} url * @param {String} url
...@@ -92,73 +110,72 @@ const config = { ...@@ -92,73 +110,72 @@ const config = {
*/ */
doPostPromiseForm(url, formData) { doPostPromiseForm(url, formData) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
axios // 全面接口添加systemId字段
.post(url, formData, { if (formData.has) { // ie FormData没有has方法
headers: { if (formData.has('systemId')) formData.append('systemId', store.state.platformInfo.systemId);
'Content-type': 'multipart/form-data' }
}, axios.post(url, formData, {
emulateJSON: false, headers: {
emulateHTTP: false, 'Content-type': 'multipart/form-data'
cancelToken: new CancelToken(function executor(c) { },
cancel = c; emulateJSON: false,
}) emulateHTTP: false,
cancelToken: new CancelToken(function executor(c) {
cancel = c;
}) })
.then(res => { }).then(res => {
resolve(res.data); resolve(res.data);
}) }).catch(res => {
.catch(res => { reject(res);
reject(res); });
});
}); });
}, },
/** /**
* 默认方式提交from表单数据json * 默认方式提交from表单数据
* @param {String} url * @param {String} url
* @param {Object} data * @param {Object} data
*/ */
doPostPromise(url, data) { doPostPromise(url, data) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
axios // 全面接口添加systemId字段
.post(url, qs.stringify(data), { if (!data.hasOwnProperty('systemId')) data.systemId = store.state.platformInfo.systemId;
headers: { axios.post(url, qs.stringify(data), {
'Content-type': 'application/x-www-form-urlencoded' headers: {
}, 'Content-type': 'application/x-www-form-urlencoded'
cancelToken: new CancelToken(function executor(c) { },
cancel = c; cancelToken: new CancelToken(function executor(c) {
}) cancel = c;
})
.then(res => {
resolve(res.data);
}) })
.catch(res => { }).then(res => {
reject(res); resolve(res.data);
}); }).catch(res => {
reject(res);
});
}); });
}, },
/** /**
* 提交application/json方式 * 默认方式提交json数据
* @param {String} url * @param {String} url
* @param {Object} data * @param {Object} data
*/ */
doPostPromiseJson(url, data) { doPostPromiseJson(url, data) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
axios // 全面接口添加systemId字段
.post(url, data, { if (!data.hasOwnProperty('systemId')) data.systemId = store.state.platformInfo.systemId;
headers: { axios.post(url, data, {
'Content-type': 'application/json' headers: {
}, 'Content-type': 'application/json'
cancelToken: new CancelToken(function executor(c) { },
cancel = c; cancelToken: new CancelToken(function executor(c) {
}) cancel = c;
})
.then(res => {
resolve(res.data);
}) })
.catch(res => { }).then(res => {
reject(res); resolve(res.data);
}); }).catch(res => {
reject(res);
});
}); });
} }
}; };
......
import axios from 'axios'; import axios from 'axios';
import store from '@/store'; import store from '@/store';
import router from '@/router'; import router from '@/router';
import MessageBox from 'element-ui/lib/message-box';
/* const filters = ['webgisService'] /* const filters = ['webgisService']
const handleFilter = (key) => { const handleFilter = (key) => {
if (Array.isArray(filters)) { if (Array.isArray(filters)) {
filters.map(item => { filters.forEach(item => {
if (item === key) {} if (item === key) {}
}) })
} }
...@@ -15,20 +16,44 @@ const handleFilter = (key) => { ...@@ -15,20 +16,44 @@ const handleFilter = (key) => {
/** /**
* 登录判断失效 * 登录判断失效
* 在所有经过axios请求中,拦截到登录失效 * 在所有经过axios请求中,拦截到登录失效
* *
* @param {Object} response * @param {Object} response
*/ */
let isOtherLogin = false;
function loginInterceptor(response) { function loginInterceptor(response) {
// console.log(response) // 9: 此账号在其他地方登陆
// 通过状态码判断登录已经失效 // 8: 账号登录已经失效
if (response.data && response.data.status === 9) { if (response.data && response.data.status === 8) {
store.dispatch('setUserInfo', {}); if (!isOtherLogin) {
router.replace({ store.dispatch('setUserInfo', {});
name: 'Logindialog' router.replace({
}); name: 'LoginDialog',
// response.data = null query: router.currentRoute.query
});
isOtherLogin = false;
// response.data = null
}
return response; return response;
} else { } else if (response.data && response.data.status === 9) {
if (!isOtherLogin) {
isOtherLogin = true;
store.dispatch('setUserInfo', {});
MessageBox.alert('该账号在别的地方登录了,请重新登录', '提示', {
type: 'warning',
confirmButtonText: '登录',
callback: action => {
isOtherLogin = false;
if (action === 'confirm') {
router.replace({
name: 'LoginDialog',
query: router.currentRoute.query
});
}
}
});
}
return response;
} else {
return response; return response;
} }
} }
......
import config from './config'; import config from '@config/config';
const baseUrl = config.baseUrl;
const Api = { const Api = {
...config, ...config,
login(data) { login(data) {
return config.doPostPromise(baseUrl + '/index/login', data); return config.doPostPromise('/index/login', data);
}, },
checkLogin() { checkLogin() {
return config.doGetPromise(baseUrl + '/index/checkLogin', {}, { retry: 0 }); return config.doGetPromise('/index/checkLogin', {}, { retry: 0 });
}, },
logout() { logout() {
return config.doGetPromise(baseUrl + '/index/logout', {}); return config.doGetPromise('/index/logout', {});
}, },
/** /**
* *
* @param {*} businessDefinitionId
* @param {*} taskId * @param {*} taskId
* @param {*} linkId
* @param {*} linkKey
*/ */
getBusinessStartForm(businessDefinitionId, taskId) { getBusinessStartForm(businessDefinitionId, taskId) {
return config.doGetPromise( return config.doGetPromise(
baseUrl + '/v1.1.0/workflow/workflowForm/getBusinessStartForm', '/v1.1.0/workflow/workflowForm/getBusinessStartForm',
{ {
businessDefinitionId, businessDefinitionId,
taskId taskId
...@@ -41,7 +38,7 @@ const Api = { ...@@ -41,7 +38,7 @@ const Api = {
*/ */
renderFormByTaskId(taskId, linkId, linkKey) { renderFormByTaskId(taskId, linkId, linkKey) {
return config.doGetPromise( return config.doGetPromise(
baseUrl + '/v1.1.0/workflow/workflowForm/renderFormByTaskId', '/v1.1.0/workflow/workflowForm/renderFormByTaskId',
{ {
taskId: taskId, taskId: taskId,
linkInstanceId: linkId, linkInstanceId: linkId,
...@@ -56,7 +53,7 @@ const Api = { ...@@ -56,7 +53,7 @@ const Api = {
*/ */
renderFinishForm(processId) { renderFinishForm(processId) {
return config.doGetPromise( return config.doGetPromise(
baseUrl + '/v1.1.0/workflow/workflowForm/renderFinishForm', '/v1.1.0/workflow/workflowForm/renderFinishForm',
{ {
historyProcessInstanceId: processId historyProcessInstanceId: processId
} }
...@@ -68,14 +65,14 @@ const Api = { ...@@ -68,14 +65,14 @@ const Api = {
* @param {string} formid 表单ID * @param {string} formid 表单ID
*/ */
getForm(formid) { getForm(formid) {
return config.doGetPromise(baseUrl + '/v1.1.0/form/getForm', { return config.doGetPromise('/v1.1.0/form/getForm', {
rid: formid rid: formid
}); });
}, },
getAdminDivisionTree() { getAdminDivisionTree() {
return config.doGetPromise( return config.doGetPromise(
baseUrl + '/administrativeDivisions/getAdministrativeDivisionTree' '/administrativeDivisions/getAdministrativeDivisionTree'
); );
}, },
...@@ -85,7 +82,7 @@ const Api = { ...@@ -85,7 +82,7 @@ const Api = {
*/ */
getSystemAllModules(id) { getSystemAllModules(id) {
return config.doGetPromise( return config.doGetPromise(
baseUrl + '/systemModule/privilege/getUserModulesTreeBySystemId', '/systemModule/privilege/getUserModulesTreeBySystemId',
{ systemId: id } { systemId: id }
); );
}, },
...@@ -96,7 +93,7 @@ const Api = { ...@@ -96,7 +93,7 @@ const Api = {
* @param {Number} valid 是否可用, -1:审核中 1:可用(第一次登录,需要修改密码) 2:可用(非第一次登录,不需要修改密码) * @param {Number} valid 是否可用, -1:审核中 1:可用(第一次登录,需要修改密码) 2:可用(非第一次登录,不需要修改密码)
*/ */
getOrganTree(type, valid) { getOrganTree(type, valid) {
return config.doGetPromise(baseUrl + '/organization/manager/getOrganTree', { return config.doGetPromise('/organization/manager/getOrganTree', {
type: type, type: type,
valid: valid valid: valid
}); });
...@@ -105,7 +102,7 @@ const Api = { ...@@ -105,7 +102,7 @@ const Api = {
// 获取代码字典 // 获取代码字典
getChildItemByRootCode(data) { getChildItemByRootCode(data) {
return config.doGetPromise( return config.doGetPromise(
baseUrl + '/codeDict/getChildItemByRootCode', '/codeDict/getChildItemByRootCode',
data data
); );
}, },
...@@ -116,11 +113,8 @@ const Api = { ...@@ -116,11 +113,8 @@ const Api = {
* @param {FormData} data 表单数据 * @param {FormData} data 表单数据
*/ */
checkAndSubmitTaskByFormData(taskId, data) { checkAndSubmitTaskByFormData(taskId, data) {
return config.doPostPromiseForm( return config.doPostPromiseForm('/v1.1.0/workflow/workflowForm/checkAndSubmitTaskByFormData/' +
baseUrl + taskId, data
'/v1.1.0/workflow/workflowForm/checkAndSubmitTaskByFormData/' +
taskId,
data
); );
}, },
...@@ -129,8 +123,7 @@ const Api = { ...@@ -129,8 +123,7 @@ const Api = {
* @param {string} taskId 流程ID * @param {string} taskId 流程ID
*/ */
getTranformUser(taskId) { getTranformUser(taskId) {
return config.doGetPromise( return config.doGetPromise('/workflow/linkInstance/findLinkInstanceByTaskIdPassto',
baseUrl + '/workflow/linkInstance/findLinkInstanceByTaskIdPassto',
{ {
taskId: taskId taskId: taskId
} }
...@@ -145,7 +138,7 @@ const Api = { ...@@ -145,7 +138,7 @@ const Api = {
*/ */
getRerunPeople(currentTaskId, processDefinitionId, nextLinkKey) { getRerunPeople(currentTaskId, processDefinitionId, nextLinkKey) {
return config.doGetPromise( return config.doGetPromise(
baseUrl + '/workflow/workflowForm/getRerunPeople', '/workflow/workflowForm/getRerunPeople',
{ {
currentTaskId, currentTaskId,
processDefinitionId, processDefinitionId,
...@@ -159,7 +152,7 @@ const Api = { ...@@ -159,7 +152,7 @@ const Api = {
*/ */
findExecutionIdByTaskId(taskId) { findExecutionIdByTaskId(taskId) {
return config.doGetPromise( return config.doGetPromise(
baseUrl + '/workflow/execution/findExecutionIdByTaskId', '/workflow/execution/findExecutionIdByTaskId',
{ {
taskId taskId
} }
...@@ -184,7 +177,7 @@ const Api = { ...@@ -184,7 +177,7 @@ const Api = {
anotherAssignee anotherAssignee
) { ) {
return config.doGetPromise( return config.doGetPromise(
baseUrl + '/v1.1.0/workflow/workflowForm/sendback', '/v1.1.0/workflow/workflowForm/sendback',
{ {
executionId, executionId,
linkDefinitionKey, linkDefinitionKey,
......
import config from '../api/config';
const url = config.baseUrl;
export default [ export default [
{ {
name: 'guidance', name: 'guidance',
text: '办理指南', text: '办理指南',
icon: 'el-icon-info', icon: 'el-icon-info',
api: url + '/workflowWebService/getProcessManagementGuide' api: '/workflowWebService/getProcessManagementGuide'
}, },
{ {
name: 'save', name: 'save',
text: '保存', text: '保存',
icon: 'el-icon-tickets', icon: 'el-icon-tickets',
api: url + '/v1.1.0/workflow/workflowForm/saveFormData' api: '/v1.1.0/workflow/workflowForm/saveFormData'
}, },
{ {
name: 'sign', name: 'sign',
text: '接办', text: '接办',
icon: 'el-icon-tickets', icon: 'el-icon-tickets',
api: url + '/workflow/workflowForm/receiveTasks' api: '/workflow/workflowForm/receiveTasks'
// api: url + '/workflowWebService/claimTask' // api: '/workflowWebService/claimTask'
}, },
{ {
name: 'forceSign', name: 'forceSign',
text: '强制接办', text: '强制接办',
icon: 'el-icon-tickets', icon: 'el-icon-tickets',
api: url + '/workflowWebService/forceClaimForm' api: '/workflowWebService/forceClaimForm'
}, },
{ {
name: 'submit', name: 'submit',
text: '提交', text: '提交',
icon: 'el-icon-check', icon: 'el-icon-check',
api: url + '/v1.1.0/workflow/workflowForm/submitTaskOnDialog' api: '/v1.1.0/workflow/workflowForm/submitTaskOnDialog'
}, },
{ {
name: 'isSendBack', name: 'isSendBack',
text: '提交退回', text: '提交退回',
icon: 'el-icon-check', icon: 'el-icon-check',
api: url + '/v1.1.0/workflow/workflowForm/submitSendbackTask/' api: '/v1.1.0/workflow/workflowForm/submitTaskOnDialog'
// api: '/v1.1.0/workflow/workflowForm/submitSendbackTask/'
}, },
/* { /* {
id: 'backSend', id: 'backSend',
...@@ -51,61 +48,61 @@ export default [ ...@@ -51,61 +48,61 @@ export default [
name: 'finish', name: 'finish',
text: '结档', text: '结档',
icon: 'el-icon-edit-outline', icon: 'el-icon-edit-outline',
api: url + '/workflowWebService/finishProcessInstanceByTaskId' api: '/workflowWebService/finishProcessInstanceByTaskId'
}, },
{ {
name: 'refund', name: 'refund',
text: '退件', text: '退件',
icon: 'el-icon-back', icon: 'el-icon-back',
api: url + '/workflow/workflowForm/refundTasks' api: '/workflow/workflowForm/refundTasks'
}, },
{ {
name: 'urge', name: 'urge',
text: '催办', text: '催办',
icon: 'el-icon-share', icon: 'el-icon-share',
api: url + '/workflow/workflowForm/remindTasks' api: '/workflow/workflowForm/remindTasks'
}, },
{ {
name: 'turn', name: 'turn',
text: '转办', text: '转办',
icon: 'el-icon-refresh', icon: 'el-icon-refresh',
api: url + '/workflow/workflowForm/passTasksToSb' api: '/workflow/workflowForm/passTasksToSb'
}, },
{ {
name: 'unsign', name: 'unsign',
text: '撤办', text: '撤办',
icon: 'el-icon-remove-outline', icon: 'el-icon-remove-outline',
api: url + '/workflow/workflowForm/unclaimTasks' api: '/workflow/workflowForm/unclaimTasks'
}, },
{ {
name: 'apply', name: 'apply',
text: '申请挂起', text: '申请挂起',
icon: 'el-icon-document', icon: 'el-icon-document',
api: url + '/workflow/workflowForm/applySuspendTasks' api: '/workflow/workflowForm/applySuspendTasks'
}, },
{ {
name: 'suspend', name: 'suspend',
text: '挂起', text: '挂起',
icon: 'el-icon-goods', icon: 'el-icon-goods',
api: url + '/workflow/workflowForm/suspendProcesses' api: '/workflow/workflowForm/suspendProcesses'
}, },
{ {
name: 'activeSuspend', name: 'activeSuspend',
text: '解除挂起', text: '解除挂起',
icon: 'el-icon-sold-out', icon: 'el-icon-sold-out',
api: url + '/workflow/workflowForm/activateProcesses' api: '/workflow/workflowForm/activateProcesses'
}, },
{ {
name: 'withdraw', name: 'withdraw',
text: '收回', text: '收回',
icon: 'el-icon-arrow-left', icon: 'el-icon-arrow-left',
api: url + '/workflow/workflowForm/withdrawTasks' api: '/workflow/workflowForm/withdrawTasks'
}, },
{ {
name: 'rerun', name: 'rerun',
text: '退回', text: '退回',
icon: 'el-icon-d-arrow-left', icon: 'el-icon-d-arrow-left',
api: url + '/workflowWebService/prepareJumpTo' api: '/workflowWebService/prepareJumpTo'
}, },
{ {
name: 'getdraw', name: 'getdraw',
...@@ -116,6 +113,6 @@ export default [ ...@@ -116,6 +113,6 @@ export default [
name: 'isBRule', name: 'isBRule',
text: '查看限制消息', text: '查看限制消息',
icon: 'el-icon-view', icon: 'el-icon-view',
api: url + '/workflowWebService/getBusinessRuleResults' api: '/workflowWebService/getBusinessRuleResults'
} }
]; ];
...@@ -146,8 +146,8 @@ export default { ...@@ -146,8 +146,8 @@ export default {
}, },
// 刷新 // 刷新
refresh(taskId) { refresh() {
this.fetch(taskId); this.fetch();
}, },
handleResultHtml(data, key) { handleResultHtml(data, key) {
...@@ -159,12 +159,10 @@ export default { ...@@ -159,12 +159,10 @@ export default {
return {}; return {};
} }
}, },
/**
* 新建工作时,保存的时候后端返回tId
*/
fetch(tId) { fetch(tId) {
let taskId = getTaskId() || this.childrenData.taskId; let taskId = getTaskId() || this.childrenData.taskId;
const linkId = tId ? tId : getLinkId() || this.childrenData.linkId; const linkId = tId ? tId : getLinkId() || this.childrenData.linkId || '';
const linkKey = getLinkKey() || this.childrenData.linkKey; const linkKey = getLinkKey() || this.childrenData.linkKey;
// console.log(taskId, linkId, linkKey) // console.log(taskId, linkId, linkKey)
let apiFn = 'renderFormByTaskId'; let apiFn = 'renderFormByTaskId';
...@@ -421,9 +419,13 @@ export default { ...@@ -421,9 +419,13 @@ export default {
// console.log(res) // console.log(res)
if (res.status === 0) { if (res.status === 0) {
notification('success', '保存成功!'); notification('success', '保存成功!');
if (!res.data.taskId) return false; if (!res.data.taskId) {
this.refresh();
return false;
};
// 携带taskId刷新当前iframe页
this.createTaskId = res.data.taskId; this.createTaskId = res.data.taskId;
this.refresh(res.data.taskId); this.fetch(res.data.taskId);
} else { } else {
notification('warning', res.message || '保存失败,请重试!'); notification('warning', res.message || '保存失败,请重试!');
} }
...@@ -739,7 +741,19 @@ export default { ...@@ -739,7 +741,19 @@ export default {
this.isLoading = false; this.isLoading = false;
// console.log('receiveTasks', res) // console.log('receiveTasks', res)
if (res.status === 0) { if (res.status === 0) {
this.handleDataReturnErr(res.data, '收回成功'); // 关闭和刷新标签页
setTimeout(() => {
refreshTab();
closeTab();
outerNotice({
type: 'success',
title: '收回成功!',
message: res.message
});
const component = {id: 'doingWork', name: '在办工作', componentName: 'doingWork'};
openTab(component);
}, 150);
// this.handleDataReturnErr(res.data, '收回成功');
} else { } else {
notification('warning', res.message || '收回失败,请重试'); notification('warning', res.message || '收回失败,请重试');
} }
...@@ -785,7 +799,7 @@ export default { ...@@ -785,7 +799,7 @@ export default {
// 关闭提交后的对话框事件 // 关闭提交后的对话框事件
handleSubmitTaskClose() { handleSubmitTaskClose() {
this.submitTaskDialogVisible = false; this.submitTaskDialogVisible = false;
this.refresh(this.createTaskId); this.fetch(this.createTaskId);
} }
} }
}; };
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
* smart-page * smart-page
*/ */
import { getQueryString } from '@form/utils/form'; import { getQueryString } from '@form/utils/form';
import config from '@form/api/config'; import config from '@config/config';
export default { export default {
name: 'PageView', name: 'PageView',
......
{ {
"name": "{{name}}", "name": "",
"description": "{{description}}", "description": "{{description}}",
"version": "1.0.0", "version": "1.0.0",
"author": "zengyl@southzn.com", "author": "zengyl@southzn.com",
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
}, },
"dependencies": { "dependencies": {
"core-js": "^2.6.5", "core-js": "^2.6.5",
"smart-charts": "^1.0.0-alpha",
"smart-web": "^2.2.3", "smart-web": "^2.2.3",
"vue": "^2.6.10", "vue": "^2.6.10",
"vue-router": "^3.1.3", "vue-router": "^3.1.3",
......
...@@ -2,8 +2,10 @@ import Vue from 'vue'; ...@@ -2,8 +2,10 @@ import Vue from 'vue';
import store from '@/store'; import store from '@/store';
import Utils from '@/utils'; import Utils from '@/utils';
import { getTheme, changeTheme } from '@/utils/global'; import { getTheme, changeTheme } from '@/utils/global';
import MyWebSocket from '@/utils/webSocket';
const vm = new Vue(); const vm = new Vue();
let webSocket = null;
/** /**
* 应用初始化的一个配置操作 * 应用初始化的一个配置操作
* 比如检查登录、获取皮肤配置,其他配置等 * 比如检查登录、获取皮肤配置,其他配置等
...@@ -22,8 +24,13 @@ if (localStorage.getItem('themeValue')) { ...@@ -22,8 +24,13 @@ if (localStorage.getItem('themeValue')) {
vm.$watch(function() { vm.$watch(function() {
return store.state.userInfo; return store.state.userInfo;
}, function(val) { }, function(val) {
if (!webSocket) webSocket = new MyWebSocket(store.state.userInfo);
if (!Utils.isEmptyData(val)) { if (!Utils.isEmptyData(val)) {
// 获取皮肤 // 获取皮肤
getTheme(); getTheme();
webSocket.init();
} else {
webSocket.closeWebSocketConnection();
webSocket = null;
} }
}); });
/**
* 单独消息模块
*/
import { Notification } from 'element-ui';
import { baseUrl } from '@config/http.config';
import { openTab } from '@/utils/global';
import store from '@/store';
import Vue from 'vue';
const vm = new Vue();
function webSocket(userInfo) {
this.instantce = null;
this.userInfo = userInfo;
this.$store = store;
this.messageType = [{
id: 'doingWork',
name: '在办工作',
status: [100, 101, 102, 103, 104, 105, 106, 109, 113, 112]
},
{
id: 'returnBox',
name: '退件箱',
status: [108]
},
{
id: 'suspendWork',
name: '已挂工作',
status: [110, 111]
},
{
id: 'finishedWork',
name: '办结工作',
status: [107]
}]; // 消息类型
}
webSocket.prototype = {
/**
* 初始化webSocket
*/
init() {
if (window.WebSocket && this.userInfo && this.userInfo.userId) {
const that = this;
this.instantce = new WebSocket(`ws:${baseUrl}/MessageWebsocket?userId=${this.userInfo.userId}`);
this.instantce.onopen = function(event) {
};
this.instantce.onclose = function(event) {
};
this.instantce.onmessage = function(event) {
if (event.data) that.handleReceiveMessage(event.data);
};
this.instantce.onerror = function(event) {
};
}
},
/**
* 接受消息后的处理
*/
handleReceiveMessage(data) {
data = JSON.parse(data);
this.$store.dispatch('setUnreadMessage', data.count);
if (parseInt(data.count, 10) === 0) return false;
const type = data.content ? this.handleMessageType(data.content.businessType) : 9999;
const h = vm.$createElement;
Notification({
title: data.content ? data.content.title : this.convertTypeToObjectInfo(type).name,
position: 'bottom-right',
type: 'info',
dangerouslyUseHTMLString: true,
duration: 5000,
message: h('div', {
style: {
display: 'flex',
alignItems: 'center'
}
}, [
h('span', null
, data.content ? data.content.content : '您有新的处理任务,请及时处理!'),
h('el-button', {
style: {
marginLeft: '5px'
},
attrs: {
size: 'small',
type: 'text'
},
on: {
click: () => { this.handleLinkToTargetTab(type);}
}
}, '查看')
])
});
},
/**
* 跳转链接
*/
handleLinkToTargetTab(type) {
const that = this;
openTab({
id: that.convertTypeToObjectInfo(type).id,
name: that.convertTypeToObjectInfo(type).name,
componentName: that.convertTypeToObjectInfo(type).id
});
},
/**
* 转换成路由消息数据
*/
convertTypeToObjectInfo(type) {
return this.messageType[type] || { id: 'appMessage', name: '我的消息'};
},
/**
* 处理消息类型
*/
handleMessageType(type) {
type = parseInt(type, 10) || 9999;
let flag = false;
// 找到对应的路由消息下标
for (let i = 0; i < this.messageType.length; i++) {
if (this.messageType[i].status.indexOf(type) >= 0) {
type = i;
flag = true;
}
if (flag) break;
}
return type;
},
/**
* 关闭webSocket
*/
closeWebSocketConnection() {
window.WebSocket && this.instantce && this.instantce.close();
this.instantce = null;
}
};
export default webSocket;
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
<script> <script>
import Api from '@/api'; import Api from '@/api';
import { baseUrl, serviceUrl } from '@config/http.config'; import { serviceUrl } from '@config/http.config';
import Logo from './Logo.vue'; import Logo from './Logo.vue';
import { openTab } from '@/utils/global'; import { openTab } from '@/utils/global';
...@@ -73,134 +73,11 @@ export default { ...@@ -73,134 +73,11 @@ export default {
data() { data() {
return { return {
serviceUrl, serviceUrl,
isLoadingout: false, isLoadingout: false
websocket: null,
messageType: [{
id: 'doingWork',
name: '在办工作',
status: [100, 101, 102, 103, 104, 105, 106, 109, 113, 112]
},
{
id: 'returnBox',
name: '退件箱',
status: [108]
},
{
id: 'suspendWork',
name: '已挂工作',
status: [110, 111]
},
{
id: 'finishedWork',
name: '办结工作',
status: [107]
}] // 消息类型
}; };
}, },
watch: {
userInfo(val) {
if (val) {
this.init();
} else {
window.WebSocket && this.websocket && this.websocket.close();
}
}
},
mounted() {
this.init();
},
beforeDestroy() {
window.WebSocket && this.websocket && this.websocket.close();
},
methods: { methods: {
init() {
if (this.userInfo && this.userInfo.userId && window.WebSocket) {
const that = this;
this.websocket = new WebSocket(`ws:${baseUrl}/MessageWebsocket?userId=${this.userInfo.userId}`);
this.websocket.onopen = function(event) {
};
this.websocket.onclose = function(event) {
};
this.websocket.onmessage = function(event) {
if (event.data) that.handleReceiveMessage(event.data);
};
this.websocket.onerror = function(event) {
};
}
},
/**
* 接受消息后的处理
*/
handleReceiveMessage(data) {
// data = JSON.parse(data);
this.$store.dispatch('setUnreadMessage', data.count);
const type = data.content ? this.handleMessageType(data.content.businessType) : 9999;
const h = this.$createElement;
if (parseInt(data.count, 10) === 0) return false;
this.$notify({
title: data.content ? data.content.title : this.convertTypeToObjectInfo(type).name,
position: 'bottom-right',
type: 'info',
dangerouslyUseHTMLString: true,
duration: 5000,
message: h('div', {
style: {
display: 'flex',
alignItems: 'center'
}
}, [
h('span', null
, data.content ? data.content.content : '您有新的处理任务,请及时处理!'),
h('el-button', {
style: {
marginLeft: '5px'
},
attrs: {
size: 'small',
type: 'text'
},
on: {
click: () => { this.handleLinkToTargetTab(type);}
}
}, '查看')
])
});
},
/**
* 跳转链接
*/
handleLinkToTargetTab(type) {
openTab({
id: this.convertTypeToObjectInfo(type).id,
name: this.convertTypeToObjectInfo(type).name,
componentName: this.convertTypeToObjectInfo(type).id
});
},
/**
* 数据类型转换
*/
convertTypeToObjectInfo(type) {
return this.messageType[type] || { id: 'appMessage', name: '我的消息'};
},
/**
* 处理消息类型
*/
handleMessageType(type) {
type = parseInt(type, 10) || 9999;
let flag = false;
for (let i = 0; i < this.messageType.length; i++) {
if (this.messageType[i].status.indexOf(type) >= 0) {
type = i;
flag = true;
}
if (flag) break;
}
return type;
},
/** /**
* 查看消息 * 查看消息
*/ */
......
...@@ -21,6 +21,12 @@ const pages = { ...@@ -21,6 +21,12 @@ const pages = {
template: 'form/form.html', template: 'form/form.html',
filename: 'form.html', filename: 'form.html',
chunks: ['chunk-vendors', 'chunk-commons', 'element-ui', 'smart-form', 'form'] chunks: ['chunk-vendors', 'chunk-commons', 'element-ui', 'smart-form', 'form']
},
charts: {
entry: 'charts/main.js',
template: 'charts/charts.html',
filename: 'charts.html',
chunks: ['chunk-vendors', 'element-ui', 'smart-charts', 'charts']
} }
}; };
...@@ -55,7 +61,13 @@ module.exports = { ...@@ -55,7 +61,13 @@ module.exports = {
name: 'smart-form', // 单独将拆包 name: 'smart-form', // 单独将拆包
priority: 21, // 权重要大于 libs 和 app 不然会被打包进 libs 或者 app priority: 21, // 权重要大于 libs 和 app 不然会被打包进 libs 或者 app
test: /[\\/]node_modules[\\/]smart-form[\\/]/ test: /[\\/]node_modules[\\/]smart-form[\\/]/
}/* , },
smartCharts: {
name: 'smart-charts', // 单独将拆包
priority: 21, // 权重要大于 libs 和 app 不然会被打包进 libs 或者 app
test: /[\\/]node_modules[\\/]smart-charts[\\/]/
}
/*
commons: { commons: {
name: 'chunk-comomns', name: 'chunk-comomns',
test: resolve('src/components'), // 可自定义拓展你的规则 test: resolve('src/components'), // 可自定义拓展你的规则
...@@ -74,6 +86,7 @@ module.exports = { ...@@ -74,6 +86,7 @@ module.exports = {
config.resolve.alias config.resolve.alias
.set('@', resolve('src')) .set('@', resolve('src'))
.set('@form', resolve('form')) .set('@form', resolve('form'))
.set('@charts', resolve('charts'))
.set('@config', resolve('config')); .set('@config', resolve('config'));
const arr = ['app', 'form']; const arr = ['app', 'form'];
...@@ -89,5 +102,5 @@ module.exports = { ...@@ -89,5 +102,5 @@ module.exports = {
}, },
// IE兼容 // IE兼容
transpileDependencies: ['element-ui/src', 'element-ui/packages'] transpileDependencies: ['element-ui/src', 'element-ui/packages', 'smart-web']
}; };
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment